From 4e42871fae084a33071b89095d4ff4b81fa0ee35 Mon Sep 17 00:00:00 2001 From: gramps Date: Fri, 9 Oct 2026 10:13:43 -0700 Subject: [PATCH] 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) --- HANDOFF.md | 19 +++-- README.md | 133 +++++++++++++++++++---------- TASKS/task-51-webcam-bg-effects.md | 4 +- THIRD-PARTY-NOTICES.txt | 2 + ai.md | 5 +- 5 files changed, 106 insertions(+), 57 deletions(-) diff --git a/HANDOFF.md b/HANDOFF.md index f3733c0..37a87ab 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -34,16 +34,17 @@ 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 publish must pin win-x64. -- `THIRD-PARTY-NOTICES.txt` + ai.md Licensing now say **GPL-3.0-only** (2026-10-09: `LICENSE`, - `ADDITIONAL-TERMS.md` with §7 b/c/e, icon+logo all rights reserved, README License section; both - files ship beside the exe). **Still to do when the repo goes public:** add the public repo URL - (source offer) to the notices header + README; scan git history for secrets first. Still stale - and NOT yet rewritten: ai.md "Windows packaging" (Store IAP / branding-flash paid delta) and - "Monetization" sections, MARCOM.md asset table (`llama-logo.png` doesn't exist), README's - "Why ytLlive" OBS comparison (breaks the no-comparison copy rule once public). +- **License: GPL-3.0-or-later** (2026-10-09: `LICENSE`, `ADDITIONAL-TERMS.md` with §7 b/c/e, icon + + logo all rights reserved, AI-generated backgrounds/alert video = GPL placeholders; both files ship + beside the exe). Source offer = `https://llgit.llamachile.tube/gramps/LlamaCasty` (Gitea; the + creator toggles it public), in the notices header + README. **Before it goes public: scan git + history for secrets.** README rewritten (creator's voice, generic comparison, real build steps). + Still stale and NOT yet rewritten: ai.md "Windows packaging" (Store IAP / branding-flash paid + 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). ## Next step - 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 - creator's box, slice 5 properties-panel UI. + integration test. Then slice 3 config + persistence (`BackgroundEffect` + `Strength`), slice 4 + 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. diff --git a/README.md b/README.md index 46b781a..ad74504 100644 --- a/README.md +++ b/README.md @@ -1,81 +1,123 @@ -# ytLlive +# LlamaCasty

LlamaCasty — livestream smarter

-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 -building, and no dead ends — every action has a visible outcome. +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: -## 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 -designed and dedicated to YouTube livestreaming and recording, and to YouTube's specific quirks. +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. -## Account Assumption +## Free, and staying that way -ytLlive assumes you already have a YouTube creator account — connecting uses "Sign in with Google" -to link that existing account. **ytLlive does not create accounts.** If you don't have a YouTube -channel yet, set one up on YouTube first, then connect it here. +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. -## Audio Assumption +## How it's built -ytLlive uses your **default** microphone and desktop/game output — it never hunts for a device or -contends for one. **It assumes your audio is already configured and working** (default input and -output set, not hijacked by another app). Audio issues are a Windows/device matter outside ytLlive's -scope: we don't debug, detect, or try to fix them. If it doesn't sound right, fix the system's audio -settings first — it's on the OS, not on us. +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. -## Run +## Requirements -```bash -dotnet build # Windows only — WPF -dotnet run -``` +- **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. -## Version Roadmap +## Build from source -**v1 is the finished product** (creator ruling, 2026-09-01 — there are no v1.x releases). -Everything still queueing lands in v1; anything not on the feature list is on the closed -**"Out of product — permanently"** list in `TASKS.md` — read that page before asking for a feature. +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. -What v1 ships: the five-scene director's control surface, webcam + screen capture, media + web + -text sources, chat on-stream, the social bar, mic/desktop audio with auto-duck and TRAX, local -recording, variable quality tiers with auto step-down, one-click go-live + scheduling, stream -resilience (auto-reconnect inside YouTube's grace, one-click back on air), built-in monetization -awareness (reward capture, session reports, YPP journey tracker), Alerts — all free and ungated; -the paid tier only removes the branding flash. +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 | +| `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), SocialValidator, notifications, hotkeys, SceneGraph, ChatOverlayLayer | -| `Helpers/` | ViewModelBase, RelayCommand, ImageCache, AppLog, TokenStore (DPAPI), OAuthCredentials, converters | +| `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 | -| `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) -`schema.md` defines the conventions; `ai.md` is the AI/session guide; -`TASKS.md` is the task queue. Each code directory carries an `index.md`. +`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** +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)): @@ -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 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). + +Source code: https://llgit.llamachile.tube/gramps/LlamaCasty diff --git a/TASKS/task-51-webcam-bg-effects.md b/TASKS/task-51-webcam-bg-effects.md index 1418ddf..436b4bc 100644 --- a/TASKS/task-51-webcam-bg-effects.md +++ b/TASKS/task-51-webcam-bg-effects.md @@ -76,8 +76,8 @@ delivery shape changed: `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 = `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 - spec — confirm before adding one.) + "effect dropdown" idea.) **Plus a strength slider** (creator: "keep", 2026-10-09) — Blur + radius / Remove edge softness via `Strength`. - ☐ 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. diff --git a/THIRD-PARTY-NOTICES.txt b/THIRD-PARTY-NOTICES.txt index 7b7685d..e1b4139 100644 --- a/THIRD-PARTY-NOTICES.txt +++ b/THIRD-PARTY-NOTICES.txt @@ -7,6 +7,8 @@ LlamaCasty additional terms under GPL-3.0 section 7 (attribution, marking of modified versions, no trademark rights). See LICENSE and 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 under those terms. It comes with ABSOLUTELY NO WARRANTY. Brand artwork (the LlamaCasty name, icon, and logo files) is NOT covered diff --git a/ai.md b/ai.md index 58e8dd4..e0cd935 100644 --- a/ai.md +++ b/ai.md @@ -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 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 -LlamaCasty license notice (GPL §5(d) "Appropriate Legal Notices"). **Source offer (§6):** the public -repo URL — add it to the notices header + README the day the repo goes public. +LlamaCasty license notice (GPL §5(d) "Appropriate Legal Notices"). **Source offer (§6):** +`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; **GPL-2.0-only and proprietary are not**; Apache-2.0 is fine with GPL-3 but NOT with GPL-2). The