# Carousel Publish

> carousel-publish

- Skill: `kevinbadi/carousel-publish` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add kevinbadi/carousel-publish`
- Raw SKILL.md: https://api.skillmd.com/api/skills/kevinbadi/carousel-publish/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: kevinbadi (https://skillmd.com/u/kevinbadi)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/kevinbadi/carousel-publish

---

# carousel-publish

Publishes {{PERSONA_NAME}} carousel posts to Instagram, TikTok, and Facebook via the Late API.

## How It Works

1. Finds the latest unpublished carousel sidecar in `~/{{PersonaDir}}/carousels/`
2. Uploads each slide image to Late cloud storage via presigned URLs
3. Generates platform-optimized captions via Gemini
4. Publishes as a carousel post (multiple `mediaItems`) via Late API
5. Records in database (`user_posts` + `platform_posts`)

## Usage

```bash
node skills/carousel-publish/scripts/carousel-publish.js [options]

Options:
  --carousel "path/to/carousel.json"      # Specific carousel (default: latest unpublished)
  --platforms "instagram,tiktok"          # Filter platforms (default: instagram,tiktok,facebook)
  --schedule "2026-03-05T09:00:00"       # Schedule post (default: publish now)
  --dry-run                              # Show what would be posted, skip publish
```

## Supported Platforms

| Platform | Carousel Support | Notes |
|----------|-----------------|-------|
| Instagram | Yes | Native carousel (up to 10 slides) |
| TikTok | Yes | Photo mode carousel |
| Facebook | Yes | Multi-image post |

Twitter/X and YouTube do not support carousel posts and are excluded.

## Prerequisites

- `LATE_API_KEY` in `.env`
- `GEMINI_API_KEY` in `.env`
- Carousel must have slide images generated by `carousel-gen`
- Platform accounts connected in Late (see SOCIALS.md)

## Output

- Updates sidecar JSON with `published_at` and `late_post_id`
- Database rows in `user_posts` and `platform_posts`

