Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generate, edit, and extend videos with xAI's grok-imagine-video model. Use when the user wants to create a video from text, animate a still image, build a reference-driven video (virtual try-on, character consistency), edit an existing video, or extend one. Asynchronous — the script handles polling.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 115% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 76% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 217% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 59% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -12% | 0% |
Calls xAI's video API (grok-imagine-video). Five modes, all in scripts/video.py:
| Mode | When to use | CLI | |------|-------------|-----| | text-to-video | Pure prompt → video | --prompt "..." | | image-to-video | Animate a still image (image becomes the first frame) | --prompt "..." --image PATH_OR_URL | | reference-to-video | Make a video featuring people / clothing / objects from reference images (no first-frame lock) | --prompt "..." --reference-image URL [URL ...] | | edit-video | Modify an existing video while preserving the rest | --prompt "..." --edit-video URL | | extend-video | Continue a video from its last frame | --prompt "..." --extend-video URL |
For full parameters, status flow, and gotchas, see references/api-reference.md. For Python recipes (xai-sdk, manual polling, async batches), see references/examples.md.
XAI_API_KEY exported in the environment.urllib). If the user prefers the official SDK, pip install xai-sdk and use the snippets in references/examples.md.bash# Text-to-video python scripts/video.py \ --prompt "Glowing crystal-powered rocket launching from red Mars dunes, ancient alien ruins lighting up" \ --duration 10 --aspect-ratio 16:9 --resolution 720p \ --output rocket.mp4 # Image-to-video (local file → animated) python scripts/video.py \ --prompt "Camera pushes in slowly. The leaves rustle in a gentle breeze." \ --image ./still.jpg \ --output animated.mp4 # Reference-to-video (virtual try-on / character consistency) python scripts/video.py \ --prompt "The model from <IMAGE_1> walks the runway wearing the shirt from <IMAGE_2>, slow motion, dramatic lighting" \ --reference-image https://.../model.jpg https://.../shirt.jpg \ --duration 10 --aspect-ratio 16:9 --resolution 720p \ --output runway.mp4 # Edit an existing video (preserves duration / aspect / resolution) python scripts/video.py \ --prompt "Give the woman a silver necklace" \ --edit-video https://.../source.mp4 \ --output edited.mp4 # Extend an existing video (duration = length of NEW portion only) python scripts/video.py \ --prompt "The cat notices a butterfly and leaps off the windowsill" \ --extend-video https://.../cat.mp4 --duration 6 \ --output extended.mp4
The script polls until status=done, downloads the resulting MP4 to --output, and prints both the local path and the source URL on stderr.
When the user wants a video, route by which inputs they have:
<IMAGE_1>, <IMAGE_2>, etc.--duration is the length of the extension only; output total = original + extension.Mutually exclusive — don't combine --image with --reference-image, and don't pass --edit-video with --extend-video. The script enforces this.
| Flag | Values | Default | Notes | |------|--------|---------|-------| | --prompt | str | required | Use <IMAGE_1>, <IMAGE_2> markers when referencing images | | --duration | int 1–15 (seconds) | model default | For extend, this is the added length only. Edit mode ignores. | | --aspect-ratio | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3 | 16:9 | Edit mode ignores; image-to-video defaults to image's ratio | | --resolution | 480p, 720p | 480p | Edit mode ignores (caps at 720p) | | --image | path or https:// URL or data: URI | — | Image-to-video. Local files auto-encoded as base64 data URIs. | | --reference-image | one or more URLs / paths | — | Reference-to-video. Local files auto-encoded. | | --edit-video | URL | — | Edit-video mode. Must be an HTTPS URL (xAI-hosted is fine). | | --extend-video | URL | — | Extend-video mode. Source must be 2–15 s. | | --poll-interval | seconds | 5 | How often to check status | | --poll-timeout | seconds | 900 (15 min) | Bail out if not done by then | | --output | path | required | Where to save the downloaded MP4 | | --keep-url | flag | off | Skip the download, only print the xAI-hosted URL |
--keep-url only if you'll fetch within minutes.--duration is the length of the new portion. A 10s source + --duration 5 → 15s output.--image and --reference-image, and don't combine --edit-video and --extend-video.respect_moderation flag; if the model declines the prompt, rewrite rather than retry verbatim.pending → keep polling, done → download, expired → request lifecycle ended (re-submit), failed → permanent failure (rewrite prompt or check inputs).grok-image or gpt-image-2 skills.gpt-image-2 for image masking and consider re-animating.Other measured skills in the registry, with their headline benchmark lift.