Buckets:
Cosmos-Transfer2.5-2B input bundle
186 frames, 1280x720, 16 FPS = 11.625 s. 186 = 2 x 93, the frame multiple the model card reports as best.
What to feed the model
| File | Role |
|---|---|
prompt.txt |
text prompt (151 words; the card requires < 300) |
input_video.mp4 |
the video being transferred: real background plate + CG robot/brick |
depth.mp4 |
depth control -- relative inverse depth, 8-bit, near = bright |
fg_mask.mp4 |
binary robot+brick mask, for a control's mask_path |
seg.mp4 |
segmentation control (stable palette, see export_meta.json) |
edge.mp4 |
Canny edge control |
vis.mp4 |
a pre-blurred copy -- normally unused, see below |
first_frame.png |
real photograph of this scene at the trajectory's t=0 |
spec_*.json |
ready-to-run parameter files (paths relative to the spec) |
Run it
python examples/inference.py -i <this dir>/spec_depth_vis.json -o outputs/run1
# multi-GPU:
torchrun --nproc_per_node=4 examples/inference.py -i ... -o ...
| Spec | What it does |
|---|---|
spec_depth_vis.json |
start here. depth 0.9 + vis 0.4 |
spec_depth_masked_vis.json |
same, but depth applies only to the robot/brick |
spec_depth_only.json |
depth alone at 1.0, matching the shipped example |
spec_multicontrol.json |
all four branches |
Why vis has no control_path
The repo computes the blur itself from video_path when you give vis a
preset_blur_strength instead of a control video -- and that preset is, by
construction, the blur the branch was trained on. vis.mp4 here was made with a
hand-picked Gaussian sigma (18 px), which is a guess at that
distribution. The specs therefore use the preset. vis.mp4 is kept only so you can
A/B it.
Do not raise the vis weight much: it is the strongest appearance control, and
pushing it up makes the output a de-blurred CG render rather than a photorealistic
video. depth is where our real information is.
On masks
mask_path in this repo is binary -- white means "use this control here", black
means "don't". It is not a per-pixel weight map; per-control strength is the scalar
control_weight. spec_depth_masked_vis.json uses fg_mask.mp4 to confine depth to
the robot and brick, which is worth trying because foreground depth is exact mesh
z-buffer at full resolution while background depth is upsampled from a 320x180
capture and partly interpolated.
Two things that are easy to get wrong
Depth is not metric here. It is relative inverse depth, matching what
DepthAnything (Cosmos's own extractor) produces, normalised once for the whole clip
over 0.231 .. 1.688 m. Per-frame
normalisation makes the control flicker and the model turns that into brightness
pumping. The metric 16-bit millimetre PNGs remain in outputs/conditioning_cosmos_720p
and are the source of truth; regenerate from those, never from depth.mp4.
The background is a real photograph. The capture camera is static to machine
precision, so a per-pixel temporal median over the real episode footage removes the
moving arm and leaves background_plate.png, pixel-aligned with the render by
construction. Only the robot and the brick are CG. This is why edge.mp4 is usable at
all -- the background carries real texture edges rather than point-cloud speckle.
Spec schema
Taken from the repo's own shipped examples
(assets/robot_example/*/*_spec.json), not guessed: name, prompt_path,
video_path, guidance, and per-control {control_path, control_weight, mask_path}.
Paths are relative to the spec file.
Known limitations inherited from the render
- no_dynamics: Kinematic replay only: no mass, friction, or inertia is modelled. A grasp is a rigid attachment of the object to the gripper frame, not a contact/force simulation. Commanded speed changes only the timing of the motion, never its path.
- single_viewpoint_capture: Applies to the DEPTH channel only in this bundle. Background depth is still a single-viewpoint 2.5D capture, so surfaces the camera never saw have no points and any view far from the capture pose exposes real holes. Background appearance no longer has this limitation: rgb/vis/edge take their background from a real photograph (temporal median of the episode), not from the cloud.
- no_collision_checking: No collision checking was performed between the robot, the manipulated object(s), or the static scene, at any stage of producing this trajectory or this render.
- no_settling_at_release: SUPERSEDED for this bundle: the released object WAS settled under gravity (MuJoCo 3.11.0). Its tilt at release was 37.26 deg and 0.09 deg after settling, reached in 0.389 s of simulated time. Mass is not load-bearing: a rigid body's fall-and-settle trajectory is mass-independent, which was verified by re-running at 10x mass. Everything else in no_dynamics still holds -- the transport motion itself is kinematic.
- background depth resolution: Background depth is unprojected from a single ~320x180 capture, so it is smooth/blocky relative to the 1280x720 output. Robot and object depth comes from the mesh renderer at full output resolution and is sharp. Holes were filled by nearest valid pixel; mean 18.00%, max 20.68% of pixels per frame.
Xet Storage Details
- Size:
- 5.3 kB
- Xet hash:
- 8018e51351a41632bde5fdcc6fd964dccd0e84cd5d5421b2c1239691f830e4f2
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.