Перейти к содержимому
Mineforgian

MultiView - Flashback Addon

Merges multiple Flashback replays from the same session into a single unified replay — an “omniscient observer” view combining the union of chunks, players, and events seen from each POV.

Загрузки
4K
Подписчики
8
Обновлён
10 июня 2026 г.
Лицензия
MIT

Опубликован 24 апреля 2026 г.

MultiView — merge multi-player Flashback replays

MultiView is a Fabric add-on for Flashback. Each player records their own POV with Flashback; MultiView fuses those recordings into one unified replay that behaves as if a single omniscient observer had captured the whole session.

  • ✅ Every chunk explored by any POV is included
  • ✅ Every recording player is visible at the same time
  • ✅ Every entity and event seen by at least one POV is kept
  • ✅ Free camera or Spectate Player on the merged replay
  • ✅ Tick-perfect time alignment, atomic rollback on failure

Who is this for?

  • Content creators — SMP recaps, PvP tournaments, machinima with multi-angle coverage from a single replay file.
  • Server staff — multi-angle review of incidents, anti-cheat investigations from every involved player's POV.
  • Cinematographers — free camera through a multiplayer scene with no information loss.

How to merge two replays

  1. Each player records their POV with Flashback during the same session.
  2. Drop the resulting .zip files into <gameDir>/flashback/replays/.
  3. Launch Minecraft with Flashback + MultiView installed.
  4. Click the camera icon → Select Replay.
  5. Tick the checkbox to the right of each replay (minimum two).
  6. Click Merge N Replays in the top-right corner.
  7. The merged replay merged_<timestamp>.zip appears in the list once the progress screen finishes.

Compatibility

Minecraft Flashback MultiView
1.21.9 / 1.21.10 0.39.x 0.3.2+mc1.21.9
1.21.11 0.39.4 0.3.2+mc1.21.11
26.1 / 26.1.1 / 26.1.2 0.40.0 0.3.2+mc26.1

Requires Fabric API. Java 21 on 1.21.x, Java 25 on 26.1+.

Features

  • N-way merge — works from 2 up to many POVs.
  • Tick-perfect alignment via ClientboundSetTimePacket with metadata fallback.
  • Cross-source deduplication — chunks (SHA-256 128-bit content hash), player info, system chat by visible text, entity moves.
  • Multi-dimension — secondary POV dimension changes preserved as markers.
  • Aggregated markers from every POV on a single timeline.
  • Atomic write.part file + atomic rename; a failed merge never destroys an existing replay.
  • Bounded memory — LRU-capped chat dedup, cryptographic chunk hashing, safe on multi-hour sessions.
  • i18n — French and English.

Known limitations

  • Secondary POVs appear as regular player entities (Flashback only supports one local player; the camera follows the first POV to start recording).
  • 4+ POV merges may produce minor visual artefacts in zones where conflicting chunk versions overlap.
  • Full technical limitations and roadmap in SPEC.md.

Links

License

MIT — free to use, modify and redistribute. Flashback remains under its proprietary license by Moulberry; MultiView is a fully independent add-on and does not redistribute any Flashback code.

Ченджлог

0.5.0-beta.1+mc26.1Бета26.1, 26.1.1, 26.1.2 · 10 июня 2026 г.

0.5.0-beta.1

Added

  • Silent background auto-update. MultiView now keeps itself — and other Zeffut Modrinth mods present in your mods/ folder — up to date automatically. On startup it hashes the local jars, asks Modrinth for the latest build matching your Minecraft version and loader, downloads verified updates, and swaps them in at game shutdown (a detached helper finishes the swap if a jar is still locked, e.g. on Windows). It runs entirely in the background. Opt-out with auto_update: false in config/multiview-telemetry.json or -Dautoupdate.enabled=false; scope it with the update_owner, update_all, and update_exclude settings.

Changed

  • Multi-row selection replaces the per-replay checkboxes: left-click replay rows to build the merge set (selected rows are highlighted), double-click still opens a replay, and a single selection keeps Flashback's Open/Edit/Delete buttons working.
  • Removed the first-run telemetry chat message. Telemetry stays anonymous and opt-out via /mv telemetry off (and -Dmultiview.telemetry=false).

Fixed

  • The Merge button no longer overlaps Flashback's search/sort row and resizes responsively with the window.
  • The Merge button is correctly greyed out when the selected replays are not from the same recording moment (derived from the immutable replay file name, not the file last-modified time) and for empty (0-tick) replays.
0.5.0-beta.1+mc1.21.9Бета1.21.9, 1.21.10 · 10 июня 2026 г.

0.5.0-beta.1

Added

  • Silent background auto-update. MultiView now keeps itself — and other Zeffut Modrinth mods present in your mods/ folder — up to date automatically. On startup it hashes the local jars, asks Modrinth for the latest build matching your Minecraft version and loader, downloads verified updates, and swaps them in at game shutdown (a detached helper finishes the swap if a jar is still locked, e.g. on Windows). It runs entirely in the background. Opt-out with auto_update: false in config/multiview-telemetry.json or -Dautoupdate.enabled=false; scope it with the update_owner, update_all, and update_exclude settings.

Changed

  • Multi-row selection replaces the per-replay checkboxes: left-click replay rows to build the merge set (selected rows are highlighted), double-click still opens a replay, and a single selection keeps Flashback's Open/Edit/Delete buttons working.
  • Removed the first-run telemetry chat message. Telemetry stays anonymous and opt-out via /mv telemetry off (and -Dmultiview.telemetry=false).

Fixed

  • The Merge button no longer overlaps Flashback's search/sort row and resizes responsively with the window.
  • The Merge button is correctly greyed out when the selected replays are not from the same recording moment (derived from the immutable replay file name, not the file last-modified time) and for empty (0-tick) replays.
0.5.0-beta.1+mc1.21.11Бета1.21.11 · 10 июня 2026 г.

0.5.0-beta.1

Added

  • Silent background auto-update. MultiView now keeps itself — and other Zeffut Modrinth mods present in your mods/ folder — up to date automatically. On startup it hashes the local jars, asks Modrinth for the latest build matching your Minecraft version and loader, downloads verified updates, and swaps them in at game shutdown (a detached helper finishes the swap if a jar is still locked, e.g. on Windows). It runs entirely in the background. Opt-out with auto_update: false in config/multiview-telemetry.json or -Dautoupdate.enabled=false; scope it with the update_owner, update_all, and update_exclude settings.

Changed

  • Multi-row selection replaces the per-replay checkboxes: left-click replay rows to build the merge set (selected rows are highlighted), double-click still opens a replay, and a single selection keeps Flashback's Open/Edit/Delete buttons working.
  • Removed the first-run telemetry chat message. Telemetry stays anonymous and opt-out via /mv telemetry off (and -Dmultiview.telemetry=false).

Fixed

  • The Merge button no longer overlaps Flashback's search/sort row and resizes responsively with the window.
  • The Merge button is correctly greyed out when the selected replays are not from the same recording moment (derived from the immutable replay file name, not the file last-modified time) and for empty (0-tick) replays.
0.4.1-beta.1+mc26.1Бета26.1, 26.1.1, 26.1.2 · 3 июня 2026 г.

0.4.1-beta.1 — anonymous telemetry

Adds an anonymous, opt-out telemetry layer (PostHog, EU servers) so the mod can be improved based on real usage: merge metrics (counts, durations, sizes, outcomes, per-phase timings), feature/command/UI usage, runtime versions, and sanitized error reports. No player names/UUIDs, world/server names, file paths, or replay contents are ever sent — an anonymous random ID is used.

Disable any time with /mv telemetry off (or /mv telemetry status), the JVM flag -Dmultiview.telemetry=false, and it is auto-disabled in dev environments. See the README "Telemetry & privacy" section.

Fixed

  • Cross-version first-run notice (chat API differs between MC 1.21.x and 26.1). All targets — 1.21.11, 1.21.9/1.21.10, 26.1 — build and pass the merge regression suite.
0.4.1-beta.1+mc1.21.9Бета1.21.9, 1.21.10 · 3 июня 2026 г.

0.4.1-beta.1 — anonymous telemetry

Adds an anonymous, opt-out telemetry layer (PostHog, EU servers) so the mod can be improved based on real usage: merge metrics (counts, durations, sizes, outcomes, per-phase timings), feature/command/UI usage, runtime versions, and sanitized error reports. No player names/UUIDs, world/server names, file paths, or replay contents are ever sent — an anonymous random ID is used.

Disable any time with /mv telemetry off (or /mv telemetry status), the JVM flag -Dmultiview.telemetry=false, and it is auto-disabled in dev environments. See the README "Telemetry & privacy" section.

Fixed

  • Cross-version first-run notice (chat API differs between MC 1.21.x and 26.1). All targets — 1.21.11, 1.21.9/1.21.10, 26.1 — build and pass the merge regression suite.
0.4.1-beta.1+mc1.21.11Бета1.21.11 · 3 июня 2026 г.

0.4.1-beta.1 — anonymous telemetry

Adds an anonymous, opt-out telemetry layer (PostHog, EU servers) so the mod can be improved based on real usage: merge metrics (counts, durations, sizes, outcomes, per-phase timings), feature/command/UI usage, runtime versions, and sanitized error reports. No player names/UUIDs, world/server names, file paths, or replay contents are ever sent — an anonymous random ID is used.

Disable any time with /mv telemetry off (or /mv telemetry status), the JVM flag -Dmultiview.telemetry=false, and it is auto-disabled in dev environments. See the README "Telemetry & privacy" section.

Fixed

  • Cross-version first-run notice (chat API differs between MC 1.21.x and 26.1). All targets — 1.21.11, 1.21.9/1.21.10, 26.1 — build and pass the merge regression suite.
0.4.0-beta.1+mc26.1Бета26.1, 26.1.1, 26.1.2 · 19 мая 2026 г.

0.4.0-beta.1 — audit-driven beta

Multi-agent audit pass surfaced 35 findings across security, correctness, cross-version compatibility, and the merge algorithm itself. This beta closes the 2 CRITICAL and 10 HIGH-severity items. Marked as a beta until the deferred follow-ups land and the mod has more real-world validation.

Fixed — CRITICAL

  • MoveEntities entity-id remap (the underlying cause of GitHub issue #1 for overlapping merges): the bulk-tick MoveEntities action is now decoded, every VarInt entityId is remapped through safeRemap, and the new bytes are re-emitted. Previously secondary sources' local ids collided with the primary's global namespace, producing the "frozen mobs / default rotations / missing equipment" symptoms.
  • SET_ENTITY_LINK wire format: read/write int32 instead of VarInt (which mis-decoded any id above 127). Sentinel for "no holder" treated as <= 0 to cover both legacy (-1) and modern (0) encodings — leashes no longer randomly attach to the wrong entity.

Fixed — HIGH (security)

  • Path traversal guard in FlashbackReader.open: every segment path is normalised and confined to the replay folder.
  • Zip-bomb entry-count cap (65 536 entries per source) on top of the existing 5 GB byte cap.
  • OverlapValidator refuses to probe replays whose first segment exceeds 256 MB (OOM guard).

Fixed — HIGH (correctness)

  • PIU bulk re-emit no longer fires on mid-segment intercalation (5-arg overload bug closed).
  • copyPrimarySnapshotForTick uses FileChannel.map instead of Files.readAllBytes, avoiding OOM on long replays.
  • HURT_ANIMATION and PLAYER_COMBAT_KILL reclassified EGO → ENTITY so their entity id is remapped through the global namespace.

Fixed — HIGH (cross-version)

  • fabric.mod.json java dependency is now templated: 1.21.x jars declare >= 21, the 26.1.x jar declares >= 25. Previously the 26.1 jar advertised >= 21 and crashed at classload on JDK 21 instead of failing cleanly via Fabric.
  • addRenderableWidget reflection on 26.1+ iterates Screen.class.getDeclaredMethods() and binds to the first overload accepting our Button — resilient to method-rename churn.

Fixed — i18n

  • English users no longer see French progress labels: MergeOrchestrator emits multiview.merge_progress.phase.* translation keys and the screen picks Component.translatable vs Component.literal based on the "multiview." prefix.

Deferred to follow-up

  • EntityMerger UUID-overwrite race and safeRemap phantom-ID race (H8, H9) — real but carry regression risk; separate focused session.
  • SOUND_ENTITY / LEVEL_EVENT remap (H7) — non-trivial wire format.
  • MergeOrchestrator refactor (still ≥ 1300 lines).
0.4.0-beta.1+mc1.21.9Бета1.21.9, 1.21.10 · 19 мая 2026 г.

0.4.0-beta.1 — audit-driven beta

Multi-agent audit pass surfaced 35 findings across security, correctness, cross-version compatibility, and the merge algorithm itself. This beta closes the 2 CRITICAL and 10 HIGH-severity items. Marked as a beta until the deferred follow-ups land and the mod has more real-world validation.

Fixed — CRITICAL

  • MoveEntities entity-id remap (the underlying cause of GitHub issue #1 for overlapping merges): the bulk-tick MoveEntities action is now decoded, every VarInt entityId is remapped through safeRemap, and the new bytes are re-emitted. Previously secondary sources' local ids collided with the primary's global namespace, producing the "frozen mobs / default rotations / missing equipment" symptoms.
  • SET_ENTITY_LINK wire format: read/write int32 instead of VarInt (which mis-decoded any id above 127). Sentinel for "no holder" treated as <= 0 to cover both legacy (-1) and modern (0) encodings — leashes no longer randomly attach to the wrong entity.

Fixed — HIGH (security)

  • Path traversal guard in FlashbackReader.open: every segment path is normalised and confined to the replay folder.
  • Zip-bomb entry-count cap (65 536 entries per source) on top of the existing 5 GB byte cap.
  • OverlapValidator refuses to probe replays whose first segment exceeds 256 MB (OOM guard).

Fixed — HIGH (correctness)

  • PIU bulk re-emit no longer fires on mid-segment intercalation (5-arg overload bug closed).
  • copyPrimarySnapshotForTick uses FileChannel.map instead of Files.readAllBytes, avoiding OOM on long replays.
  • HURT_ANIMATION and PLAYER_COMBAT_KILL reclassified EGO → ENTITY so their entity id is remapped through the global namespace.

Fixed — HIGH (cross-version)

  • fabric.mod.json java dependency is now templated: 1.21.x jars declare >= 21, the 26.1.x jar declares >= 25. Previously the 26.1 jar advertised >= 21 and crashed at classload on JDK 21 instead of failing cleanly via Fabric.
  • addRenderableWidget reflection on 26.1+ iterates Screen.class.getDeclaredMethods() and binds to the first overload accepting our Button — resilient to method-rename churn.

Fixed — i18n

  • English users no longer see French progress labels: MergeOrchestrator emits multiview.merge_progress.phase.* translation keys and the screen picks Component.translatable vs Component.literal based on the "multiview." prefix.

Deferred to follow-up

  • EntityMerger UUID-overwrite race and safeRemap phantom-ID race (H8, H9) — real but carry regression risk; separate focused session.
  • SOUND_ENTITY / LEVEL_EVENT remap (H7) — non-trivial wire format.
  • MergeOrchestrator refactor (still ≥ 1300 lines).

Комментарии

Загружаем…