The commercial plan was spread over five documents written in five different weeks, and they contradicted each other: product.md sold the Store, decisions.md called the Store dead then re-opened, Distribution.md (736 lines) still described Polar as a download host, MARCOM.md quoted "no subscription" next to a paid tier, and README.md promised "free forever". An outsider could not tell what ships. docs/ai/commercial.md is now the only place money is decided: free = whole app at a 921,600 px / 30 fps output profile covering the recording as well as the stream; Pro = $10/mo or $400 lifetime through Polar, key bound to the buyer's YouTube channel ID via a claim page, 2 activations, 7–14 day lease with offline grace, fail closed, never downgrade a running stream; one portable zip + winget primary, Steam and the Store parked; Azure Trusted Signing (~$9.99/mo), no EV; Founding 200 promo; ~$135/yr costs; anti-piracy posture and what is permanently rejected. Everything else now points at it instead of restating it: - product.md — money sections replaced with pointers; packaging rewritten to winget-first, Store parked; signing updated to Trusted Signing. - decisions.md — graveyard with cause of death for free-forever, the Store ordering, the updater, and the 2026-10-30 reversal of the quality-ceiling rejection. - Distribution.md — rewritten to release mechanics only (artifact, GitHub Releases, winget manifest, signing, checklist, takedown): 736 → 120 lines. - TASKS.md — TASK 54 rewritten, TASK 48's route settled, TASK 10 superseded, five new rows (entitlement seam, output-profile gate, licence UI, system messages, packaging). - README.md — "free forever" replaced with the real split. - capture.md — obs-backgroundremoval is GPL-3.0 and so licence-INCOMPATIBLE since the proprietary EULA; the old "compatible" line was falsified by that change. - TASKS/task-10, task-48, task-51, task-54 — superseded-banner at the top of each, so none of them reads as current policy. - HANDOFF.md — rewritten: plan settled, next code unit is the entitlement seam. MARCOM.md and MONETIZATION.md (gitignored) were corrected in place: policy pointer at the top of each, the flash removed from every live claim, the Polar fee break-even corrected to ~$900/mo, and the projections flagged as written against a dead model.
137 lines
7.4 KiB
Markdown
137 lines
7.4 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 the paid edition
|
||
|
||
The free version is the whole app, not a trial: every feature, every scene, every overlay, no
|
||
watermark, no LlamaCasty account, and nothing in your stream advertising us. It stays free.
|
||
|
||
A paid edition exists for creators who need more output quality — free streams and records at up to
|
||
720p30, and Pro unlocks the higher tiers. **No feature is ever gated behind it.** The app shows the
|
||
current price at the point of sale; the website deliberately does not.
|
||
|
||
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 — every feature in the free tier, with a paid edition that buys output quality.
|
||
|
||
## 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 **proprietary commercial software** — see [`LICENSE`](LICENSE) for the full End User
|
||
License Agreement. The free tier streams **and records** at an output profile of up to **921,600
|
||
pixels at 30 fps** (720p30 landscape, 720×1280 vertical); a paid licence unlocks every shipped tier,
|
||
including 1080p60. Prices, entitlement and channels: `docs/ai/commercial.md`.
|
||
|
||
Earlier development builds were published under GPL-3.0 and remain covered by that licence for the
|
||
versions that shipped under it; nothing here revokes that.
|
||
|
||
Third-party components and their licences are listed in
|
||
[`THIRD-PARTY-NOTICES.txt`](THIRD-PARTY-NOTICES.txt), which ships with the app and is shown in its
|
||
About screen. Your data and privacy are described in [`PRIVACY.md`](PRIVACY.md).
|
||
|