--- name: "venice-video-retrieve" description: "Retrieve a queued video from Venice.ai by queue_id. Polls until complete then downloads." version: "1.0.0" author: "Agent JAE" tags: ["venice", "video", "ai", "generation", "download"] trigger_patterns: - "retrieve video" - "download video" - "get video" - "venice video retrieve" --- # Venice Video Retrieve Retrieve and download queued videos from Venice.ai. Automatically polls until generation is complete. ## Requirements - `VENICE_API_KEY` environment variable - A `queue_id` from `venice-video-queue` ## CLI Usage ```bash python ~/.jae/agent/skills/venice-video-retrieve/scripts/retrieve_video.py MODEL QUEUE_ID [options] ``` ### Arguments | Argument | Required | Description | |----------|----------|-------------| | `MODEL` | Yes | Model that was used for generation | | `QUEUE_ID` | Yes | Queue ID returned from queue_video | ### Options | Option | Short | Default | Description | |--------|-------|---------|-------------| | `--output` | `-o` | Auto-generated | Output path for the video file | | `--interval` | `-i` | `5` | Polling interval in seconds | | `--max-wait` | `-w` | `600` | Maximum wait time in seconds | | `--delete-after` | | False | Delete from Venice servers after download | | `--quiet` | `-q` | False | Suppress progress output | | `--json` | | False | Output result as JSON | ## Examples ### Basic Retrieval ```bash python ~/.jae/agent/skills/venice-video-retrieve/scripts/retrieve_video.py \ wan-2.5-preview-text-to-video \ abc123-def456-queue-id ``` ### Save to Specific Path ```bash python ~/.jae/agent/skills/venice-video-retrieve/scripts/retrieve_video.py \ wan-2.5-preview-text-to-video \ abc123-def456-queue-id \ --output /path/to/my_video.mp4 ``` ### Custom Polling Settings ```bash python ~/.jae/agent/skills/venice-video-retrieve/scripts/retrieve_video.py \ wan-2.5-preview-text-to-video \ abc123-def456-queue-id \ --interval 10 \ --max-wait 900 ``` ### Quiet Mode with JSON Output ```bash python ~/.jae/agent/skills/venice-video-retrieve/scripts/retrieve_video.py \ wan-2.5-preview-text-to-video \ abc123-def456-queue-id \ --quiet --json # Output: {"status": "completed", "path": "/root/venice_videos/video_1234567890.mp4"} ``` ## Output Progress output during polling: ``` 🎬 Retrieving video... Model: wan-2.5-preview-text-to-video Queue ID: abc123-def456-... [5s] Status: pending | Progress: 10% ETA 45s [10s] Status: pending | Progress: 25% ETA 35s [15s] Status: pending | Progress: 50% ETA 20s [20s] Status: pending | Progress: 75% ETA 10s [25s] Status: completed | Progress: 100% ✅ Video ready! 💾 Saved to: /root/venice_videos/video_1234567890.mp4 ✅ Video saved to: /root/venice_videos/video_1234567890.mp4 ``` ## Default Output Location If no `--output` is specified, videos are saved to: ``` /root/venice_videos/video_.mp4 ``` ## Error Handling | Exit Code | Meaning | |-----------|----------| | `0` | Success | | `1` | General error (API, network, etc.) | | `2` | Timeout - generation took too long | ## Programmatic Usage ```python from retrieve_video import retrieve_and_save, poll_until_complete # Full workflow: poll and save path = retrieve_and_save( model="wan-2.5-preview-text-to-video", queue_id="abc123-def456", output_path="/path/to/video.mp4", poll_interval=5, max_wait=600 ) print(f"Saved to: {path}") # Just poll (without saving) result = poll_until_complete( model="wan-2.5-preview-text-to-video", queue_id="abc123-def456" ) print(f"Status: {result.status}") # Access result.video_data or result.video_url ``` ## Complete Workflow Example ```bash # Step 1: Queue a video python ~/.jae/agent/skills/venice-video-queue/scripts/queue_video.py "A cat playing piano" --json # Output: {"model": "wan-2.5-preview-text-to-video", "queue_id": "abc123..."} # Step 2: Retrieve the video python ~/.jae/agent/skills/venice-video-retrieve/scripts/retrieve_video.py \ wan-2.5-preview-text-to-video \ abc123... \ --output /root/cat_piano.mp4 ```