Codesign

ly.imgPublished by img.lyv0.6.0Updated Nov 5, 2026

Local design engine for AI agents: create, edit and export real, editable designs.

VerifiedSTDIODesktop onlyFiles & StorageMedia & DesignAI & ML

Overview

AI-generated overview

Local IMG.LY CoDesign server that lets an assistant create, edit, preview and export real layered designs, videos and print files through a CE.SDK engine.

What you can do
  • Create and edit designs by running JavaScript against a live CE.SDK canvas, with previews of rendered pages
  • Import existing files (InDesign, Photoshop, PowerPoint, PDF, images, Lottie) and open, rename or list saved designs
  • Export deliverables as print PDF or PDF/X, images, SVG, HTML, InDesign, PSD, MP4 video or audio
  • Search, add and generate assets, including AI image, video, speech and music generation
  • Track work with acceptance checklists, a judge scorecard and a shareable browser editor link
  • Inspect server status and activity, and read bundled skill files
When to use it
Useful when an assistant should produce or revise real design files rather than describe them: social and print layouts, resizing one design across formats, rebranding or localizing existing InDesign, PSD or PDF files, and turning a poster into a short video.
Requirements
Runs as a local stdio process via the npm package @imgly/codesign-mcp, fetched with npx; Node.js 18 or newer on PATH (22.15 or newer for direct npx recipes). No account needed to start; AI asset generation and some features need a free IMG.LY sign-in through the login tool. Network access to IMG.LY hosts for runtime download, assets, sign-in and generation.
Before you install
Designs are saved into a local workspace and edits are written immediately, with no separate save step. The runtime is downloaded from IMG.LY's release server and checks for updates every six hours. Usage data and error reports go to IMG.LY and can be turned off with DO_NOT_TRACK=1 or IMGLY_TELEMETRY=off, but the engine's own licence check and usage reporting cannot. AI generation sends prompts to gateway.img.ly and may consume account quota. Video and audio export are unavailable on the…

Installation

In SourceWeft

  1. Open Codesign in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

CoDesign

The design layer for the agent era.

Create posters, social posts, videos and print layouts from a prompt, then change any part of them yourself. CoDesign gives you a professional design engine. Every headline, image, shape and clip stays its own layer, so you can swap a font or move a logo without starting over.

Start from scratch or from files you already have. InDesign, Photoshop, PowerPoint and PDF files open with their layers intact. Then resize one design for every social format, translate it with the layout reflowing to fit (Arabic and other right-to-left scripts included), apply your brand colors and fonts, or check it against your guidelines.

Every design opens in a built-in editor when you want to fix something by hand. Export print-ready PDFs with CMYK color and bleed, Photoshop and InDesign files your team can keep working on, or video for social.

Built by IMG.LY on the IMG.LY design engine. Runs on your computer. No account needed to start.

CoDesign ships as an MCP server (plus a plugin for Claude Code, Codex, Copilot CLI, Antigravity and Cursor) that hands your agent IMG.LY's CE.SDK CreativeEngine — the same production engine behind IMG.LY's commercial SDKs. The plugin runs the launcher it carries (what it runs); every direct recipe below spawns the published npm package @imgly/codesign-mcp over stdio; no separate install step — npx fetches it on first use.

Use cases

  • A social team turns one campaign into every format, from Instagram posts to short videos.
  • An agency opens an old InDesign file, rebrands it, and exports it back as .idml.
  • A global brand translates print ads and video ads without breaking the layout.
  • A designer generates a first draft, then moves and restyles layers by hand in the visual editor.
  • A brand manager checks assets against guidelines before they go out.

Formats

  • Import: InDesign (.idml), Photoshop (.psd), PowerPoint (.pptx), PDF, images (PNG, JPEG, GIF, WebP, SVG) and CoDesign (.imgly) files.
  • Export: PDF and print-ready PDF/X, PNG, JPEG, WebP, SVG, HTML, InDesign (.idml), Photoshop (.psd), MP4 video, WAV and M4A audio, and CoDesign (.imgly). Video and audio export need the native engine; Windows runs the WASM engine, which has no video.

What you can make

Ask your agent, in plain language:

  • Resize for every channel — "Take this Instagram post and make the Story, LinkedIn and X versions."
  • Make an image editable (needs the free IMG.LY sign-in) — "Split this flat product photo into layers, put the product on our brand background and make it editable."
  • Restyle an existing PDF — "Import this datasheet.pdf as an editable design, restyle it with our brand kit, and export A4 and web versions."
  • Generate many from a CSV — "One speaker card per row in speakers.csv, same template, all editable."
  • Prepare for print — "Turn this flyer into an A4 print PDF with 3 mm bleed and CMYK."
  • Update an existing design — "Open last year's flyer.psd, swap the date and venue, export again."
  • Localize a design — "Translate this poster into German and re-fit the layout so nothing overflows."
  • Make a short video (generated music and voiceover need the free IMG.LY sign-in) — "Turn this poster into a 15-second vertical reel: animate the headline in, cut between the three product shots, and put a music bed and a voiceover under it."
  • Create a launch graphic — "Make the v2.0 launch graphic with our logo and brand colors, in X, LinkedIn and OG-image sizes."
  • Create App Store graphics — "Make the App Store screenshots and the Play Store feature graphic from these five screen captures, on-brand, all sizes."

How it works

Three layers, one product:

  • The plugin — installs the MCP server and connects it to your agent. This is the piece you install.
  • The MCP server (@imgly/codesign-mcp) — exposes the design tools (edit, preview, export, list, history, …) over MCP, driven by tool calls from any agent host, and serves the skills and design rules your agent draws on to design well (brand, localize, resize, and quality-check its own output), always matching the server's version.
  • The CE.SDK CreativeEngine — IMG.LY's real, headless design engine that does the actual layout, rendering, and export.

Licensing

This repository — the plugin, marketplace manifests and documentation — is released under the MIT License. The CoDesign engine itself, distributed as the npm package @imgly/codesign-mcp, is proprietary software from IMG.LY and free to use locally. The full terms ship inside the package as LICENSE.md. The launcher in plugins/codesign/runtime/ is not under the MIT License either: its NOTICE names its licences.

Why a real engine matters

Every other design agent draws on a web canvas — a quick fix that breaks on the hard problems. CoDesign commands a production engine matured over years across print, video, and social:

  • True print & color fidelity — CMYK, bleed, and ICC profiles, not just RGB screen output.
  • Deterministic output — renders identically everywhere, independent of browser or config.
  • Native performance — a purpose-built engine that stays fast at scale and under heavy assets.
  • Full compatibility — imports InDesign, PSD, PowerPoint (PPTX) and PDF; exports print-ready PDF, image, video, InDesign, PSD and HTML.

What the plugin runs

  • A local MCP server. Claude Code starts runtime/codesign mcp; Codex, Copilot CLI, Antigravity and Cursor (untested) start node runtime/codesign-shim.mjs mcp in the plugin folder. Both run over stdio. IMG.LY's CE.SDK engine imports, renders and exports on your machine, from your files, and designs are saved in a local workspace.
  • A launcher, and the runtime it installs. The plugin carries only the launcher: runtime/codesign (codesign.cmd on Windows), readable JavaScript modules in runtime/codesign-shim/ that run on your Node.js, and runtime/snapshot.json, the tool list it answers with until the runtime is installed. The runtime (CoDesign with its own Node.js, a CE.SDK engine and its assets) is downloaded into ~/.codesign from IMG.LY's release server, https://get.codesign.co/runtime/<channel>/, and checks there for an update every 6 hours. Every download is listed in a release manifest signed with IMG.LY's Ed25519 key, which the launcher carries, and must match the SHA-256 and size the manifest gives; a manifest older than the last one accepted is refused.
  • No hooks. The plugin runs nothing at session start. When the runtime is missing, the server answers from runtime/snapshot.json and installs it in the background on its first start.
  • What your agent reads from it. The MCP instructions, tool descriptions, skills and prompts ship inside the signed runtime release (until it is installed, in the plugin's runtime/snapshot.json); nothing fetches them from anywhere else.
  • Where it connects:
    • get.codesign.co: runtime downloads and update checks.
    • cdn.img.ly: templates, fonts, other default assets and the browser editor.
    • img.ly and clerk.img.ly: the IMG.LY sign-in, only when you sign in with the login tool.
    • gateway.img.ly: only for AI generation.
    • api.img.ly: usage data, and Sentry (sentry.io): error reports. In Claude Code, turn them off in the plugin's settings (Send usage data to IMG.LY, Send error reports to IMG.LY); on any host, set DO_NOT_TRACK=1 or IMGLY_TELEMETRY=off.
    • Addresses a design, you or your agent name, such as an image or font URL: fetched and copied into your workspace.
    • IMG.LY's CE.SDK engine, which renders and exports, itself checks its licence with IMG.LY (api.img.ly) and reports its own usage there when it starts; neither the plugin's two settings nor DO_NOT_TRACK turn that off.

Requirements & known limitations

Read this first — the failure modes below are silent.

  • Node.js is required and is not provided. The plugin needs Node.js ≥ 18 on PATH: Claude Code until the runtime is installed, Codex, Copilot CLI, Antigravity and Cursor (untested) on every start. On an older Node the server says what to install. With no Node at all the host cannot start it and reports the server as failed with no useful reason — typically spawn node ENOENT, local: 0 or MCP error -32000. The direct recipes need Node.js ≥ 22.15. Install Node first: https://nodejs.org, or see https://codesign.co/install.
  • The plugin updates itself. It installs the runtime of its channel and checks for an update every 6 hours; no plugin update is needed to move forward.
  • Pin @0.6.0 — every direct recipe names that exact version. Each release republishes this repo with a new pin — update your recipe to move forward.
  • Windows: the direct recipes need WSL. Hosts that spawn npx directly hit spawn npx ENOENT (anthropics/claude-code#58510). The plugin runs no npx and needs no Git. Claude Code, Codex and Copilot CLI start it natively on Windows; Antigravity and Cursor on Windows are untested. Without Node, Claude Code can use the plugin if you first run irm https://get.codesign.co/runtime/stable/install.ps1 | iex.

Install

Claude Code

Install the plugin from the marketplace:

bash
claude plugin marketplace add imgly/codesignclaude plugin install codesign@imgly-codesign

Or add the MCP server directly, without the plugin:

bash
claude mcp add --scope user codesign -- npx -y @imgly/[email protected] stdio

Codex

Install the plugin from the marketplace:

bash
codex plugin marketplace add imgly/codesigncodex plugin add codesign@imgly-codesign

Or add the MCP server directly, without the plugin:

bash
codex mcp add codesign -- npx -y @imgly/[email protected] stdio

Antigravity CLI

Clone the repo and install the plugin folder:

bash
git clone https://github.com/imgly/codesignagy plugin install ./codesign/plugins/codesign

Or add the MCP server directly, without the plugin:

bash
agy mcp add codesign -- npx -y @imgly/[email protected] stdio

GitHub Copilot CLI

Install the plugin from the marketplace:

bash
copilot plugin marketplace add imgly/codesigncopilot plugin install codesign@imgly-codesign

Or add the MCP server directly, without the plugin:

bash
copilot mcp add codesign -- npx -y @imgly/[email protected] stdio

Cursor

In Cursor, open Customize, choose From GitHub Repository, enter https://github.com/imgly/codesign, then Install the CoDesign plugin (untested). On a Teams or Enterprise plan, an admin can instead add the same URL as a team marketplace with Import from Repo, and teammates install CoDesign from Customize.

Or copy the plugin folder into Cursor’s local plugins, then run Developer: Reload Window (untested; on Enterprise, an admin must allow local plugin imports):

bash
d=$(mktemp -d) &&git clone --depth 1 https://github.com/imgly/codesign "$d/codesign" &&mkdir -p ~/.cursor/plugins/local &&rm -rf ~/.cursor/plugins/local/codesign &&cp -R "$d/codesign/plugins/codesign" ~/.cursor/plugins/local/ &&rm -rf "$d"

Or add the MCP server directly, without the plugin, in .cursor/mcp.json:

json
{  "mcpServers": {    "codesign": {      "command": "npx",      "args": [        "-y",        "@imgly/[email protected]",        "stdio"      ]    }  }}

Other MCP hosts

Every other host spawns the same stdio server — only the config file and the top-level key differ. Add this block to the host’s MCP config:

json
{  "mcpServers": {    "codesign": {      "command": "npx",      "args": [        "-y",        "@imgly/[email protected]",        "stdio"      ]    }  }}
HostConfig fileNote
Windsurf~/.codeium/windsurf/mcp_config.jsonas-is
VS Code.vscode/mcp.jsonuse the key servers instead of mcpServers
Zedsettings.jsonuse the context_servers shape below

VS Code (servers key):

json
{  "servers": {    "codesign": {      "command": "npx",      "args": [        "-y",        "@imgly/[email protected]",        "stdio"      ]    }  }}

Zed (context_servers):

json
{  "context_servers": {    "codesign": {      "command": {        "path": "npx",        "args": [          "-y",          "@imgly/[email protected]",          "stdio"        ]      }    }  }}

Beyond your machine

CoDesign runs free on your machine today. When you need more — always-on hosting, your own infrastructure (VPC / on-prem), or a fully bundled design agent that lives in the canvas — the same building block graduates by changing config, not vendors. No lock-in. Talk to us: [email protected].

Support

Questions or issues: [email protected]. This distribution is generated from IMG.LY's source repository.

Source: README.md at commit d19fb44

Tools

17

edit

Edit the CE.SDK canvas by running JavaScript against the live CreativeEngine. The result becomes the session’s current state. ⚠ BEFORE your first `edit`, read `skill://codesign/api/SKILL.md`, `skill://codesign/judge/SKILL.md` and `skill://codesign/judge/design-rules.md` in one message: the edit-code API and the rules a design is built to. Worked examples, and the lookup for a cryptic error ("Known engine defects"), are `skill://codesign/api/recipes.md`. There is no `parent` and no revision id: `edit` always continues the design in front of you. Every successful edit is kept — the product stores the design after each one, so there is nothing to save. Returns: the first content part is JSON `{ names? }` — every named block in the scene, which are exactly the strings `engine.design.findByName(name)` resolves in your NEXT edit. Name what you build and re-find it instead of matching copy. When the edit changed the scene, the result also ends with a downscaled render of the first page it changed — verify your work from it instead of spending a `preview` call. `preview` remains required for full-size judging (the judge loop) and multi-page review; set `render: false` to skip the image on read-only/diagnostic edits. `code` return contract (STRICT): return `undefined` (no message back), `{ type: "text", text }`, `{ type: "image", data: "<base64>", mimeType }`, or an array of those. Anything else (raw strings, Blobs, plain objects) is rejected. DIALECT (enforced): edit code uses `engine.design` only — scene, pages, props, text, variables, spot colours, transitions. Code that reaches engine.block/scene/variable/editor/asset/event is rejected before execution with the equivalent calls. `code` scope: `engine.design`, plus `await findText(copy)` / `await findAllText(copy)` (async like every `engine.design` member) for reaching a block by its text. Use them instead of comparing text strings with `===` — the copy on the page routinely carries a trailing space or an NBSP (bef

Parameterscoderequirednoterenderskills

preview

Render blocks (almost always pages) to inline images so you can see the result. `blockIds` is a LIST, rendered in the order you give it: `[pageId]` for one page, `[a, b]` for a subset, or OMIT it entirely to preview every page of the design in document order. There is nothing to address: this always renders the design you are working on. Its last state is loaded before rendering, so the ids always resolve against the right scene — never against a different design another agent may have loaded on a shared server. Preview several blocks at once when REVIEWING or capturing a finished design — a whole deck in one call, or just the pages a fix touched. While BUILDING a multi-page design, keep previewing each page right after you build it: batching there does not avoid the bugs, it only delays finding them. Animated or video designs (any scene mode): pass `time` (seconds along the timeline of what is rendered — the page, since a block is previewed in place on it; 0 = first frame) to render any frame as a still — use `export format=mp4` for motion. `time` applies to every block in the call, and each timed preview (and every preview of a Video-mode scene) returns `{blockId, time, duration}` JSON alongside its image; `duration` is the scrubbable range. Output is always PNG (lossless — thin lines render exactly). EACH block gets the full 0.25 megapixel budget, adjusted to its own aspect ratio — a square page renders 512×512, a 1:4 page 256×1024. There are no size or format knobs, and at most 10 blocks render per call. To SEE SMALL TYPE as it is actually set — legal copy, a caption, a label — the simplest zoom is to pass THAT BLOCK'S id: `blockIds: [<textId>]` renders it on its page, framed, with context around it. No coordinates needed. For a tighter or arbitrary crop, pass `region`: a rectangle `{x, y, width, height}` with ONE id in `blockIds`. It is measured from the top-left corner of that block's PAGE, in the design's units (the page's own width and height bound it

ParametersuritimeregionblockIds

import

Import a design FILE as a NEW design — a CE.SDK `.imgly` design file; a Photoshop (`.psd`/`.psb`), InDesign (`.idml`), PowerPoint (`.pptx`) or PDF file; a Lottie animation (`.json`/`.lottie`), which becomes a one-page video design with editable, keyframed layers; or a plain image or SVG, which becomes a one-page design sized to the image. To make a media file (image/font/video/audio) available for use INSIDE a design instead of becoming one: Use `asset_add` to bring it into the workspace, then apply it inside `edit`. Source: `{ url }` (http/https), `{ uri }` (a saved design — you get a copy of it — or a file you were given, or a template `asset_search` lists from an installed pack: the new design starts as that template), `{ demo }` (a design bundled with this server — ids: `"cybernews"`) or `{ path }` (absolute local file path). Every import starts a NEW design, and you work on it from then on: the design you were on is left as it is. To keep working on a saved design itself rather than a copy, use `open` with its `uri`. With only a `title` and no `source` (`import({ title: 'Poster' })`), it starts an empty design: do that for every new design, before you name it or build it. Returns JSON `{ uri, title, format }` — the new design, saved after every change; to continue it later, `open` this `uri`. Foreign-format imports may add `warnings` (what did not survive — substituted fonts, unsupported features): treat them as your touch-up list — `preview` the pages, then repair with `edit`.

Parameterstitlesource

open

Work on a saved design itself: every later edit is saved into it. Pass the `uri` an `import` or `designs` gave you, verbatim. To start from a copy instead, `import` its `uri`. Returns `{ uri, title }`.

Parametersurirequired

export

Export the design you are working on — `format` picks the deliverable: `pdf` (print PDF), `png`/`jpeg`/`webp` (image), `svg` (vector SVG), `pdfx` (print-ready PDF/X), `html` (responsive HTML5), `idml` (Adobe InDesign), `psd` (layered PSD), `mp4` (video), `wav`/`m4a` (audio), `imgly` (editable design file). Renders `blockId` — or the whole document when `blockId` is omitted. Your edits are saved to the design as you make them (the viewer shows it), so there is nothing to save: every format is a copy for the person — a pdf to print, a png to post, `imgly` the editable design file with its images. Returns JSON `{ uri, httpUrl, bytes, format }` (plus `path` when you pass `outPath`). `uri` is the durable handle — treat it as opaque and pass it back verbatim where a URI is wanted. `httpUrl` is a fetch link tied to this process — fetch it to download the bytes to disk, or hand it to the user. `outPath` (optional, absolute path including the filename): ALSO write the artifact to that local path — the workspace copy is still written, and the response then carries `path`. Use it when the file is wanted on disk, and always when your environment cannot fetch localhost URLs (sandboxed harnesses, e.g. Claude Cowork — target your session's outputs folder there). `format=svg` is the engine's vector export: text is outlined into paths (renders identically everywhere, but is not editable text in the SVG), and raster images are embedded in the file at source resolution — an SVG of a photo-heavy design can be much larger than its source images. `format=imgly` writes a portable, self-contained `.imgly` design file (scene + all asset bytes bundled) — the inverse of `import`, and the only format that stays editable: a copy to move, back up or send. Whole-design only: `blockId` is not accepted. Because the archive inlines every referenced asset it is the heaviest call this server makes, and it REFUSES rather than ship a design whose fonts or images could not be loaded — retry it, do n

ParametersfpshtmlpagepdfxbleedwidthformatrequiredheightblockIdoutPath

designs

The saved designs you can `open` or `import` a copy of, newest first. The one you are working on is marked `current`. A row marked `unsaved` is work an earlier session left before it was saved: `open` it to continue.

Takes no parameters.

scorecard

Record the verdict of a judge loop you have COMPLETED for the design you are working on — the final step of the `judge` skill. Recording is a claim about work already done: never call this without having scored the axes against actual `preview` renders of the design in its current state. `verdict: 'pass'` — every applicable axis scored ≥ 8; the design may be delivered. `verdict: 'fail'` — you are stopping with an axis below 8 (e.g. the user cut remediation short); the failure stays on record. There is no `revision`: the verdict covers the session as it stands when you record it, and ANY later `edit` or `import` clears it — so judge last, and re-judge after every further change. `export` checks it: delivering or saving a design the latest verdict does not cover adds a reminder to its result.

Parametersverdictrequired

rename

Give a design its title — the name `designs` lists it by. Without `uri`, renames the design you are working on: if it is saved already, it is renamed now, and otherwise its first change saves it under the title. With `uri` (from `designs` or `import`), renames that saved design. Returns JSON `{ uri, title, previousTitle }`, or `{ title }` while the design has no change saved yet. Nothing in the design changes.

Parametersurititlerequired

checklist

Register the brief's ACCEPTANCE CHECKLIST — the machine-checkable claims that must hold before the work counts as done. Do this right after intake, before the first edit: extract from the brief every required output file, every string of approved copy that must land verbatim, and note the constraints only you can check. Skip it only when the brief fixes no outputs or copy. Item kinds: - { kind: 'output', path } — a file that must exist when the work is delivered (absolute path, e.g. every variant the brief orders exported with `outPath`). - { kind: 'copy', text } — approved copy that must appear VERBATIM in the design's text (whitespace variants are folded; wording, case and punctuation are exact). - { kind: 'note', text } — a self-check the server cannot verify. Kept on record; never machine-checked. Every `export` checks the list against the design and the disk and names the unmet items — treat one exactly like a failing test. Calling `checklist` again REPLACES the whole list; it lasts for this conversation. Returns `{ itemCount }`, or `{ items }` (the current list) when called without `items`.

Parametersitems

view

Get a URL the human can open to view and edit the design you are working on in CE.SDK. Returns the design's stable URL — it follows every change, so print it ONCE and don't re-emit a fresh URL every turn. The page is a full editor; when the human clicks 'Save', their edits land in the same design file. A new design is viewable after its first change. The editor opens in the mode the human last chose for this design, else 'motion' (timeline) when the design has animation, video, audio or timed blocks and 'design' otherwise; pass `mode` to force one. The human can change the design there and save it: your next call says so, and you `preview` their version before you continue.

Parametersmode

asset_add

Add a local media file (image, font, video, or audio) to the workspace so it can be used in a design. Copies the file bytes into the content-addressed asset store at `assets/<sha>.<ext>`. The bring-your-own arm of the asset family: `asset_search` finds an existing asset, `asset_generate` makes one, `asset_add` takes one off your disk — all three return a `workspace://` uri to embed in `edit`. (To turn a design FILE into a new design, use `import`.) Returns JSON: `{ uri, httpUrl, mimeType, kind, width?, height?, bytes, note? }`; an image has `width` and `height` in pixels — frame it at that aspect unless you mean to crop it (a logo never). `uri` (a `workspace://` URI) is the durable handle — embed it in a subsequent `edit` (image/video fill or audio `fileURI`; for a font, as both `text.font: { typeface, uri }`'s uri and `typeface.fonts[].uri`), NEVER `httpUrl` and NEVER the original `file://` path, so the design stays loadable after a restart or rewind. `httpUrl` is a fetch link for opening the asset now. Files are classified by content (magic bytes) first, extension second: a misnamed file is stored under its actual type, and `note` explains any correction, rescue, or unverifiable content. Make-available only: it never edits a scene and never creates a revision — do the placement in `edit`. Source: `{ path }` — an absolute path to a file the server can read.

Parameterssourcerequired

asset_generate

Unavailable until you sign in with `login` (free IMG.LY account); once signed in, it works. Generate images, video, speech, music and sound effects — and transcribe speech — via the AI gateway. Call with NO arguments first: returns the curated model catalog, every entry tagged with its `capability` (text2image, image2image, text2video, image2video, text2speech, speech2text, …). Filter with `capability`; `source: "all"` (together with a `capability`) adds the provider models — e.g. music and sound effects under `text2audio`. Then call with `model` + `prompt` (+ optional `format` aspect like "16:9"). Model-specific inputs (duration, voice, lyrics, an input file…) go in `params`, sent to the model verbatim under the model's own field names — `model` + `schema: true` returns the fields a model takes. A `uri` inside `params` that an earlier tool result gave you is uploaded for the model first (e.g. `{ audio_url: '<id>' }` to transcribe). For image-to-image, pass `image_uris` with uris an earlier tool result gave you. Never assemble one by hand. Returns ONE JSON part: the asset, in the engine's own asset shape — `{ id, meta: { uri, mimeType, kind, duration?, width?, height?, thumbUri? } }`, the same objects `asset_search` returns, plus `cost` (credits) when the gateway reports it. `id` is the durable handle: embed it in `edit` code (image or video fill, audio block) and pass it back here as an `image_uris` entry. It equals `meta.uri`. `meta.kind` is `image`, `video`, `audio` or `file`; `meta.duration` (seconds, as a string) is present for audio/video when the file header states it. Any other result that is data rather than a file comes back as `{ output }`, verbatim. Transcription (speech2text, e.g. `elevenlabs/scribe-v2`): put the recording's uri in the model's audio field (`audio_url`) — audio OR video of any length; the audio is extracted and long recordings are split for you. The result is `{ transcriptUri, duration, language?, wordCount, lines }`: `lines` holds

Parametersmodelformatparamspromptschemasourcecapabilityimage_uris

diagnostics

Inspect this codesign MCP server: `status` (default) reports what is running (build id, CE.SDK engine version, non-secret config); `summary` returns a bounded digest of recent activity (counts, recent errors, slowest calls); `open` returns a clickable local viewer URL with a Download-ZIP button to send diagnostics to IMG.LY.

Parametersaction

login

Sign in with your IMG.LY account (opens the system browser). The session saves automatically once the user finishes in the browser; call login again anytime to confirm — safe to repeat, it does not restart the flow or invalidate the open link. Pass switch_account=true to sign in as a different user.

Parametersswitch_account

logout

Sign out of your IMG.LY account (revokes the session and clears local credentials).

Takes no parameters.

read_skill_resource

Read a CoDesign skill file by its `skill://codesign/<name>/<path>` URI; returns the same text as the MCP resource. Use it only when your host can't read MCP resources — otherwise read the resource directly.

Parametersurirequired

Version history

9
  1. v0.6.0LatestNov 4, 2026
  2. v0.5.1Oct 21, 2026
  3. v0.5.0Oct 20, 2026
  4. v0.4.2Oct 5, 2026
  5. v0.4.1Oct 2, 2026
  6. v0.4.0Sep 29, 2026
  7. v0.3.6Sep 18, 2026
  8. v0.3.4Sep 17, 2026
  9. v0.3.3Sep 16, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts