Remove legacy WPF app, flatten WinUI project to repo root, rename namespace
The repo carried two parallel UIs (WPF + WinUI) sharing Models/Services via
cross-directory Link includes. Now that WinUI is the only frontend, collapse
the structure so the WinUI project IS the repo root instead of a nested
sibling folder:
- Delete the WPF project entirely (App.xaml, MainWindow.xaml, csproj) and its
bin/obj output
- Move AmiReel.WinUI/* up to the repo root (App, MainWindow, MainPage,
DialogHelper, Assets, Package.appxmanifest, app.manifest, Properties,
.github/instructions, AGENTS.md) via git mv, preserving history
- Rename AmiReel.WinUI.csproj -> AmiReel.csproj; regenerate the solution as
AmiReel.slnx (the newer XML solution format) with a single project
- Rename namespace AmigaDB.VideoRenderer.{Models,Services} -> AmiReel.{...}
and AmiReel_WinUI -> AmiReel across all files, including the embedded
ffmpeg/ffprobe resource logical names in the csproj and ToolExtractor
- Models/ and Services/ no longer need the Link-based cross-directory
<Compile Include>; they're picked up by the SDK's default globbing now
that they live under the project directory
- Rename assets/ -> branding/ (source icon art) to avoid a case-insensitive
collision with Assets/ (packaged tile art) once both sit at repo root
- Merge the two .gitignore files into one; track the PublishProfiles pubxml
files instead of ignoring them (no secrets, and they keep publish
reproducible across machines) as branding, gitignore, etc.
- Simplify publish-win-x64.ps1 (drop the -Target Wpf/WinUI switch, there's
only one target now) and rewrite README.md to describe the single-project
layout, build/run/publish commands, and file structure
Verified: dotnet build succeeds for both AmiReel.csproj and AmiReel.slnx, and
the built exe launches and renders identically to before the move.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,111 +1,90 @@
|
||||
# AmiReel
|
||||
|
||||
AmiReel is a Windows video-rendering tool for turning Amiga AVI captures into:
|
||||
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,
|
||||
- and a publishable Windows desktop app workflow.
|
||||
- an animated WebP preview.
|
||||
|
||||
The repository currently contains two desktop frontends that share the same render pipeline:
|
||||
|
||||
- `AmiReel.WinUI`
|
||||
The newer WinUI 3 application. This is the default publish target.
|
||||
- `AmigaDB.VideoRenderer.csproj`
|
||||
The existing WPF application.
|
||||
Built with **WinUI 3** on the Windows App SDK, driving FFmpeg under the hood.
|
||||
|
||||
## Features
|
||||
|
||||
- multiple ordered AVI inputs
|
||||
- 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
|
||||
- FFmpeg log output
|
||||
- source video preview and final render preview
|
||||
- dark and light themes
|
||||
- optional move of source recordings into `originals` in the output folder
|
||||
- optional custom `ffmpeg.exe` / `ffprobe.exe` paths
|
||||
- automatic FFmpeg detection from `PATH`
|
||||
- single-file WinUI publish for easier distribution
|
||||
- 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 SDK
|
||||
- WPF project: .NET 8 SDK
|
||||
- WinUI project: .NET 10 SDK and WinUI/Windows App SDK support
|
||||
- Windows x64 FFmpeg binaries in `ThirdParty`
|
||||
- .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 executable
|
||||
- FFmpeg is not required separately if you distribute AmiReel with embedded `ThirdParty` FFmpeg binaries
|
||||
|
||||
## Project Layout
|
||||
|
||||
- `AmiReel.WinUI\`
|
||||
WinUI 3 frontend
|
||||
- `MainWindow.xaml` and `MainWindow.xaml.cs`
|
||||
WPF frontend
|
||||
- `Services\RenderPipeline.cs`
|
||||
Main render workflow
|
||||
- `Services\ProcessRunner.cs`
|
||||
FFmpeg process execution and progress parsing
|
||||
- `Services\ToolExtractor.cs`
|
||||
FFmpeg resolution, extraction, and fallback logic
|
||||
- `publish-win-x64.ps1`
|
||||
Publish script
|
||||
- The published `AmiReel.exe` — FFmpeg is not required separately if you distribute AmiReel with the embedded `ThirdParty` binaries
|
||||
|
||||
## Run in Development
|
||||
|
||||
### WinUI
|
||||
|
||||
```powershell
|
||||
dotnet build .\AmiReel.WinUI\AmiReel.WinUI.csproj
|
||||
dotnet run --project .\AmiReel.WinUI\AmiReel.WinUI.csproj
|
||||
```
|
||||
|
||||
### WPF
|
||||
|
||||
```powershell
|
||||
dotnet build .\AmigaDB.VideoRenderer.csproj
|
||||
dotnet run --project .\AmigaDB.VideoRenderer.csproj
|
||||
dotnet build .\AmiReel.csproj
|
||||
dotnet run --project .\AmiReel.csproj
|
||||
```
|
||||
|
||||
## Publish
|
||||
|
||||
### Default: WinUI
|
||||
|
||||
The publish script now defaults to the WinUI application:
|
||||
|
||||
```powershell
|
||||
.\publish-win-x64.ps1
|
||||
```
|
||||
|
||||
This publishes the WinUI app as a self-contained single-file executable.
|
||||
|
||||
At the end of the script you will see:
|
||||
|
||||
- the release folder path
|
||||
- the final executable path
|
||||
|
||||
Example output path:
|
||||
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:
|
||||
|
||||
```text
|
||||
AmiReel.WinUI\bin\Release\net10.0-windows10.0.26100.0\win-x64\publish\AmiReel.exe
|
||||
```
|
||||
|
||||
### Publish WPF instead
|
||||
|
||||
```powershell
|
||||
.\publish-win-x64.ps1 -Target Wpf
|
||||
bin\Release\net10.0-windows10.0.26100.0\win-x64\publish\AmiReel.exe
|
||||
```
|
||||
|
||||
## Installation
|
||||
@@ -113,42 +92,33 @@ AmiReel.WinUI\bin\Release\net10.0-windows10.0.26100.0\win-x64\publish\AmiReel.ex
|
||||
### For developers
|
||||
|
||||
1. Clone the repository.
|
||||
2. Add `ffmpeg.exe` and `ffprobe.exe` to `ThirdParty`.
|
||||
3. Restore and build the desired app:
|
||||
2. Add `ffmpeg.exe` and `ffprobe.exe` to `ThirdParty\`.
|
||||
3. Restore and build:
|
||||
|
||||
```powershell
|
||||
dotnet build .\AmigaDB.VideoRenderer.sln
|
||||
dotnet build .\AmiReel.slnx
|
||||
```
|
||||
|
||||
4. Run either the WinUI or WPF project.
|
||||
|
||||
### For end users
|
||||
|
||||
1. Copy the published `AmiReel.exe` from the publish folder to any location, for example:
|
||||
|
||||
```text
|
||||
C:\Apps\AmiReel\
|
||||
```
|
||||
|
||||
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. If you want to use your own FFmpeg build:
|
||||
open `Settings` and select:
|
||||
- `ffmpeg.exe`
|
||||
- `ffprobe.exe`
|
||||
4. To use your own FFmpeg build instead, open **Settings** and set:
|
||||
- `ffmpeg.exe` path
|
||||
- `ffprobe.exe` path
|
||||
|
||||
### Optional desktop shortcut
|
||||
|
||||
1. Right-click `AmiReel.exe`.
|
||||
2. Choose `Send to` -> `Desktop (create shortcut)`.
|
||||
Right-click `AmiReel.exe` → **Send to** → **Desktop (create shortcut)**.
|
||||
|
||||
## FFmpeg Behavior
|
||||
|
||||
AmiReel resolves FFmpeg in this order:
|
||||
|
||||
1. custom paths from settings
|
||||
2. `ffmpeg.exe` and `ffprobe.exe` found on system `PATH`
|
||||
3. embedded `ThirdParty` binaries
|
||||
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`.
|
||||
|
||||
@@ -160,41 +130,25 @@ User settings are stored in:
|
||||
%LOCALAPPDATA%\AmiReel\settings.json
|
||||
```
|
||||
|
||||
This includes values such as:
|
||||
|
||||
- output folder
|
||||
- end-card path
|
||||
- FFmpeg paths
|
||||
- theme
|
||||
- encoder selection
|
||||
- timing settings
|
||||
- whether source videos are moved into `originals` after a successful render
|
||||
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 FFmpeg 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.
|
||||
- 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
|
||||
**App falls back to CPU instead of NVENC** — FFmpeg could not initialize `h264_nvenc`. AmiReel
|
||||
continues automatically with CPU encoding.
|
||||
|
||||
This usually means FFmpeg could not initialize `h264_nvenc`. AmiReel will continue with CPU encoding automatically.
|
||||
**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.
|
||||
|
||||
### FFmpeg tool error
|
||||
|
||||
If embedded FFmpeg is missing or broken, AmiReel will try:
|
||||
|
||||
1. configured tool paths
|
||||
2. FFmpeg from `PATH`
|
||||
|
||||
If needed, set the paths manually in `Settings`.
|
||||
|
||||
### Render failed popup
|
||||
|
||||
The popup shows a short human-readable summary. Full technical details remain available in the `FFmpeg log` panel.
|
||||
|
||||
## Current Default Recommendation
|
||||
|
||||
Use the WinUI build for publishing and distribution unless you specifically need the WPF variant.
|
||||
**Render failed popup** — Shows a short human-readable summary. Full technical details remain
|
||||
available in the **FFmpeg log** panel.
|
||||
|
||||
Reference in New Issue
Block a user