Publish Asset Manifest
Turn a batch of images into a ready-to-ship asset manifest
- images
- manifest_json
- manifest_csv
- manifest_md
- summary_json
- asset_count
You've generated a batch of assets - a product drop, a release, a set of promo variants - and now you need to actually deliver them, which means filenames, alt text, titles, tags, and a record of what's what. MKRPublishAssetManifest turns a batch of images into that record: feed it an IMAGE batch, get back a full manifest in JSON, CSV, and Markdown, with per-asset filenames, titles, alt text, and tags generated for you.
What it's for
It sits at the "ship it" end of a publish pipeline. The images are still yours to save - this node produces the metadata that describes them, consistently, so you're not hand-writing 24 alt texts after a batch generation. It's the delivery manifest half of the pack's Publish area, and it pairs naturally with a save node and the copy deck below it.
How it works
For each frame in the batch, it builds a manifest row: a computed filename from asset_prefix + channel + index, a title from titles_csv if you gave it one (otherwise a title_prefix-based default), alt text rendered from alt_template (default {project} {display_index:02d} | {title} | {ratio}), and tags from tags_csv. shot_labels_csv lets you give each frame its own label. The whole thing comes out in three formats: manifest_json, manifest_csv (spreadsheet-friendly), and manifest_md (for a README or shareable sheet).
Inputs that matter
images- the batch. Its width/height feed the{ratio}in alt text.project,asset_prefix,channel- the naming pieces that become filenames.start_index- where numbering begins (default 1).title_prefix,titles_csv,shot_labels_csv,tags_csv,notes- content.alt_template- the Python-format string that builds alt text. Default is a solid starting point.
Outputs: manifest_json, manifest_csv, manifest_md, summary_json, and asset_count (an INT, useful as a downstream sanity check).
Installing it
Pack install as usual:
cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes
restart ComfyUI, or Manager → MKRShift_Nodes. Pure string/JSON work - no ffmpeg, no extra deps.
Common issues
Two things to keep straight. First, it's metadata only: no files get written, so pair it with a save node or your assets exist only in a manifest. Second, alt_template uses Python format placeholders - if you put raw {title} into a CSV field expecting a literal brace, it'll be interpolated, and unknown placeholders can raise. And the manifest describes what would be delivered - if you change extension to jpg while the save node writes PNGs, the manifest and reality diverge. Keep them in sync.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| project | STRING | MKRShift | — |
| asset_prefix | STRING | asset | — |
| channel | STRING | main | — |
| extension | STRING | png | — |
| start_index | INT | 10–99999 | — |
| title_prefix | STRING | Release | — |
| tags_csv | STRING | — | |
| notes | STRING | — | |
| alt_template | STRING | {project} {display_index:02d} | {title} | {ratio} | — |
| titles_csvopt | STRING | — | |
| shot_labels_csvopt | STRING | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| manifest_json | STRING | — |
| manifest_csv | STRING | — |
| manifest_md | STRING | — |
| summary_json | STRING | — |
| asset_count | INT | — |