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
File size: 16,008 Bytes
9f57754 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 | <!doctype html>
<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>
|