| name |
social-slideshows |
| description |
Create, generate, composite, and review native TikTok Photo Mode and Instagram carousel slideshows with stateless JSON prompts, Meta Muse Image through OpenRouter, and deterministic editable text; use for AI UGC stories, recurring characters, mirror selfies, first-person phone scenes, or editable social decks—not presentation slides or motion-first video. |
Turn one supported audience tension into a coherent swipeable argument. Deliver editable copy, stateless JSON image prompts, plausible camera-roll scenes, deterministic typography, review evidence, and reusable project files rather than disconnected AI posters.
- Character, selfie, or narrator-POV deck: use the stateless generation profile and read [references/iphone-camera-contracts.md](references/iphone-camera-contracts.md).
- Writing or revising overlays: persist `copy-brief.md` and read [references/copy-system.md](references/copy-system.md).
- Finished-scene or sequence review: read [references/quality-bar.md](references/quality-bar.md).
- Source-deck adaptation: read [references/storyboard-prompts.md](references/storyboard-prompts.md); transfer only the abstract beat mechanism, never wording, identity, imagery, or visual trade dress.
- Tjay/Ghostfeed workflow provenance: read [references/source-notes.md](references/source-notes.md).
<image_api>
- Provider: OpenRouter.
- Model:
meta/muse-image (Meta Muse Image).
- Endpoint:
POST https://openrouter.ai/api/v1/images.
- Authentication:
OPENROUTER_API_KEY or --auth-file; never persist a key in the skill, workbook, prompt package, logs, or generated artifacts.
- The bundled
scripts/muse_image.py is the supported client. It accepts local or remote reference images, submits input_references, decodes the returned base64 image, and preserves the response media type.
- Do not route Muse through
/api/v1/chat/completions. Do not add aspect ratio, resolution, quality, count, or output-format fields unless Muse's current per-endpoint capability record explicitly lists them.
</image_api>
1. Choose `from_social`, `from_prompt`, or `from_scratch`. Gather one recognizable moment, one argument, one showable mechanism or proof object, the desired action, claim boundaries, account language, and any real performance signals. Do not begin with bulk “viral ideas.”
2. Scaffold a portable project with `scripts/bootstrap-project.py`. Fill `workbook.json`, `generation-profile.json`, and `copy-brief.md`; remove every `FILL_REQUIRED` marker.
3. Approve one hypothesis before rendering. For commercial work, cite evidence for each consequential customer or product claim and introduce the product before the final CTA.
4. Write the complete beat sheet and copy contract. Give every slide one unique job and viewer question. Slide one opens a concrete tension; slide two confirms it; later slides add consequence, mechanism, proof, objection, or resolution. Treat all untested copy as a candidate.
5. Give each slide an observable scene contract. The copy must work without the image; the image must add situation, proof, consequence, or contrast.
6. Build the prompt package with `scripts/build-prompt-package.py`. With a generation profile, every prompt independently resolves the complete character, frame wardrobe, device, environment, capture finish, camera ownership, body/phone visibility, and anatomy limits. Never substitute `same person`, `same room`, or `as before` for detail.
7. Generate and inspect the anchor first. Use the bundled `scripts/muse_image.py` with Meta Muse through OpenRouter. Later references are explicit controls, not memory: state what each controls and forbid copied crop, pose, or composition. Stop and correct the first failing frame before paying for the rest.
8. Keep image generation text-free. Exact UI, proof screens, disclosures, and slideshow copy are deterministic assets. A slide marked `deterministic_asset` receives an asset contract instead of an image prompt.
9. Composite TikTok Photo Mode copy with `scripts/composite-tiktok-classic.py`; it uses bundled TikTok Sans SemiBold and connected black-on-white Classic stickers. Use `scripts/composite-slideshow.py` for non-TikTok layouts. Keep backgrounds and copy separate.
10. Inspect every background and composite at native resolution and thumbnail size. Reject identity drift, malformed anatomy, long-arm lens stretch, impossible camera ownership or reflections, generated text, poster polish, weak proof, generic hooks, and duplicate beats. A slide-level pass cannot rescue a broken sequence.
11. Return one reviewable base and, when useful, one controlled variant changing only one named mechanism. Stop before publishing unless the user explicitly authorizes it.
<quick_start>
Run from this skill directory; PROJECT_DIR may be any new project path.
PROJECT_DIR=/path/to/new-slideshow
python3 scripts/bootstrap-project.py --out "$PROJECT_DIR"
python3 scripts/build-prompt-package.py \
--workbook "$PROJECT_DIR/workbook.json" \
--out-dir "$PROJECT_DIR/prompts"
ANCHOR_PATH="$(python3 scripts/muse_image.py \
--prompt-file "$PROJECT_DIR/prompts/01-slide-01-image-prompt.txt" \
--out "$PROJECT_DIR/backgrounds/slide-01")"
python3 scripts/muse_image.py \
--prompt-file "$PROJECT_DIR/prompts/02-slide-02-image-prompt.txt" \
--ref "$ANCHOR_PATH" \
--out "$PROJECT_DIR/backgrounds/slide-02"
python3 scripts/composite-tiktok-classic.py \
--workbook "$PROJECT_DIR/workbook.json" \
--background-dir "$PROJECT_DIR/backgrounds" \
--out-dir "$PROJECT_DIR/composites" \
--style "$PROJECT_DIR/assets/tiktok-classic-style.json"
Set OPENROUTER_API_KEY or pass --auth-file to Muse. Its output extension follows the returned media type; inspect the printed path. Pillow is required for compositing.
</quick_start>
- One deck resolves one tension and makes one argument.
- Native texture never excuses broken anatomy, impossible capture geometry, unsupported claims, or unreadable copy.
- Mirror selfies use a real rear-camera-to-mirror optical path. Narrator-owned POV hides the camera phone and camera-holding hand.
- Keep the free forearm near the camera; reject a limb that stretches from the near edge to a far-third object or dominates the frame.
- Never ask an image model to generate final overlay text, exact product UI, or proof that can be rendered deterministically.
- Never predict virality or conversion. Separate creative hypotheses from observed outcomes.
- Preserve provenance, rights, disclosures, model/prompt lineage, costs, rejected attempts, and approval state.
Return the filled workbook, copy brief and claim ledger, generation profile, prompt package, ordered backgrounds, deterministic assets, exact composites, caption, review report with stable reason codes, generation/compositor manifests, costs when available, and approval state. Use `incomplete` when evidence, rights, product references, or approved copy are missing.
“Create a TikTok slideshow that opens on a woman taking a mirror selfie.” Scaffold the project, define the woman and room once in the generation profile, specify each frame independently in the workbook, persist and sharpen the message spine, generate the mirror anchor, reject impossible reflections or elongated arms, condition later frames on the approved anchor, composite TikTok Sans locally, and return the candidate without publishing.