Instagram Carousel Forge
Produce an Instagram carousel image set (1080×1080 PNGs) and caption file from an existing LinkedIn carousel package. Works standalone for re-renders.
Prerequisites
pip install pillow
Playwright is NOT required for Instagram — IG PNGs are copied from the already-rendered LinkedIn carousel slides.
Input
Provide one of:
--package /path/to/NNN-slug— full path to a content title folder. The skill readsLIC-linkedin-carousel/slides/slide-*.pngautomatically.--slides-dir /path/to/slides— direct path to a folder ofslide-*.pngfiles (1080×1080). Required alongside--slugand--date.- Inline (no args) — skill infers the title folder from the current working directory.
Required with --slides-dir or inline:
--slug— the content slug (e.g.ai-agent-budget)--date— the date string MMDDYY (e.g.071326)
Also reads (when available):
LI-linkedin-post/linkedin-post_{slug}_{MMDDYY}.md— source for caption derivationLI-linkedin-post/first-comment_{slug}_{MMDDYY}.md— CTA link reference
Process
- Locate source slides. Find
LIC-linkedin-carousel/slides/slide-*.png. If fewer than 6 exist, stop and report — the LinkedIn carousel is incomplete and must be built first. - Copy and rename. Run
scripts/build_ig_carousel.pywith the source slides path, output directory, slug, and date. The script copies each PNG toIG-instagram-carousel/ig-carousel_{slug}_{MMDDYY}_{NN}.png. - Verify. Confirm every PNG is exactly 1080×1080 and file size > 5 KB. Report any failures.
- Write caption. Read the LinkedIn post file. Derive the IG caption following the rules in
references/ig-format-specs.md. WriteIG-instagram-carousel/ig-caption_{slug}_{MMDDYY}.md. - Archive build script. Write a hardcoded copy of
build_ig_carousel.pywith the slug, date, and paths filled in atIG-instagram-carousel/build_ig_carousel.pyfor future re-runs without CLI args.
Output Structure
IG-instagram-carousel/
ig-carousel_{slug}_{MMDDYY}_01.png
ig-carousel_{slug}_{MMDDYY}_02.png
...
ig-caption_{slug}_{MMDDYY}.md
build_ig_carousel.py
IG Caption Rules (summary — full rules in references/ig-format-specs.md)
- Max 2,200 characters
- Same opening live wire as the LinkedIn post — do not re-angle
- Same CTA family — adapt the copy for IG character limits, preserve the ask
- No link in the caption body — end with "link in bio" or "link in first comment"
- Hashtags: 5–10, placed at the end of the caption. No spaces, lowercase, no branded terms per Module B.
- No exclamation points, no em dashes, no semicolons, no emoji
Re-render use
If the LinkedIn carousel was revised after the initial IG export, run this skill again with --package. It overwrites the IG-instagram-carousel/ folder in-place. Do not rewrite the caption unless the carousel copy changed.
Acceptance
IG-instagram-carousel/exists with one PNG per source slide (minimum 6)- Every PNG is exactly 1080×1080 and > 5 KB (confirmed by script output)
ig-caption_{slug}_{MMDDYY}.mdexists with caption text and hashtags- The opening line of the caption matches the opening live wire of the LinkedIn post
- No PNG is blank (visually verify slide 1 and the final slide)
build_ig_carousel.pyis present for re-render capability