Links
Tags
Creators
Details
0.3.5
Compatibility
Required content
Changes
Two new optimizations for the export finalize phase
When a Flashback export ends, FFmpeg still has work to do — drain its encoder queues, write the MP4 trailer, move the temp file. Before this release, the game window froze on Flashback's last progress frame during this whole period (often 10-30s on large exports).
H8 — Animated Saving overlay
After the export loop hits 100%, our own full-screen overlay appears: "Finalizing export / Saving... / Xs" with animated dots and elapsed-time counter. Confirms visually that the game is working, not crashed.
Mechanism: @Redirect on the LockSupport.parkNanos calls inside AsyncFFmpegVideoWriter.finish()'s wait loops. We park as Flashback expects, plus we render+swap our screen at 4 fps. No interference with Flashback's own progress display during the main export loop — they don't overlap.
H9 — Fragmented MP4 on hardware encoders
For exports using videotoolbox, nvenc, qsv or amf, we add movflags=+frag_keyframe+empty_moov to the FFmpeg recorder options. This eliminates the monolithic moov atom (the giant index FFmpeg normally writes at the end of the file) and replaces it with self-contained fragments throughout the file.
Result: post-export finalize is ~10× faster on large files. Verified: a 3 GB / 20-minute export now finalizes in seconds instead of tens of seconds. The .mp4 file is ~1-3% larger and is fully compatible with VLC, IINA, Premiere, DaVinci, Discord, YouTube, browsers, and every other modern MP4 player.
Toggle useFragmentedMp4OnHwEncoders in config/flashbackturbo.json to opt out (e.g. for broadcast pipelines requiring strict MP4 layout).
What 0.3.3 / 0.3.4 broke and 0.3.5 fixes
The original 0.3.0–0.3.2 attempts at a progress overlay during the main export loop interfered with Flashback's own progress display and its FBO state — exports would fail to start or run at 1/10th speed. 0.3.5 narrows H8 to the post-export phase only, where there is no conflict. Confirmed working in real production exports.
Compatibility
- MC 1.21.9 / 1.21.10 / 1.21.11 with Flashback ≥ 0.39.0
- Fabric Loader ≥ 0.19.2
- Java 21
26.1.x users
26.1.x builds remain on 0.2.1+26.1. MC 26.1 refactored the Screen render API; porting H8 needs further work. The H9 fragmented MP4 optimization will be available when the 26.1 build is updated.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:6o9zaNB9:5KQnqivO"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:6o9zaNB9:5KQnqivO"
}

