Files
LlamaCasty/README.md
T
gramps 7827d239e2 docs(commercial): one source of truth for the money — prices, entitlement, channels
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.
2026-10-31 08:32:25 -07:00

137 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
![LlamaCasty — main window with scenes, sources, and live preview](docs/ytLlive-preview.jpg)
## 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).