Thumbnails
Generate, edit, and analyze YouTube thumbnails, including channel-style composition, faces, and presets.
BETA Generate a YouTube thumbnail from a title and one or more reference thumbnails. The reference is vision-analysed and its design grammar is folded into an engineered prompt for your new title, then rendered. Returns a task_id immediately — poll /api/thumbnails/status/{task_id} for the image URLs. Costs 1 credit (or a flat 3 with fast: true), deducted upfront and refunded automatically if generation fails.
generations scope.| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| prompt | string | Required | — | The new video title to design the thumbnail for. |
| reference_urls | string[] | Required | — | One or more references — each a YouTube video URL, a bare 11-char video id, or a direct image URL. The first is used as the primary design reference. At least one is required. |
| model | string | Optional | nano-banana-pro | Image model. One of nano-banana-pro, nano-banana-2, seedream-5.0-lite, seedream-4.5-edit, gpt-image-2. |
| aspect_ratio | string | Optional | 16:9 | Output aspect ratio (e.g. 16:9, 9:16, 1:1). |
| resolution | string | Optional | 2K | Output resolution (1K, 2K, or 4K). |
| reference_titles | object | Optional | — | Map of reference_url → the reference video's original title, so the prompt knows why that thumbnail worked for that title. |
| find_outliers_first | boolean | Optional | false | Auto-fetch up to 3 topically-similar outlier thumbnails to use as extra references (topic taken from outlier_topic or prompt). |
| custom_instructions | string | Optional | — | Extra art-direction appended to the engineered prompt with highest salience. |
| fast | boolean | Optional | false | Fast mode — sub-30s renders on a dedicated queue with no fallback provider. Flat 3 credits per generation regardless of model. |
BETA Generate a thumbnail in a specific channel's own design style. We resolve the channel, pull its top longform thumbnails, analyse them, pick the one whose design best fits your title, and recreate that treatment for your title (the channel's subjects never carry over — only its design language). Returns a task_id immediately — poll /api/thumbnails/status/{task_id} for the image. Costs 1 credit (or a flat 3 with fast: true), deducted upfront and refunded automatically on failure.
generations scope. Contact support to request access. The compose step runs inline and can take 30–90 seconds before the task_id is returned.| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| channel | string | Required | — | The channel to borrow the style from — a UC channel id, @handle, or channel URL. |
| title | string | Required | — | The new video title to design the thumbnail for. |
| model | string | Optional | nano-banana-pro | Image model. One of nano-banana-pro, nano-banana-2, seedream-5.0-lite, seedream-4.5-edit, gpt-image-2. |
| custom_instructions | string | Optional | — | Extra art-direction applied on top of the matched channel style. |
| fast | boolean | Optional | false | Fast mode — sub-30s renders on a dedicated queue with no fallback provider. Flat 3 credits per generation regardless of model. |
BETA Edit an already-generated thumbnail with a plain-English instruction. The image goes back to the model as the canvas and only the requested change is applied — optional reference_urls are source material for the change ("insert THIS product"). Returns a task_id immediately — poll /api/thumbnails/status/{task_id} for the edited image. Costs 1 credit (or a flat 3 with fast: true), deducted upfront and refunded automatically on failure. Note: gpt-image-2 requests are served by nano-banana-pro for edits.
generations scope. Contact support to request access.| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| base_image_url | string | Required | — | Direct http(s) URL of the thumbnail to edit — typically an image URL returned by a previous generation. |
| instruction | string | Required | — | The change to make, in plain English (e.g. "make the text yellow"). Max 2000 characters. |
| reference_urls | string[] | Optional | — | Extra images used as source material for the change (e.g. the product to insert). Each a YouTube video URL, a bare 11-char video id, or a direct image URL. |
| model | string | Optional | nano-banana-pro | Image model. One of nano-banana-pro, nano-banana-2, seedream-5.0-lite, seedream-4.5-edit, gpt-image-2. gpt-image-2 is auto-served by nano-banana-pro for edits. |
| aspect_ratio | string | Optional | 16:9 | Output aspect ratio (e.g. 16:9, 9:16, 1:1). |
| resolution | string | Optional | 2K | Output resolution (1K, 2K, or 4K). |
| fast | boolean | Optional | false | Fast mode — sub-30s renders on a dedicated queue with no fallback provider. Flat 3 credits per edit regardless of model. |
BETA List the thumbnail models available to your account, their per-generation credit cost, and the fast-mode flat rate. Free — use this for capability discovery instead of hardcoding model names.
BETA Retrieve the status and result of a thumbnail generation. Poll every 2–3 seconds until state is success or fail. Typical generation time is 30–90 seconds. On a failure, the credits charged at submit are refunded automatically.
| Name | Type | Required | Description |
|---|---|---|---|
| task_id | string | Required | The task_id returned from POST /api/thumbnails. |
| Field | Type | Description |
|---|---|---|
| state | string | Generation state: a pending value (waiting/queuing/generating), success, or fail. |
| images | string[] | Generated thumbnail URLs (only when state=success). |
| error | string | Error description (only when state=fail). |
BETA Find topically-similar, high-performing reference thumbnails for a topic. Free (a database lookup, no credits). Pass the returned thumbnail_url values straight into POST /api/thumbnails as reference_urls to build a thumbnail in a proven style.
generations scope. Contact support to request access.| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| topic | string | Required | — | The topic/niche to find outlier thumbnails for (e.g. minecraft survival). |
| content_type | string | Optional | longform | longform or shorts. |
| limit | integer | Optional | 12 | Number of results to return. |
| min_outlier_score | number | Optional | 2.0 | Minimum outlier score (how far a video outperforms its channel baseline). |
| page | integer | Optional | 1 | Page number for pagination. |
BETA Page through a channel's LONGFORM upload catalogue (shorts excluded) — newest first, 50 per page, each video with its thumbnail, title and view count, plus the channel's recent-median baseline (median_views) for outlier scoring (view_count / median_views). Free (1–2 YouTube quota units per page, no credits). Pick a thumbnail_url and pass it to POST /api/thumbnails as a reference.
generations scope. Contact support to request access.| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| channel | string | Required | — | Channel @handle, URL, or UC id. |
| page_token | string | Optional | — | next_page_token from the previous response. |
| playlist_id | string | Optional | — | playlist_id from the previous response — page tokens are playlist-specific. |
BETA List your saved channel styles (identity only — name, handle, avatar, channel id). The catalogue itself is always fetched live via POST /api/thumbnails/channel-videos. Free.
generations scope. Contact support to request access.BETA Save a channel style for one-click reuse. Snapshots the channel's name, handle and avatar (1 YouTube quota unit). Upserts by channel. Free.
generations scope. Contact support to request access.| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| channel | string | Required | — | Channel @handle, URL, or UC id. |
BETA Remove a channel from your saved styles. Free.
generations scope. Contact support to request access.BETA List your saved custom-instruction presets. Apply one by passing its instructions as custom_instructions to the compose/generate endpoints. Free.
generations scope. Contact support to request access.BETA Save (or update, by name) a reusable custom-instruction preset for thumbnail generation. Free.
generations scope. Contact support to request access.| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| name | string | Required | — | Preset name (max 60 chars). Saving an existing name updates it. |
| instructions | string | Required | — | The custom-instructions text (max 2000 chars). |
BETA Delete a custom-instruction preset by id (from the list endpoint). Free.
generations scope. Contact support to request access.BETA Resolve a YouTube URL or video ID to its title, channel, and max-resolution thumbnail. Free (no credits). Use the returned thumbnail_url as a reference for POST /api/thumbnails.
generations scope. Contact support to request access.| Name | Type | Required | Description |
|---|---|---|---|
| url_or_id | string | Required | A YouTube watch URL, short URL, or bare 11-character video id. |
BETA Vision-analyse a thumbnail image into a structured design breakdown (composition, palette, text, focal points). Free (no credits).
generations scope. Contact support to request access.| Name | Type | Required | Description |
|---|---|---|---|
| image_url | string | Required | Public URL of the thumbnail image to analyse. |
BETA Engineer an image-gen prompt from a title + a single reference, without generating. Free, synchronous. Stateless — there is no style id; save the returned prompt and pass it to POST /api/thumbnails as final_prompt to render.
generations scope. Two-step flow: compose → review/edit the prompt → POST /api/thumbnails with final_prompt.| Name | Type | Required | Description |
|---|---|---|---|
| title | string | Required | Your new video title. |
| reference_url | string | Required | A YouTube URL, 11-char video id, or direct image URL. |
| reference_title | string | Optional | The reference's original video title (improves mapping). |
| custom_instructions | string | Optional | Extra art-direction. |
BETA Channel-style compose without generating — resolve the channel, analyse its top thumbnails, match the best design to your title. Free, synchronous (~30–90s). Returns the engineered prompt + the channel's source_thumb_urls; pass both to POST /api/thumbnails (final_prompt + reference_urls) to render. Stateless.
generations scope.| Name | Type | Required | Description |
|---|---|---|---|
| channel | string | Required | UC channel id, @handle, or channel URL. |
| title | string | Required | Your new video title. |
| custom_instructions | string | Optional | Extra art-direction. |
BETA List your saved per-channel thumbnail presets — instructions, subject face, style references, and generation defaults, saved together under a label. Returns the 50 most recent. Free.
generations scope. Contact support to request access.BETA Save a per-channel preset, or update an existing one by reusing its label. Only the fields you send are written; on update, everything you leave out keeps its current value. Free.
generations scope. Contact support to request access.| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| label | string | Required | — | Preset label. Sending an existing label updates that preset. |
| instructions | string | Optional | — | Custom instructions applied to every render made with this preset. |
| face_url | string | Optional | — | URL of the subject face to reuse. Takes precedence over face_image_b64. |
| face_image_b64 | string | Optional | — | Base64 face image (raw or a data: URL). Uploaded to storage and saved as face_url when no face_url is given. |
| content_type | string | Optional | image/png | MIME type for face_image_b64. |
| channel_style_id | string | Optional | — | Saved channel-style id to render in. |
| channel_style_name | string | Optional | — | Display name for the channel style. |
| style_reference_urls | array | Optional | — | Reference thumbnail URLs that define the look. |
| aspect_ratio | string | Optional | — | Default aspect ratio for renders, e.g. 16:9. |
| resolution | string | Optional | — | Default resolution, e.g. 2K. |
| model | string | Optional | — | Default image model. |
BETA Delete a per-channel preset by id (from the list endpoint). Free.
generations scope. Contact support to request access.BETA Check whether a reference image contains a person, so you can offer to swap in a real face before rendering. Cheaper and faster than a full analysis, and cached per image for six hours. Free.
generations scope. Contact support to request access.| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| image_url | string | Required | — | Reference image URL. YouTube thumbnail URLs and Algrow-hosted references both work. |
BETA Crop a region out of a reference image and store it as a character reference. The crop happens server-side, so it works on images a browser canvas is not allowed to read back. Returns a hosted URL you can pass straight to generation as a character reference. Free.
generations scope. Contact support to request access.| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| image_url | string | Required | — | Image to crop. |
| crop | object | Required | — | Crop rectangle in normalized coordinates relative to the image's natural size: {"x": 0.2, "y": 0.1, "w": 0.3, "h": 0.4}, each between 0 and 1. |
BETA Search the web for photos of a named person so you can use one as a character reference. Pass the chosen photo through /api/thumbnails/import-face before rendering — some image hosts block our downloader. Free.
generations scope. Contact support to request access.| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| query | string | Required | — | Person to search for. Trimmed to 120 characters. |
BETA Copy an external face photo into Algrow storage and return a stable URL the render pipeline can always fetch. Run every search result through this before using it as a reference. Free.
generations scope. Contact support to request access.| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| image_url | string | Required | — | Image to import. |
| fallback_url | string | Optional | — | Second URL to try when the first host blocks the download — e.g. the search result's thumbnail. |
BETA Put a real face onto a thumbnail you already rendered. Queues like any other generation and returns a task_id to poll. Costs 1 credit, or 3 with fast enabled.
generations scope. Contact support to request access.| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| base_image_url | string | Required | — | The rendered thumbnail to edit. |
| face_url | string | Required | — | Face to place on it. Use an Algrow-hosted URL from /api/thumbnails/import-face or /api/thumbnails/crop-reference. |
| model | string | Optional | nano-banana-pro | Image model used for the swap. |
| aspect_ratio | string | Optional | 16:9 | Output aspect ratio. |
| resolution | string | Optional | 2K | Output resolution. |
| fast | boolean | Optional | false | Prioritised render. Costs 3 credits instead of 1. |
GET /api/thumbnails/status/{task_id} for the finished image. Credits are refunded automatically if the swap fails.BETA Record a thumbs up or down on a generated thumbnail, with an optional comment. Sending the same task_id again updates the existing rating. Free.
generations scope. Contact support to request access.| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| rating | string | Required | — | up or down. |
| task_id | string | Optional | — | Task id of the generation being rated. Rating the same task again updates it. |
| image_url | string | Optional | — | URL of the rated image, when you don't have the task id. |
| feedback | string | Optional | — | Free-text comment (max 2,000 characters). |
Algrow
Shorts Channels