---
name: Render IG Live Gallery
slug: render-ig-live-gallery
category: Automation
description: Render IG Live Gallery turns a config and real product stills into an Instagram Live-style gallery video with branded chrome, comment feed, floating hearts, and a logo endcard. Use it for deterministic product-story videos with silent frames that can be muxed with music afterward.
github: "https://github.com/gooseworks-ai/goose-skills/tree/main/skills/ads/capabilities/render-ig-live-gallery"
language: Python
stars: 1146
forks: 200
install: "npx degit https://github.com/gooseworks-ai/goose-skills/tree/main/skills/ads/capabilities/render-ig-live-gallery ~/.claude/skills/render-ig-live-gallery"
installs_to: ~/.claude/skills/render-ig-live-gallery
source_path: skills/ads/capabilities/render-ig-live-gallery/SKILL.md
collection_size: 51
category_size: 1523
collection_url: "https://dirskills.com/collections/gooseworks-ai/goose-skills"
added: 2026-08-12T04:43:25.712Z
last_synced: 2026-08-12T04:43:25.712Z
canonical_url: "https://dirskills.com/skills/render-ig-live-gallery"
---

# Render IG Live Gallery

Render IG Live Gallery turns a config and real product stills into an Instagram Live-style gallery video with branded chrome, comment feed, floating hearts, and a logo endcard. Use it for deterministic product-story videos with silent frames that can be muxed with music afterward.

**Install:**

```bash
npx degit https://github.com/gooseworks-ai/goose-skills/tree/main/skills/ads/capabilities/render-ig-live-gallery ~/.claude/skills/render-ig-live-gallery
```

## README

# render-ig-live-gallery

Render the **ig-live-gallery** format from a config. Each of the brand's REAL hero product
stills is presented as the "live video" inside an authentic Instagram-Live card — dark
gradient scrims top & bottom over the bright product, an IG gradient-ring avatar + username +
verified check + red LIVE badge + viewer count + close X across the top, a short live-comment
feed + an EMPTY "Add a comment…" bar + heart/share icons across the bottom, and pink/red
reaction hearts floating up the right edge. A benefit sentence builds one short phrase per
slide as the top overlay, and it closes on a clean brand logo card with the payoff line + CTA.

Deterministic and FREE — no generative image/video, no AI-rendered text. The paid music bed is
a separate capability (`create-music-elevenlabs`) muxed on afterward.

## Run

```bash
python3 scripts/build.py --config config.json --assets <stills-dir> --out master-silent.mp4
# quick check — one frame per slide:
python3 scripts/build.py --config config.json --assets <stills-dir> --stills <dir>
```

`config.example.json` is a full worked config (Glossier). Config shape:

- `username`, `verified`, `palette`, `slide_dur`, `endcard_dur`, `crossfade`
- `slides[]` — `{ image, phrase, viewers, comments: [[handle, text], …] }` per product
- `endcard` — `{ logo, logo_is_white, payoff, handle, cta }`
- `music` — `{ prompt, length_ms, trim_intro_sec }` (consumed by `create-music-elevenlabs`)

Image paths in the config resolve against `--assets`.

## Craft rules (baked into the renderer)

- **Center each product on its TOP-HALF silhouette**, never the full non-white bbox — the base
  drop-shadow otherwise inflates the box and the product reads shifted sideways. The renderer
  measures the top 50% of the silhouette with an `L<246` threshold (catches white-product edge
  shading too) and centers that midpoint.
- **Reaction hearts float up the right edge as a full column** and may overlap the centered
  product — that's fine; don't shrink them to a thin edge ribbon.
- **Comments must be claim-free brand-descriptor vibe** (2-3 words, generic handles, NO emoji —
  PIL can't render color emoji); the comment INPUT bar stays empty. LIVE badge + viewer count +
  hearts are ambient live-stream chrome, not proof claims.
- **Endcard is the clean logo card** (bg + wordmark + @handle + CTA + payoff), never a model face.
- Real product stills + real wordmark only. Music bed only, no VO.

## Output

A silent `WxH` (default 1080x1920) H.264 master. Generate + mux the `create-music-elevenlabs`
bed with a short fade in/out + loudnorm (`-map 0:v:0 -map 1:a:0`), then QC with `watch`.
