- Brand
- Doublespeed
- Category
- Marketing
- Primary Subcategory
- Social Media Management & Scheduling
Integration details
Description
Create social slideshows and product videos using your Doublespeed templates and media. Browse sample folders, pinned templates, and brand knowledge, then save editable drafts and share review links. Scoped to the Doublespeed products your account can access.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Social Media Management & Scheduling
- Secondary Subcategories
- None listed
- Brand
- Doublespeed
- Access
- Account required
- First tracked
- 2026-10-06
- Tool count
- 64
- Market
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Your score is coming
ChatGPT now suggests Plugins on its own when they match a user's request.Your Plugin Discovery Score measures how often yours appears, and it will show here as soon as it’s ready.
What discovery looks like

Get alerts for Doublespeed
Get updates when Doublespeed’s Discoverability Score or category rank changes.
Competing in ChatGPT Social Media Management & Scheduling
View Category64 tools agents can invoke
Add a content rule to the active product. Use this for a user-requested constraint on future content runs and review checks, optionally limited to specified accounts or templates. The rule becomes active immediately without a review queue. It is stored as a product rule, separately from reference wiki pages or feedback on one post. Confirm the active product before calling. This tool cannot create company-wide rules. Declines with 409 already_queued when an identical statement is waiting in the review queue with different settings, or duplicate_fingerprint when it collides with an existing rule (the response names the row and its status, including one that was previously rejected).
context_add_rule
Browse the media library. Operation 'list_folders' enumerates active-product folders by default, or public folders across products with `visibility: public`. Operation 'list_files' lists files within an active-product folder, or within a chosen public folder when `product_id` plus `folder` or `folder_id` are supplied. Fields that don't apply to the chosen operation are rejected.
browse_media
List v2 templates (slideshow/video scene templates) discoverable from the active product. Use this to resolve a template name into a template id. For a slideshow derived from that template, pass the id as `source_template_id` to upsert_slideshow_draft. Returns template metadata and available preview thumbnails; call get_template to fetch template.sceneData and variables.
list_templates
Cancel one or more image or video generations that are still queued, and release their credit holds. Accepts media file IDs from generate_image, generate_images, or generate_video. A job that is already processing, completed, or failed is left as it is, and the result says why. Cancelled jobs are removed from the library and do not run. Scoped to the active product.
cancel_generation
Check the status of one or more image or video generation jobs, or of queued editor renders (render_video with background: true). Returns the current status (pending, in_progress, completed, failed) and the media URL when complete. An id this session cannot see (another product's, or one that does not exist) reads as not_found and names the active product; a status read that failed reads as unknown and should be polled again.
check_generation_status
Finalize one or more media-library uploads after the file bytes have already been PUT to the upload URLs from prepare_media_upload. Registers the uploaded blobs in doublespeed and returns durable media URLs you can use in drafts, posts, or save_editor_project scenes. Pass the single-file fields or a files batch. Unless probe is false, video and image files missing width/height/duration are probed server-side so the response carries real source metadata.
commit_media_upload
Create and save an Avatar Builder portrait in the active product. This spends image-generation credits. Call get_avatar_options for current trait IDs and values. Use prompt mode for a free-text description with optional identity selections, traits mode for complete normal-avatar attributes, or crazy mode for a crazy-character trait object. The result includes avatar_id for use with generate_video. A timeout or provider error may leave the outcome uncertain. If pending_media_file_id is returned, poll check_generation_status with ids containing that ID; otherwise inspect browse_media in avatars before retrying.
create_avatar
Create a contact sheet for a saved crazy avatar. This uses image-generation credits. Existing sheets are reused and concurrent pending requests are refused; each new sheet attempt can incur a charge. A timeout or error may leave the outcome uncertain, so check get_avatar_sheet before retrying.
create_avatar_sheet
Create one shareable review link that covers several drafts (2 to 25) on a single review page. Pass the group_ids returned by upsert_slideshow_draft / upsert_video_draft; every draft must belong to the active product. Requires at least two drafts. The combined link stays live: later edits to the source drafts show up in it.
create_combined_review_link
Generate a single image using AI. Supports text-to-image and image-to-image modes (single reference via image_url, or up to 4 references via image_urls when the output must combine sources, e.g. recreating one scene while keeping a recurring character's identity from another image). Returns the generated image URL. Generation uses the active product's credits and requires access to image generation. Set async: true to queue generation and return a media file ID before the image is ready; poll check_generation_status with that ID. Completion time varies by model and load.
generate_image
Create a new image collection (a media-library folder of type 'images') for the active product. The name is slugified to lowercase with hyphens, so 'Summer Looks' becomes 'summer-looks'. Fails if a collection with that name already exists. After creating, add images with prepare_media_upload + commit_media_upload, or list collections with browse_media.
create_image_collection
Generate multiple images from independent prompts in one call, with bounded concurrency. Returns one result per image in input order, with a URL or an error. Each generation uses the active product's credits; cost depends on the model and generation settings. Set async: true to queue generation and return media file IDs before the images are ready; poll check_generation_status with those IDs. Completion time varies by model and load.
generate_images
Create a new slideshow or video post from media URLs. Defaults to scheduled, which queues publication to a connected account; set status to draft to save without scheduling. Provide either image_urls for a slideshow or video_url for a video post. The post is assigned to an account by username and optional platform. Externally-supplied videos are re-encoded through the iPhone metadata fingerprint by default (pass randomize_metadata: false to skip). Pass logo_url to burn a brand logo into a drifting corner of a video (video posts only; upload the logo once via prepare_media_upload/commit_media_upload and reuse its hosted URL).
create_post
Create multiple posts in bounded parallel batches, with up to 50 objects using the same fields as create_post. Each item defaults to scheduled and can publish to its connected account; use status: draft to save without scheduling. Concurrency defaults to 3 and can be set with batch_size. A completed response reports each item's success or failure. This is not an atomic operation: some posts may be created before another fails or the request times out. Check for already-created posts before retrying an interrupted batch.
create_posts_bulk
Create a shareable review link for one draft, or return its existing link. Pass the draft `group_id`. If existing is true, the supplied password and allow_comments settings are not applied; this call does not confirm the existing link's protection. A new link without a password is accessible to anyone who has its URL.
create_review_link
Create a v2 scene template for the active product. For a simple named draft, pass metadata.name (and optional metadata.prompt) and omit scene_data; the app creates a blank slide. Only send scene_data when you already have a full preview from render_slides. Omit thumbnail_url and reference_import unless you have real values. Call once; do not retry on failure. Returns the new template id; use get_template to inspect it or list_templates to rediscover it later.
create_template
Permanently delete files from the active product's media library: audio tracks, images or videos, including tracks in collection folders. Pass the `id` of each file as browse_media list_files returns it. Deletion cannot be undone: the file and its stored copy are removed, and a draft or scheduled post that still uses the file's URL can no longer load it. Only the active product's files can be deleted. An id that belongs to another product (such as a file in a public folder found with visibility: public) is refused and left untouched, and an id that matches no file is reported as not_found. Every id gets its own status in results (deleted, not_found, refused or failed), with counts, so one call can delete some files and not others.
delete_media_files
Render slideshow sceneData to slide image URLs for visual inspection. Returns slide images and hosted URLs when hosting succeeds. Does not save a draft. Supports visual iteration on slide layouts, including 1080x1920 vertical slides. Use absolute pixel coordinates for scene block layout. Style every text block by naming a preset: `style.stylePreset` set to a name from `list_style_presets` (TikTok-style slides commonly use `tiktok-stroke` or `tiktok-bg`). The renderer expands the name into the full style using the same expansion as the draft write path. Do not hand-set fontFamily, fontSize, lineHeight, letterSpacing, padding, borderRadius, or backgroundShape alongside a preset; color and bounds are the fields meant to be tuned per slide. If the preview comes back with cramped letters, overlapping lines, or unreadable text, fix the sceneData and render again before presenting it as final. To render several independent decks (for example one per variant) in a single call, pass `scenes` as an array of 1 to 8 `{ name?, scene_data }` entries, or pass top-level `scene_data` (exactly one of the two). Results come back per scene, labelled by `name`, and one scene's failure does not fail the others. The same payload still includes top-level `slides` / `hostedUrls` for callers that read those fields. Treat `warnings` as unreadable slides and re-render before shipping. Keep every text block inside the platform safe area: on a 1080x1920 slide that is x 46-1033, y 115-1545, minus the platform UI sitting inside it (x 313-762, y 133-216; x 887-1019, y 960-1092; x 886-1020, y 1152-1316; x 887-1019, y 1358-1521). Text crossing those rects is covered by the app's own chrome once the slide is posted, so it reads as a broken slide however good the copy is. A block grows to fit its text, and a centered block grows around its center, so leave room on both sides: wide copy belongs above the action rail rather than beside it. The write boundary moves a block down or up when that is enough to clear the chrome, but it never rewrites or shrinks copy. Size the text to the room it has. Example `sceneData` payload for `render_slides` (1080x1920, all layout values in pixels): ```json { "id": "scene-1772623220885", "name": "TikTok slide preview", "pages": [ { "id": "page-1772623220885", "name": "Page 1", "width": 1080, "height": 1920, "background": "#ffffff", "blocks": [ { "id": "background", "type": "background", "bounds": { "x": 0, "y": 0, "width": 1080, "height": 1920 }, "rotation": 0, "zIndex": 0, "style": { "type": "color", "color": "#ffffff" } }, { "id": "image-1772623222845", "type": "image", "bounds": { "x": 0, "y": 0, "width": 1080, "height": 1920 }, "rotation": 0, "zIndex": 1, "src": "https://cdn.example.com/background.jpg", "style": { "objectFit": "cover", "borderRadius": 0, "opacity": 1 } }, { "id": "text-1772623231625", "type": "text", "bounds": { "x": 140, "y": 300, "width": 800, "height": 220 }, "rotation": 0, "zIndex": 2, "text": "example text", "style": { "stylePreset": "tiktok-stroke", "verticalAlign": "middle" }, "autoResize": true, "sceneWidth": 1080 } ] } ], "pageOrder": ["page-1772623220885"], "activePageId": "page-1772623220885", "defaultPageSize": { "width": 1080, "height": 1920 }, "templateMode": true } ```
render_slides
Edit a variant on a draft using either a review link `token` or by draft `group_id` (exactly one). Provide either one `variant_id` or several `variant_ids`. Targeted block helpers preserve fields you do not specify; scene_data replaces the full scene. The response reports applied edits and errors; inspect it before retrying or making further changes. Edit paths: 1. Leaf fields (caption, accountId, musicLink/musicUrl, muteMusic, status) - safe to patch independently, no baseRevision needed. 2. textBlockEdits - edit existing on-screen overlay text on video or slideshow variants. Send targeted edits by blockId from the draft's textOverlays. No baseRevision needed. 3. textBlockInserts - ADD on-screen overlay text to a hook-demo video segment. Each entry needs `segment_index` and `text`. The text fills the segment's primary (first empty) text column using the site's default TikTok-style format, so it shows in BOTH the bulk-video table editor and the review link; a new column is only appended when every existing text column is already filled. Use this when you need to ADD text that does not yet exist (textBlockEdits cannot create blocks). No baseRevision needed. 4. blockEdits - change ANYTHING about a slideshow block: text, image, font size, colour, alignment, line height, letter spacing, stroke, background, padding, position, size, rotation, stacking. Send only what changes; style and bounds are shallow merged so nothing else is touched. No baseRevision needed. 5. emphasisEdits - style individual WORDS inside a slideshow text block (bold, colour, size, font) while the rest of the paragraph keeps the block style. Pick the words with a rule, never offsets: {"type":"uppercase_words"} for every fully capitalised word, or {"type":"words","words":[...]} for named ones. The rule resolves against each variant's own copy, so one call with variant_ids styles every variant at once. `clear: true` removes per-word styling. No baseRevision needed. 6. segmentEdits - video on-screen text and its styling, image overlays, video filters, framing, crop, canvas colour, per-clip trim and speed. Video variants only. No baseRevision needed. 7. structureEdits - add or remove blocks, and duplicate, delete or reorder slideshow pages. Positional variableKeys and pageOrder are repaired for you. Slideshow variants only. No baseRevision needed. 8. imageBlockEdits - swaps a slideshow image src only. 9. sceneData - full structure replace when a complete scene rewrite is required. Requires baseRevision when using a token; ignored for group_id. scene_data is mutually exclusive with all targeted edit helpers: text_block_edits, text_block_inserts, image_block_edits, block_edits, emphasis_edits, segment_edits, and structure_edits. Targeted helpers can be combined. `status` is review-link-only (drafts without a share link have no reviewer status).
patch_draft
Transcribe a publicly fetchable HTTP(S) audio or video URL with Whisper and return word-level timings ({ word, start, end } in seconds). Feed the words to save_editor_project as captions to get editable, word-timed caption items on the editor timeline. For generated voiceovers, use the hosted audioUrl from generate_voiceover; data URI fallbacks are not supported.
generate_captions
Submit an async video generation job. Returns a media file ID to poll with check_generation_status. Videos cost credits. Call list_models for capabilities and reference pricing; product rules can change the charge. To reproduce source motion, use video_url with a model advertising supportsVideoReference; still images alone do not transfer motion. To upscale an existing video, use model topaz-upscale with video_url and resolution. Ask the user before switching their selected model or identity reference, including after a provider rejection.
generate_video
Generate a voiceover audio track from a script using ElevenLabs text-to-speech. Returns audioUrl and an estimated duration in milliseconds. The URL is normally hosted; if hosting fails, it can be a data URI, which generate_captions cannot accept. Use a hosted HTTP(S) URL for caption generation and editor workflows that fetch remote audio. Omit voice_id to use the default narrator voice; call with list_voices=true to see the available voices first. Pass timestamps=true to also get words, each spoken word with its start and end in seconds from the start of this audio, for caption timing without transcription.
generate_voiceover
Get details of a specific social media account including username, bio, status, platform, and profile info. A bank (reserve) account is flagged is_backup: true; a reserve is not a live account.
get_account
Get a product's title, overview, brand guide, target audience, and other context. Uses product_id when the call includes it, and the connection's active product otherwise.
get_product
Fetch a draft's current state. Two modes: 1. Summary (default): compact overview of all variants with textOverlays for quick scanning. No segments or sceneData. 2. Detail (variant_index or variant_id provided): full segments, sceneData, and textOverlays for one variant. Summary mode includes addressable blocks. Slideshows: blocks (every addressable block with its current text/src, style and bounds, a variableKey that stays stable across variants, and spans for any per-word styling already applied). Videos: videoSegments (text blocks with their flat styling, image overlays, filters, framing and clips). Plus the narrower textOverlays and imageBlocks views. A block's style applies to the WHOLE paragraph. Per-word colour, bold, size, or font lives in spans on that block, not as a second overlapping block. Detail mode returns the full segments or sceneData for one variant. Every variant also carries versionId, the version its content was read from. upsert_slideshow_draft takes it back as expected_version_id when updating that variant: it proves the update was written on top of the content read here, and a full-scene update of an existing variant is refused without it. Before an update, read by groupId: it returns each variant's current version. A review-link token returns what that link shows, which can be an older pinned version whose token the update refuses.
get_draft
Get exact aggregate post performance for the active product across the full filtered post set in one call. Use this for totals, averages, medians, maximums, engagement, or per-account performance questions. No pagination or sampling is needed.
get_post_metrics
Returns your identity, permissions, and the currently active product for this MCP session.
whoami
Copy a publicly downloadable media file (direct mp4/mov/webm/jpg/png/webp URL) into a product media folder and return its durable media URL. Use this when a product needs a stored copy of externally hosted media. The URL must serve the file bytes directly: page URLs such as YouTube or TikTok watch pages are not downloaded here. With probe_only: true it reads remote media bytes to inspect metadata (kind, width, height, duration) without saving an imported copy; use that before save_editor_project so scene trims stay inside the source and contain/blur-fill fit modes know the source aspect (pass the result as source_duration_ms, source_width, source_height).
import_media_url
List posts for a specific account within the active product. Supports pagination, status filtering, and sort direction. Returns summary rows by default; heavy fields (scene_data, template_data, image_urls) require explicit include_* flags. Same row semantics as list_posts: `posted` = live (an admin session sees the stored `succeeded`), `post_time` is the requested slot (use `published_at` for when it went live), and `public_url_status: pending_link` means live but the public URL is not linked yet. Confirmed publication data stays available during `pending_private`/`pending_delete` until removal completes.
list_account_posts
List social media accounts for the active product. Supports pagination, status filtering, and search by username. Bank (reserve) accounts are included and flagged is_backup: true; a reserve is not a live account.
list_accounts
Read the Avatar Builder's current normal and crazy-character options. Use these exact values when calling create_avatar; this is read-only and does not use credits.
get_avatar_options
List supported image and video generation models, input requirements, capabilities, and default pricing. Prices are reference defaults; product-specific pricing rules and billing rounding may change the actual charge.
list_models
Show the order the active product's queued posts will go out in, per account, with each post's expected publish time. Every scheduled post takes the account's next open slot from the scheduler (posting windows, cooldown, daily target, device gaps); this is where to see which slot a post got. `scheduled_at` is the locked publish time (ISO 8601, UTC) or null while the post is queued without one (`queue_state: queued`); `estimated_at` then carries the time it would get if it took a slot now, from the account's own windows and daily target. `position` is 1-based firing order within the account. `reorderable: true` marks posts whose slots reorder_posting_queue may swap. Posts mid-publish (pending) have left the queue; use list_posts for them. A post queue_post is still creating is not listed until its video lands; until then it is a draft titled "Uploading..." in list_posts. `truncated: true` means the product holds more queued posts than one listing returns; narrow with account_id.
list_posting_queue
List posts for the active product. Supports pagination, status filtering, date range, sorting, and search. Returns summary rows by default; heavy fields (scene_data, template_data, image_urls) require explicit include_* flags. Reading a row: `status` is the posting state (`posted` = live on the platform; `scheduled`/`pending`/`need_approval` = still queued; `draft`). A post whose last publish attempt failed reads as `scheduled`: the failure is at our posting layer and the retry is ours, not something to report as lost work. An admin session sees the stored vocabulary instead, where a live post is `succeeded` and a failed one `failed`. `post_time` is the requested queue slot, not when the post went live; use `published_at` (ISO, null until live). `public_post_url` is stamped by analytics reconciliation after the post is live and can trail it by hours, so `public_url_status: pending_link` on a `posted` row means live-but-not-linked-yet, not stuck. Confirmed publication data stays available during `pending_private`/`pending_delete` until removal completes.
list_posts
List products you have access to, and show which product is currently active for this MCP session. Supports `search` (case-insensitive title match) and `page`/`page_size` pagination: required on admin sessions because the full admin listing can exceed response limits. When several products share a title, each row includes `duplicateCount`, `isPaid` (has a subscription), and `isEmpty` (no subscription, accounts, or posts). Always pass the `product_id` the user named or confirmed.
list_products
List the canonical text style presets used by the editor (font family, weight, size, color, background, stroke, spacing, alignment). Returns each preset's name, a short description, the surfaces it may be used on (video overlay text is limited to tiktok-sans and tiktok-stroke; slideshows may use all four), and its exact style values, plus usage guidance for applying a preset via patch_draft text_block_inserts or upsert_video_draft textBlocks. These are text style presets, not hook_demo_presets. Also returns `fontFamilies`: the built-in families plus this workspace's uploaded custom fonts; any of them is valid in `fontFamily` (block, span, or emphasis). A custom font file is added to the workspace with prepare_font_upload and commit_font_upload.
list_style_presets
List the active product's warming profiles: the search terms and accounts to follow that an account warms on. Each profile carries its `version` and `account_ids`, the accounts it is on. manage_warming_profile needs that `version` to update, archive or assign a profile, and refuses a version someone has since changed, so read it here first. `accounts` lists every account with the profile it holds (null for none); `warming_profile.version` there is the version the account was given, which can be older than the profile's current one. Warming profiles exist only on agency products; elsewhere this returns an error.
list_warming_profiles
List the active product's wiki pages: its reference knowledge (overview, brand and voice, formats, asset locations, decisions, learnings, one accounts/<handle>/persona page per account). Rules are not pages; they live on the product Rules page. Call this once after set_product and read the relevant pages with wiki_get_page before content work. Each entry carries slug, title, visibility, current revision number, generation/review flags, and sections (level-2 headings). Product members edit wiki pages in the dashboard. Staff sessions see the product's own pages plus company-wide (all_products) pages; a client session sees only the pages published to it (visibility client).
wiki_list_pages
Create, update or archive one of the active product's warming profiles, or put one on accounts. One action per call. create takes `profile`. update takes `id`, `version` and `profile`; a `profile` without follow_accounts keeps the saved list. archive takes `id` and `version`. assign takes `assignment` with `account_ids`, `profile_id` and `version`, and copies the profile's search terms onto those accounts without changing their status or restarting warming; `profile_id: null` removes the profile and needs no version. `version` is the profile's current version from list_warming_profiles: a profile changed since then is refused rather than overwritten, so read it again and retry. Burned and inactive accounts cannot get a profile, and an archived profile cannot be assigned. create, update and archive return no id or version; call list_warming_profiles for them. Warming profiles exist only on agency products; elsewhere this returns an error.
manage_warming_profile
Fetch a single v2 template by id, including template.sceneData and its variables. The result card shows its cover thumbnail. To preview a slideshow template's pages, pass template.sceneData as scene_data to render_slides. To save a derived slideshow, pass the edited scene_data and the template id as source_template_id to upsert_slideshow_draft. Video drafts require the videos and hook_demo_state inputs described by upsert_video_draft; it has no source_template_id parameter. Access is scoped to templates owned by the active product, created by the caller, or marked public.
get_template
Start uploading a custom font file to the active product's workspace fonts. Checks the family name, weight, style, file type and size (at most 30 MB) and the workspace limits (15 families, 10 files per family, one file per weight and style), then returns a time-limited upload URL, the headers to send with it, and a storagePath. PUT the file's raw bytes to uploadUrl with uploadHeaders, then call commit_font_upload with that storagePath as storage_path to register the font. A registered family is listed in list_style_presets and can be set as fontFamily on text. Font files sent through prepare_media_upload are stored as media and are not registered as fonts.
prepare_font_upload
Prepare a media-library upload for one or more local files. This may create the requested private media folder, then returns a time-limited signed upload URL, the headers to send with it, and a blob path per file. Upload each file's bytes directly to its uploadUrl with an HTTP PUT carrying its uploadHeaders, then call commit_media_upload (which also accepts a files batch) to register them and get durable media URLs. Pass file_name for a single file or files for a batch.
prepare_media_upload
Create a post from a draft variant. Defaults to scheduled, which queues it for publication to its connected account; set status to draft to save without scheduling. Resolves the variant from a draft (`group_id`) or review link (`token`) and queues it using ONLY the variant's own data: caption, account, music (including the mute-music toggle set via patch_draft `mute_music`), and media all come from the variant itself. There are no overrides: if a required field is missing on the variant, the call fails with a clear message and the caller must edit the variant (e.g. via patch_draft) before retrying. Video variants are composed the way the bulk-video table's Queue composes them: when the stored video is only the raw source clip (the draft has overlay text or image blocks, clip trims or speed changes, a transform, crop, filter, or more than one segment), the overlays and the music track are rendered into the video server-side and that render is queued; a single-clip variant with no overlays or edits queues its stored `videoUrl` as is. Composing adds render time, which varies with the content and load, and the response then carries `composedVideo`. Slideshow variants are server-rendered from `variant.sceneData` at queue time. The created post is tagged with provenance (sourceVariantId / sourceVersionId / sourceGroupId) so the drafts UI links it back. Cross-product safety: the active MCP product must own the draft, except when the caller is an admin (admins can queue drafts from any product). A slideshow queued with no audio succeeds but returns a `warnings` entry; attach music only when requested or appropriate for the content. Scheduled posts containing #ads are rejected because this posting path cannot complete the advertising disclosure prompt. Keep required disclosures intact and use a posting flow that supports them.
queue_post
Read the status and views of a saved crazy avatar's contact sheet without making one or spending credits. Normal avatars do not have contact sheets.
get_avatar_sheet
Read the speaking performance profile for a saved avatar. If none is stored, the route returns an editable default. This does not spend generation credits.
get_avatar_performance
Read one wiki page by slug for the active product (its reference knowledge). Read the pages that cover the task (overview first when present, then brand and voice, formats, learnings, the account's accounts/<handle>/persona page) before creating content; rules are not wiki pages, they live on the product Rules page. Returns the page metadata, current revision (send its rev as base_rev when editing), and rendered segments (markdown runs plus managed directive blocks resolved live). A slug not visible in the caller's scope is reported as not found.
wiki_get_page
Rename a saved avatar. The name is saved in the Avatar Builder and updates the file name in the media library. Other avatar metadata is preserved. This does not spend generation credits.
rename_avatar
Render a full video composition through doublespeed's Remotion pipeline. Accepts a Remotion composition payload and returns an mp4 or webm file, or a still frame when `still_at_ms` is set. Pass `project_id` for a saved editor project, or `still_at_ms` to get a single PNG/JPEG frame at that time (single-frame layout check before the full render). Composition timing is millisecond-based: `duration` and every track item's `display.from` / `display.to` must be in milliseconds. For layout, set `details.width`, `details.height`, `details.top`, and `details.left` to match the target canvas. The `text_overlay_data` input is preserved as textOverlayData in the result for downstream review bookkeeping, but it does not render visible text by itself. If you want text burned into the output, include a real `text` track item (or another visual overlay track) inside `trackItemsMap`. Parameter guide: - `composition.duration`: total output length in milliseconds - `composition.fps`: output frame rate, commonly 30 for short-form social video - `composition.size`: final canvas size in pixels, for example `{ width: 1080, height: 1920 }` - `composition.trackItemIds`: ordered track ids to render; later items visually stack above earlier ones - `composition.trackItemsMap[*].display.from` / `.to`: when that track should appear, in milliseconds - `composition.trackItemsMap[*].details.src`: source media URL for image/video/audio tracks - `composition.trackItemsMap[*].details.width` / `.height`: rendered box size on the canvas - `composition.trackItemsMap[*].details.top` / `.left`: rendered box position on the canvas - `text_overlay_data`: review metadata only, useful for bookkeeping. It does not render visible text by itself; include a real text track item for that. After render_video succeeds, do not assume the output is acceptable just because rendering finished. Review pacing, crops, text legibility, overlay placement, transitions, and artifacts before treating the result as final. If you already have structured overlay metadata, pass it as text_overlay_data so it is preserved in the result for downstream review tooling. Example `composition` payload for `render_video`: Important: `duration` and every `display.from` / `display.to` value are milliseconds, not frame counts. ```json { "duration": 6633, "fps": 30, "size": { "width": 1080, "height": 1920 }, "trackItemIds": ["clip-1", "text-1"], "trackItemsMap": { "clip-1": { "id": "clip-1", "type": "video", "display": { "from": 0, "to": 6633 }, "details": { "src": "https://cdn.example.com/source.mp4", "width": 1080, "height": 1920, "top": 0, "left": 0, "objectFit": "cover" } }, "text-1": { "id": "text-1", "type": "text", "display": { "from": 0, "to": 6633 }, "details": { "text": "when i ask\n\"who all gonna be there\"", "fontFamily": "TikTok Sans", "fontSize": 60, "color": "#FFFFFF", "textAlign": "center", "width": 820, "height": 360, "top": 620, "left": 130 } } } } ```
render_video
Render a baked preview video from editor or hook-demo style state. Burns text and image overlays into the returned video from editor-style inputs. Does not persist a draft. Parameter guide: - `clips`: optional timeline clips array when previewing a multi-clip edit - `video_url`: single source video when you do not have a clips array - `video_transform`: placement box for the main video layer in editor pixels - `text_blocks`: editable text overlays that will be burned into the preview video - `image_blocks`: editable image overlays that will be burned into the preview video - `editor_dimensions`: required canvas size object, for example `{ width: 1080, height: 1920 }` for vertical social content - text block styling: set `stylePreset` to `tiktok-sans` or `tiktok-stroke`, the only two presets video overlay text may use (the filled-block presets are slideshow-only), and let the server expand it. Do not hand-set fontFamily, fontSize, fontWeight, lineHeight, letterSpacing, padding, borderRadius, or backgroundShape alongside a preset; color and placement are the fields meant to be tuned. Example `render_video_preview` payload for a hook-demo-style editable preview: ```json { "video_url": "https://cdn.example.com/source.mp4", "editor_dimensions": { "width": 1080, "height": 1920 }, "video_transform": { "x": 0, "y": 0, "width": 1080, "height": 1920 }, "text_blocks": [ { "id": "text-1", "text": "me after deciding\nnot to ask the one\nquestion that\nwouldve ruined the\nwhole night", "x": 140, "y": 560, "width": 800, "height": 380, "stylePreset": "tiktok-stroke", "zIndex": 10 } ] } ```
render_video_preview
Change the order one account's queued posts go out in. Pass the post ids in the order they should fire (first id first). The named posts keep the set of slots they currently hold and get them back in the new order, so the account's posting windows, cooldown, and daily target still hold and posts you do not name keep their times. Only posts list_posting_queue marks `reorderable: true` (scheduled, holding a future slot) can be named; a post firing within the next 5 minutes cannot be moved. Returns the account's queue after the change. The MCP tools cannot pin a publish time (only the posting REST API's scheduledAt can, within the account's scheduling rules); use this to change the order.
reorder_posting_queue
Doublespeed ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve Doublespeed's ChatGPT Plugin discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Doublespeed alternatives on ChatGPT?
As of 2026-11-02, Doublespeed competes with 8digit Planner, Abency, AdaptlyPost, Adly, Adzviser Sprout Social, AgentFabrica, Antwork, Atenda Social and 107 more in ChatGPT Social Media Management & Scheduling, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.