Meridian / docs /research.html
yycc's picture
Meridian
9f57754
Raw
History Blame Contribute Delete
16 kB
<!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>