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:
@@ -1,81 +1,123 @@
|
||||
# ytLlive
|
||||
# LlamaCasty
|
||||
|
||||
<p align="center">
|
||||
<img src="Assets/llamacasty-logo.jpg" alt="LlamaCasty — livestream smarter" height="120"/>
|
||||
</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
|
||||

|
||||
|
||||

|
||||
## 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
|
||||
|
||||
Reference in New Issue
Block a user