--- license: other license_name: minimax-h3-community-license license_link: LICENSE base_model: MiniMaxAI/MiniMax-H3 base_model_relation: adapter pipeline_tag: video-to-video tags: - video-to-video - novel-view-synthesis - camera-control - re-camera --- # Meridian: A new perspective on space and time By **Viggle AI** · built on **[MiniMax-H3](https://huggingface.co/MiniMaxAI/MiniMax-H3)** · geometry by **[VGGT-Omega](https://github.com/facebookresearch/vggt-omega)** **One event. Anywhere. Anytime.** **Meridian is a geometry-guided video model for authoring new observations of existing events.** Revisit a recorded event from a new viewpoint. Let the action unfold, slow it down, or hold a moment still—all while moving the camera along a path you choose. You can also create a camera move from a single image. [Quickstart](#quickstart) · [Method](#method)

51-second teaser

## See it in motion The motocross example includes the original video and a diagram of the planned camera path. The ballet example uses a single photograph. The NBA edit labels the parts taken from the original footage.

A dunk. A new look at the same play. This edit combines generated views with original footage, including the dunk's finish.

Play. Hold. Resume. Pause the splash, move the camera, then let the action continue.

Compose a camera path. Orbit, move sideways, and change distance—all in one continuous shot.

One image. Another viewpoint. A camera move from a single ballet photograph.

## Space and time, independently | Choose… | What you can do | |---|---| | **Where to watch from** | Orbit, move in or out, slide sideways, or move up and down. Set the viewing direction and field of view. | | **When to watch** | Choose a sequence, hold one frame, or slow down / speed up the input video before generation. | | **How the two meet** | Move around a frozen moment, follow slow-motion action, or choose a new angle for a sped-up sequence. | Bullet time is one combination—not the boundary of the model. To slow down or speed up the action, retime the input video first. Then design the camera path over that timeline. ## Beyond the frame A camera's position shapes how an event is seen: what draws our attention, what feels close, and what remains outside the frame. Meridian explores keeping some of those choices open after capture. For filmmakers, this opens room to compose a new shot around an existing moment—not just edit what the camera recorded, but generate another way of observing it. In the longer term, that freedom could extend to viewers: choosing a perspective, following a subject, or lingering on a detail rather than watching only a predetermined sequence. **The event has passed. The choice of how to see it remains open.** ## Method ![VGGT-Omega estimates depth and camera poses from the input video. Colored 3D points are rendered along the chosen camera path to produce a warped video. Meridian uses this reference and the matching input frames to generate a new view. Video frames are real examples; points and cameras are schematic.](https://huggingface.co/Viggle/Meridian/resolve/main/assets/meridian_method.png) *The same moment in the input, warped reference, and output. The 3D points and cameras are schematic.* **Choose the moment. Place the camera. Render the reference. Complete the view.** 1. **Build the geometry.** VGGT-Omega estimates depth and camera poses from the input video. We use these estimates to turn the selected frames into colored 3D points. 2. **Render the new view.** For each output frame, choose a moment from the input and a camera viewpoint. Render the corresponding points from that view, leaving uncovered regions grey. 3. **Generate the shot.** Meridian takes the input video and the matching rendered video as references, then fills in missing regions and refines the image. **Preview before generation.** Once the 3D points are available, rendering the reference is fast. You can check the framing and camera motion, spot gaps in the view, and adjust the path before running the video model. ## Model Meridian uses **MiniMax-H3's transformer and VAE, without loading a text encoder at inference**. The task's text embeddings are precomputed; the transformer architecture is unchanged. **Meridian ships as two LoRA adapters on the unmodified MiniMax-H3 transformer**, not as a checkpoint of its own. 2.5 GiB each, downloaded from here; the 61.7 GiB base comes from [MiniMaxAI/MiniMax-H3](https://huggingface.co/MiniMaxAI/MiniMax-H3). | Component | Role | |---|---| | `teacher_lora/` | The re-camera adapter: what makes the model read a geometric render. 2.5 GiB. Its own grid is `--steps 50 --flow-shift 12`. | | `turbo_lora/` | A distillation of that teacher into **3 forwards**. 2.5 GiB. Default: `--steps 4 --flow-shift 3`. | | `assets/` | Precomputed text embeddings, audio-layout assets, and the readable task prompt. | | `legacy/` | The first release: one 61.7 GiB fused transformer and its adapter. Superseded by the pair above; kept so earlier results stay reproducible. | **Load both adapters together and do not merge either into the base weights.** The default run sums them at weight 1.0, which is the combination the turbo was distilled against; merging is lossy in bf16, and for the turbo it is fatal — its update is ~2 orders of magnitude below bf16's rounding step, so baking it in erases essentially all of it. - **Output:** 24 fps, aspect-matched 768-class canvas; 1344 × 768 for a 16:9 input. - **Lengths:** 73, 90, 107, 124, 141, 158, 175, or 243 frames—approximately 3–10 seconds per take. - **Included tools:** inference CLI, runtime assets, sample clips, and a prototype Studio. ## Install Follow the **[installation guide](docs/installation.md)** for code, checkpoint setup, dependencies, and the separately obtained VGGT-Omega geometry model. Inference requires the MiniMax-H3 transformer and VAE, Meridian's two adapters, and VGGT-Omega. Checkpoint availability and paths are listed in the guide. The reference implementation runs on one high-memory CUDA GPU; memory and timings are reported below. It does not currently expose quantization, CPU offloading, or multi-GPU sharding. **Community: bring Meridian to smaller GPUs.** Keeping MiniMax-H3's architecture and omitting the text encoder provides a starting point for adapting community memory-saving techniques. We welcome work on quantization and CPU offloading toward consumer GPUs such as the **RTX 4090**. These are integration targets, not supported or validated configurations in the current scripts. Review the licenses before use: the code license does not cover the weights or remove VGGT-Omega's noncommercial restrictions. ## Quickstart After completing installation, including the separately supplied weights, run from the Meridian directory. The included CC0 sample clips are already 24 fps and contain 73 frames each. ```bash # A gentle 15° orbit over the live event. python inference/sample.py --video examples/media/sp_bouldering_hang.mp4 \ --yaw 15 --sweep --ease --out out/orbit # Play 24 frames, then hold frame 24 for 49 output frames while orbiting. python inference/sample.py --video examples/media/sp_bouldering_reach.mp4 \ --yaw 35 --freeze 24:49 --out out/bullet ``` Open `out/orbit/grid.mp4` to compare **source → geometry reference → generated take**. The take is `out.mp4`; `render.mp4` shows the geometric input with grey holes. For your own footage, use a continuous shot exported at **constant 24 fps**. The CLI reads frames by index: an ordinary take needs at least `start + frames` input frames. It does not normalize the frame rate or detect cuts for you. ## Self-hosting the demo

Designing a camera path and previewing the geometry.

**Early prototype.** The Studio is a very basic, vibe-coded demo, not a production editor. The walkthrough shows one simple way to use it. ```bash CARD=0 bash service/run.sh --host 127.0.0.1 --port 8412 ``` Open `http://127.0.0.1:8412` once the terminal prints `ready`. Upload a clip, design a path with multiple camera keyframes, preview the geometry, then generate. The browser provides **real-time 3D feedback** once geometry is loaded; full-path rendering and final video generation are separate GPU operations, not real-time generative video. The service has no authentication. The command above binds to loopback; do not expose this prototype directly to the internet. ## ComfyUI Both adapters are also published in ComfyUI's generic LoRA format, under `comfyui/`, with two custom nodes and two ready-made graphs. The graphs are API-format JSON — drop either on the canvas and the frontend builds it. Load **`minimax_h3_fl2va_bf16.safetensors`** from [Comfy-Org/MiniMax-H3](https://huggingface.co/Comfy-Org/MiniMax-H3) — Meridian is trained on MiniMax-H3's `fl2va` partition, so the `ref2va` file is the wrong base — then apply `comfyui/meridian_teacher_lora.safetensors` and `comfyui/meridian_turbo_lora.safetensors`, in that order, both at strength 1.0. Sample with `euler` on the `simple` scheduler at `cfg` 1.0, there being no negative branch — wire the same conditioning into both inputs. **ComfyUI's `steps` is one less than `--steps` here**, because its schedulers append the trailing zero themselves: the turbo pair is `MiniMaxH3SigmaShift` 3.0 with `steps` **3**, and the teacher alone is shift 12.0 with `steps` **49**. Both grids then agree with this repo's to four decimals. Conditioning goes through `MiniMaxH3ReferenceToVideo` with **two reference videos**: the source clip first, the geometric render second, and the text of `assets/prompt.txt` as the prompt. That is the `