Docs: README rewritten in the creator's voice (why it was built, generic comparison, free + open, real build-from-source steps incl. ffmpeg fetch + own OAuth client); source offer URL llgit.llamachile.tube/gramps/LlamaCasty in README + notices; TASK 51 keeps the strength slider (Unit: README + source offer)

This commit is contained in:
2026-10-09 10:13:43 -07:00
parent db2fdbf68d
commit 4e42871fae
5 changed files with 106 additions and 57 deletions
+10 -9
View File
@@ -34,16 +34,17 @@
machine 0x8664, 408/408 green). TASK 48 item 2 carries the x64-only MSIX + `-r win-x64` publish. machine 0x8664, 408/408 green). TASK 48 item 2 carries the x64-only MSIX + `-r win-x64` publish.
- `onnxruntime.dll` is ~17 MB; an RID-less build copies every RID's native folder — TASK 48's MSIX - `onnxruntime.dll` is ~17 MB; an RID-less build copies every RID's native folder — TASK 48's MSIX
publish must pin win-x64. publish must pin win-x64.
- `THIRD-PARTY-NOTICES.txt` + ai.md Licensing now say **GPL-3.0-only** (2026-10-09: `LICENSE`, - **License: GPL-3.0-or-later** (2026-10-09: `LICENSE`, `ADDITIONAL-TERMS.md` with §7 b/c/e, icon +
`ADDITIONAL-TERMS.md` with §7 b/c/e, icon+logo all rights reserved, README License section; both logo all rights reserved, AI-generated backgrounds/alert video = GPL placeholders; both files ship
files ship beside the exe). **Still to do when the repo goes public:** add the public repo URL beside the exe). Source offer = `https://llgit.llamachile.tube/gramps/LlamaCasty` (Gitea; the
(source offer) to the notices header + README; scan git history for secrets first. Still stale creator toggles it public), in the notices header + README. **Before it goes public: scan git
and NOT yet rewritten: ai.md "Windows packaging" (Store IAP / branding-flash paid delta) and history for secrets.** README rewritten (creator's voice, generic comparison, real build steps).
"Monetization" sections, MARCOM.md asset table (`llama-logo.png` doesn't exist), README's Still stale and NOT yet rewritten: ai.md "Windows packaging" (Store IAP / branding-flash paid
"Why ytLlive" OBS comparison (breaks the no-comparison copy rule once public). delta) and "Monetization" sections, MARCOM.md asset table (`llama-logo.png` doesn't exist).
- Carried: "Use default background" toggle still not working (from 2026-10-07). - Carried: "Use default background" toggle still not working (from 2026-10-07).
## Next step ## Next step
- TASK 51 slice 2: **Blur** in `BackgroundEffectProcessor` (separable box/gaussian, strength), one - TASK 51 slice 2: **Blur** in `BackgroundEffectProcessor` (separable box/gaussian, strength), one
integration test. Then slice 3 config + persistence, slice 4 camera-path hookup + perf check on the integration test. Then slice 3 config + persistence (`BackgroundEffect` + `Strength`), slice 4
creator's box, slice 5 properties-panel UI. camera-path hookup + perf check on the creator's box, slice 5 UI: radio-exclusive Remove/Blur pill
switches + strength slider in the webcam's Layers properties.
+89 -44
View File
@@ -1,81 +1,123 @@
# ytLlive # LlamaCasty
<p align="center"> <p align="center">
<img src="Assets/llamacasty-logo.jpg" alt="LlamaCasty — livestream smarter" height="120"/> <img src="Assets/llamacasty-logo.jpg" alt="LlamaCasty — livestream smarter" height="120"/>
</p> </p>
A creator-proof live-streaming and recording app for YouTube — native Windows (C# / WPF / .NET 8). 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
## Screenshot ![LlamaCasty — main window with scenes, sources, and live preview](docs/ytLlive-preview.jpg)
![ytLlive — main window with scenes, sources, and live preview](docs/ytLlive-preview.jpg) ## Why I built it
## Design Principle I'm Gramps. I've been gaming since 1981, and these days I stream *The Division 2* on YouTube.
> This software is so intuitive that even the most right-brained person can easily intuit and use it. 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.
Every feature is measured against this. One-click go-live, sane YouTube defaults, visual scene Most streamers I talk to are in the same spot. They don't need a tool for every platform and every
building, and no dead ends — every action has a visible outcome. setup — they need one that's ready for *theirs*. So I built LlamaCasty around three choices:
## Why ytLlive - **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.
OBS treats YouTube as an afterthought; SLOBS is Twitch-first with YouTube bolted on. ytLlive is The general-purpose tools are the right choice when you need everything. LlamaCasty is for when you
designed and dedicated to YouTube livestreaming and recording, and to YouTube's specific quirks. just want to get your show on air.
## Account Assumption ## Free, and staying that way
ytLlive assumes you already have a YouTube creator account — connecting uses "Sign in with Google" LlamaCasty is free forever: no watermark, no branding on your stream, no subscription, no
to link that existing account. **ytLlive does not create accounts.** If you don't have a YouTube LlamaCasty account. It's also open source (see [License](#license)) — enjoy it, explore it,
channel yet, set one up on YouTube first, then connect it here. 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.
## Audio Assumption ## How it's built
ytLlive uses your **default** microphone and desktop/game output — it never hunts for a device or LlamaCasty is built through AI-assisted pair programming, under the direction of a developer with
contends for one. **It assumes your audio is already configured and working** (default input and decades of experience. Architecture, product direction, and quality gates are human-owned; AI
output set, not hijacked by another app). Audio issues are a Windows/device matter outside ytLlive's speeds up the implementation. The repo's memory map (below) is how that collaboration stays honest
scope: we don't debug, detect, or try to fix them. If it doesn't sound right, fix the system's audio from one session to the next.
settings first — it's on the OS, not on us.
## Run ## Requirements
```bash - **64-bit Windows 10 or 11.** (The bundled FFmpeg and ONNX Runtime are 64-bit only.)
dotnet build # Windows only — WPF - **A YouTube channel, to stream.** LlamaCasty links an existing channel with "Sign in with
dotnet run 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.
## Version Roadmap ## Build from source
**v1 is the finished product** (creator ruling, 2026-09-01 — there are no v1.x releases). The internal project, assembly, and namespace names are still `ytLive` (the app was renamed to
Everything still queueing lands in v1; anything not on the feature list is on the closed LlamaCasty; the internals weren't). Building needs Windows and the .NET 8 SDK.
**"Out of product — permanently"** list in `TASKS.md` — read that page before asking for a feature.
What v1 ships: the five-scene director's control surface, webcam + screen capture, media + web + 1. **Fetch the bundled FFmpeg** (not in git — ~135 MB, pinned and SHA-256-verified):
text sources, chat on-stream, the social bar, mic/desktop audio with auto-duck and TRAX, local `scripts/fetch-ffmpeg.sh`
recording, variable quality tiers with auto step-down, one-click go-live + scheduling, stream 2. **Add your own Google OAuth client.** `Helpers/OAuthCredentials.cs` is gitignored. Create a
resilience (auto-reconnect inside YouTube's grace, one-click back on air), built-in monetization "Desktop app" OAuth client with the YouTube Data API v3 enabled in Google Cloud Console, then:
awareness (reward capture, session reports, YPP journey tracker), Alerts — all free and ungated;
the paid tier only removes the branding flash. ```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 ## Structure
| Path | Role | | Path | Role |
|------|------| |------|------|
| `Models/` | Scene, Source, WebcamSceneConfig, SceneElement, SceneCatalog, QualityOption, StreamConfig/Health, chat, Socials, BroadcastMetadata, Music, MicStatus | | `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 | | `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), SocialValidator, notifications, hotkeys, SceneGraph, ChatOverlayLayer | | `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, converters | | `Helpers/` | ViewModelBase, RelayCommand, ImageCache, AppLog, TokenStore (DPAPI), OAuthCredentials (gitignored), converters |
| `Themes/` | `Controls.xaml` — the dark-theme control styles, merged once in `App.xaml` | | `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 | | `MainWindow.xaml` | Dark-theme control surface: thumbnails + central preview, two-state left panel (layers/properties ↔ live chat), top bar, footer |
| `Distribution.md` | GA-time plan: signing, installer, EULA, hardening — executed as TASK 36 | | `tools/` | Offline helper tools (e.g. `selfie-seg/` — converts and verifies the background-effects model) |
## Docs (memory map) ## Docs (memory map)
`schema.md` defines the conventions; `ai.md` is the AI/session guide; `schema.md` defines the conventions; `ai.md` is the AI/session guide; `TASKS.md` is the task
`TASKS.md` is the task queue. Each code directory carries an `index.md`. queue; `HANDOFF.md` is the current state. Each code directory carries an `index.md`.
## License ## License
LlamaCasty is free software, released under the **GNU General Public License v3.0** 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 ([`LICENSE`](LICENSE)) with three additional terms permitted by GPL-3.0 section 7
([`ADDITIONAL-TERMS.md`](ADDITIONAL-TERMS.md)): ([`ADDITIONAL-TERMS.md`](ADDITIONAL-TERMS.md)):
@@ -85,5 +127,8 @@ LlamaCasty is free software, released under the **GNU General Public License v3.
- **No trademark rights** — the LlamaCasty name and llama logo aren't licensed. The icon and logo - **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. files are all rights reserved and aren't covered by the GPL.
Bundled third-party components keep their own licenses: see 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). [`THIRD-PARTY-NOTICES.txt`](THIRD-PARTY-NOTICES.txt).
Source code: https://llgit.llamachile.tube/gramps/LlamaCasty
+2 -2
View File
@@ -76,8 +76,8 @@ delivery shape changed:
`PillToggle` style (`Themes/Controls.xaml`, already used in `Controls/LeftPanel.xaml`). They act `PillToggle` style (`Themes/Controls.xaml`, already used in `Controls/LeftPanel.xaml`). They act
as **radio buttons**: turning one on turns the other off; at most one is active; both off = as **radio buttons**: turning one on turns the other off; at most one is active; both off =
`None`. Bound to the element's `BackgroundEffect`, per webcam element. (Supersedes the old `None`. Bound to the element's `BackgroundEffect`, per webcam element. (Supersedes the old
"effect dropdown" idea. A strength slider was in the original plan but is NOT in the creator's "effect dropdown" idea.) **Plus a strength slider** (creator: "keep", 2026-10-09) — Blur
spec — confirm before adding one.) radius / Remove edge softness via `Strength`.
- ☐ Replace-background affordance: **none in v1** — the creator drops any layer behind the - ☐ Replace-background affordance: **none in v1** — the creator drops any layer behind the
webcam. Effect preview must not obscure the fact that layers below still show through. webcam. Effect preview must not obscure the fact that layers below still show through.
+2
View File
@@ -7,6 +7,8 @@ LlamaCasty
additional terms under GPL-3.0 section 7 (attribution, marking of additional terms under GPL-3.0 section 7 (attribution, marking of
modified versions, no trademark rights). See LICENSE and modified versions, no trademark rights). See LICENSE and
ADDITIONAL-TERMS.md, shipped beside the application. ADDITIONAL-TERMS.md, shipped beside the application.
Source: https://llgit.llamachile.tube/gramps/LlamaCasty (complete
corresponding source, GPL-3.0 section 6)
LlamaCasty is free software: you can redistribute it and/or modify it LlamaCasty is free software: you can redistribute it and/or modify it
under those terms. It comes with ABSOLUTELY NO WARRANTY. under those terms. It comes with ABSOLUTELY NO WARRANTY.
Brand artwork (the LlamaCasty name, icon, and logo files) is NOT covered Brand artwork (the LlamaCasty name, icon, and logo files) is NOT covered
+3 -2
View File
@@ -1673,8 +1673,9 @@ what keeps the merch brand protected). The scene backgrounds + default alert vid
**placeholders** (creator: made "with the intent of individual creators to immediately replace with **placeholders** (creator: made "with the intent of individual creators to immediately replace with
their own images") — they go out under the GPL with the code, no reservation. `LICENSE` + `ADDITIONAL-TERMS.md` ship beside the exe their own images") — they go out under the GPL with the code, no reservation. `LICENSE` + `ADDITIONAL-TERMS.md` ship beside the exe
(csproj `None` items); the About panel shows `THIRD-PARTY-NOTICES.txt`, whose header carries the (csproj `None` items); the About panel shows `THIRD-PARTY-NOTICES.txt`, whose header carries the
LlamaCasty license notice (GPL §5(d) "Appropriate Legal Notices"). **Source offer (§6):** the public LlamaCasty license notice (GPL §5(d) "Appropriate Legal Notices"). **Source offer (§6):**
repo URL — add it to the notices header + README the day the repo goes public. `https://llgit.llamachile.tube/gramps/LlamaCasty` (the Gitea repo; creator toggles it public — the
old `gramps/ytLlive` path 301-redirects there), recorded in the notices header + README.
Every bundled component must stay GPL-3.0-compatible (MIT/BSD/Apache-2.0/LGPL/public domain all are; Every bundled component must stay GPL-3.0-compatible (MIT/BSD/Apache-2.0/LGPL/public domain all are;
**GPL-2.0-only and proprietary are not**; Apache-2.0 is fine with GPL-3 but NOT with GPL-2). The **GPL-2.0-only and proprietary are not**; Apache-2.0 is fine with GPL-3 but NOT with GPL-2). The