Create Branded Instagram Reel
Use this skill to turn a folder of local video clips into a finished 9:16 H.264 Reel. The workflow is deterministic and uses only supplied/local media; it does not generate or alter the underlying footage.
Inputs and defaults
- Accept a folder path. Scan it recursively for supported video files, sorted by path.
- Use one short, centered segment from each source video. Include every discovered clip by default; use
--max-clips only when the folder is too large for the intended Reel.
- Render at 1080 × 1920, 30 fps, H.264, yuv420p, with a default segment length of 2.75 seconds.
- Start with a 1.5-second branded slate and finish with a 3-second branded end card.
- Use the bundled
assets/brand-panel-base.png as the default end-card artwork. It is an exact supplied Coldwell Banker Schmidt / 906 Real Estate Group panel and includes the associated agent contact block. Pass --brand-panel for a replacement or --no-brand-panel for a text-only end card; never invent a different agent name, phone number, logo, or contact detail.
- Use supplied
--headline, --subheadline, and --cta text exactly. Do not infer an address, price, listing status, claim, or other property fact from filenames or video frames.
- Do not carry source audio automatically because a folder may mix incompatible tracks. Without
--music, render the Reel silently; with --music, use only the supplied file.
Workflow
- Resolve the actual input folder and inspect its contents. Do not include prior Reel outputs, covers, manifests, hidden files, or unsupported media.
- Read
references/render-spec.md when changing defaults, branding, crop behavior, or output requirements.
- Run
scripts/render_reel.py with absolute paths. Keep source media unchanged. Use --force only when the requested output may be replaced.
- Inspect the generated cover image with
view_image. If the cover is a poor representation, rerun with a different --cover-time or adjust the supplied source folder/order; do not edit the underlying footage.
- Verify the output with the script's manifest and an independent
ffprobe/frame check. Confirm the video is vertical, has the expected dimensions and frame rate, contains the branded slate/bug/end card, and has no accidental text overflow.
- Deliver the
.mp4, cover .jpg, and manifest .json. Mention whether music was supplied and whether the default branded panel or a replacement was used.
Renderer
python3 "${CODEX_HOME:-$HOME/.codex}/skills/create-branded-instagram-reel/scripts/render_reel.py" \
"/absolute/path/to/video-folder" \
--headline "YOUR EXACT HEADLINE" \
--subheadline "Optional exact subheadline" \
--cta "YOUR EXACT CALL TO ACTION" \
--output "/absolute/path/to/output/reel.mp4" \
--music "/absolute/path/to/music.mp3"
The command also writes reel-cover.jpg and reel-manifest.json beside the requested output unless alternate paths are supplied. If the user requests a simple branded montage, omit the optional text and music flags. If the user supplies a different logo/end-card image, pass it with --brand-panel rather than recreating or approximating it.
Quality and safety rules
- Preserve the original source files and never overwrite them.
- Do not use generative image/video tools, virtual staging, synthetic property imagery, or invented listing facts.
- Center-crop landscape or square footage to fill 1080 × 1920 without stretching or letterboxing. Verify that important subjects remain visible in the selected central region; if not, choose a better source or ask for a crop/focal-point decision.
- Keep branding inside the upper and lower safe areas. The persistent bug must remain legible over footage, and the end card must hold long enough to read.
- Use only supplied music. Normalize it to a conservative social-video level and loop/truncate it to the rendered duration. Do not download music or claim a license.
- If FFmpeg, FFprobe, or Pillow is unavailable, report the missing dependency and stop before creating a partial deliverable.
Output verification
Run the following after rendering:
ffprobe -v error -show_entries stream=codec_type,width,height,r_frame_rate,codec_name:format=duration \
-of json "/absolute/path/to/output/reel.mp4"
Require a video stream with width 1080, height 1920, H.264 codec, and a playable duration. Inspect at least the cover, an interior frame, and the final frame. Treat any missing brand element, cropped subject, unreadable text, unsupported audio, or stale output as a failed render and fix or rerun it before delivery.
1---2name: create-branded-instagram-reel3description: Create a polished vertical Instagram Reel from a folder of local video files, with Coldwell Banker Schmidt, Realtors and 906 Real Estate Group branding, optional supplied headline/call-to-action/music, an exact branded end card, cover image, and verification manifest. Use when Codex needs to turn one or more .mp4, .mov, .m4v, .webm, .mkv, .avi, .mts, .m2ts, or .3gp clips into a social-media Reel.4---56# Create Branded Instagram Reel78Use this skill to turn a folder of local video clips into a finished 9:16 H.264 Reel. The workflow is deterministic and uses only supplied/local media; it does not generate or alter the underlying footage.910## Inputs and defaults1112- Accept a folder path. Scan it recursively for supported video files, sorted by path.13- Use one short, centered segment from each source video. Include every discovered clip by default; use `--max-clips` only when the folder is too large for the intended Reel.14- Render at 1080 × 1920, 30 fps, H.264, yuv420p, with a default segment length of 2.75 seconds.15- Start with a 1.5-second branded slate and finish with a 3-second branded end card.16- Use the bundled `assets/brand-panel-base.png` as the default end-card artwork. It is an exact supplied Coldwell Banker Schmidt / 906 Real Estate Group panel and includes the associated agent contact block. Pass `--brand-panel` for a replacement or `--no-brand-panel` for a text-only end card; never invent a different agent name, phone number, logo, or contact detail.17- Use supplied `--headline`, `--subheadline`, and `--cta` text exactly. Do not infer an address, price, listing status, claim, or other property fact from filenames or video frames.18- Do not carry source audio automatically because a folder may mix incompatible tracks. Without `--music`, render the Reel silently; with `--music`, use only the supplied file.1920## Workflow21221. Resolve the actual input folder and inspect its contents. Do not include prior Reel outputs, covers, manifests, hidden files, or unsupported media.232. Read `references/render-spec.md` when changing defaults, branding, crop behavior, or output requirements.243. Run `scripts/render_reel.py` with absolute paths. Keep source media unchanged. Use `--force` only when the requested output may be replaced.254. Inspect the generated cover image with `view_image`. If the cover is a poor representation, rerun with a different `--cover-time` or adjust the supplied source folder/order; do not edit the underlying footage.265. Verify the output with the script's manifest and an independent `ffprobe`/frame check. Confirm the video is vertical, has the expected dimensions and frame rate, contains the branded slate/bug/end card, and has no accidental text overflow.276. Deliver the `.mp4`, cover `.jpg`, and manifest `.json`. Mention whether music was supplied and whether the default branded panel or a replacement was used.2829## Renderer3031```bash32python3 "${CODEX_HOME:-$HOME/.codex}/skills/create-branded-instagram-reel/scripts/render_reel.py" \33 "/absolute/path/to/video-folder" \34 --headline "YOUR EXACT HEADLINE" \35 --subheadline "Optional exact subheadline" \36 --cta "YOUR EXACT CALL TO ACTION" \37 --output "/absolute/path/to/output/reel.mp4" \38 --music "/absolute/path/to/music.mp3"39```4041The command also writes `reel-cover.jpg` and `reel-manifest.json` beside the requested output unless alternate paths are supplied. If the user requests a simple branded montage, omit the optional text and music flags. If the user supplies a different logo/end-card image, pass it with `--brand-panel` rather than recreating or approximating it.4243## Quality and safety rules4445- Preserve the original source files and never overwrite them.46- Do not use generative image/video tools, virtual staging, synthetic property imagery, or invented listing facts.47- Center-crop landscape or square footage to fill 1080 × 1920 without stretching or letterboxing. Verify that important subjects remain visible in the selected central region; if not, choose a better source or ask for a crop/focal-point decision.48- Keep branding inside the upper and lower safe areas. The persistent bug must remain legible over footage, and the end card must hold long enough to read.49- Use only supplied music. Normalize it to a conservative social-video level and loop/truncate it to the rendered duration. Do not download music or claim a license.50- If FFmpeg, FFprobe, or Pillow is unavailable, report the missing dependency and stop before creating a partial deliverable.5152## Output verification5354Run the following after rendering:5556```bash57ffprobe -v error -show_entries stream=codec_type,width,height,r_frame_rate,codec_name:format=duration \58 -of json "/absolute/path/to/output/reel.mp4"59```6061Require a video stream with width `1080`, height `1920`, H.264 codec, and a playable duration. Inspect at least the cover, an interior frame, and the final frame. Treat any missing brand element, cropped subject, unreadable text, unsupported audio, or stale output as a failed render and fix or rerun it before delivery.