Complete AI Training

Skill · Video

Sora

Generates, remixes, polls, lists, downloads, and deletes Sora video clips through OpenAI's API using a bundled CLI. Use when the user wants to create a Sora video, remix an existing clip, check job status, batch-generate variants, or list and delete videos.

Complete AI SkillsLicense: MITAdded Sep 29, 2026

How to use it

  1. Start your plan and connect your AI once
  2. Ask for the task in your own words, or say it directly:
Use the Sora skill to help me with this.

Without a connection: copy the SKILL.md below into your AI's project instructions.

SKILL.md

Sora Video Generation

Helps users create and manage Sora video clips through OpenAI's API via the bundled CLI at scripts/sora.py. Built for anyone who needs to generate, remix, poll, download, batch, list, or delete Sora videos.

When to use

  • User asks to generate a new Sora video from a prompt.
  • User provides a video ID and wants a change made to it (remix).
  • User wants to check the status of a video job or download its assets.
  • User wants to generate multiple videos or variants at once.
  • User wants to list existing video jobs or delete a video by ID.

Workflows

Create video

Inputs: prompt, model (default sora-2), size (default 1280x720), seconds (default 4).

  1. Collect the prompt, model, size, and duration from the user.
  2. Reformat the prompt into a structured spec using the augmentation template.
  3. Run scripts/sora.py create with the appropriate flags.
  4. For long prompts, use --prompt-file with --no-augment to avoid double-wrapping.
  5. Poll until the job completes.
  6. Download the video, thumbnail, and spritesheet and save them locally.
  7. Remove intermediate files such as prompt.txt after use.

Check: Job reports complete and all three assets (video, thumbnail, spritesheet) are saved locally. Output: Saved video, thumbnail, and spritesheet files, plus the video ID.

Remix video

Inputs: video ID, remix prompt, explicit list of invariants (e.g., same shot, change only X).

  1. Collect the remix prompt from the user.
  2. Explicitly list the invariants to preserve (e.g., same shot, change only X).
  3. Run scripts/sora.py remix with the video ID and prompt.
  4. Poll until the job completes.
  5. Download assets and save them locally.
  6. Remove any temporary files created.

Check: Remix job completes and assets are saved; invariants are reflected in the result. Output: Saved remixed video assets and the new video ID.

Poll status and download

Inputs: video ID.

  1. Run scripts/sora.py status to check completion.
  2. If done, run scripts/sora.py download to fetch the video, thumbnail, and spritesheet.
  3. Save assets locally.
  4. Note that download URLs expire after about 1 hour.
  5. If the user wants a ready asset in one step, use create-and-poll instead.

Check: Status returns done and all assets download successfully before the URL expiry window. Output: Saved video, thumbnail, and spritesheet files.

Batch generation

Inputs: multiple prompts or variants.

  1. Write a temporary JSONL file under tmp/ with one job per line.
  2. Run scripts/sora.py batch with the JSONL file.
  3. Poll each job individually if needed.
  4. Download assets for each completed job.
  5. Delete the JSONL file after completion.

Check: Every job in the batch is polled and its assets downloaded; the JSONL file is removed. Output: Saved assets for each job plus their video IDs.

List and delete videos

Inputs: none for listing; video ID for deletion.

  1. Run scripts/sora.py list to show all video jobs.
  2. If the user wants to delete a video, confirm the deletion first.
  3. Run scripts/sora.py delete with that ID.

Check: List shows current jobs; deletion is confirmed before running and the job is removed afterward. Output: A list of video jobs, or confirmation that the specified video was deleted.

Tools and data

  • Use OPENAI_API_KEY when available; if it is not set, ask the user to set it as an environment variable.

Guardrails

  • Never ask the user to paste their API key in chat; instruct them to set it as an environment variable.
  • Only generate content suitable for audiences under 18; reject copyrighted characters, music, real people, and input images with human faces.
  • Draft all video outputs; do not send or publish anything without user approval.
  • Never modify scripts/sora.py unless explicitly asked by the user.

Getting started

Ask the user for their OpenAI API key and confirm it is set as an environment variable. Then collect their first video request: prompt, model, size, and duration.

Credits

Adapted from work by openai (MIT): https://www.aitmpl.com/component/skills/video/sora