Publish Copy Deck
Generate a deck of caption variants without an LLM
- deck_json
- deck_md
- first_caption
- summary_json
- variant_count
A "copy deck" is just the marketing word for "a bunch of ready-to-post caption variants for the same asset." MKRPublishCopyDeck is the node that builds one from your ingredients - headline, subhead, body, call to action, hashtags, hook lines - and hands back a full deck in JSON and Markdown. It does this with zero AI and zero API calls: it's a deterministic template engine. That's the honest feature, not a limitation - it's fast, predictable, and never hallucinates a hashtag.
What it's for
You've generated a release batch, you have the facts (what it is, what it does, the tagline), and you need to post it across channels without writing the same caption five times by hand. Feed the pieces in once, get variant_count captions back. The deck's deck_json output is designed to feed MKRPublishCopyAtIndex, which pulls one specific variant out when you're assigning captions to individual assets.
How it works
hook_lines become per-variant opening lines (if you leave them blank, the headline is used as the single hook). Each hook gets combined with the body, CTA, and hashtags into a caption variant. The tone dropdown - Neutral, Clean, Bold, Warm - adds a small deterministic prefix per variant (like "Clean cut:") rather than rewriting anything. hashtags_csv gets normalized into #slug form. platform_hint just names the intended channel in the output; it doesn't tailor content per platform beyond that.
Inputs and outputs
Inputs: headline, subhead, body, cta, hashtags_csv, hook_lines, tone, platform_hint. Outputs: deck_json, deck_md (readable text version), first_caption (grab the first one fast), summary_json, and variant_count (an INT - how many captions you got).
Installing it
Pack install as always:
cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes
restart ComfyUI, or Manager → MKRShift_Nodes. No dependencies beyond what ComfyUI ships.
Common issues
Set expectations correctly: because it's a template engine, the variants are reshuffles and prefix tweaks, not fresh prose. If you're expecting it to write captions from a prompt, you'll be disappointed - bring your own words. Also, variant_count is driven by how many hook_lines you supply; one hook gives you a small deck, which is fine, just know that's the lever. And keep hashtags comma-separated clean text - stray formatting turns into odd slugs.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| headline | STRING | New release | — |
| subhead | STRING | — | |
| body | STRING | — | |
| cta | STRING | — | |
| hashtags_csv | STRING | — | |
| hook_lines | STRING | — | |
| tone | COMBO | Clean | 4 options: Neutral, Clean, Bold, Warm |
| platform_hint | STRING | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| deck_json | STRING | — |
| deck_md | STRING | — |
| first_caption | STRING | — |
| summary_json | STRING | — |
| variant_count | INT | — |