# Auto Subtitle Instantly turns your video’s audio into captions perfectly styled with your custom fonts and colors. ## API Information - **Model Slug:** auto-subtitle - **Branded URL:** https://www.eachlabs.ai/eachlabs/eachlabs/auto-subtitle - **Provider:** each::labs - **Category:** Video to Video - **Output Type:** video - **Status:** active - **Version:** 0.0.1 - **Base Cost:** $0.03 per minute (rounded up) of output duration. 30s=1min, 70s=2min - **Estimated Processing Time:** 20 seconds - **Last Updated:** 2026-07-29 - **Interactive Demo:** https://www.eachlabs.ai/ai-models/auto-subtitle ## Pricing - **Charge Type:** dynamic - **Pricing Details:** $0.03 per minute (rounded up) of output duration. 30s=1min, 70s=2min ### Pricing Rules | Condition | Pricing | | --- | --- | | Rule 1 | $0.03 per minute (rounded up) of output duration. 30s=1min, 70s=2min | ## Input Schema | Parameter | Type | Required | Default | Constraints | Description | |-----------|------|----------|---------|-------------|-------------| | video_url | string | Yes | - | - | URL of the video file to add automatic subtitles to | | language | string | No | en | - | Language code for transcription (e.g., 'en', 'es', 'fr', 'de', 'it', 'pt', 'nl', 'ja', 'zh', 'ko') or 3-letter ISO code (e.g., 'eng', 'spa', 'fra') | | font_name | string | No | Montserrat | - | Any Google Font name from fonts.google.com (e.g., 'Montserrat', 'Poppins', 'BBH Sans Hegarty') | | font_size | integer | No | 100 | 20–150 | Font size for subtitles (TikTok style uses larger text) | | font_weight | string | No | bold | normal,bold,black | Font weight (TikTok style typically uses bold or black) | | font_color | string | No | white | white,black,red,green,blue,yellow,orange,purple,pink,brown,gray,cyan,magenta | Subtitle text color for non-active words | | highlight_color | string | No | purple | white,black,red,green,blue,yellow,orange,purple,pink,brown,gray,cyan,magenta | Color for the currently speaking word (karaoke-style highlight) | | stroke_width | integer | No | 3 | 0–10 | Text stroke/outline width in pixels (0 for no stroke) | | stroke_color | string | No | black | black,white,red,green,blue,yellow,orange,purple,pink,brown,gray,cyan,magenta | Text stroke/outline color | | background_color | string | No | none | black,white,red,green,blue,yellow,orange,purple,pink,brown,gray,cyan,magenta,none,transparent | Background color behind text ('none' or 'transparent' for no background) | | background_opacity | number | No | 0 | 0–1 | Background opacity (0.0 = fully transparent, 1.0 = fully opaque) | | position | string | No | bottom | top,center,bottom | Vertical position of subtitles | | y_offset | integer | No | 75 | -200–200 | Vertical offset in pixels (positive = move down, negative = move up) | | words_per_subtitle | integer | No | 3 | 1–12 | Maximum number of words per subtitle segment. Use 1 for single-word display, 2-3 for short phrases, or 8-12 for full sentences. | | enable_animation | boolean | No | true | - | Enable animation effects for subtitles (bounce style entrance) | ## Example Request ```bash curl -X POST https://api.eachlabs.ai/v1/prediction/ \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "auto-subtitle", "input": { "video_url": "https://storage.googleapis.com/magicpoint/inputs/auto-subtitle-input.mp4" } }' ``` ## Output Schema Response returned by `GET /v1/prediction/{id}` when the job completes: ```json { "status": "success", "predictionID": "string", "output": "string (URL of generated video)", "metrics": { "predict_time": "number (seconds)" } } ``` ## Polling ```bash curl https://api.eachlabs.ai/v1/prediction/{PREDICTION_ID} \ -H "Authorization: Bearer YOUR_API_KEY" ``` | Status | Meaning | |--------|---------| | `processing` | Still running — poll again | | `success` | Done — read `output` | | `error` | Failed — read `message` / `details` | ## Webhook (alternative to polling) Pass `"webhook_url": "https://your.host/path"` in the create request. Eachlabs POSTs this payload when the job ends: ```json { "exec_id": "prediction-uuid", "status": "succeeded", "output": "https://...", "error": "" } ``` `status` is `"succeeded"` or `"failed"`. `exec_id` equals the `predictionID` from create. Return 2xx within 30 seconds. ## Errors Error body: `{ "status": "error", "message": "...", "details": "..." }` | Code | Meaning | |------|---------| | `400` | Invalid input | | `401` | Missing / invalid `Authorization` bearer token | | `404` | Unknown model or prediction id | | `429` | Rate limit — 100 creates / min, 10 concurrent per key | | `5xx` | Retry with backoff | ## Overview **auto-subtitle — Video-to-Video AI Model** auto-subtitle instantly converts your video's audio into perfectly styled captions, eliminating manual editing for creators and marketers seeking fast, professional subtitles. Developed by Eachlabs as part of the eachlabs family, this **video-to-video AI model** supports custom fonts, colors, and precise timing to match spoken words seamlessly. Ideal for **auto subtitle generator** needs, it processes videos quickly while maintaining high visual quality, making it a go-to for TikTok clips, YouTube shorts, and social media content. ## Usage Notes - API Base URL: `https://api.eachlabs.ai/v1` - Authentication: send `Authorization: Bearer YOUR_API_KEY`. Generate a key from the Eachlabs dashboard at https://www.eachlabs.ai/dashboard/api-keys. - File-typed parameters (`*_url`, `image_url`, `video_url`, `audio_url`, etc.) accept publicly-reachable HTTPS URLs only. Upload your asset first (GCS / S3 / your CDN) and pass the resulting URL. Data-URIs and localhost URLs are rejected. - For structured parameters (arrays / objects) send real JSON values, not stringified payloads. - Monetary values are reported in USD; per-token / per-megapixel rates may be billed in micro-cents internally. - Prefer `webhook_url` over polling for long-running predictions — see the Webhook Callback section.