- Brand
- Melius
- Category
- Content & Design
- Primary Subcategory
- Graphic Design & Branded Asset Studios
Integration details
Description
Turn product references and a creative brief into ad concepts in your connected Melius account. Create canvases, generate image variations, inspect progress, and open the results in Melius. Uses your existing account permissions, available features, and generation credits. Does not purchase subscriptions or credits.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Graphic Design & Branded Asset Studios
- Secondary Subcategories
- None listed
- Brand
- Melius
- Access
- Account required
- First tracked
- 2026-10-10
- Tool count
- 95
- Geography
- 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 Melius
Get updates when Melius’s Discoverability Score or category rank changes.
Competing in ChatGPT Graphic Design & Branded Asset Studios
View Category95 tools agents can invoke
Add subtitles to an existing video node. The video must already have a finished generation (an asset to process). Returns a run ID — call run_wait to block until complete. The finished run activates the subtitled version automatically; do NOT call node_set_version afterward. Costs ~120 credits per minute of video
run_video_subtitles
Apply a template to a canvas — drops a ready-made workflow as a single collapsed box with input/output ports. Find the template with template_list, then call canvas_content immediately before applying, even on an empty canvas. Auto-positions to avoid overlapping existing canvas content. Pass `inputs` to wire the box's input ports in the same call so it is runnable immediately
template_apply
Only for an explicitly requested Cast workflow. Browse avatar choices ONLY when the member asks to browse or has not named/chosen an avatar. If their prompt names Loopy or any avatar, do not call this tool: pass avatar: {name: 'Loopy'} to cast_prepare or use cast_resolve_selection. The name in the initial request is already their choice. Show saved team and curated avatars for the member to choose. End your turn after showing the picker; a library result is not a confirmed avatar. Do not call cast_prepare or choose an avatar until the member confirms. Browse backgrounds only if explicitly requested; otherwise infer the scene from chat. If a member has already selected an avatar by name but its ID is missing, use cast_resolve_selection; never reopen this picker for an ID lookup. Apps hosts keep unselected IDs private to the picker; other hosts receive numbered choices.
cast_library
Only for an explicitly requested Cast workflow. Only when requested: browse the current database-backed Cast catalog, or pass name for an explicitly named template (exact title, ignoring case) or templateId to read its current revision, script sections and direction. An exact lookup is a confirmed selection; continue to cast_prepare without asking to choose it again. Clarify unavailable or duplicate names. The chat agent must fill placeholders and supply the final script; this does not generate scripts. Pass the returned scriptTemplate reference and creationSettings to cast_prepare.
cast_template
Only for an explicitly requested Cast workflow. Check all exact items from cast_batch_run together, including when the member explicitly asks for progress. Returns data without opening another card. Returns ready, failed, pending and unsubmitted counts, video previews/download references and platform links. Status failures remain unknown, never reported as still generating or failed. Never starts replacement videos; may finish already-requested subtitles. Apps cards call this automatically; text clients repeat until terminal.
cast_batch_result
Only for an explicitly requested Cast workflow. When the member asks to find or choose a prop from their DAM/Assets, search image assets using the same semantic and exact-name ranking as asset_search. Pass an exact filename unchanged as search. Resolve named folders with list_asset_folders, then pass folderId; tags and source filters apply only when requested. Wait for the member's selection; reuse propAssetId without downloading, re-uploading or placing it on a visible canvas. Without Assets access, offer upload/skip. An already pasted/attached or Cowork project image goes directly to cast_prop_upload without opening this picker.
cast_prop
Only for an explicitly requested Cast workflow. Only when the member explicitly asks to browse or choose voices: show inline audio previews, team voices, searchable stock voices, and Auto. Otherwise infer from chat and default to Auto without opening this picker. Wait for their choice when shown.
cast_voice
Finalize a file upload after running the curl command from file_upload. Pass the metadata from file_upload plus the etag and file size from the curl output
file_upload_complete
Convert an existing video node into a GIF. Works on video nodes and on file nodes that hold an uploaded video. The video must already have a finished generation (an asset to process) and be at most 30 seconds long. A GIF is always made this way: when the user asks for a GIF and no video exists yet, generate a short video first, then convert it here. Returns a run ID — call run_wait to block until complete. The finished run activates the GIF version automatically; do NOT call node_set_version afterward. The GIF becomes the node's active output, so the node stops working as a source for video edges and other video tools until the user switches back to the video version. Costs 60 credits
run_video_gif
Create a canvas in a project. Title must be unique within the project (case-insensitive) — use canvas_list to check existing names first
canvas_create
Create a comment thread on a canvas at a position. Mentioned team members may receive notification emails; posting again creates another comment and may send another notification
comment_create
Connect two nodes with an edge. custom_text, file, and pdf nodes are source-only: use them as srcNodeId, never dstNodeId. Source node ID. When the destination needs all outputs of one type from a group, send one edge from the group ID, never one edge per child. This applies to text analysis nodes too: {"srcNodeId":"<groupId>","srcHandle":"image","edgeType":"image","dstNodeId":"<analysisNodeId>"}. Both default and unified groups expand only children of that media type. A child ID connects only that child; use child IDs for a deliberately selected subset. A group's image output excludes video last frames; use the video child's own last_frame handle for that. To feed a template box (groupType template), use the box as dstNodeId and set dstHandle to the target input port id (from template_list or the box's inputPorts).
edge_create
Create multiple edges in one call. custom_text, file, and pdf nodes are source-only: use them as srcNodeId, never dstNodeId. Source node ID. When the destination needs all outputs of one type from a group, send one edge from the group ID, never one edge per child. This applies to text analysis nodes too: {"srcNodeId":"<groupId>","srcHandle":"image","edgeType":"image","dstNodeId":"<analysisNodeId>"}. Both default and unified groups expand only children of that media type. A child ID connects only that child; use child IDs for a deliberately selected subset. A group's image output excludes video last frames; use the video child's own last_frame handle for that.
bulk_create_edges
Create multiple nodes — and edges — in one call. Always call canvas_plan_layout first to get positions and edges, then pass both into this tool. Provide an id on each node you want to wire, then reference those ids in the edges array. custom_text and file nodes are source-only: use them as srcNodeId, never dstNodeId. Do NOT create group-type nodes here to group existing nodes — use node_group for that. If the response includes geometryCorrections, use placed coordinates (not your input) for show_presence bounds. Node overlaps are auto-corrected; group placements without groupId still fail on overlap — pass groupId when placing inside an existing group. Source node ID. When the destination needs all outputs of one type from a group, send one edge from the group ID, never one edge per child. This applies to text analysis nodes too: {"srcNodeId":"<groupId>","srcHandle":"image","edgeType":"image","dstNodeId":"<analysisNodeId>"}. Both default and unified groups expand only children of that media type. A child ID connects only that child; use child IDs for a deliberately selected subset. A group's image output excludes video last frames; use the video child's own last_frame handle for that.
bulk_create_nodes
Create a node on a canvas. Changes sync to connected browser clients in real-time. When inputEdges is available and the new node consumes existing canvas nodes, pass it so the node is placed downstream and connected in this call; do not create it first and call edge_create later. For file nodes: create with nodeType 'file' and mediaType 'image' first (without src), then call file_upload with the nodeId to add the image. NEVER pass src for file nodes — it creates a broken node that displays the image but cannot be used for generation. Always use the file_upload workflow for ANY image from ANY source (chat attachments, project files, local paths).
node_create
Create a project with an empty canvas. Returns the project with its canvasId. Title must be unique within the team (case-insensitive) — use project_list to check existing names first
project_create
Save a reusable team skill (a named set of agent instructions the user can apply from chat). Only call this when the user explicitly asks to save, create, or remember a skill — never proactively.
create_agent_team_skill
Create a sticky note on a canvas, for labels, character-name bars or annotations. Read canvas_content first to align it with existing content. Use heightMode manual to keep an exact height. Returns the saved note with its ID and geometry; changes sync to open canvases.
note_create
Delete a canvas and all its nodes/edges
canvas_delete
Delete an edge from a canvas
edge_delete
Delete multiple nodes from a canvas in one batch. First call without confirmed to surface the required confirmation, then retry with confirmed:true only after the user explicitly approves — if the user does not approve, do not retry.
bulk_delete_node
Delete exactly one node from a canvas. First call without confirmed to surface the required confirmation, then retry with confirmed:true only after the user explicitly approves — if the user does not approve, do not retry. Use bulk_delete_node instead when deleting multiple nodes
node_delete
Render an interactive visual preview of a canvas inline in the chat. Shows all nodes, edges, and media thumbnails with an 'Open in Melius' link
display_canvas
Only for an explicitly requested Cast workflow. Get an authorized download link for the video in this exact run. Can finalize already-requested paid subtitles and update the saved output before returning the link; also records the download. The inline video has a Download video button. Never start a replacement video to retrieve a download.
cast_download
Primary tool for downloading creative outputs. Creates a new stored ZIP export of generated creatives (or specific nodes) from a canvas and returns a presigned download URL. May attach the export to the connected agent session. Does not regenerate or change source media. Use this instead of run_download or bulk_run_download unless you need outputs from a specific run
creative_download
Create or replace the stored ZIP export of leaf outputs from a completed bulk run and return a presigned download URL. May attach the export to the connected agent session. The bulk run must be finished — use bulk_run_get to check status first. Does not regenerate or change the source media
bulk_run_download
Create or replace the stored ZIP export for a finished node run and return a presigned download URL. May attach the export to the connected agent session. The run must be finished — use run_get to check status first. Does not regenerate or change the source media
run_download
Only for an explicitly requested Cast workflow. Look up an existing Cast avatar or background named in the member's prompt, including their first request: 'make a UGC video of Loopy talking about chemistry class' already selects Loopy. Match names ignoring case and return the exact ID without a picker. No prior inline selection is required. Also recovers lost selection context. Never use cast_library for a named-avatar lookup. Clarify only missing or ambiguous names.
cast_resolve_selection
Return the supplied workflow plan as structured data for the calling assistant to present in the conversation. Validates and echoes the title and steps; it does not save a plan, update a pinned checklist, send notifications, or modify a canvas. Call before the first canvas mutation with all intended steps, then again after each step transition (prior step "complete", next step "active" in the same call). Reuse stable step ids across updates. Skip for pure Q&A or read-only inspection.
plan_update
Only for an explicitly requested Cast workflow. Generate a requested batch of 2–20 Cast videos with ONE native MCP approval and ONE result card. First show cast_batch_prepare and use its normalized input unchanged. Validates all videos and total estimated budget before submitting any; existing credit and queue limits apply. Stops further submissions on errors or cancellation, preserving accepted references. Not idempotent: never retry an ambiguous submission. The card shows all results and a link to Cast in the platform. Use this instead of separate cast_run calls for a batch.
cast_batch_run
Only for an explicitly requested Cast workflow. Generate four avatar or background images from a brief. Uses Cast's generation recipe and credits. Returns a run; inline cards wait automatically. In text-only clients use cast_wait, then cast_result once to show the choices. Show the choices and wait for the member to select one before saving or making a video.
cast_render
Compatibility name for cast_run with the same input, native permission and paid generation behavior. Prefer cast_run for new requests. Call only one of these tools per video; never switch names to retry an ambiguous start or bypass denied permission. Submit every requested video before waiting for any render. Apps clients get an automatically updating result card; text clients poll after all submissions.
cast_video
Read the Melius product documentation hosted at docs.melius.com. Call with no slug to list every available doc page (table of contents). Use an exact slug returned by that index to fetch the full markdown content of a page. Use for billing, plans, models, settings, uploads, sharing, member roles, and marketer recipes. For canvas mechanics (nodes, edges, model selection workflow), prefer get_guide('getting-started') instead.
get_docs
Get canvas metadata (title, projectId, settings). For full content use canvas_content instead
canvas_get
Read live canvas nodes, edges, sticky notes (body, geometry, groupId and heightMode), and modelPresets (the canvas-wide default model and mode per category). A focused read includes the node's incident edges; history includes saved versions and assets. For a whole-canvas read, pass canvasId only; omit nodeId and includeAllVersions. For one node, copy its ID from a tool response or an explicit node reference; never substitute canvasId, invent an ID, or pass the all-zero UUID. For saved history, supply that real nodeId and includeAllVersions: true; discover the node first if its ID is unknown. Use nodeQuery to find named character/product references across the whole canvas, including outside a truncated sample. It matches titles case-insensitively and returns at most 10 compact candidates in nodeLookup, with empty nodes/edges (not an empty canvas). Read a candidate with nodeId to inspect its current asset/version before using it. Continue with nextOffset only when needed to resolve the reference.
canvas_content
Get a detailed guide for using this platform. Call get_guide('getting-started') before starting any workflow. Skill topics (cinema, ugc-ads, etc.) return domain-specific creative direction for writing better prompts
get_guide
Get the most recent run for every node on a canvas — useful for checking which nodes have been generated
run_latest
Show which model is used when none is specified — the platform Auto default for each category and variant, including resolved default capabilities like supportedDurations, supportedAspectRatios, supportedResolutions, and requiredInputs
model_defaults
Get the current state of a bulk run (returns immediately). Prefer bulk_run_wait after bulk_run_start; use bulk_run_get only for one-shot status checks. Status: pending, running, finished, failed, cancelled. Once the run is final it carries `credits` (`charged`, `refunded`); a final run without `credits` is one whose charges you cannot see, so say so. Read the run before answering what a result costs or whether its credits come back, and state a charge or refund only from its `credits`. A generation that delivered any output is charged and is not refunded, even if the result isn't what the member wanted, the member calls it an error, or some of its outputs failed: say it stays charged, and offer both emailing [email protected] and trying another model for a different result. A generation that delivered nothing is refunded automatically, and any refund shows in the run's `credits` (`credits.refunded`). Never promise or predict a refund. Refunds show in Team settings → Usage → Generation history.
bulk_run_get
Get a project by ID. Returns id, title, description, canvasId
project_get
Get the current state of a node run (returns immediately). Prefer run_wait after run_start; use run_get only for one-shot status checks. Status: pending, running, finished, failed, cancelled. Once the run is final it carries `credits` (`charged`, `refunded`); a final run without `credits` is one whose charges you cannot see, so say so. Read the run before answering what a result costs or whether its credits come back, and state a charge or refund only from its `credits`. A generation that delivered any output is charged and is not refunded, even if the result isn't what the member wanted, the member calls it an error, or some of its outputs failed: say it stays charged, and offer both emailing [email protected] and trying another model for a different result. A generation that delivered nothing is refunded automatically, and any refund shows in the run's `credits` (`credits.refunded`). Never promise or predict a refund. Refunds show in Team settings → Usage → Generation history.
run_get
The only correct way to group nodes. Computes group bounds from node positions and converts child coordinates correctly. Never create a group with node_create or bulk_create_nodes and reparent children manually. Group type. Use "default" for organizing nodes, including mixed media. Preserve "unified" when explicitly requested. Both default and unified groups expose outputs by media type; no conversion or ungrouping is needed to use a group output. A child ID connects only that child.
node_group
Materialize the team's agent-context images on the canvas as a default group with matching description text nodes. Use this when the user references their team's brand/style/reference images and they aren't yet on the canvas. The team's active context is resolved automatically — pass `contextId` only if you have it explicitly. Idempotent: calling twice returns the existing group. The output references array maps each imageNodeId to its matching descriptionNodeId and includes preformatted imageMention/descriptionMention strings. When wiring imported references downstream, paste those exact mention strings into prompt lines like "Description for @[image]{imageNodeId} is @[description]{descriptionNodeId}"; do not substitute filenames, raw UUIDs, or raw description text.
import_agent_context
List the current team's Files folders (id, name, full path, and file count). Use before asset_search when the member asks to look in a specific folder (e.g. "search my logos folder", "look in brand assets"). A case-insensitive exact name or full path wins over partial matches. Pass the best match's id as asset_search's folderId to scope the search to that folder and its subfolders. If several matches remain at the best tier, ask the member which one using their full paths; if none match, say so.
list_asset_folders
List stock ElevenLabs voices for audio nodes in text-to-speech or audio-to-audio mode. Returns { voices: [{ voiceId, name, category, previewUrl, labels }] }. Use the filter parameters (search, gender, age, accent, language, quality, useCase) to narrow the catalog instead of scanning 100 voices — search by name when the user names a voice (e.g. 'Adam', 'Bella'), or by descriptor when the user describes one (e.g. 'villain', 'friendly female narrator'). Pass the chosen voiceId to node_create / node_update / bulk_create_nodes / run_start when running those modes — never guess voice ids. When hasMore is true, pass nextCursor as cursor with the same filters to read the next page. For team-owned voices the user calls 'custom voices', call custom_voice_list instead and pass the returned id as customVoiceId
audio_voice_list
List canvases in a project. Returns { data: [...], total }
canvas_list
List comment threads on a canvas
comment_list
List the team's uploaded custom fonts for use with the Better Fonts model (better-font-32b). Returns { data: [{ id, familyName, previewUrl, ... }] }. To render text in one of these fonts, set the better-font-32b node's modelConfig.font to { source: "custom", familyName } using the exact familyName returned here. For a standard/global typeface the team has NOT uploaded, skip this tool and pass { source: "google", familyName } with any Google Fonts family name (e.g. "Playfair Display", "Inter"). Call this whenever the user asks for text rendered in a specific brand or custom font — never guess a custom family name.
custom_font_list
List the team's saved custom voices (the 'Custom' tab of the voice picker — voices the team cloned, designed, or imported from ElevenLabs). Returns { voices: [{ id, name, description, previewUrl, ... }] }. Pass the chosen voice's id as customVoiceId to node_create / node_update / bulk_create_nodes / run_start when running text-to-speech or audio-to-audio. Use this whenever the user references a 'custom voice', a team-specific voice, or names a voice that does not appear in audio_voice_list — never guess. Stock and custom voices use distinct id namespaces
custom_voice_list
List the presenter avatars available to the HeyGen Digital Twin video model (heygen-digital-twin). Returns { people: [{ name, variants: [{ avatar, description }] }], totalPeople, totalAvatars }, one entry per presenter, each with their poses and settings. Pass a chosen `avatar` as modelConfig.heygenAvatar on node_create / node_update / bulk_create_nodes / run_start; a run of that model fails without one, and avatar ids must never be guessed. Use `search` to narrow by name, pose, or setting. The catalog carries no gender, age, or ethnicity metadata, only names and poses. Do not infer these characteristics from names or avatar ids. If the user requires them, explain the catalog limitation and ask the user to choose a presenter. When the user wants several DIFFERENT presenters, take one variant from each of several `people` entries. Different variants of one person are the same presenter in a different pose.
heygen_avatar_list
Melius ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve Melius'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 Melius alternatives on ChatGPT?
As of 2026-10-10, Melius competes with 3aqel Arabic Creative, Adobe Express, AppLaunchFlow, Canva, Canvora, Dobby Ads, esigna, Goldie and 10 more in ChatGPT Graphic Design & Branded Asset Studios, 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.