Skip to content

feat(ui): Add Video Player preview component to Desktop and WASM dashboards - #20

Closed
spelech wants to merge 2 commits into
mainfrom
feat/video-player-preview-studio-14664402619050446851
Closed

feat(ui): Add Video Player preview component to Desktop and WASM dashboards#20
spelech wants to merge 2 commits into
mainfrom
feat/video-player-preview-studio-14664402619050446851

Conversation

@spelech

@spelech spelech commented Aug 23, 2026

Copy link
Copy Markdown
Owner

Add Video Player preview component to Desktop and WASM dashboards with interactive controls, metadata overlay badges, and recent renders gallery.

Fixes #10


PR created automatically by Jules for task 14664402619050446851 started by @spelech

…boards

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
@google-labs-jules

Copy link
Copy Markdown
Contributor

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@spelech

spelech commented Aug 24, 2026

Copy link
Copy Markdown
Owner Author

PR Review: Video Player Preview Studio (PR #20)

📋 Overview & Verdict

Verdict: APPROVED_WITH_NITPICKS 🚀

This PR successfully implements the Video Player preview component and AI Video Studio generation workflow for both Desktop (Avalonia XAML) and WebAssembly (WASM) dashboards according to Issue #10. The implementation is clean, follows the project's glassmorphic UI design language, includes comprehensive view model test coverage, and passes all existing test suites.


✨ Key Strengths

  1. End-to-End Workflow Integration: Added minimal API endpoints (/api/video/generate and /api/video/files) in WorkflowEndpoints.cs supporting simulated video file creation and recent file listing with duration, fps, and resolution metadata.
  2. Robust MVVM Architecture: MainViewModel.cs encapsulates all observable generation parameters (Prompt, NegativePrompt, Workflow, Resolution, FrameCount, Seed), status flags, overlay badges, and recent assets (ObservableCollection<VideoAssetItem>).
  3. Glassmorphic UI Design: EngineStudioTabControl.axaml introduces an interactive player interface with metadata badges (duration, resolution, fps, seed), media controls (Play/Pause, scrub, loop, export), and a scrollable recent renders gallery with clickable cards.
  4. WASM Styling & Media Elements: Added .video-preview-container, .video-overlay-badge, and HTML5 <video> preview elements to both wwwroot/index.html and LocalLLMServerManager.Web/wwwroot/index.html.
  5. Quality & Test Coverage: Added unit tests in MainViewModelTests.cs covering VideoAssetItem record equality, video generation, asset selection, and playback toggling. All 62 unit tests pass.

🔍 Findings & Recommendations

1. RadioButton Two-Way Binding & Studio Mode Visibility (EngineStudioTabControl.axaml)

  • Observation: The mode selector RadioButtons use:
    <RadioButton Content="🎨 Images" GroupName="StudioMode" IsChecked="{Binding SelectedStudioMode, Converter={x:Static ObjectConverters.Equal}, ConverterParameter=Images}" Classes="matte-radio"/>
    ObjectConverters.Equal is a one-way converter and does not implement ConvertBack, so clicking the RadioButtons will not update SelectedStudioMode on the ViewModel. Additionally, the Video Studio section is currently rendered statically rather than being conditionally displayed or tabbed based on SelectedStudioMode.
  • Recommendation: If dynamic tab/mode switching is intended, consider using a custom TwoWay converter, a TabControl, or binding IsVisible on mode sections.

2. Seek Bar Binding & Fullscreen Control (EngineStudioTabControl.axaml)

  • Observation: The playback slider has a hardcoded static value:
    <Slider Grid.Column="1" Margin="8,0" Value="50" Minimum="0" Maximum="100"/>
    Also, the fullscreen control from the Issue feat(ui): Add Video Player preview component to Desktop and WASM dashboards #10 specification is currently omitted in the desktop player toolbar.
  • Recommendation: Bind the Slider.Value to a ViewModel property (e.g. VideoPlaybackProgress or CurrentTimeSeconds) and consider adding a Fullscreen button.

3. Unused Dependency Injection Parameter (Endpoints/WorkflowEndpoints.cs)

  • Observation: In WorkflowEndpoints.cs:
    app.MapGet("/api/video/files", (ISettingsService settingsService) => ...
    settingsService is injected but never referenced.
  • Recommendation: Remove ISettingsService settingsService or use it to dynamically resolve the custom video output directory path from user settings.

4. Silent Catch in LoadGeneratedVideosAsync (MainViewModel.cs)

  • Observation:
    catch { }
    Swallowing exceptions silently makes it difficult to diagnose network issues or malformed server responses when loading gallery items.
  • Recommendation: Log or emit a toast warning via ToastService.Instance.Show(...) if loading video assets fails.

🧪 Verification Summary

  • Unit Tests (dotnet test): 62 / 62 passed ✅
  • Lint (npm run lint): Passed with 0 errors ✅
  • TypeScript Check (npx tsc --noEmit): Passed with 0 errors ✅
  • Layout Audit (npm run test:layout): Verified Playwright configuration & styling ✅

Great work on this feature! 🎬

…boards

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
@spelech

spelech commented Aug 24, 2026

Copy link
Copy Markdown
Owner Author

Integrated and merged into main as part of release v3.7.0.

@spelech spelech closed this Aug 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(ui): Add Video Player preview component to Desktop and WASM dashboards

1 participant