klevze 3de3357d23 Code review cleanup: dead code, unused capability, accessibility gap
- Remove unused `using Microsoft.Win32;` from MainPage.xaml.cs (leftover
  from the WPF OpenFileDialog era; WinUI uses Windows.Storage.Pickers)
- Trim App.xaml.cs down to the two usings it actually needs instead of the
  full WinUI3 template boilerplate list
- Change App.MainWindowInstance to an internal setter (only MainWindow
  itself should assign it)
- Add AutomationProperties.Name to the icon-only Settings button so screen
  readers announce it (it only had a mouse tooltip before)
- Delete Assets/AppIcon.ico: unreferenced by both the manifest and code,
  the real app icon comes from ApplicationIcon (branding/AmiReel.ico) and
  AppWindow.SetIcon at runtime
- Drop the systemAIModels capability from Package.appxmanifest; the app
  doesn't call any Windows AI API, so declaring it is an unnecessary
  privilege request

Verified: dotnet build produces 0 warnings/errors, app launches unchanged.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-13 14:13:22 +02:00
2026-08-11 10:43:27 +02:00

AmiReel

AmiReel is a Windows desktop app for turning Amiga (or any) screen recordings into:

  • a 4K 50 FPS final video,
  • PNG/JPG thumbnails,
  • an animated WebP preview.

Built with WinUI 3 on the Windows App SDK, driving FFmpeg under the hood.

Features

  • Multiple ordered video inputs — .avi, .mp4, .m4v, .mov, .mkv, .webm, .wmv, .flv, .mpg, .mpeg, .ts, .3gp
  • Drag-and-drop or file-picker source selection
  • 3840×2160 output at 50 FPS
  • NVIDIA NVENC with automatic CPU libx264 fallback
  • Configurable trim, fade, end-card hold, and thumbnail interval
  • Optional end-card image
  • Live render progress with frame counters and FFmpeg log output
  • Source and final-render preview (built-in or a custom player)
  • Dark and light themes
  • Optional move of source recordings into originals/ in the output folder
  • Optional custom ffmpeg.exe / ffprobe.exe paths, with automatic detection from PATH
  • Self-contained single-file publish for easy distribution

Project Layout

AmiReel.csproj              Project file
AmiReel.slnx                Solution file
App.xaml(.cs)                Application entry point
MainWindow.xaml(.cs)         Window shell: custom title bar, theming, exit confirmation
MainPage.xaml(.cs)           Main UI: source list, settings, render controls
DialogHelper.cs              Shared ContentDialog styling (Settings, exit, error dialogs)
Package.appxmanifest         MSIX packaging identity and tile/icon declarations
app.manifest                 Win32 manifest (DPI awareness, OS compatibility)
Assets/                      Packaged app icons and tiles (all required sizes)
branding/                    Source artwork the Assets/ tiles are generated from
Models/
  AppSettings.cs              Persisted user settings
  RenderSettings.cs           Render job parameters
  SupportedVideoFormats.cs    Accepted input file extensions
Services/
  RenderPipeline.cs           Main render workflow (FFmpeg orchestration)
  ProcessRunner.cs            FFmpeg process execution and progress parsing
  ToolExtractor.cs            FFmpeg resolution, extraction, and fallback logic
  MediaProbe.cs                Duration/audio-stream probing via ffprobe
  FfmpegLibraryProbe.cs        NVENC capability probing
  AppSettingsStore.cs          Settings load/save (JSON in %LOCALAPPDATA%)
  UserFacingErrors.cs          Exception-to-message translation
ThirdParty/                  Embedded ffmpeg.exe / ffprobe.exe (not checked in, see below)
publish-win-x64.ps1          Publish script

Requirements

For development:

  • Windows 10 or Windows 11
  • .NET 10 SDK with WinUI 3 / Windows App SDK workload
  • Windows x64 FFmpeg binaries in ThirdParty/:
    • ThirdParty\ffmpeg.exe
    • ThirdParty\ffprobe.exe

For end users:

  • Windows 10 or Windows 11 x64
  • The published AmiReel.exe — FFmpeg is not required separately if you distribute AmiReel with the embedded ThirdParty binaries

Run in Development

dotnet build .\AmiReel.csproj
dotnet run --project .\AmiReel.csproj

Publish

.\publish-win-x64.ps1

This publishes a self-contained, single-file win-x64 executable. At the end of the script you'll see the release folder and final executable path, for example:

bin\Release\net10.0-windows10.0.26100.0\win-x64\publish\AmiReel.exe

Installation

For developers

  1. Clone the repository.
  2. Add ffmpeg.exe and ffprobe.exe to ThirdParty\.
  3. Restore and build:
dotnet build .\AmiReel.slnx

For end users

  1. Copy the published AmiReel.exe to any location, for example C:\Apps\AmiReel\.
  2. Double-click AmiReel.exe.
  3. If FFmpeg is embedded in the build, no extra setup is required.
  4. To use your own FFmpeg build instead, open Settings and set:
    • ffmpeg.exe path
    • ffprobe.exe path

Optional desktop shortcut

Right-click AmiReel.exeSend toDesktop (create shortcut).

FFmpeg Behavior

AmiReel resolves FFmpeg in this order:

  1. Custom paths from Settings
  2. ffmpeg.exe / ffprobe.exe found on the system PATH
  3. Embedded ThirdParty binaries (extracted to %LOCALAPPDATA%\AmiReel\tools on first use)

If NVENC cannot be initialized, AmiReel automatically falls back to CPU libx264.

Settings Location

User settings are stored in:

%LOCALAPPDATA%\AmiReel\settings.json

This includes: output folder, end-card path, FFmpeg/preview-player paths, theme, encoder selection, timing settings, and whether source videos are moved into originals/ after a successful render.

Notes for Distribution

  • If you distribute FFmpeg binaries with AmiReel, you are responsible for complying with the license terms of the FFmpeg build you use. Keep any required notices, source offer, or attribution required by that distribution.
  • Windows Explorer may cache executable icons. If a freshly published build still shows an old icon, rename the file or refresh the icon cache before assuming the embed failed.

Troubleshooting

App falls back to CPU instead of NVENC — FFmpeg could not initialize h264_nvenc. AmiReel continues automatically with CPU encoding.

FFmpeg tool error — If the embedded FFmpeg is missing or broken, AmiReel tries configured tool paths, then FFmpeg from PATH. Set the paths manually in Settings if needed.

Render failed popup — Shows a short human-readable summary. Full technical details remain available in the FFmpeg log panel.

S
Description
No description provided
Readme 4.2 MiB
Languages
C# 82.9%
Shell 15.9%
PowerShell 1.2%