135 lines
7.2 KiB
Markdown
135 lines
7.2 KiB
Markdown
# LlamaCasty
|
|
|
|
<p align="center">
|
|
<img src="Assets/llamacasty-logo.jpg" alt="LlamaCasty — livestream smarter" height="120"/>
|
|
</p>
|
|
|
|
A free, open-source Windows app for streaming live to YouTube and recording to your PC.
|
|
Native Windows (C# / WPF / .NET 8). Website: https://llamacasty.com
|
|
|
|

|
|
|
|
## Why I built it
|
|
|
|
I'm Gramps. I've been gaming since 1981, and these days I stream *The Division 2* on YouTube.
|
|
|
|
When I started streaming, I did what everybody does: I installed the big, general-purpose
|
|
streaming tools. They're excellent software — powerful, flexible, and built to handle every
|
|
platform, every camera rig, and every plugin anyone has ever dreamed up. That breadth is exactly
|
|
what makes them great, and it's also what makes them a lot to learn. Before my first stream I was
|
|
reading setup guides, picking encoders, balancing audio by hand, and wiring up scenes from
|
|
scratch. The tools were ready for anything. I just wanted to go live.
|
|
|
|
Most streamers I talk to are in the same spot. They don't need a tool for every platform and every
|
|
setup — they need one that's ready for *theirs*. So I built LlamaCasty around three choices:
|
|
|
|
- **One platform, done properly.** LlamaCasty streams to YouTube and only YouTube. That focus lets
|
|
it be built around how YouTube Live actually works — your channel, your chat, Super Chats and
|
|
memberships, Shorts-style vertical video, and the YouTube Partner Program — instead of treating
|
|
YouTube as one destination among many.
|
|
- **Ready the moment you open it.** Five scenes (Starting, Live, BRB, Chat, Ending) are set up,
|
|
your game and voice are balanced with auto-ducking and voice polish built in, and YouTube's
|
|
settings are filled in. You arrange things by dragging them, then press Go Live.
|
|
- **Calm while you're live.** A private Test Stream to practice, a layout that locks while you're
|
|
on air, and warnings only when YouTube reports a real problem.
|
|
|
|
The general-purpose tools are the right choice when you need everything. LlamaCasty is for when you
|
|
just want to get your show on air.
|
|
|
|
## Free, and staying that way
|
|
|
|
LlamaCasty is free forever: no watermark, no branding on your stream, no subscription, no
|
|
LlamaCasty account. It's also open source (see [License](#license)) — enjoy it, explore it,
|
|
experiment with it. If it earns a spot in your setup and you'd like to say thanks, there's a
|
|
coffee jar and a merch store linked from https://llamacasty.com. Completely optional, never
|
|
expected, and the app will never ask.
|
|
|
|
## How it's built
|
|
|
|
LlamaCasty is built through AI-assisted pair programming, under the direction of a developer with
|
|
decades of experience. Architecture, product direction, and quality gates are human-owned; AI
|
|
speeds up the implementation. The repo's memory map (below) is how that collaboration stays honest
|
|
from one session to the next.
|
|
|
|
## Requirements
|
|
|
|
- **64-bit Windows 10 or 11.** (The bundled FFmpeg and ONNX Runtime are 64-bit only.)
|
|
- **A YouTube channel, to stream.** LlamaCasty links an existing channel with "Sign in with
|
|
Google" — it doesn't create accounts. Recording to an .mp4 works without signing in.
|
|
- **Working sound in Windows.** Desktop and game audio come from your default output
|
|
automatically; you choose your mic in the app. LlamaCasty doesn't diagnose or repair Windows
|
|
audio — if it doesn't sound right in Windows, fix it there first.
|
|
|
|
## Build from source
|
|
|
|
The internal project, assembly, and namespace names are still `ytLive` (the app was renamed to
|
|
LlamaCasty; the internals weren't). Building needs Windows and the .NET 8 SDK.
|
|
|
|
1. **Fetch the bundled FFmpeg** (not in git — ~135 MB, pinned and SHA-256-verified):
|
|
`scripts/fetch-ffmpeg.sh`
|
|
2. **Add your own Google OAuth client.** `Helpers/OAuthCredentials.cs` is gitignored. Create a
|
|
"Desktop app" OAuth client with the YouTube Data API v3 enabled in Google Cloud Console, then:
|
|
|
|
```csharp
|
|
namespace ytLive.Helpers;
|
|
|
|
public static class OAuthCredentials
|
|
{
|
|
public const string ClientId = "your-client-id.apps.googleusercontent.com";
|
|
public const string ClientSecret = "your-client-secret";
|
|
}
|
|
```
|
|
3. **Build and run:**
|
|
|
|
```bash
|
|
dotnet build ytLive.csproj
|
|
dotnet run --project ytLive.csproj
|
|
```
|
|
|
|
## Version roadmap
|
|
|
|
**v1 is the finished product** (no v1.x releases are planned). Everything still in the queue lands
|
|
in v1; anything not on the feature list is on the **"Out of product — permanently"** list in
|
|
`TASKS.md` — read that before asking for a feature.
|
|
|
|
What v1 ships: the five-scene control surface, webcam + screen capture, media + web + text
|
|
sources, chat on stream, the social bar, mic/desktop audio with auto-ducking and TRAX background
|
|
music, local recording, quality tiers including vertical 9:16, one-click go-live + scheduling,
|
|
stream resilience, monetization awareness (YPP tracker), animated alerts, and webcam background
|
|
removal and blur — all free and ungated.
|
|
|
|
## Structure
|
|
|
|
| Path | Role |
|
|
|------|------|
|
|
| `Models/` | Scene, Source, WebcamSceneConfig, SceneElement, SceneCatalog, QualityOption, StreamConfig/Health, chat, Socials, BroadcastMetadata, Music, MicStatus, BackgroundEffect |
|
|
| `ViewModels/` | MainViewModel (partial classes per area) + dialogs: GoLive, CameraPicker, MicPicker, HotkeyConfig, Socials, LiveBroadcastForm |
|
|
| `Services/` | YouTube (OAuth, streams/broadcasts, chat polling), LayoutStore (SQLite), capture (camera/screen-capture/media-file via FFmpeg), SceneCompositor + FramePump, FFmpeg encoder + RTMP, audio pipeline (WASAPI loopback + mic, mixer, filters, ducker, limiter, TRAX), background effects (ONNX person segmentation), SocialValidator, notifications, hotkeys, SceneGraph, ChatOverlayLayer |
|
|
| `Helpers/` | ViewModelBase, RelayCommand, ImageCache, AppLog, TokenStore (DPAPI), OAuthCredentials (gitignored), converters |
|
|
| `Themes/` | `Controls.xaml` — the dark-theme control styles, merged once in `App.xaml` |
|
|
| `MainWindow.xaml` | Dark-theme control surface: thumbnails + central preview, two-state left panel (layers/properties ↔ live chat), top bar, footer |
|
|
| `tools/` | Offline helper tools (e.g. `selfie-seg/` — converts and verifies the background-effects model) |
|
|
|
|
## Docs (memory map)
|
|
|
|
`schema.md` defines the conventions; `ai.md` is the AI/session guide; `TASKS.md` is the task
|
|
queue; `HANDOFF.md` is the current state. Each code directory carries an `index.md`.
|
|
|
|
## License
|
|
|
|
LlamaCasty is free software, released under the **GNU General Public License v3.0 or later**
|
|
([`LICENSE`](LICENSE)) with three additional terms permitted by GPL-3.0 section 7
|
|
([`ADDITIONAL-TERMS.md`](ADDITIONAL-TERMS.md)):
|
|
|
|
- **Keep the credit** — any copy, modified or not, shows "Based on LlamaCasty by Gramps —
|
|
https://llamacasty.com" in its About screen.
|
|
- **Rename your fork** — modified versions are marked as modified and use a different name.
|
|
- **No trademark rights** — the LlamaCasty name and llama logo aren't licensed. The icon and logo
|
|
files are all rights reserved and aren't covered by the GPL.
|
|
|
|
The scene backgrounds and default alert video are AI-generated placeholders, licensed with the
|
|
code — replace them with your own. Bundled third-party components keep their own licenses: see
|
|
[`THIRD-PARTY-NOTICES.txt`](THIRD-PARTY-NOTICES.txt).
|
|
|
|
Source code: https://llgit.llamachile.tube/gramps/LlamaCasty
|