Nodes/Atlas Camera/Atlas Load Dynamic Plate 🌊
ComfyUI Node

Atlas Load Dynamic Plate 🌊

Drop an animated ocean into a solved still, without baking the camera move

By mikejamesvfxΒ·Created 3 months agoΒ·Updated a day agoΒ· 1
Atlas Load Dynamic Plate 🌊
  • solve
  • solve
  • report
β—„package_dirβ–Ί
β—„priority5.0β–Ί
β—„fps_override0β–Ί

Dynamic Plates are the atlas-camera feature that makes a solved still breathe. You take one photograph, recover the camera, and then one time-varying region of it - ocean, smoke, a river, cloud - becomes an animated projection layer while the rest of the scene stays a measured, static projection. Atlas Load Dynamic Plate is the node that loads that animated package into your solve. It's the 🌊 in the Atlas/advanced folder.

The division of labour is the clever part: Atlas owns the shot (the recovered camera, the geometry, the projection), and a video model only makes the region move. The plate's crop camera stays fixed as the projector, so the camera move you author in the viewport is never baked into the generated footage - the video model doesn't know the camera is moving, and the projection system handles the parallax. That's the thing that separates this from "paste a generated video over an image."

How it works

A dynamic plate is a package - a directory containing a manifest and the sequence - built with the pack's own tooling:

python -m atlas_camera.dynamic

The README's example layout is dynamic/WATER_0001 containing manifest.json. You point package_dir at that directory, the node reads the manifest, appends the sequence as an animated ProjectionSource layer on your solve, and the viewport plays it on the render ticker. Static scene layers occlude the receiver through normal depth testing, so the animated water sits correctly behind the foreground rock that's in front of it.

Inputs and outputs

Required inputs:

  • solve - the ATLAS_SOLVE to receive the dynamic layer.
  • package_dir - path to the package directory (the one with manifest.json).

Optional inputs:

  • priority - layer priority among projection sources, following the pack's "farthest-highest seam" doctrine. Default 5; raise it if the dynamic layer should win overlaps.
  • fps_override - playback fps in the viewport; 0 uses the plate's own frame rate.

Outputs: solve (with the layer appended) and a report.

Installing it

The Atlas/advanced folder is where the pack gates its experimental, legacy and iOS nodes, so if the node doesn't show up in the menu, that's the gate working. Set ATLAS_EXPERIMENTAL=1 before launching ComfyUI and it appears. Nothing about the node itself is heavy - a plain clone covers loading:

cd <ComfyUI>/custom_nodes
git clone https://github.com/mikejamesvfx/atlas-camera.git

(ComfyUI Manager also finds the pack as "atlas-camera".) Building the plate with python -m atlas_camera.dynamic may pull generation deps - the README points at docs/DYNAMIC_PLATES.md for the full chain; LTX generation is optional.

Common issues

The environment-gate gotcha is the most likely thing to trip you up: missing node despite a fresh install usually means ATLAS_EXPERIMENTAL=1 wasn't set when ComfyUI launched. The other practical note is priority - if your dynamic layer is getting painted over by static layers where they overlap, push its priority up. And remember the whole design assumes the sequence was generated against the package's fixed crop camera; if you regenerate the plate with different framing, the projection and the geometry stop agreeing and you'll see it smear on camera moves.

CategoryAtlas/advanced

Inputs (4)

NameTypeDefaultDescription
solveATLAS_SOLVESolve to receive the dynamic plate layer.
package_dirSTRINGDynamic-plate package directory (dynamic/WATER_0001 β€” contains manifest.json).
priorityoptFLOAT5.0-100–100Layer priority among projection sources (farthest-highest seam doctrine).
fps_overrideoptFLOAT00–120Playback fps in the viewport; 0 = the plate's own frame rate.

Outputs (2)

NameTypeDescription
solveATLAS_SOLVEβ€”
reportSTRINGβ€”