# AmiReel

AmiReel is a Windows video-rendering tool for turning Amiga AVI captures into:

- a 4K 50 FPS final video,
- PNG/JPG thumbnails,
- an animated WebP preview,
- and a publishable Windows desktop app workflow.

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.

## Features

- multiple ordered AVI inputs
- 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 custom `ffmpeg.exe` / `ffprobe.exe` paths
- automatic FFmpeg detection from `PATH`
- single-file WinUI publish for easier distribution

## 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`
  - `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

## 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
```

## 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:

```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
```

## Installation

### For developers

1. Clone the repository.
2. Add `ffmpeg.exe` and `ffprobe.exe` to `ThirdParty`.
3. Restore and build the desired app:

```powershell
dotnet build .\AmigaDB.VideoRenderer.sln
```

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\
```

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`

### Optional desktop shortcut

1. Right-click `AmiReel.exe`.
2. Choose `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

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

## Settings Location

User settings are stored in:

```text
%LOCALAPPDATA%\AmiReel\settings.json
```

This includes values such as:

- output folder
- end-card path
- FFmpeg paths
- theme
- encoder selection
- timing settings

## 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.

## Troubleshooting

### App falls back to CPU instead of NVENC

This usually means FFmpeg could not initialize `h264_nvenc`. AmiReel will continue with CPU encoding automatically.

### 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.
