Scene strip: move top row over the preview column and scale it; remove CRT bezel art and on-air seed

- PreviewPane.xaml: drop the OBS-style border Rectangle/Ellipse over webcam elements
- SceneThumbnailStrip: Viewbox scales the row; height follows width so it fills the preview column; staged+live tile has no border
- MainWindow.xaml: strip moved to column 1 only, leaving the layers cell empty; Margin 8,0 matches the preview
- MainViewModel.Background: stop seeding the CRT scene tiles and the on-air image
- ytLive.csproj: per-build counter (BuildCounter.txt, gitignored) replaces the commit-count stamp

Build stamp now increments on every build.
This commit is contained in:
2026-10-26 13:09:13 -07:00
parent b7ab169718
commit 24aca7d04a
7 changed files with 26 additions and 82 deletions
+2 -34
View File
@@ -441,7 +441,6 @@ public partial class MainViewModel
if (background != null)
StampDefaultBackgroundAsset(background, scene.Name);
}
SeedSceneThumbnails();
SeedOnAirImage();
OnPropertyChanged(nameof(ShowSourcesEmptyHint));
}
@@ -452,45 +451,14 @@ public partial class MainViewModel
// renders (each scene's original background seen through a CRT screen). They
// are seeded into the layout's Asset table once per scene; the preview pane
// keeps rendering each scene's ORIGINAL background — never these tiles.
internal static readonly Dictionary<string, string> SceneThumbnailSeedPaths = new(StringComparer.OrdinalIgnoreCase)
{
[SceneCatalog.Starting] = @"C:\Users\gramp\Downloads\Gemini_Generated_Image_uvq3i3uvq3i3uvq3.jpg",
[SceneCatalog.Live] = @"C:\Users\gramp\Downloads\Gemini_Generated_Image_y27sgqy27sgqy27s.jpg",
[SceneCatalog.Brb] = @"C:\Users\gramp\Downloads\Gemini_Generated_Image_lxcq0klxcq0klxcq.jpg",
[SceneCatalog.Chat] = @"C:\Users\gramp\Downloads\Gemini_Generated_Image_nqosdenqosdenqos.jpg",
[SceneCatalog.Ending] = @"C:\Users\gramp\Downloads\Gemini_Generated_Image_8je5n68je5n68je5.jpg",
};
private void SeedSceneThumbnails()
{
var imported = false;
foreach (var scene in Scenes)
{
if (!string.IsNullOrWhiteSpace(scene.ThumbnailAssetId)) continue;
if (!SceneThumbnailSeedPaths.TryGetValue(scene.Name, out var path)) continue;
if (!System.IO.File.Exists(path)) continue;
try
{
// UpsertAsset is SHA256-keyed, so a re-seed never duplicates rows
// and returns the same id. Only the Scene mapping is new state.
var assetId = AddAsset(System.IO.File.ReadAllBytes(path));
if (assetId == null) continue;
scene.ThumbnailAssetId = assetId;
imported = true;
}
catch { /* the strip keeps the scene's background-art fallback */ }
}
if (!imported) return;
RefreshSnapshotsAsync();
ScheduleSave();
}
internal static readonly Dictionary<string, string> SceneThumbnailSeedPaths = new(StringComparer.OrdinalIgnoreCase);
// ─── On-air strip tile (creator ruling 2026-10-10) ───
// A single shared image ("on-air background screen") labels whichever scene is
// CURRENTLY PREVIEWED in the top bar — it replaces that scene's tile and jumps
// around as the creator swaps scenes. Stored as an Asset row like any image,
// tracked by the OnAirImageAssetId setting so the Save pruner keeps it alive.
internal static string OnAirSeedPath = @"C:\Users\gramp\Downloads\Gemini_Generated_Image_4zajyl4zajyl4zaj.jpg";
internal static string OnAirSeedPath = string.Empty;
private System.Windows.Media.Imaging.BitmapImage? OnAirImage;