Instructions to use Viggle/Meridian with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Diffusers
How to use Viggle/Meridian with Diffusers:
pip install -U diffusers transformers accelerate
import torch from diffusers import DiffusionPipeline # switch to "mps" for apple devices pipe = DiffusionPipeline.from_pretrained("Viggle/Meridian", dtype=torch.bfloat16, device_map="cuda") prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" image = pipe(prompt).images[0] - Notebooks
- Google Colab
- Kaggle
| <html lang="en"> | |
| <head> | |
| <meta charset="utf-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| <title>Meridian: A new perspective on space and time</title> | |
| <style> | |
| :root { color-scheme: light; --ink: #202923; --muted: #647068; --accent: #21634c; --line: #dee5df; } | |
| * { box-sizing: border-box; } | |
| html { scroll-behavior: smooth; scroll-padding-top: 2rem; } | |
| body { margin: 0; background: #f6f7f3; color: var(--ink); font: 17px/1.8 system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; } | |
| a { color: var(--accent); text-underline-offset: .2em; } | |
| a:hover { text-decoration-thickness: 2px; } | |
| a:focus-visible { outline: 3px solid var(--accent); outline-offset: 4px; } | |
| .skip-link { position: absolute; left: 1rem; top: -5rem; padding: .5rem 1rem; background: white; } | |
| .skip-link:focus { top: 1rem; } | |
| .page-header { max-width: 1280px; margin: auto; padding: 1.5rem 2.5rem; display: flex; justify-content: space-between; gap: 1rem; border-bottom: 1px solid var(--line); color: var(--muted); font-size: .8rem; } | |
| .page-header span { font-weight: 700; letter-spacing: .12em; text-transform: uppercase; } | |
| .layout { max-width: 1280px; margin: auto; padding: 3.5rem 2.5rem 5rem; display: grid; grid-template-columns: 220px minmax(0, 1fr); gap: 3.5rem; align-items: start; } | |
| nav { position: sticky; top: 2rem; max-height: calc(100vh - 4rem); overflow-y: auto; font-size: .8rem; line-height: 1.5; } | |
| nav h2 { margin: 0 0 1rem; color: var(--muted); font-size: .75rem; letter-spacing: .1em; text-transform: uppercase; } | |
| nav ul { padding: 0; margin: 0; list-style: none; } | |
| nav ul ul { padding-left: 1rem; border-left: 1px solid var(--line); margin-top: .5rem; } | |
| nav li { margin-bottom: .65rem; } | |
| nav a { color: var(--muted); text-decoration: none; } | |
| nav a:hover { color: var(--accent); } | |
| article { min-width: 0; max-width: 850px; padding: 3rem; border: 1px solid var(--line); border-radius: 12px; background: #fff; } | |
| h1, h2, h3 { line-height: 1.25; letter-spacing: -.025em; text-wrap: balance; } | |
| h1 { margin: 0 0 1.6rem; font-size: clamp(2rem, 4vw, 3.2rem); } | |
| article h2 { margin: 3rem 0 1.2rem; padding-top: 1.8rem; border-top: 1px solid var(--line); font-size: 1.7rem; } | |
| article h3 { margin: 2.2rem 0 1rem; font-size: 1.25rem; } | |
| p { margin: 1.2rem 0; } | |
| article a { overflow-wrap: anywhere; } | |
| img { display: block; max-width: 100%; height: auto; margin: 1.6rem auto; border-radius: 6px; } | |
| video { display: block; width: 100%; height: auto; object-fit: contain; background: #0b0c0c; border-radius: 6px; } | |
| video:focus-visible, summary:focus-visible { outline: 3px solid var(--accent); outline-offset: 4px; } | |
| .film { min-width: 0; margin: 1.6rem 0; } | |
| .film .film-caption { margin-top: .65rem; color: var(--muted); font-size: .8rem; line-height: 1.6; } | |
| .video-grid { display: table; width: 100%; table-layout: fixed; border-collapse: separate; border-spacing: 0; margin: 1.8rem 0; } | |
| .video-grid td { width: 50%; padding: 0 1rem 1.5rem 0; border: 0; vertical-align: top; } | |
| .video-grid td:nth-child(2) { padding-right: 0; padding-left: .5rem; } | |
| .video-grid p { margin: .65rem 0 0; color: var(--muted); font-size: .8rem; line-height: 1.6; } | |
| .video-grid video { aspect-ratio: 1920 / 1088; } | |
| .more-examples { margin: 1.8rem 0; padding: 1rem 0; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); } | |
| .more-examples summary { color: var(--accent); cursor: pointer; } | |
| .more-examples > p { font-size: .85rem; } | |
| .studio-demo { margin-top: 1.5rem; } | |
| .studio-demo summary { color: var(--accent); cursor: pointer; } | |
| .studio-demo .film { margin-bottom: 0; } | |
| code { padding: .15em .35em; border-radius: 4px; background: #eef2ed; font-size: .87em; } | |
| pre { overflow-x: auto; padding: 1rem; background: #eef2ed; border-radius: 6px; } | |
| pre code { padding: 0; } | |
| blockquote { margin: 1.5rem 0; padding-left: 1.2rem; border-left: 3px solid var(--accent); color: var(--muted); } | |
| li { margin-bottom: .4rem; } | |
| hr { border: 0; border-top: 1px solid var(--line); margin: 3rem 0; } | |
| table { display: block; overflow-x: auto; border-collapse: collapse; } | |
| th, td { padding: .5rem .8rem; border: 1px solid var(--line); text-align: left; } | |
| @media (max-width: 1000px) { | |
| .layout { grid-template-columns: 1fr; gap: 2rem; max-width: 900px; padding: 2rem 1.5rem; } | |
| nav { position: static; max-height: none; } | |
| nav > .toc > ul { columns: 2; column-gap: 2rem; } | |
| nav li { break-inside: avoid; } | |
| article { padding: 2rem; } | |
| } | |
| @media (max-width: 600px) { | |
| body { font-size: 16px; } | |
| .page-header { padding: 1rem; } | |
| .layout { padding: 1.5rem .75rem; } | |
| nav { padding: 0 .5rem; } | |
| nav > .toc > ul { columns: 1; } | |
| article { padding: 1.4rem; } | |
| .video-grid, .video-grid tbody, .video-grid tr, .video-grid td { display: block; width: 100%; } | |
| .video-grid td, .video-grid td:nth-child(2) { padding: 0 0 1.5rem; } | |
| } | |
| @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } } | |
| @media print { | |
| body { background: white; font-size: 11pt; } | |
| .page-header, nav, .skip-link { display: none; } | |
| .layout { display: block; padding: 0; } | |
| article { max-width: none; padding: 0; border: 0; } | |
| h1, h2, h3 { break-after: avoid; } | |
| img { break-inside: avoid; } | |
| a { color: inherit; } | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <a class="skip-link" href="#article">Skip to article</a> | |
| <header class="page-header"><span>Meridian · Research</span><a href="research.md">Markdown source</a></header> | |
| <div class="layout"> | |
| <nav aria-label="Table of contents"><h2>Contents</h2><div class="toc"> | |
| <ul> | |
| <li><a href="#choose-where-choose-when">Choose where. Choose when.</a></li> | |
| <li><a href="#method">Method</a></li> | |
| <li><a href="#why-this-matters">Why this matters</a></li> | |
| <li><a href="#try-meridian">Try Meridian</a></li> | |
| </ul> | |
| </div> | |
| </nav> | |
| <main id="article"><article> | |
| <h1 id="meridian-a-new-perspective-on-space-and-time">Meridian: A new perspective on space and time</h1> | |
| <p><strong>One event. Anywhere. Anytime.</strong></p> | |
| <p>By <strong>Viggle AI</strong></p> | |
| <p><em>14 September 2026.</em></p> | |
| <div class="film hero-film"> | |
| <video id="teaser-film" controls playsinline preload="none" width="100%" poster="../videos-all/longtake_showcase/teaser_v7/intro_059.jpg" src="../videos-all/teaser_meridian_showcase_v7.mp4" aria-label="Meridian teaser: a new perspective on space and time"> | |
| <a href="../videos-all/teaser_meridian_showcase_v7.mp4">Watch the Meridian teaser</a>. | |
| </video> | |
| <p class="film-caption">48-second teaser</p> | |
| </div> | |
| <p><strong>Meridian is a geometry-guided video model for authoring new observations of existing events.</strong> | |
| Given a video, choose a new camera path and the source moments to observe. Follow the action from | |
| another angle, linger on a gesture, or hold an instant while the camera keeps moving.</p> | |
| <h2 id="choose-where-choose-when">Choose where. Choose when.</h2> | |
| <ul> | |
| <li><strong>Where:</strong> design the camera's position, viewing direction, and lens over a shot.</li> | |
| <li><strong>When:</strong> let the action advance, hold a source moment, or change its pace by retiming the input.</li> | |
| </ul> | |
| <p><strong>Bullet time is one possibility, not the whole idea.</strong> Camera motion and source time can be | |
| composed into different ways of watching the same event. A single image can also be the starting | |
| point for a moving view.</p> | |
| <p>The compound-camera example shows its source and requested path. The ballet examples use still images.</p> | |
| <table class="video-grid"> | |
| <tr> | |
| <td width="50%" valign="top"> | |
| <video id="nba-film" controls playsinline preload="none" width="100%" poster="../videos-all/research_examples_v1/nba.jpg" src="../videos-all/research_examples_v1/nba.mp4" aria-label="NBA edit combining labeled source footage and generated views of held moments"> | |
| <a href="../videos-all/research_examples_v1/nba.mp4">Watch the example</a>. | |
| </video> | |
| <p><strong>A dunk.</strong> Source action, revisited from new angles. An edited sequence; dunk completion is source footage.</p> | |
| </td> | |
| <td width="50%" valign="top"> | |
| <video id="berry-film" controls playsinline preload="none" width="100%" poster="../videos-all/research_examples_v1/berry.jpg" src="../videos-all/research_examples_v1/berry.mp4" aria-label="Strawberries: source time advances, holds while the camera moves, then resumes"> | |
| <a href="../videos-all/research_examples_v1/berry.mp4">Watch the example</a>. | |
| </video> | |
| <p><strong>Play. Hold. Resume.</strong> Linger on the splash, then let it continue.</p> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td width="50%" valign="top"> | |
| <video id="moto-film" controls playsinline preload="none" width="100%" poster="../videos-all/research_examples_v2/motor_compound.jpg" src="../videos-all/teaser_meridian_compound_motor_dust_explained_v1.mp4" aria-label="Motocross: one uncut take with a compound camera path, selected source video, and requested camera diagrams"> | |
| <a href="../videos-all/teaser_meridian_compound_motor_dust_explained_v1.mp4">Watch the example</a>. | |
| </video> | |
| <p><strong>Compose a camera path.</strong> Widen, orbit, slide, approach, retreat—one uncut take.</p> | |
| </td> | |
| <td width="50%" valign="top"> | |
| <video id="ballet-film" controls playsinline preload="none" width="100%" poster="../videos-all/research_examples_v2/ballet_reverse45.jpg" src="../videos-all/meridian_ballet_l150_female_reverse45.mp4" aria-label="Female ballet dancer: generated camera movement from one still image"> | |
| <a href="../videos-all/meridian_ballet_l150_female_reverse45.mp4">Watch the example</a>. | |
| </video> | |
| <p><strong>One image. Another viewpoint.</strong> A camera move from a single ballet image.</p> | |
| </td> | |
| </tr> | |
| </table> | |
| <details class="more-examples"> | |
| <summary>More examples · robots, animation, dance, and sport</summary> | |
| <table class="video-grid"> | |
| <tr> | |
| <td width="50%" valign="top"> | |
| <video id="robot-film" controls playsinline preload="none" width="100%" poster="../videos-all/research_examples_v1/robot.jpg" src="../videos-all/research_examples_v1/robot.mp4" aria-label="Robot folding cloth from a higher generated viewpoint, with aligned input"> | |
| <a href="../videos-all/research_examples_v1/robot.mp4">Watch the example</a>. | |
| </video> | |
| <p><strong>Robot manipulation.</strong> The task continues from a higher viewpoint.</p> | |
| </td> | |
| <td width="50%" valign="top"> | |
| <video id="charge-film" controls playsinline preload="none" width="100%" poster="../videos-all/research_examples_v1/charge.jpg" src="../videos-all/research_examples_v1/charge.mp4" aria-label="Charge animation: play, hold, resume with a moving viewpoint"> | |
| <a href="../videos-all/research_examples_v1/charge.mp4">Watch the example</a>. | |
| </video> | |
| <p><strong>An animated event.</strong> Hold the action; move the camera.</p> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td width="50%" valign="top"> | |
| <video id="ballet_male-film" controls playsinline preload="none" width="100%" poster="../videos-all/research_examples_v1/ballet_male.jpg" src="../videos-all/research_examples_v1/ballet_male.mp4" aria-label="Male ballet dancer: a separate single-image input and generated viewpoint"> | |
| <a href="../videos-all/research_examples_v1/ballet_male.mp4">Watch the example</a>. | |
| </video> | |
| <p><strong>Another ballet photograph.</strong> One image, a moving view.</p> | |
| </td> | |
| <td width="50%" valign="top"> | |
| <video id="gymnast-film" controls playsinline preload="none" width="100%" poster="../videos-all/research_examples_v1/gymnast.jpg" src="../videos-all/research_examples_v1/gymnast.mp4" aria-label="Gymnastics: action continues while the generated camera rises"> | |
| <a href="../videos-all/research_examples_v1/gymnast.mp4">Watch the example</a>. | |
| </video> | |
| <p><strong>A rising view.</strong> The gesture unfolds.</p> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td width="50%" valign="top"> | |
| <video id="powder-film" controls playsinline preload="none" width="100%" poster="../videos-all/research_examples_v1/powder.jpg" src="../videos-all/research_examples_v1/powder.mp4" aria-label="Snow sports: action continues with a moving generated viewpoint"> | |
| <a href="../videos-all/research_examples_v1/powder.mp4">Watch the example</a>. | |
| </video> | |
| <p><strong>Through the powder.</strong> Move with the action.</p> | |
| </td> | |
| </tr> | |
| </table> | |
| </details> | |
| <h2 id="method">Method</h2> | |
| <p><img alt="Input video enters VGGT-Omega; estimated depth and source cameras give colored 3D points. User-specified target cameras reproject those points into a warped video. Both the time-aligned source video and warped video condition Meridian to generate the output video. Video samples are real; 3D points and cameras are schematic." src="assets/research/meridian_illustrated_method.png" /></p> | |
| <p><em>Matched source, warp, and output frames; the 3D points and cameras are schematic.</em></p> | |
| <p>The method is simple: <strong>use geometry to show a video model where to look.</strong></p> | |
| <p><strong>1. Reproject the source.</strong> VGGT-Omega estimates depth and source-camera poses. We build colored | |
| 3D points, select the source moments, and project those points through an authored camera path | |
| into a warped video.</p> | |
| <p><strong>2. Generate the new view.</strong> Meridian, built on MiniMax-H3, takes <strong>the source video and warped | |
| video</strong>, aligned to the same source moments, and generates the new shot. Geometry guides the view; | |
| the video model fills missing regions and refines appearance.</p> | |
| <p><strong>Preview before generation.</strong> Once geometry is available, fast point-cloud rendering makes the | |
| chosen path visible. Check the framing, viewing direction, and uncovered regions—and adjust the | |
| camera before running the video model. This inexpensive preview is a useful consequence of making | |
| camera control explicit.</p> | |
| <h2 id="why-this-matters">Why this matters</h2> | |
| <p>The shift is from generating another scene to <strong>choosing another observation of the same event</strong>. | |
| This is the world-model perspective behind Meridian: connect what we see to where and when we | |
| observe it, grounded in supplied footage rather than unrestricted simulation.</p> | |
| <p>Unseen regions are generated, not recovered. Geometry errors and large moves—including 360° | |
| orbits—can destabilize the view. Time edits revisit supplied frames, and separate takes need not | |
| form a consistent world.</p> | |
| <h2 id="try-meridian">Try Meridian</h2> | |
| <p><a href="../README.md#quickstart">Get started with Meridian</a>.</p> | |
| <p>Meridian uses MiniMax-H3 with precomputed text embeddings, <strong>without loading a text encoder</strong>. | |
| We welcome community work on quantization and CPU offloading toward smaller GPUs, including the | |
| RTX 4090; those configurations are not yet supported or validated by the provided implementation.</p> | |
| <p>The release also includes a <strong>very basic, vibe-coded Studio demo</strong> to illustrate how | |
| to use the model—not a production editor. It supports multi-key camera paths and real-time 3D | |
| preview, not real-time video generation.</p> | |
| <details class="studio-demo"> | |
| <summary>Watch the 38-second Studio walkthrough</summary> | |
| <div class="film"> | |
| <video id="studio-film" controls playsinline preload="none" width="100%" poster="../videos-all/studio_walkthrough/nba3_preview_live_02/studio_walkthrough_concise_poster.jpg" src="../videos-all/studio_walkthrough/nba3_preview_live_02/studio_walkthrough_concise.mp4" aria-label="Early Studio demo: actual authoring and geometric preview, not final generation"> | |
| <a href="../videos-all/studio_walkthrough/nba3_preview_live_02/studio_walkthrough_concise.mp4">Watch the Studio walkthrough</a>. | |
| </video> | |
| <p class="film-caption">Authoring and geometric preview only, with some operations and waits omitted—not a final generated take.</p> | |
| </div> | |
| </details> | |
| <hr /> | |
| <p>Powered by MiniMax H3. See the <a href="../README.md#license">licenses and intended use</a>.</p> | |
| </article></main> | |
| </div> | |
| </body> | |
| </html> | |