- 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
- 140
- 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 Melius
Get updates when Melius’s Discoverability Score or category rank changes.
Competing in ChatGPT Graphic Design & Branded Asset Studios
View Category140 tools agents can invoke
Attach an existing team asset as a logo, icon or reference, or edit its kit-only name, role label and order. Import a new attachment with brand_kit_import_file first. replacesAssetId atomically replaces a file when explicitly requested. This changes the kit; it does not place a file on a canvas.
brand_kit_asset_attach
Add subtitles to the selected finished video on a video, file, or stitch node. Run directly on that node; the result becomes a new version on the same node. For a stitch node, wait for every included clip and audio overlay to finish, then render the final stitch before adding subtitles. If the server asks to re-stitch, do that first; never bypass the check unless the member explicitly requests captions on a partial or outdated preview. Tell the member that re-stitching creates a fresh output that needs subtitles applied again; the captioned version remains in history. 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
Request visual analysis of a Brand Kit reference image when requested. Returns analysis status; read brand_kit_asset_style for progress. Retry a failed analysis only when requested; do not repeatedly start analysis while one is pending.
brand_kit_asset_analyze
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
Publish the reviewed Brand Kit for creative use only after the member explicitly approves its current content. Read and show brand_kit_review first. Creating, extracting, or editing a kit does not authorize approval.
brand_kit_approve
ChatGPT only: add images or videos the member attached in this ChatGPT conversation to the canvas as file nodes, so they can be wired into generations as references. ChatGPT supplies each file's download_url and file_id; pass the attachments the member means, max 5 per call. In any other client, upload attachments with file_upload instead. Returns added node IDs.
attachments_to_canvas
ChatGPT only: add images the member attached in this ChatGPT conversation to a saved agent skill in the active Melius team. Only call this when the member explicitly asks to add images to a skill. ChatGPT supplies each file's download_url and file_id; pass the attachments the member means (up to 20 images per skill, 10 MB each). In any other client, use upload_agent_team_skill_asset instead. Returns the updated skill; set an image's description afterwards with update_agent_team_skill_asset.
attachments_to_agent_team_skill
Tidy canvas items into a grid, like the canvas Autoformat button, in one call instead of moving nodes one at a time. Pass nodeIds (siblings, laid out in the order given) or groupId (that group's contents). Optional layout sets the column count, gaps and group padding; values left out use the team's Autoformat spacing. Items keep their current top-left corner, and a group keeps its position and resizes to fit
canvas_autoformat
Only for an explicitly requested Cast workflow. Only when the member asks about their past Cast videos: list their own (scope mine) or the team's finished videos (scope team), newest first, with each video's settings in the exact shape cast_prepare accepts. To remix one, pass its settings to cast_prepare with only the member's requested changes. To reuse just its script, pass its sections with the current cast. notCarried names what the video used that a remix cannot restore; say so before preparing. Page with nextCursor.
cast_history
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; the picker has All, Custom avatars and Melius avatars tabs. When the member wants only Melius-curated avatars pass roster: 'melius', or roster: 'custom' for only their team's own. 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. When the result says multiple, the member can pick several; pass them as props. 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. Narrow the library with filters (gender, age, language, accent, quality, use case) when the member describes the voice they want. Each library voice comes with what it sounds like and its tags; in a client without inline cards, list them numbered with that description. Otherwise infer from chat and leave the voice to the avatar's saved one without opening this picker. Wait for their choice when shown.
cast_voice
Finish an upload prepared by brand_kit_upload_begin only AFTER transferring its actual bytes. Use the returned metadata and real transfer ETag. Returns assetId for creating a kit from a PDF or attaching a logo/reference; does not approve or attach automatically.
brand_kit_upload_complete
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
Finish an image upload started by upload_agent_team_skill_asset after running its transfer. Pass the metadata from upload_agent_team_skill_asset plus the etag and file size from the transfer output. Returns the updated skill.
complete_agent_team_skill_asset_upload
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
When requested, create a Brand Kit from the member's eligible company email domain. Reuses a kit if one exists; returns why no eligible domain was found. Review the result before approval.
brand_kit_create_from_email
Create a reusable Element in the team's library from existing image assets when the member asks to save a subject as an element. Supports avatars, products and general subjects, with guidelines, per-image descriptions and an optional avatar voice. Starts reference-image generation and returns the saved element's id and status. After creation, place it on the current canvas immediately with element_place, including while generating, unless the member explicitly asks for library-only creation. The canvas shows generation progress and updates when ready. Do not repeat creation to poll status or retry an uncertain result; search for the saved element first.
element_create
Create a canvas in a project. Title must be unique within the project (case-insensitive) — use canvas_list to check existing names first. The member only sees the canvas they have open, so give the member its title and canvasUrl from this response
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 local files: create with nodeType 'file' and mediaType 'image', 'video', or 'audio' to match the file (without src), then call file_upload with the nodeId to add the asset. NEVER pass src for file nodes — it creates a broken node that displays the image but cannot be used for generation. URL and attachment import tools create their own file nodes.
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 or annotations. Width and height are set separately (w minimum 240 with no maximum width, h 120–960); a short wide note works as a label bar. Choose a color: yellow (default), pink, blue, green or purple. Text stays at its chosen size when the note is resized and long text scrolls inside the note. Read canvas_content first to align it with existing content. Returns the saved note with its ID, color and geometry; changes sync to open canvases.
note_create
Delete the identified Brand Kit only after explicit member confirmation. List/read the kit first to identify it; never delete a kit merely because an update or extraction failed.
brand_kit_delete
Only for an explicitly requested Cast workflow. Delete one of the team's saved avatars (kind custom only) or backgrounds. Only call this when the member explicitly asks to delete it; resolve it with cast_resolve_selection and confirm it by name first. Videos already made keep it. Curated avatars and avatar elements cannot be deleted here.
cast_library_delete
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
Delete a sticky note from a canvas. Read canvas_content.notes first to find its noteId. Returns the deleted noteId; changes sync to open canvases.
note_delete
Delete a saved agent skill from the active Melius team, including its uploaded images. Only call this when the user explicitly asks to delete or remove that skill; confirm the skill by name first.
delete_agent_team_skill
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. Call this as the last step after you change a canvas, so the member sees the work even when they have a different canvas open
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. The ZIP includes manifest.json, which maps each file to its asset, node, version and run. 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. The ZIP includes manifest.json, which maps each file to its asset, node, version and run. 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. The ZIP includes manifest.json, which maps each file to its asset, node, version and run. 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
Edit explicitly requested Brand Kit fields. Read brand_kit_review first. Lists replace the whole list: preserve entries the member did not ask to remove. Send that review's expectedUpdatedAt; on 409 reread and reconcile the requested edit, never retry unconditionally. Saving does not approve a draft.
brand_kit_update
Save requested changes to a kit's logos or references together: reorder, rename or remove entries. Read brand_kit_review first and send its expectedUpdatedAt. Omitted files remain unchanged; list removals only when the member explicitly requests them. On 409 reread and reconcile, never drop the revision check.
brand_kit_asset_section_update
Heart or unheart a voice for the member from the inline Cast voice list.
cast_voice_favorite
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. Honor denied permission. After an uncertain submission, check cast_batch_result with every returned item; replay an unconfirmed item through cast_run only with its original attemptId and exact prepared input. Preparing again creates a new paid attempt. 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 avatar or background images from a brief: four interpretations of one prompt. For a member who wants avatars but has nobody in mind, pass people instead of prompt: 4 to 12 different people, each with a voice, like the studio's Generate for me. Put every person the member asked for, up to the limit, in one call so one card holds them all. For an avatar from one prompt, pass the voice that suits it; the member hears it and can change it. 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 with each person's name and voice. Show the choices and wait for the member 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
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-11-02, Melius competes with 3aqel Arabic Creative, ACE Carousel Creator, Adobe Express, App Listing Screenshots, AppLaunchFlow, AppScreenshotStudio, Beveled, Calligraphy Maker by Studio99 and 26 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.