Skip to content

Development

simonefil edited this page Aug 26, 2026 · 4 revisions

Development

Building RemuxForge from source. For using it, start at Home.

Requirements

  • .NET 10 SDK

  • LibMan CLI for the WebUI's client-side libraries:

    dotnet tool install -g Microsoft.Web.LibraryManager.Cli
  • The same external tools the application needs at runtime, MKVToolNix, ffmpeg, MediaInfo CLI, if you intend to run or test it.

Project layout

Project Contains
RemuxForge.Core all the logic: analysis, media handling, metadata, splitting, transcoding, configuration and localization. Both front ends depend on it.
RemuxForge.Cli the command-line entry point
RemuxForge.Web the Blazor Server WebUI

Notable areas of Core:

Folder Responsibility
Analysis/ frame-sync, deep analysis, speed correction, diagnostics
Audio/ audio processing and rendering
Configuration/ settings service, validation, codec and language mapping
Localization/Resources/ en.json / it.json, every user-visible string, including the in-app help text
Media/ ffmpeg and mkv tool wrappers
Metadata/ field registry, tag registry, expression engine, pipeline evaluator, preset service
Models/Config/ Options.cs holds the complete CLI parser
Pipeline/ the remux pipeline and file scanner
Rename/ the bulk rename engine
Splitting/ the split pipeline and segment service
Subtitles/ subtitle canvas rewriting

The WebUI is a single page (Components/Pages/Dashboard.razor) with per-mode orchestrators in Services/ and dialogs in Components/Shared/.

Build

# CLI
dotnet build RemuxForge.Cli -c Release

# WebUI (restore client libraries first)
cd RemuxForge.Web && libman restore && cd ..
dotnet build RemuxForge.Web -c Release

# Docker image
docker build -t remuxforge .

Publish

CLI:

dotnet publish RemuxForge.Cli -c Release -r win-x64     --self-contained true
dotnet publish RemuxForge.Cli -c Release -r linux-x64   --self-contained true
dotnet publish RemuxForge.Cli -c Release -r linux-arm64 --self-contained true
dotnet publish RemuxForge.Cli -c Release -r osx-x64     --self-contained true
dotnet publish RemuxForge.Cli -c Release -r osx-arm64   --self-contained true

WebUI:

dotnet publish RemuxForge.Web -c Release -r win-x64 --self-contained true \
  -p:PublishSingleFile=true -p:PublishTrimmed=false -p:EnableCompressionInSingleFile=true

Repeat for linux-x64, linux-arm64, osx-x64, osx-arm64.

release.sh in the repository root wraps the full release build.

Localization

Every user-visible string lives in RemuxForge.Core/Localization/Resources/en.json and it.json, keyed by dotted paths (web.config.help.remux.speed.text, metadata.field.audio_title, …). Values may be a string or an array of lines for multi-line help.

Both files must have the same keys. Adding UI text means adding it to both. The web.config.help.* keys are the in-app help pane, which is the authoritative description of every configuration field.

Contributing

  • Open an issue for bugs and behaviour changes before a large pull request.
  • Include reproducible commands, platform, external tool versions, and the relevant MediaInfo or ffmpeg output.
  • Keep pull requests focused on one change.
  • Do not include copyrighted media samples.
  • New user-facing strings go in both en.json and it.json.

LLM usage notice

LLM-based assistance has been used during development for README and wiki documentation, WebUI design refinement, and broad refactor support where useful.

Clone this wiki locally