gramps 670fe3a10a TASK 31: SceneGraph component + baked-crust compositor optimization
- Add ElementKind (Static/Dynamic) to SceneElement base; Source/WebcamSceneConfig classify
- Services/SceneGraph.cs: owns the Scenes collection (ViewModel's Scenes delegates to it),
  the element mutation surface (Add/Insert/Remove/Move, each invalidating the bake), and the
  queries that were scattered LINQ (GetBackground/GetWebcam/GetChatBoxes/GetSplitPoint/IsStatic)
- SceneCompositor: split-aware BakeStaticBase + CompositeLayers + Render(.., staticBase, split);
  builds/caches the static base below the split point in source-rect space
- FramePump: optional SceneGraph -> optimized bake+composite path; falls back to full render
- MainViewModel: routes element mutations through the graph; invalidates the bake on static
  layout/opacity/visibility/useDefaultBackground changes and after background heal/Ensure
- Integration test SceneGraphTests.BakedStaticBase_WithDynamicLayer_CompositesCorrectly

Derivative survey (mandated): tried before writing — OBS does per-source opacity/visibility
caching and static-scene baking; this mirrors OBS's 'cached static source' optimization.
3 documented defensive deviations from the spec (ChatOverlayLayer stays decoupled;
background helpers stay VM-static for direct testability; full facade peel deferred post-1.0)
in TASKS.md + ai.md. Scope check passed; clean build 0 warnings.
2026-08-31 17:53:34 -07:00

ytLlive

LlamaCasty — livestream smarter

A creator-proof live-streaming and recording app for YouTube — native Windows (C# / WPF / .NET 8).

Screenshot

ytLlive — main window with scenes, sources, and live preview

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.

Run

dotnet build   # Windows only — WPF
dotnet run

Version Roadmap

Version Scope
v0.1 Scene/source management, YouTube RTMP ingest, YouTube OAuth2, live chat, stream health
v0.2 Recording to local file
v0.3 Stream scheduling
v0.4 Multi-destination restreaming
1.0 General availability

Structure

Path Role
Models/ Scene, Source, QualityOption, StreamConfig, StreamHealth, YouTube channel/chat, Socials (social bar)
ViewModels/ MainViewModel — scenes, stream controls, chat; GoLiveViewModel, ReuseImageViewModel, SocialsDialogViewModel
Services/ YouTubeAuthService (OAuth2), YouTubeStreamService (broadcast/health), YouTubeChatService (chat polling), LayoutStore (SQLite), SocialValidator (social link/fediverse validation + nodeinfo icon resolution)
Helpers/ ViewModelBase, RelayCommand, ImageCache, AppLog, FocusPreservingListBox, OAuthCredentials
Themes/ Controls.xaml — the dark-theme control styles, merged once in App.xaml
MainWindow.xaml Dark-theme main UI: scene/source panel, preview, chat, status bar
SocialsDialog.xaml Social Media Site Promotion dialog — 6-slot social bar editor with sign-in gate and validation

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.

S
Description
Creator-proof live-streaming and recording app for YouTube — native Windows (C# / WPF / .NET 8). One-click go-live, visual scene building.
Readme 39 MiB
Languages
C# 99.6%
Shell 0.3%