Atlas Export Plate Handoff π€
Write the export receipt before the export actually happens
- plate
- plate
- export_json
- report
Here's the thing nobody tells you about the Atlas evidence pipeline: it cares as much about what was done to a photograph as about the photograph itself. AtlasExportPlateHandoff is the node that records that an export happened - it appends a typed PlateExport record to a photographed plate's ledger so downstream tools know the plate was handed off, when, and to where. It does not write the file. The name is a small lie and it's a useful one: this is the receipt, not the shipment.
How it works
Atlas treats every real photograph as an episode: an append-only, immutable record of the source plate, the processing attempts against it, and the exports it spawned. This node is a narrow serialization boundary - the source file is explicit that it "does not load images, invoke models, or return observed pixels." You hand it a plate (ATLAS_REAL_PLATE) and an export string, which is JSON describing the export (or a path to a file containing that JSON - the node reads either). It validates the export against the plate's schema, appends it as a typed PlateExport record, and hands you back the updated plate.
The actual file writing belongs to the exporters upstream. The node's job is making sure the record exists, in the right shape, tied to the right plate - so the next tool in the chain can trust the ledger.
The inputs and outputs that matter
Two required inputs, that's it: plate (an ATLAS_REAL_PLATE - open one with AtlasOpenRealPlate, or pull it from the evidence chain) and export (the export record JSON, or a path to it). Both are STRING; the export field is multiline.
Outputs: the updated plate, an export_json (STRING, the canonicalized record that got appended), and a report (STRING) telling you it worked - status export_recorded plus the export's id. Since this is an output node (OUTPUT_NODE = True), it doesn't need to feed anything; it's a terminal "record this" action in the graph.
Installing
Standard mikejamesvfx/atlas-camera install - search "atlas-camera" in ComfyUI Manager or:
cd <ComfyUI>/custom_nodes
git clone https://github.com/mikejamesvfx/atlas-camera.git
Then restart. But read the fine print: this node lives in the evidence-plate lane, which depends on the private atlas-world package - it is not distributed with the public pack. The node registers fine either way; the first time you actually run it you'll get a clear error pointing at pip install -e path/to/atlas-world if it's missing. If you're just exploring Atlas without the private pipeline, this is one of the nodes you can safely ignore - AtlasExportScenePackage and the DCC exporters are the public, self-contained path.
Where people get burned
- "export cannot be recorded" - the
exportJSON isn't a validPlateExportfor this plate. The schema is strict on purpose; malformed records don't get a seat in the ledger. - The node "does nothing" - right. It's a receipt, not a writer. If you expected a file on disk, you're feeding the wrong node; the exporter that produced the handoff writes the file and this one records it.
- Missing
atlas-worlderror at runtime - expected if you never installed the private package. Follow the hint in the error.
Honestly? For most people this node exists so a later tool (or a human auditor) can answer "was this plate actually delivered?" If you're not running an evidence-driven pipeline with locked plans and attempts, you probably won't reach for it - but if you are, it's the glue that keeps the ledger honest.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| plate | ATLAS_REAL_PLATE | β | |
| export | STRING | β |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| plate | ATLAS_REAL_PLATE | β |
| export_json | STRING | β |
| report | STRING | β |