- Brand
- Fablyn
- Category
- Content & Design
- Primary Subcategory
- AI Video Generation
Integration details
Description
Create and revise short explainer videos and slides in your Fablyn workspace. Describe what you want to explain, then use Fablyn to save a Video, check its stills, and refine the words, layout and motion. Add optional narration and render a finished video, or approve stills as slides. Review your work and manage approvals in Fablyn Studio. A Fablyn account is required. Narration and rendering use your workspace’s minutes.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- AI Video Generation
- Secondary Subcategories
- None listed
- Brand
- Fablyn
- Access
- Account required
- First tracked
- 2026-10-15
- Tool count
- 32
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Agent DiscoverabilityChatGPT Discoverability ScoreUpdated dailyThe first to track the ChatGPT, Claude, Muse & Grok ecosystems, with the largest database on the core platforms. Tracked daily since .
0/100
Invisible#18of 45
in AI Video Generation- Picked
- 0.0/100
- Found
- 0.0/100
- Positioned
- –/100
Get alerts for Fablyn
Get updates when Fablyn’s Discoverability Score or category rank changes.
Competing in ChatGPT AI Video Generation
View Category32 tools agents can invoke
Approve a finished render, as the workspace owner would. Only for connections the owner has allowed to approve.
approve_render
Approve a Video's stills as its Slides, as the workspace owner would: a PDF with one page per still, and the stills as PNGs, with a receipt. The latest revision unless you name one; its stills must have been made. Only for connections the owner has allowed to approve.
approve_slides
Stop a render that has not finished. A finished render cannot be cancelled.
cancel_render
The account email and user ID, workspace name and ID, Connected agent and current Grant permissions for this MCP connection. Use this to answer who is connected or where a Video will be created; the account open in Studio may differ. Also the workspace's Video minutes: funding is what the next render uses (paid, welcome, none, or unmetered while minutes are not checked), with remainingMs of it, paidRemainingMs and welcomeRemainingMs. Welcome minutes are used by every finished render, approved or not; paid minutes by each approved Video, and a paid render needs at least a minute left. Requires no write, narration, render or approve permission.
whoami
Create a named Video holding the composition as revision 1, in an existing Project (campaignId, from get_creation_options) or a new one (campaignName). The Project's name also becomes a pin on the new video. Refused with diagnostics when the composition or a pin name has errors. Send the composition inline when it is under about 200 KB; above that, or when a program wrote it, send it as a file: register_asset with kind composition, PUT the document to the upload URL, then pass compositionAssetId in place of composition. The cap of 1,048,576 bytes is the same both ways. Pass withStills: true to get the stills' layout warnings back with the save, instead of calling get_video_stills. A long list of warnings is cut to the first 10 per still, with warningCounts for all, so the save never fails for their length. Pass normalize: true to drop an inert name or from before validation. The same as create_video, under its earlier name.
create_cut
Create a named Video holding the composition as revision 1, in an existing Project (campaignId, from get_creation_options) or a new one (campaignName). The Project's name also becomes a pin on the new video. Refused with diagnostics when the composition or a pin name has errors. Send the composition inline when it is under about 200 KB; above that, or when a program wrote it, send it as a file: register_asset with kind composition, PUT the document to the upload URL, then pass compositionAssetId in place of composition. The cap of 1,048,576 bytes is the same both ways. Pass withStills: true to get the stills' layout warnings back with the save, instead of calling get_video_stills. A long list of warnings is cut to the first 10 per still, with warningCounts for all, so the save never fails for their length. Pass normalize: true to drop an inert name or from before validation.
create_video
A library component's full definition (description, props and render tree), from this workspace's Library or the bundled one. Read it before using a component; copy it into the composition's components.
get_component
Start here. The connected account, workspace and Grant permissions, the node and property lists, easings, transitions, the font catalogue, this workspace's assets, Projects, videos and pins, the CSS property count (get_schema part style lists them), the component library by name with each component's props, the names of the templates and the schema parts. get_example, get_component and get_schema return the full documents one at a time.
get_creation_options
One template, a complete composition to start from, by name: product-launch, hold-across-lines, loop, slides (silent, no narrator), steps-coach, numbers-real-estate, question-clinic, announcement-organiser, quote-podcaster, recap-nonprofit, list-food, myth-finance, beforeafter-trade, countdown-conference, map-card-dispute, chart-prices-midterms, chart-gas-prices, chart-prices-portrait, chart-gas-prices-portrait, map-card-dispute-portrait, chart-prices-silent, chart-prices-steps, chart-power-mix, chart-gas-prices-area, chart-budget-donut, chart-energy-pie, chart-goals-ring, chart-gauge, chart-prices-square, chart-budget-donut-feed, map-card-dispute-feed, stat-hiv-targets, stat-gas-prices, stat-food-prices, timeline-vote-widened, timeline-presidents, timeline-amendments, table-household-spending, table-midterm-prices, table-gas-prices, treemap-emissions, treemap-power, treemap-spending, treemap-spending-circle, treemap-power-circle, regionmap-co2-per-person, regionmap-europe-change, regionmap-oil-chokepoints or regionmap-midterm-turnout.
get_example
Check the exact photos from request_images after the person says done. Returns waiting, ready or expired, with the received image ids, names and dimensions. Use the returned ids in Img nodes; validate and save a new Video revision and check Stills. Do not assume the most recently added workspace image belongs to this conversation.
get_image_request
A finished render: links to the video and line stills valid for fifteen minutes, captions, transcript and receipt. When render_video was given coverFrame, cover holds that frame as a full-size PNG: { frame, width, height, url }, the link valid for fifteen minutes. If the frame fell past the end of the rendered video, cover is null and coverMessage says which frames to use.
get_render_result
Where a render is: queued, tts, frames, mux, ready or failed. While queued it is waiting for a free render slot, and estimatedWaitSeconds says about how long. Check again gently, about once a minute; the render starts by itself. A failed render carries an errorCode, with a message when there is something to change: duration_over_cap means the narration made the video longer than the limit, so shorten the narration and render again.
get_render_status
The composition JSON Schema, one part at a time. Without part: the document-level schema with each definition marked by the part that holds it, and the list of parts. With part (for example style, animation or node:Sequence): those definitions in full; as construct:Map, construct:Chart or construct:Stat, every prop of a construct the compiler lays out. Use it when a diagnostic needs the exact shape.
get_schema
A Video's approved Slides: links to the PDF and each still as a PNG, valid for fifteen minutes, and the receipt. The latest approved revision unless you name one.
get_slides
A Video's composition at a revision, with who saved it and when, and every note on the video, newest first. An open note, on the latest revision, is the person asking for a change. Pass compositionUrl: true to get, instead of the document, compositionDownload: a link valid for fifteen minutes to the composition as the compact JSON Fablyn keeps, with its sha256 and size, to compare with a local file. The same as get_video, under its earlier name.
get_cut
A Video's composition at a revision, with who saved it and when, and every note on the video, newest first. An open note, on the latest revision, is the person asking for a change. Pass compositionUrl: true to get, instead of the document, compositionDownload: a link valid for fifteen minutes to the composition as the compact JSON Fablyn keeps, with its sha256 and size, to compare with a local file.
get_video
The maximum AI credits for new narration, reused lines and estimated Video minutes for a saved revision, and under minutes the workspace's Video minutes as whoami reports them with this revision's estimatedMs and fits: whether render_video would find enough minutes for it now (false means it would answer credits_exhausted). Show this to the person before rendering. A quote for a Video with nothing to narrate costs nothing and does not expire while the Video is unchanged; a quote with narration to generate lasts fifteen minutes. Spending above the owner’s cap requires their confirmation in Studio; this tool cannot confirm it.
get_video_quote
A Video's stills: one at the middle of each narration line and each silent scene, rendered in Chromium, up to 8 sent after the answer as small pictures (image content), within 900,000 bytes before base64; picturesOmitted names the rest with frames for get_video_stills for you to show the person, and each with its layout warnings: text_overflow, off_canvas, overlap, low_contrast, min_text_size (too small to read on a phone). Each warning carries key (the code and path, the same across frames and revisions, to diff two reports), class (hidden: something is covered or cut; unreadable: visible but not readable) and size (how much, in the code's unit), and each still's warnings come worst first. warningGroups lists the same warning across stills once, with its frames, worst first: fix the first group and check again. To check particular moments instead, such as a long scene, pass frames: up to 12 frame numbers, or "auto" for the frames where each Sequence starts and ends; each still then has kind "frame". Sixty requests an hour per workspace, with or without frames. While other stills are being made the answer is stills_busy with retryAfterSeconds: wait that long and ask again. Warnings are sent in full unless the answer would be too long: then each still carries its first 10 warnings and warningCounts (a count per code, for all of them), and the answer says warningsTrimmed: true with a note. Pass warnings: "summary" to ask for that shape: counts and at most 10 warnings per still. The same as get_video_stills, under its earlier name.
get_cut_stills
A Video's stills: one at the middle of each narration line and each silent scene, rendered in Chromium, up to 8 sent after the answer as small pictures (image content), within 900,000 bytes before base64; picturesOmitted names the rest with frames for get_video_stills for you to show the person, and each with its layout warnings: text_overflow, off_canvas, overlap, low_contrast, min_text_size (too small to read on a phone). Each warning carries key (the code and path, the same across frames and revisions, to diff two reports), class (hidden: something is covered or cut; unreadable: visible but not readable) and size (how much, in the code's unit), and each still's warnings come worst first. warningGroups lists the same warning across stills once, with its frames, worst first: fix the first group and check again. To check particular moments instead, such as a long scene, pass frames: up to 12 frame numbers, or "auto" for the frames where each Sequence starts and ends; each still then has kind "frame". Sixty requests an hour per workspace, with or without frames. While other stills are being made the answer is stills_busy with retryAfterSeconds: wait that long and ask again. Warnings are sent in full unless the answer would be too long: then each still carries its first 10 warnings and warningCounts (a count per code, for all of them), and the answer says warningsTrimmed: true with a note. Pass warnings: "summary" to ask for that shape: counts and at most 10 warnings per still.
get_video_stills
Find up to 200 recent workspace images to reuse, including names such as Logo from earlier photo requests. If names match more than one image, ask the person which one. Reuse the exact returned id in the Composition.
list_images
The workspace's twenty most recent renders.
list_render_jobs
Move a Video to another Project, where the wall groups it: to.campaignId for an existing Project (get_creation_options lists them), or to.campaignName for one by name (the Project with that name, else a new one). The video keeps its id, revisions, renders, stills, pins, notes and files; a campaignId you hold from before still finds it, and the answer carries the new one. Nothing happens for the Project it is already in.
move_video
Save the next revision of a Video by applying a list of edits to the revision you read, instead of sending the whole composition. Prefer it to update_video for small changes to a revision you have read; send update_video for a rewrite. ops is a list of { op, path, value }: replace, add, remove and test, as in JSON Patch (RFC 6902). path is a JSON Pointer into the composition document (RFC 6901), for example /children/2/children/0/props/x or /title; list positions are numbers, add with "-" at the end of a list appends, and "~1" stands for "/" in a name. test checks a value before the edits that follow it. Edits apply in order to a copy of the revision. If any edit fails (a path that is not there, a failed test) or the result has errors, nothing is saved and the answer names the operation and its path, or gives the same diagnostics as update_video. At most 200 operations and 64 KB. expectedRevision is the revision you read; if someone saved since, the save is refused and nothing changes. Pass withStills: true to get the stills' layout warnings back with the save, instead of calling get_video_stills; a long list of warnings is cut to the first 10 per still, with warningCounts for all.
patch_video
Publish a component definition to the workspace Library as the next version of its name. Published versions never change.
publish_component
Add an image (PNG, JPEG, WebP) audio file (WAV, MP3) or video file (H.264 MP4, optional AAC sound, up to 120 seconds and 25 MB) to the workspace under an id that compositions name. Send files up to 2 MB as bytesBase64; for larger files omit bytesBase64 and PUT the file to the upload URL returned. Give size and sha256 so that a file that arrives different is refused: nothing is stored and the id stays free. Asset ids never change meaning. With kind composition (application/json, no id, no bytesBase64) it returns an upload URL for a composition of at most 1,048,576 bytes and the id to pass to create_video or update_video as compositionAssetId; the upload lasts 30 minutes and one successful save uses it.
register_asset
Render a Video's revision to a finished video: narration for each line, then capture and encode. Uses the workspace's minutes and AI credits for newly generated narration. Get get_video_quote and disclose it first; pass its requestId as quoteId. A Video with narration needs a quote first. A Video with nothing to narrate does not: render_video may be called without a quoteId, and its quote does not expire. Above-cap confirmation belongs to the person in Studio. Refused as render_quality_limit when the workspace cannot render the composition's size or frame rate; the message says the limit. One render runs at a time per workspace: while another is running the answer is render_busy with a message saying so; nothing is wrong with the Video, so wait with get_render_status and try again. Poll get_render_status until done. Pass coverFrame to also get that frame as a full-size PNG (the composition's width by height) from get_render_result as cover; the video itself is unchanged. A frame that is not in the video is refused as invalid_cover_frame, with the frames it may be. The same as render_video, under its earlier name.
render_cut
Render a Video's revision to a finished video: narration for each line, then capture and encode. Uses the workspace's minutes and AI credits for newly generated narration. Get get_video_quote and disclose it first; pass its requestId as quoteId. A Video with narration needs a quote first. A Video with nothing to narrate does not: render_video may be called without a quoteId, and its quote does not expire. Above-cap confirmation belongs to the person in Studio. Refused as render_quality_limit when the workspace cannot render the composition's size or frame rate; the message says the limit. One render runs at a time per workspace: while another is running the answer is render_busy with a message saying so; nothing is wrong with the Video, so wait with get_render_status and try again. Poll get_render_status until done. Pass coverFrame to also get that frame as a full-size PNG (the composition's width by height) from get_render_result as cover; the video itself is unchanged. A frame that is not in the video is refused as invalid_cover_frame, with the frames it may be.
render_video
Ask the person for one to six named photos. Returns a Fablyn page where they sign in and add the photos, and reserved image ids for clients that can transfer bytes directly. Give them the link; after they say done, call get_image_request. The link lasts 24 hours and does not grant account access. No Video is changed.
request_images
Save the next revision of a Video. expectedRevision is the revision you read; if someone saved since, the save is refused and nothing changes. Send the composition inline when it is under about 200 KB; above that, or when a program wrote it, send it as a file: register_asset with kind composition, PUT the document to the upload URL, then pass compositionAssetId in place of composition. The cap of 1,048,576 bytes is the same both ways. Pass withStills: true to get the stills' layout warnings back with the save, instead of calling get_video_stills. A long list of warnings is cut to the first 10 per still, with warningCounts for all, so the save never fails for their length. Pass normalize: true to drop an inert name or from before validation. The same as update_video, under its earlier name.
update_cut
Save the next revision of a Video. expectedRevision is the revision you read; if someone saved since, the save is refused and nothing changes. Send the composition inline when it is under about 200 KB; above that, or when a program wrote it, send it as a file: register_asset with kind composition, PUT the document to the upload URL, then pass compositionAssetId in place of composition. The cap of 1,048,576 bytes is the same both ways. Pass withStills: true to get the stills' layout warnings back with the save, instead of calling get_video_stills. A long list of warnings is cut to the first 10 per still, with warningCounts for all, so the save never fails for their length. Pass normalize: true to drop an inert name or from before validation.
update_video
Validate a video's composition without saving it: every error with the path in the document (and in the component definition, when inside one), the timeline at the estimated speaking rate, and counts for the build to read its headroom from: bytes and nodes after expansion, each beside its cap, and peak, the first frame where the most nodes are on the stage and how many. A valid composition also gets warnings the compiler can give from the written values alone, with basis "exact": off_canvas, overlap, low_contrast and min_text_size for boxes whose position, size, colours and font size are written; boxes laid out by flex or grid, sized by their content or inside a Loop are not judged. Worst first, with warningGroups and warningCounts, the same keys as the stills' warnings. A Map, Chart or Stat construct in the composition adds arrangements beside the timeline: what the compiler chose (a Map's preset, a Chart's axis, legend and value labels, a Stat's layout and shared figure size) and why, with keep to paste back; its layout issues join the warnings with basis "exact", each with the one fix the compiler tried and found to lower the total, and at the frame of the step it belongs to; a move with no room also offers leaving it out (alternative), tried the same way, the message leading with whichever does better and saying what each takes away; a generic overlap on the text the issue names folds into it. Within a construct, warnings sharing a code and a non-null tried change form one cause, with every member path, frame, step and owned node retained in members. textMeasures estimates each text from its face's advance widths: the widest line in pixels and the line count within a written width, with basis "estimated"; texts of figures alike (the same face, weight, size, written box and line count, such as a race's value strips) are one entry whose alike gives how many texts it stands for and the widest line among them; a text with no written width carries room, the width to the far edge of the box it sits in, and tight when it ends within the estimate's slack of that edge, so the stills must confirm it; a text estimated to overflow its written width or height is a text_overflow warning with basis "estimated". Estimates ignore kerning and the browser's line breaking; the stills measure. coverage counts the texts and pictures the exact checks could place at the frames they ran (the stills' frames, then the fewest frames that land in every window in which a text of words is fully visible: a run at its opacity's peak, the middle half of each Sequence that holds it), how many of those move (judged against other texts only where at rest), and why the rest could not be placed: laid out by flex, grid or the flow; sized by their content; transformed, or moving when that transform animates; inside a box whose place is unknown; inside a Loop or a transition; or not on stage at those frames. A text that never wraps, with its line height written, is as tall as its lines; with no width written it is placed at its estimated width, and what is judged with it is basis "estimated". No warnings means clean only for the boxes placed; get_video_stills measures the rest. Pass expanded: true to also get the document after components expand (expanded, a list of nodes with their source paths) when it fits the answer; otherwise expandedTrimmed is true. Send the composition inline, or as compositionAssetId, the id of an upload register_asset (kind "composition") gave you; validating it does not use it up, so the same id then saves with create_video or update_video. Validation failures are recorded to help improve diagnostics. The same as validate_video, under its earlier name.
validate_cut
Validate a video's composition without saving it: every error with the path in the document (and in the component definition, when inside one), the timeline at the estimated speaking rate, and counts for the build to read its headroom from: bytes and nodes after expansion, each beside its cap, and peak, the first frame where the most nodes are on the stage and how many. A valid composition also gets warnings the compiler can give from the written values alone, with basis "exact": off_canvas, overlap, low_contrast and min_text_size for boxes whose position, size, colours and font size are written; boxes laid out by flex or grid, sized by their content or inside a Loop are not judged. Worst first, with warningGroups and warningCounts, the same keys as the stills' warnings. A Map, Chart or Stat construct in the composition adds arrangements beside the timeline: what the compiler chose (a Map's preset, a Chart's axis, legend and value labels, a Stat's layout and shared figure size) and why, with keep to paste back; its layout issues join the warnings with basis "exact", each with the one fix the compiler tried and found to lower the total, and at the frame of the step it belongs to; a move with no room also offers leaving it out (alternative), tried the same way, the message leading with whichever does better and saying what each takes away; a generic overlap on the text the issue names folds into it. Within a construct, warnings sharing a code and a non-null tried change form one cause, with every member path, frame, step and owned node retained in members. textMeasures estimates each text from its face's advance widths: the widest line in pixels and the line count within a written width, with basis "estimated"; texts of figures alike (the same face, weight, size, written box and line count, such as a race's value strips) are one entry whose alike gives how many texts it stands for and the widest line among them; a text with no written width carries room, the width to the far edge of the box it sits in, and tight when it ends within the estimate's slack of that edge, so the stills must confirm it; a text estimated to overflow its written width or height is a text_overflow warning with basis "estimated". Estimates ignore kerning and the browser's line breaking; the stills measure. coverage counts the texts and pictures the exact checks could place at the frames they ran (the stills' frames, then the fewest frames that land in every window in which a text of words is fully visible: a run at its opacity's peak, the middle half of each Sequence that holds it), how many of those move (judged against other texts only where at rest), and why the rest could not be placed: laid out by flex, grid or the flow; sized by their content; transformed, or moving when that transform animates; inside a box whose place is unknown; inside a Loop or a transition; or not on stage at those frames. A text that never wraps, with its line height written, is as tall as its lines; with no width written it is placed at its estimated width, and what is judged with it is basis "estimated". No warnings means clean only for the boxes placed; get_video_stills measures the rest. Pass expanded: true to also get the document after components expand (expanded, a list of nodes with their source paths) when it fits the answer; otherwise expandedTrimmed is true. Send the composition inline, or as compositionAssetId, the id of an upload register_asset (kind "composition") gave you; validating it does not use it up, so the same id then saves with create_video or update_video. Validation failures are recorded to help improve diagnostics.
validate_video
Fablyn ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve Fablyn'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 Fablyn alternatives on ChatGPT?
As of 2026-10-23, Fablyn competes with Runway, HeyGen, AdKraft, AdsTurbo, AI Video Maker, Arcade, Atlabs Ai, Ava Studio for Agents and 36 more in ChatGPT AI Video Generation, ranked by public Discoverability Score.
Where does Fablyn rank in AI Video Generation on ChatGPT?
As of 2026-10-23, Fablyn ranks #18 of 45 in ChatGPT AI Video Generation with a Discoverability Score of 0/100 (Invisible).
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.