Replays in, music-scored videos out
Minecraft Montage turns ReplayMod recordings into music-scored videos and uploads them to YouTube. It has a small desktop app with three tabs: prepare the replay, render it in game, then finish the video and upload it. The command-line tool runs the same pipeline.
The footage comes from a long-haul modded world, a NeoForge 1.21.1 server with a quest book and around eighteen mods. Most of a long session is wandering around building. A raw replay of that is mostly walking, which is exactly why the tool exists. A montage needs a camera that follows you.
One manual click per video
Rendering can't run headless. ReplayMod captures live OpenGL frames, so one step has to stay manual: pressing Render in the game. Everything else is automated. The expensive part is the camera path, and that gets generated offline. The tool writes a render queue file into the replay, and ReplayMod reads it and renders exactly the camera moves I specified.
The app and the command-line tool both call one pipeline module, so the two interfaces can't drift apart.
Measured smoothing, not formulas
The camera follows the player with baked position keyframes. My first smoothing approach used a fixed window. The second scaled the window by the timelapse speed-up, which sounded clever and was worse. The window grows exactly when the player covers the most ground. On an 11-minute replay it put the camera 103 blocks from its target, well out of frame.
The fix was to stop guessing. The tool tries decreasing smoothing windows and takes the first one whose worst-case drift fits within 35 percent of the orbit radius. On the real replay that picked a two-second window, and the camera held within about 12 to 16 blocks of the target across 445 blocks of travel.
Small problems that cost time
- Minecraft has to be closed before a camera path can be written. ReplayMod holds the recording open, so the final rename fails. Writes go through a temp file so the recording is never damaged, and the tool checks for a running game and refuses to start.
- ffmpeg filter escaping is hostile. A comma inside a drawtext expression splits the filter chain even when it's quoted, and an apostrophe inside quoted text can't be escaped reliably. Putting the caption in a UTF-8 text file and pointing ffmpeg at the file avoids both.
- Every ReplayMod preset drops audio. So the music bed doesn't need any ducking logic.
- Music licensing is enforced in code. Each track has its licence in a config file, the credit goes into the video description automatically, and an unrecognised licence is refused unless attribution is set explicitly.
- I don't use ReplayMod's built-in uploader. It ships with the mod's own OAuth credentials, which aren't mine to script with.
I also don't score videos from my personal music library. Those are commercial recordings, and Content ID would claim every upload. The tracks are royalty-free under Creative Commons attribution, and the pipeline makes the credit impossible to forget.
Publishing is a human step
Uploads land private on purpose. Unverified API projects are locked to private with no appeal, so the upload is only half the job. Publishing happens by hand in YouTube Studio, and that doubles as a review gate. I'm fine with that.
Built and working end to end
The pipeline is built: the replay rewrite, the follow camera, the ffmpeg assembly, the music and the private upload. Rendering in the game is still a manual click, by design. The source is in a private GitHub repository. I set it to private because going public is the one step I can't take back, so the decision to open it up stays with me.