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
Download comfyui/meridian_workflow_geometry.json from Viggle/Meridian: direct link, hf CLI and curl.
- Browser
- Download file 5.13 kB
-
https://huggingface.co/Viggle/Meridian/resolve/main/comfyui/meridian_workflow_geometry.json
- Command line
-
hf download hf://Viggle/Meridian/comfyui/meridian_workflow_geometry.json
-
curl -L -o meridian_workflow_geometry.json https://huggingface.co/Viggle/Meridian/resolve/main/comfyui/meridian_workflow_geometry.json
5.13 kB
| { | |
| "unet": { | |
| "class_type": "UNETLoader", | |
| "_meta": { | |
| "title": "stock MiniMax-H3 fl2va" | |
| }, | |
| "inputs": { | |
| "unet_name": "minimax_h3_fl2va_bf16.safetensors", | |
| "weight_dtype": "default" | |
| } | |
| }, | |
| "teach": { | |
| "class_type": "LoraLoaderModelOnly", | |
| "_meta": { | |
| "title": "Meridian teacher (re-camera)" | |
| }, | |
| "inputs": { | |
| "model": [ | |
| "unet", | |
| 0 | |
| ], | |
| "lora_name": "meridian_teacher_lora.safetensors", | |
| "strength_model": 1.0 | |
| } | |
| }, | |
| "turbo": { | |
| "class_type": "LoraLoaderModelOnly", | |
| "_meta": { | |
| "title": "Meridian turbo (3-forward DMD)" | |
| }, | |
| "inputs": { | |
| "model": [ | |
| "teach", | |
| 0 | |
| ], | |
| "lora_name": "meridian_turbo_lora.safetensors", | |
| "strength_model": 1.0 | |
| } | |
| }, | |
| "shift": { | |
| "class_type": "MiniMaxH3SigmaShift", | |
| "_meta": { | |
| "title": "shift 3 (student); 12 for teacher alone" | |
| }, | |
| "inputs": { | |
| "model": [ | |
| "turbo", | |
| 0 | |
| ], | |
| "shift_video": 3.0, | |
| "shift_audio": 3.0 | |
| } | |
| }, | |
| "clip": { | |
| "class_type": "CLIPLoader", | |
| "inputs": { | |
| "clip_name": "qwen3vl_32b_minimax_h3_bf16.safetensors", | |
| "type": "minimax" | |
| } | |
| }, | |
| "vae": { | |
| "class_type": "VAELoader", | |
| "inputs": { | |
| "vae_name": "minimax_h3_video_vae_fp16.safetensors" | |
| } | |
| }, | |
| "avae": { | |
| "class_type": "VAELoader", | |
| "inputs": { | |
| "vae_name": "minimax_h3_audio_vae_fp32.safetensors" | |
| } | |
| }, | |
| "ref": { | |
| "class_type": "MiniMaxH3ReferenceToVideo", | |
| "_meta": { | |
| "title": "refs at the 480 class, target at the 768 class" | |
| }, | |
| "inputs": { | |
| "clip": [ | |
| "clip", | |
| 0 | |
| ], | |
| "vae": [ | |
| "vae", | |
| 0 | |
| ], | |
| "audio_vae": [ | |
| "avae", | |
| 0 | |
| ], | |
| "prompt": "subject_definitions:\n<Video 1> is the source video for the editing task.\n<Video 2> is a rough render of the same scene from the new camera: the pixels of <Video 1> re-projected through a point cloud, so wherever it shows content its colours, framing and layout are correct, and its flat mid-grey areas are holes where the source camera saw nothing.\n\nsummary:\n[video editing + viewpoint change] The target video shows exactly the same scene as <Video 1>, at exactly the same moments in time, filmed by the second camera that <Video 2> was rendered from. Every subject, every piece of clothing, the background, the lighting and the whole performance are the ones in <Video 1>; only the camera differs, so the same things are seen from a different angle and at a different distance. The target video is <Video 2> completed: its framing and everything it shows are kept, and its grey holes are filled with what belongs there.\n\nretention_analysis:\n<Video 1> (source video editing): fully_preserved - the subjects, their faces, hair, build and clothing, the background, the props and the lighting are the same objects seen from a new viewpoint, and the motion and its timing are frame for frame the motion of <Video 1>. Nothing is added, removed or restyled.\n<Video 2> (layout reference): fully_preserved - the camera path, the framing and the placement of everything it shows are kept exactly; its grey holes are not content and are filled in so that they agree with <Video 1>, and its speckles and jagged edges are cleaned up.\n\ndetailed_description:\n[Shot 1] One continuous shot of the scene of <Video 1>, framed exactly as <Video 2> is, frame for frame. The subjects perform the motion of <Video 1> with the same timing, in the same place, under the same lighting. The camera moves exactly as the camera of <Video 2> does, and there is no cut.\n\noverall_soundscape:\nNo music and no speech.", | |
| "width": [ | |
| "geo", | |
| 2 | |
| ], | |
| "height": [ | |
| "geo", | |
| 3 | |
| ], | |
| "length": [ | |
| "geo", | |
| 4 | |
| ], | |
| "ref_image_size": "match", | |
| "ref_videos.ref_video_0": [ | |
| "geo", | |
| 0 | |
| ], | |
| "ref_videos.ref_video_1": [ | |
| "geo", | |
| 1 | |
| ] | |
| } | |
| }, | |
| "froz": { | |
| "class_type": "MeridianFrozenPrompt", | |
| "_meta": { | |
| "title": "swap in the frozen prompt embed" | |
| }, | |
| "inputs": { | |
| "conditioning": [ | |
| "ref", | |
| 0 | |
| ], | |
| "latent": [ | |
| "ref", | |
| 1 | |
| ], | |
| "assets_dir": "/path/to/release_recam/assets" | |
| } | |
| }, | |
| "ks": { | |
| "class_type": "KSampler", | |
| "_meta": { | |
| "title": "3 forwards on sigma 1.0 / 0.857 / 0.600" | |
| }, | |
| "inputs": { | |
| "model": [ | |
| "shift", | |
| 0 | |
| ], | |
| "positive": [ | |
| "froz", | |
| 0 | |
| ], | |
| "negative": [ | |
| "froz", | |
| 0 | |
| ], | |
| "latent_image": [ | |
| "ref", | |
| 1 | |
| ], | |
| "seed": 1234, | |
| "steps": 3, | |
| "cfg": 1.0, | |
| "sampler_name": "euler", | |
| "scheduler": "simple", | |
| "denoise": 1.0 | |
| } | |
| }, | |
| "dec": { | |
| "class_type": "VAEDecode", | |
| "inputs": { | |
| "samples": [ | |
| "ks", | |
| 0 | |
| ], | |
| "vae": [ | |
| "vae", | |
| 0 | |
| ] | |
| } | |
| }, | |
| "mk": { | |
| "class_type": "CreateVideo", | |
| "inputs": { | |
| "images": [ | |
| "dec", | |
| 0 | |
| ], | |
| "fps": 24.0 | |
| } | |
| }, | |
| "save": { | |
| "class_type": "SaveVideo", | |
| "inputs": { | |
| "video": [ | |
| "mk", | |
| 0 | |
| ], | |
| "filename_prefix": "meridian/out", | |
| "format": "mp4", | |
| "codec": "h264" | |
| } | |
| }, | |
| "geo": { | |
| "class_type": "MeridianGeometry", | |
| "_meta": { | |
| "title": "VGGT-Omega unproject + re-render" | |
| }, | |
| "inputs": { | |
| "video": "/path/to/clip.mp4", | |
| "args": "--pivot 0.5,0.55 --boom 0.35 --ease --sweep", | |
| "repo": "/path/to/release_recam", | |
| "python": "python" | |
| } | |
| } | |
| } |