The pricing ruling landed twice (2026-09-21 one-time, then 2026-09-27 Store IAP $10/mo + $400 lifetime) and the map never caught up. Six tracked files still told a future session that billing was Polar and the price was $29/$49. A stale memory map is worse than a stale comment: it is the file every session trusts, and this one was actively steering work toward a deleted provider. MONETIZATION.md (gitignored, so not in this commit) was rebuilt first: - "Revenue projections" now carries a modelled Year 1 forecast — pessimistic $4.0K / base $15.4K / optimistic $53.3K net, ~$22K weighted. Funnel is installs -> 35-45% activate -> 1.5-3% of active users pay. - Three findings recorded: Year 1 is ~97% lifetime transactions (subs net $392 of $15.4K, so MRR is not a Year-1 planning input); conversion dominates price (~1pp of conversion = ~$7K net, and ADA 6(h) locks $10 anyway); subscriber churn moves Year 1 by under $200 and is a Year-2 problem. - Break-even restated for $400: $25K net = 74 lifetime buyers, not 862. The price cut the volume requirement ~10x and raised the skill requirement to match. - Market sizing willingness-to-pay row rewritten. The 100K-400K TAM was price-bound to $29-49 and is wrong at $400; revised ~20K-60K, flagged as an estimate rather than a sourced number. - Flagged a real contradiction: $500K ARR needs ~4,900 concurrent subscribers, so the Exit section's ARR multiples do not describe what Years 1-3 produce. The defensible asset there is lifetime cash flow, not ARR. Tracked files corrected to match: - ai.md: paid-delta, pricing and billing bullets rewritten; Polar product id, org id, LCYT- key prefix and LLAMAFOUNDER/LLAMA50 marked as deleted; 15% share + net-after-tax recorded with the ADA 6(b)(i) citation. - TASKS.md: catalog row retitled as a teardown; the "still to verify — the price is not decided" note closed (it contradicted the ruling 20 lines below it); the OverlayHost "Polar unlocks alerts" open question marked resolved; Polar file-hosting deliverable removed from the release build. - task-10: reframed as a teardown. Steps 4-5 marked as surviving, 1-2-3-6-7 as deleting, 8 as a compliance action (Velopack downloads AND executes, which Store policy 10.2.2 does not permit). - task-36 item 5 (license-expiry reminders) struck — no key, no expiry, no lapse under Store IAP, so there is nothing to remind anyone about. - Distribution.md 4.2 / 4.4 / 4.5 marked obsolete; 4.5's "already implemented" corrected, since PolarLicenseService is being deleted rather than shipped. - README: "one-time license" -> "paid tier". Historical Polar sections are retained deliberately — the reasoning is reusable (merchant-of-record, fee comparison), only the conclusions are dead. Each is now labelled so it cannot be mistaken for the plan. No code touched.
75 lines
3.7 KiB
Markdown
75 lines
3.7 KiB
Markdown
# ytLlive
|
|
|
|
<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).
|
|
|
|
## Screenshot
|
|
|
|

|
|
|
|
## Design Principle
|
|
|
|
> This software is so intuitive that even the most right-brained person can easily intuit and use it.
|
|
|
|
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.
|
|
|
|
## Why ytLlive
|
|
|
|
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.
|
|
|
|
## Account Assumption
|
|
|
|
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.
|
|
|
|
## Audio Assumption
|
|
|
|
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.
|
|
|
|
## Run
|
|
|
|
```bash
|
|
dotnet build # Windows only — WPF
|
|
dotnet run
|
|
```
|
|
|
|
## Version Roadmap
|
|
|
|
**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.
|
|
|
|
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.
|
|
|
|
## Structure
|
|
|
|
| Path | Role |
|
|
|------|------|
|
|
| `Models/` | Scene, Source, WebcamSceneConfig, SceneElement, SceneCatalog, QualityOption, StreamConfig/Health, chat, Socials, BroadcastMetadata, Music, MicStatus |
|
|
| `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 |
|
|
| `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 |
|
|
|
|
## 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`.
|