Back to Browse

Aetherwave MCP Server

Developer ToolsModerate6.2MCP RegistryLocal
Free

Server data from the Official MCP Registry

Music, image, video and audio generation across top AI providers - one key, one credit pool.

About

Music, image, video and audio generation across top AI providers - one key, one credit pool.

Security Report

6.2
Moderate6.2Moderate Risk

Well-structured MCP server with proper authentication and reasonable permissions for its purpose. The server requires API key validation, uses environment variables for credentials, and implements comprehensive input validation via Zod schemas. Permissions are appropriate for a creative AI generation platform that needs HTTP API calls and environment variable access. No malicious patterns or critical vulnerabilities detected. Supply chain analysis found 2 known vulnerabilities in dependencies (0 critical, 2 high severity). Package verification found 1 issue.

3 files analyzed · 8 issues found

Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.

Permissions Required

This plugin requests these system permissions. Most are normal for its category.

env_vars

Check that this permission is expected for this type of plugin.

HTTP Network Access

Connects to external APIs or services over the internet.

What You'll Need

Set these up before or after installing:

AetherWave Studio API key (starts with aw_live_). Generate one at https://aetherwavestudio.com/developers - first key grants 50 free credits, no card required.Required

Environment variable: AETHERWAVE_API_KEY

How to Install

Add this to your MCP configuration file:

{
  "mcpServers": {
    "io-github-aetherwave-studio-aetherwave-mcp": {
      "env": {
        "AETHERWAVE_API_KEY": "your-aetherwave-api-key-here"
      },
      "args": [
        "-y",
        "@aetherwave-studio/mcp"
      ],
      "command": "npx"
    }
  }
}

Documentation

View on GitHub

From the project's GitHub README.

@aetherwave-studio/mcp

aetherwave-mcp MCP server

aetherwave-mcp MCP server

Model Context Protocol server for AetherWave Studio. Drop it into any MCP-compatible client (Claude Code, Cursor, Continue, Claude Desktop, custom agents) and your LLM can generate, edit, upscale, reframe, and master across every flagship creative AI provider through one API key, one credit pool.

One install. One token. Thirty-three default tools covering:

  • Music - Suno V3.5 / V4 / V4.5 / V5 / V5.5
  • Image gen - Grok Imagine, GPT Image 2, Seedream V4, Wan 2.7, Nano Banana 2, Flux 2, Qwen Image, Z-Image Turbo
  • Image edit - Grok Imagine I2I, Seedream V4 Edit, Flux Kontext, Wan 2.5 Spicy, Qwen Edit, GPT Image 1.5
  • Image utility - 2x / 4x upscale, Recraft background removal (with fal BiRefNet v2 fallback), Ideogram V3 Reframe
  • Video - Grok Imagine (KIE+fal fallback), Wan 2.7, Hailuo 02, Seedance Pro/Lite, Kling 2.6 (audio), VEO 3.1, Happy Horse
  • Video utility - Atlas upscaler (1080p/2K), rembg u2netp background removal, Luma Ray 2 Flash reframe
  • Audio mastering - 12 genre/style presets via the AetherWave Python service
  • Gallery - upload your own images, audio and video (local file, URL or data URL), and a paginated list of your saved creations
  • User manuals - the MCP, Graphic Novel Studio, UGC Studio and Project Studio manuals as PDF links (saved to Downloads on the npx server)
  • Comic books - 9 tools driving the AetherWave Graphic Novel Engine end to end: cast, character references, script, panels, lettered pages, and a PDF / EPUB / CBZ download link
  • Merch - 4 tools: garment catalog, design-to-mockup, and (with PRINTFUL_API_TOKEN) 2 more that create and list products in your own Printful store, plus 1 admin shop-listing tool

Every generation tool submits the job and waits up to a soft 45 s deadline for the result. Fast jobs come back with the final URL in one round-trip; anything longer returns state: "running" with a taskId, and aetherwave_get_job covers every pipeline (image, video, music, mastering, comics, merch) for polling. Pass async: true on any tool to return immediately. Results auto-save to your Cloudflare R2 gallery so URLs don't expire.

The comic tools are built around this from the start: a book takes about an hour to draw, so each slow step starts and returns at once, and aetherwave_comic_status is how the agent checks back. See Make a comic book with the MCP.

Quick start

# 1. Get a key at https://aetherwavestudio.com/profile (Developer tab)
# 2. Add to your MCP client config (see below)
# 3. Restart the client
# 4. Ask your agent to "generate a synthwave album cover, then animate it"

Claude Code

claude mcp add aetherwave \
  -e AETHERWAVE_API_KEY=aw_live_your_key_here \
  -- npx -y @aetherwave-studio/mcp

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "aetherwave": {
      "command": "npx",
      "args": ["-y", "@aetherwave-studio/mcp"],
      "env": {
        "AETHERWAVE_API_KEY": "aw_live_..."
      }
    }
  }
}

Restart Claude Desktop.

Cursor

In Cursor Settings -> MCP -> Add new server:

{
  "aetherwave": {
    "command": "npx",
    "args": ["-y", "@aetherwave-studio/mcp"],
    "env": { "AETHERWAVE_API_KEY": "aw_live_..." }
  }
}

Continue (VS Code / JetBrains)

In your ~/.continue/config.yaml:

mcpServers:
 - name: aetherwave
    command: npx
    args: ["-y", "@aetherwave-studio/mcp"]
    env:
      AETHERWAVE_API_KEY: aw_live_...

Custom / programmatic clients

Standard stdio MCP server. Any client that speaks JSON-RPC 2.0 over stdio per the MCP spec can connect:

AETHERWAVE_API_KEY=aw_live_... npx -y @aetherwave-studio/mcp

Tools at a glance

ToolPurpose
aetherwave_list_charactersYour saved UGC characters with identity block, reference pack, voice and personality
aetherwave_get_jobPoll any job a tool handed back as state: "running" (or submitted with async: true), or recover one whose call timed out. Covers image, video, video-edit, music, merch-mockup and comic-export
aetherwave_balanceCurrent credit balance + plan
aetherwave_list_image_modelsEnumerate every image model with cost, speed, I2I support
aetherwave_list_video_modelsEnumerate every video model with cost-per-second, durations, resolutions
aetherwave_list_master_presetsEnumerate the 12 mastering presets with target LUFS, tags, descriptions
aetherwave_generate_imageT2I or I2I across 8+ models. Default grok-imagine-t2i (6 cr, 2 outputs)
aetherwave_generate_videoT2V or I2V across 7+ model families. Native audio, reference-image identity lock, async submit
aetherwave_generate_musicSuno V5.5 by default. Two tracks per submission, lyrics + instrumental
aetherwave_edit_imageI2I editing. Default grok-imagine-i2i (10 cr, one image)
aetherwave_upscale_image2x or 4x upscale, 4 cr
aetherwave_reframe_imageIdeogram V3 Reframe to a new aspect ratio (outpaints edges)
aetherwave_remove_backgroundRecraft primary + fal BiRefNet v2 fallback (auto failover). Output auto-saved to gallery
aetherwave_upscale_videoAtlas (1080p, 2K) or BytePlus (1080p to 8K) video upscale
aetherwave_remove_background_videoFrame-by-frame bg removal via rembg u2netp. Transparent WebM or solid color output. 2 cr/sec
aetherwave_reframe_videoLuma Ray 2 Flash reframe to new aspect ratio
aetherwave_master_audioAI mastering across 12 genre/style presets. 20 cr/track, free on Producer / Mogul / Ultimate plans
aetherwave_list_my_creationsPaginated gallery read for chained workflows
aetherwave_upload_to_galleryPut your own image, audio or video into your gallery from a local file (npx only), a URL or a data URL. Free, counts against storage, up to 95 MB
aetherwave_get_user_manualLink to a user manual PDF (mcp, graphic-novel, ugc-studio, project-studio); on the npx server also saves it to Downloads
aetherwave_comic_estimateFree quote for a comic: script + panel credits for a page count
aetherwave_comic_createCreate a comic project (title, premise, cast, art style). Free
aetherwave_comic_character_referenceGenerate (6 cr each) or approve a character's reference image
aetherwave_comic_write_scriptStart writing the script (2-3 min, charged on use, about 40 cr for 12 pages)
aetherwave_comic_drawStart drawing every undrawn panel (9 cr a panel, charged on success). Safe to call again
aetherwave_comic_statusProgress, stalled runs, failed panels with reasons, page URLs, next step. Free
aetherwave_comic_redraw_panelRedraw one panel, optionally with a reworded scene (9 cr on success)
aetherwave_comic_assembleLay out and letter the pages (about 4 s a page). Free
aetherwave_comic_exportPDF, EPUB, CBZ or bundle as a download link that lasts about a day. Free

Every generation tool includes a model-selection rubric in its description. Your agent can pick the right model from prompt intent without round-tripping list_image_models or list_video_models.

Make a comic book with the MCP

Nine tools drive the AetherWave Graphic Novel Engine from start to finish, so an agent can turn one sentence into a finished, lettered comic. You say something like:

Make me a 12-page Franco-Belgian adventure comic about a 14-year-old courier and her grumbling mechanic uncle who fly the village's last airmail balloon over the Alps at night to deliver a letter that stops a dam from flooding their home. All ages. Keep it under 350 credits.

and the agent runs this sequence:

StepToolWhat happensTimeCredits
1aetherwave_balanceConfirms which account pays and that it can afford the bookinstant0
2aetherwave_comic_estimateQuotes an upper bound (it assumes 4 panels a page)instant0
3aetherwave_comic_createCreates the project and the cast; returns projectId and each characterIdseconds0
4aetherwave_comic_character_reference with action: "generate"Draws a full-body reference for each character, in the book's styleup to about a minute6 each
5aetherwave_comic_character_reference with action: "approve"Locks the chosen image; every panel uses it to keep the face the sameseconds0
6aetherwave_comic_write_scriptStarts the script: chapters, pages, panels, dialogue, captions2-3 mincharged on use
7aetherwave_comic_statusPolls until projectStatus is script-ready, then reads creditsToFinishDrawing, the real panel priceinstant0
8aetherwave_comic_drawStarts drawing every panel, one at a time; maxCredits caps the run1.5-6 min a panel9 a panel, on success
9aetherwave_comic_statusPolls every few minutes. drawing: "stalled" means the run ended with panels left: call aetherwave_comic_draw againinstant0
10aetherwave_comic_redraw_panelFor a panel that keeps failing on a content refusal: reword its scene and redraw1.5-6 min9, on success
11aetherwave_comic_assembleLays out and letters every pageabout 4 s a page0
12aetherwave_comic_exportReturns a PDF (or EPUB / CBZ / bundle) download linkabout 15-30 s0

Measured on a real book

"The Last Balloon Post" (2026-09-25) was made exactly this way, through the same API these tools call:

  • 12 pages, 27 panels, 301 credits: 27 panels x 9 = 243, script 40, three character references 18. The estimate had quoted 462, because it assumes 48 panels for 12 pages. Re-quote from creditsToFinishDrawing once the script exists.
  • About 65 minutes of drawing, 1.5 to 6 minutes a panel, strictly one after another. About 80 minutes end to end.
  • 9 panel failures along the way, none charged: 3 content-filter refusals, 4 upstream "Internal Error" flakes, 2 panels cut off when the server restarted. Every one was drawn on a later run.
  • Assembly took about 45 seconds for 12 pages. The PDF was 130 MB, which is why export returns a link rather than the file.

Rules the agent should follow

  • Approve references before writing the script. Approving re-describes the character from the picture, and the script writer reads that description. A character with no approved reference is drawn from text alone and their face drifts between panels.
  • Never treat a stopped run as finished. A server restart ends a drawing run silently. aetherwave_comic_status reports drawing: "stalled" whenever panels are pending or failed and no run is active. aetherwave_comic_draw is safe to call again: it draws only what is missing and never double-starts (a second start reports alreadyDrawing).
  • Reword, do not retry, a refused panel. failedPanels[].errorMessage in the status carries the reason. A content refusal repeats on a plain retry; aetherwave_comic_redraw_panel with a new prompt replaces the scene description for that drawing. Scenes of physical contact between an adult and a child are refused by the image filter.
  • Rewriting the script deletes every panel. aetherwave_comic_write_script refuses on a project that has panels unless replaceExisting: true.
  • Re-assemble after a redraw on a page that was already assembled; aetherwave_comic_status lists those pages under pages.staleSinceAssembly.
  • Only permanent images can be references. approve refuses temporary links (for example a raw provider result URL), because the book would break when the link expires.
  • Every comic tool result carries account: the AetherWave username that is paying. Check it if you run more than one MCP connection.

Programmatic video with your own characters

The tools above compose into something the API could not do before: hand an agent a description and get back a finished multi-shot film, starring a character you already created, with one consistent face and voice throughout.

A UGC character is a recurring on-screen person you have saved in AetherWave - their locked appearance, an approved pack of reference images, a voice and a personality. aetherwave_list_characters is how an agent discovers they exist. Without it, an agent told "shoot this with my Amy character" has no way to learn who Amy is, and invents a different face for every clip.

The loop

// 1. Discover the character. There is no other way to find them.
const { characters } = await listCharacters({ name: "amy" });
const amy = characters[0];

// 2. Build every prompt from her stored identity - VERBATIM, never paraphrased.
//    Identical text is identical conditioning; that IS the consistency mechanism.
const prompt = [
  shotDescription,
  amy.identityBlock,                    // "CORE IDENTITY: same woman, Nordic, ..."
  `Her speaking voice: ${amy.voiceSpec ?? amy.voiceDescriptor}`,
  `She says exactly this and nothing else: "${line}"`,
].join("\n\n");

// 3. Submit async, anchored to her approved pack, with audio on.
const { taskId } = await generateVideo({
  prompt,
  model: "seedance-2-mini",
  duration: 12,
  resolution: "480p",
  aspectRatio: "16:9",
  generateAudio: true,                  // without this the clip is SILENT
  referenceImages: amy.referenceImages, // NOT imageUrl - that drops the anchors
  async: true,                          // returns in ~2s, survives the client timeout
});

// 4. Poll until the render lands.
let job;
do { await sleep(15000); job = await getJob({ taskId, kind: "video" }); }
while (!job.done && !job.error);

// 5. Repeat per shot, then assemble the clips in order.

The four rules that actually keep a character consistent

  1. Append identityBlock verbatim to every prompt. Rewriting it in your own words breaks the lock - identical text is the whole mechanism.
  2. Pass referenceImages, never imageUrl. A first frame switches the engine to first-frame mode and discards the anchors. When a character has an approved pack, that pack replaces the hero image rather than riding alongside it; mixing them pulls the face two ways.
  3. Keep the voice text byte-identical across clips, for the same reason as the identity block.
  4. Set generateAudio: true on anything with dialogue. It is off by default and free on Seedance 2.x, so a silent clip is never the cheaper choice - just a worse one.

Writing lines to length

duration is authoritative. The engine honours the seconds you ask for to within ~0.1s and then fits the line to that length by changing pace, rather than finishing early. So write the line to the clip, not the clip to the line - roughly 2 words per second is the measured working figure. A words-per-minute number in a voice description describes the character, not the engine; budgeting by it overran a 22-clip production by 35%.

Spell hard words the way they should be spoken: "super intelligence" renders more reliably than "superintelligence".

⚠️ Verify the speech before you assemble

A take can come back saying the wrong words and still report success with a URL. Re-rendering an identical prompt has produced one clean take and one that dropped an entire sentence - it is per-take randomness, and nothing in the response distinguishes them. On a 22-clip production, four clips were mis-spoken and none was detectable without listening.

For anything assembled unattended, transcribe each clip and score it against the line you asked for before using it, and re-shoot the ones that fail. Checking costs nothing; the clip already cost credits. Score against the script, not against whatever the previous step handed you.

Sell merch from a conversation (Printful)

Turn any design into a print-on-demand product by asking for it:

"Make a tee that says NIGHT SHIFT in chrome letters, put it on a black Bella+Canvas 3001, show me mockups, then add it to my Printful store at $29.99."

ToolCostWhat it does
aetherwave_merch_garmentsfreeTees, tanks, hoodies, hats: colours, US in-stock sizes, print areas in inches, embroidery thread colours
aetherwave_merch_prepare_design1 creditAny image (AetherWave URL, data URL, or a local file path) becomes a transparent, trimmed print PNG. knockout removes a plain background without eating white lettering inside the art
aetherwave_merch_mockup3 creditsBuilds the print file at the garment's real print area and DPI, then renders Printful mockups. Refunded if the render fails; bad garment, colour or placement is never charged. 20 an hour
aetherwave_merch_mockup_statusfreeChecks a render that outlived the 90-second wait
aetherwave_printful_create_productfreeCreates the product in your own Printful store
aetherwave_printful_list_productsfreeLists your store's products

Connect your Printful store

Add your Printful token to the server's env. It is used only between your machine and api.printful.com; it never goes to AetherWave.

{
  "mcpServers": {
    "aetherwave": {
      "command": "npx",
      "args": ["-y", "@aetherwave-studio/mcp"],
      "env": {
        "AETHERWAVE_API_KEY": "aw_live_...",
        "PRINTFUL_API_TOKEN": "your Printful private token",
        "PRINTFUL_STORE_ID": "only needed for account-level tokens"
      }
    }
  }
}

Create the token in Printful under Settings > API (a private token scoped to one store is simplest). The two aetherwave_printful_* tools appear only when PRINTFUL_API_TOKEN is set, and only on the local npx server: the remote connector never asks for your store key. Products land in Printful; publishing to Shopify, Etsy and other connected channels happens there as usual.

Before you promote a product: Printful charges per order (garment, shipping, and in the US often sales tax). Check that your retail price covers it. You are the seller: only print artwork and wording you have the rights to.

Printify: coming next. Its catalog works differently (the same garment from several print providers, with their own prices and stock), so it gets its own tools rather than a half-working flag.

Tools reference

aetherwave_balance

Returns current credit balance. No inputs.

Returns: { credits, plan, ... }

aetherwave_list_image_models

Returns every image model with credit cost, supported inputs, resolution/aspect options. No inputs.

Returns: { models: [...] }

aetherwave_list_video_models

Returns every video model with per-second credit cost, durations, resolutions, aspect ratios. No inputs.

Returns: { models: [...] }

aetherwave_list_master_presets

Returns every mastering preset with target LUFS, tags, descriptions, difficulty. No inputs. Call this before master_audio when you don't know which preset fits the track.

Returns: { presets: [...] } (each: { id, name, description, target_lufs, tags, difficulty, icon })

aetherwave_generate_image

T2I or I2I. Submits, polls, returns final URLs.

ParamTypeRequiredDefaultNotes
promptstringyes-Text description of the image
modelstringnogrok-imagine-t2iModel ID. Use list_image_models for full list
aspectRatiostringnomodel defaulte.g. 1:1, 16:9, 9:16
resolutionstringnomodel default1K, 2K, some accept 480p/720p
referenceImagesstring[]no-URLs for I2I; required if model is I2I
numImagesint (1-8)nomodel defaultFor multi-output models
negative_promptstringno-Supported by some models
seedintno-Deterministic generation, supported by some

Selection signals (built into the tool description): single best image → gpt-image-2-t2i (9 cr at 1K, 12 at 2K). Photoreal → gpt-image-2-t2i or nano-banana-2. Text-in-image → gpt-image-2-t2i. NSFW → wan-2.5-spicy-t2i. Premium → grok-imagine-quality-t2i (14 cr). Cheapest → z-image-turbo (2 cr).

Returns: { taskId, state, images, autoSaved, creationIds }

aetherwave_list_characters

Your saved UGC characters - the recurring, named people you shoot with - with everything needed to hold one consistent across a production. Call this first whenever a request names a person the user already has.

ParamTypeRequiredNotes
namestringnoCase-insensitive substring filter on name or handle. Omit to list all

Returns: { count, characters[], usage }, each character carrying:

FieldWhy it matters
identityBlockThe locked CORE IDENTITY string. Append verbatim to every prompt
referenceImagesThe approved pack. Pass as referenceImages on generate_video
hasApprovedPackTrue when a pack exists - prefer it over heroImageUrl
heroImageUrlSingle fallback anchor for characters with no pack
voiceId / voiceSpec / voiceDescriptorVoice conditioning text; keep byte-identical across clips
personalityTones, quirks, speechStyle - the tonal direction the user wrote
negativeLockThe character's negative prompt
engineParamsPer-mode reference strengths

Long jobs return within 45 seconds

MCP clients (claude.ai, Claude Desktop, Cursor) abandon a tool call at about 60 seconds. Before 0.3.0 every long tool blocked for 6 to 15 minutes, so a 90-second image render "failed" on the client while the job finished and was charged, and the taskId died with the abandoned call.

Now every tool that submits a job (generate_image, edit_image, upscale_image, reframe_image, remove_background, generate_video, upscale_video, reframe_video, remove_background_video, generate_music, merch_mockup, comic_export) polls for at most ~45 seconds and then returns:

{ "state": "running", "taskId": "…", "kind": "image", "checkWith": "aetherwave_get_job", "pollEverySeconds": 10, "next": "…" }

Poll aetherwave_get_job with that taskId and kind until done. Two explicit escapes on each of those tools:

ArgEffect
async: trueSubmit and return the taskId immediately, no polling
wait: trueThe old long block (6-15 min budget). Only if your client permits calls over 60 s

master_audio has no job id (the request itself is the job): it also returns within ~45 s, and a master that outlives the call is saved to the gallery - find it with aetherwave_list_my_creations type audio rather than resubmitting.

aetherwave_get_job

Check a job by taskId. Use it for any state: "running" result, after an async: true submit, or to recover any generation whose call timed out, since the job keeps running server-side and saves to your gallery regardless of what happened to the client.

ParamTypeRequiredNotes
taskIdstringyesThe taskId (or taskKey / exportId) a tool returned
kindenumyesimage (generate, edit, upscale, reframe, remove-background), video, video-edit (upscale/reframe/remove-background video), music, merch-mockup, comic-export
projectIdstringfor comic-exportThe comic project the export belongs to

Returns: { taskId, kind, state, done, failed, videoUrl, imageUrls, tracks, mockups, downloadUrl, autoSaved, creationIds, error, next, raw }

aetherwave_generate_video

T2V or I2V. Submits, polls for up to ~45 s, and returns the URL if the render finished - otherwise state: "running" with the taskId (video takes 1-8 min, so that is the usual case).

ParamTypeRequiredDefaultNotes
promptstringyes-Text description of the scene
modelstringnogrok-imagine-t2vModel ID. Use list_video_models
durationint (2-30)nomodel defaultSeconds. Grok accepts 6-15
resolutionenumnomodel default480p, 720p, 1080p, 2K
aspectRatiostringnomodel defaulte.g. 16:9, 9:16, 1:1
imageUrlstringno-Required for I2V models
endImageUrlstringno-Some I2V models support first+last frame
modeenumnonormalGrok Imagine: fun, normal, spicy
generateAudioboolnofalseRender speech/sound with the video. Clips are SILENT without it. Free on Seedance 2.x at every resolution
referenceImagesstring[] (max 9)no-Identity anchors held consistent across the clip. Mutually exclusive with imageUrl. https URLs are fetched and encoded for you
asyncboolnofalseReturn a taskId immediately instead of waiting
waitboolnofalseBlock up to 8 min. Only if your client permits calls over 60 s

Returns (finished): { taskId, state, videoUrl, fallbackProvider, autoSaved, creationId, kieTaskId } Returns (still rendering, or async): { state: "running", taskId, kind: "video", checkWith, pollEverySeconds, next }

A render takes 1-8 minutes and most MCP clients abandon a call at 60 seconds (MCP error -32001), so this tool returns state: "running" within ~45 s and you poll aetherwave_get_job. The job itself is submitted, billed and saved to your gallery regardless of what the client does.

⚠️ imageUrl and referenceImages are not additive. A supplied first frame switches the engine to first-frame mode exclusively and drops the reference images - which silently disables the only no-drift mechanism available. Passing both is rejected with an explicit error rather than quietly honouring one.

aetherwave_generate_music

Suno music generation. Two tracks per submission.

ParamTypeRequiredDefaultNotes
promptstringyes-Style/mood/topic description
instrumentalbooleannofalseIf true, no vocals
modelenumnoV5_5V3_5, V4, V4_5, V5, V5_5
titlestringno-Optional title for the tracks
lyricsstringno-Custom lyrics, omit to let Suno write them

Returns: { taskId, status, tracks }

aetherwave_edit_image

I2I editing guided by a text prompt.

ParamTypeRequiredDefaultNotes
promptstringyes-Text description of the edit
imageUrlstringyes-Public URL of source image
modelstringnogrok-imagine-i2i10 cr, one image
aspectRatiostringnosource ratioe.g. 1:1, 16:9
resolutionstringnomodel defaultSome models: 1K, 2K, 4K
qualityenumnomodel defaultlow, medium, high (GPT Image)
maxImagesint (1-8)no-For multi-output models
renderingSpeedenumnomodel defaultturbo, balanced, quality
negative_promptstringno-Supported by some models

Selection signals: subtle edits / character consistency → flux-kontext-pro. NSFW → wan-2.5-spicy-i2i. Highest quality → gpt-image-1.5-i2i or grok-imagine-quality-i2i. Single-output / 4K → seedream-v4-edit.

URL gotcha: source URLs with spaces or parentheses may fail upstream. Prefer clean URLs without special characters.

Returns: { taskId, state, images, autoSaved, creationIds }

aetherwave_upscale_image

Upscales 2x or 4x for a flat 4 credits.

ParamTypeRequiredDefaultNotes
imageUrlstringyes-Public URL of source image
upscaleFactorenumno2x2x or 4x

Credit cost scales with source resolution × factor.

Returns: { taskId, state, images, autoSaved, creationIds }

aetherwave_reframe_image

Ideogram V3 Reframe. Outpaints edges to fit a new aspect ratio.

ParamTypeRequiredDefaultNotes
imageUrlstringyes-Public URL of source image
aspectRatiostringyes-Target ratio: 1:1, 16:9, 9:16, 4:3, 3:4, 21:9
speedenumnobalancedturbo (5 cr), balanced (10 cr), quality (14 cr)

Returns: { taskId, state, images, autoSaved, creationIds }

aetherwave_remove_background

Recraft primary + fal.ai BiRefNet v2 fallback. ~5 cr per image.

ParamTypeRequiredDefaultNotes
imageUrlstringyes-Public URL of source image

Returns: { taskId, state, images } (PNG with transparent alpha)

aetherwave_upscale_video

Two engines. Atlas reaches 1080p and 2K; BytePlus reaches 1080p, 2K, 4K and 8K and is selected automatically for 4K and 8K.

A tier is not a dimension: the names are 16:9 standards, so the source is fitted inside the tier's box and the smaller dimension wins. A square source at 4k returns 2160x2160, not 3840x3840. For an exact pixel target, take the highest sensible tier and resize in ffmpeg.

ParamTypeRequiredDefaultNotes
videoUrlstringyes-Public URL of source video (MP4)
targetResolutionenumno1080p1080p, 2k, 4k, 8k. Atlas: 7 cr/s at 1080p (up to 53s), 10 cr/s at 2k (up to 23s), source 30fps or less. BytePlus: 4 / 8 / 16 / 62 cr/s
upscaleProviderenumnoatlas at 1080p/2katlas or byteplus. 4k and 8k always run on BytePlus

Returns: { taskId, status, videoUrl, autoSaved, creationId }

aetherwave_remove_background_video

Frame-by-frame background removal via rembg u2netp on AetherWave's Python service. 2 cr/sec.

ParamTypeRequiredDefaultNotes
videoUrlstringyes-Public URL of source video (MP4)
bgTypeenumnotransparenttransparent = alpha WebM, color = solid replacement
customColorstringno#00ff00Hex color for solid replacement when bgType: "color"

Returns: { taskId, status, videoUrl, autoSaved, creationId }

aetherwave_reframe_video

Luma Ray 2 Flash reframe to a new aspect ratio. 17 cr/sec.

ParamTypeRequiredDefaultNotes
videoUrlstringyes-Public URL of source video (MP4)
reframeAspectRatioenumyes-16:9, 9:16, 1:1, 4:3, 3:4, 21:9
reframePromptstringno-Optional steering prompt for new edge content (e.g. "extend the sky with sunset clouds")

Returns: { taskId, status, videoUrl, autoSaved, creationId }

aetherwave_master_audio

AI mastering via the AetherWave Python service. Synchronous response (route polls internally, expect 30s-5min). 20 credits per track. Free on Artist, Producer, Mogul and Ultimate plans. Output is WAV (~50MB per 3-min track) and auto-rehosted to Cloudflare R2.

ParamTypeRequiredDefaultNotes
audioUrlstringyes-Public URL to MP3 or WAV
presetstringyes-One of 12 (see below)
trackTitlestringno-Optional title for gallery row

Preset list (12, retrieved live from /api/master-presets):

PresetNameTarget LUFSUse for
streamingStreaming Ready-14Spotify, Apple Music, YouTube
loudLoud & Punchy-9Competitive loudness
gentleGentle Touch-16Acoustic, classical, jazz
hip_hopHip Hop / Trap-11Heavy low + crisp highs + 808s
edmEDM / Electronic-10House, techno, dubstep, drops
popPop / Top 40-12Radio-ready polish
rockRock / Alternative-12Punchy mids, gritty edge
lofiLo-Fi / Chill-14Warm, relaxed
rnbR&B / Soul-13
acousticAcoustic / Folk-16Preserves dynamics
cinematicCinematic / Orchestral-18Wide dynamics
podcastPodcast / Voice-16Voice-forward

Returns: { success, masteredUrl, preset, trackTitle, creditsCharged, isFree }

aetherwave_upload_to_gallery

Saves a file the user already has into their AetherWave gallery and returns a permanent URL that every other tool accepts. Free (no credits); it counts against the account's storage, and an upload over the plan's storage is refused with the space left.

ParamTypeRequiredNotes
filePathstringone of the threeA file on this computer. npx server only; the remote connector cannot read your disk
urlstringone of the threePublic http or https link. Fetched by the server; links that resolve to private or internal addresses are refused
dataUrlstringone of the threeA data: URL
titlestringnoGallery title. Defaults to the file name
descriptionstringno
tagsstring[]noUp to 20

Types: images png jpg webp gif, audio mp3 wav m4a flac ogg, video mp4 webm mov. Up to 95 MB per file; larger files go through the website uploader.

Returns: { success, creationId, url, type, title, sizeBytes }

aetherwave_get_user_manual

The download link for a user manual PDF. On the npx server it also saves the PDF to the user's Downloads folder (or saveTo), and returns the path. Free.

ParamTypeRequiredDefaultNotes
manualenumnomcpmcp, graphic-novel, ugc-studio, project-studio
saveTostringnoDownloadsnpx server only. A folder, or "none" for the link only

Returns: { manual, title, url, savedTo?, sizeBytes? }

aetherwave_list_my_creations

Paginated gallery read. Useful for chaining ("reframe my last 5 images to 9:16").

ParamTypeRequiredDefaultNotes
typeenumnoallimage, video, audio
limitint (1-500)no100Max items
offsetintno0Pagination offset
favoritesOnlybooleannofalseFilter to favorites

Returns: { items, total, offset, limit, hasMore }. Each item: { id, type, title, prompt, model, createdAt, isFavorite, contentUrl, thumbnailUrl, visibility, rating, duration?, width?, height?, likeCount, totalPlays, metadata }.

Comic book tools

All nine wrap the /api/graphic-novel/* routes the Graphic Novel Studio web app uses, so a book made through the MCP opens in the studio and the reverse. Every result includes account, the username that is billed.

aetherwave_comic_estimate

Free upper-bound quote. Assumes 4 panels a page, so short books usually cost less (12 pages: quoted 462, cost 301).

ParamTypeRequiredDefaultNotes
pageCountint (4-64)yes-The studio offers 12, 16, 24, 32, 48, 64
imageModelenumnogpt-image-2gpt-image-2 (faster: GPT Image 1.5 panels + GPT Image 2 cover) or gpt-image-2-5 (quality, slower). 9 cr a panel either way

Returns: { account, scriptCredits, panelCredits, assumedPanels, creditsPerPanel, totalCredits, imageModel, note }

aetherwave_comic_create

Creates the project and its cast. Free. Nothing is generated yet.

ParamTypeRequiredDefaultNotes
titlestringyes-Painted into the cover panel
premisestringyes-The situation, goal and stakes
charactersarray (1-12)yes-Each { name, visualDescription, role?, personalityNotes?, backstoryNotes? }. role is protagonist, antagonist, supporting (default) or minor; the cover is drawn around the protagonist
artStyleenumnomarvelmanga, anime, marvel, dc-comic, comic-noir, franco-belgian, retro-silver-age, webtoon, underground-indie, painted-realism, pixar-3d, hyper-realistic, custom
genreenumnofantasyaction, adventure, fantasy, sci-fi, horror, romance, mystery, thriller, slice-of-life, superhero, historical, literary
contentRatingenumnoteenall-ages, teen, mature
pageCountint (4-64)no24Target pages
imageModelenumnogpt-image-2As above. Locked once created
settingDescriptionstringno-Places, era, landmarks. Every panel prompt includes it
toneNotes, keyScenes, chapterOutline, additionalNotesstringno-Steer the script writer
referenceWorksstring[]no-Comics or films to evoke
aspectRatioenumno2:32:3 or 4:5. Locked once created
stylePresetenumnodefaultBalloon style: default, cartoon-yellow, comic-classic, oblong-classic. Locked once created

Returns: { account, projectId, status, characters: [{ characterId, name, role }], estimate, nextStep }

aetherwave_comic_character_reference

action: "generate" draws count (1-4) full-body references in the book's style, 6 credits each, and adds them to the character's options. editPrompt alone steers a fresh drawing; editPrompt with baseUrl (one of the character's images) edits that image and keeps the same person. If the call runs past about 50 seconds the images still land server-side and show up in aetherwave_comic_status.

action: "approve" (free) sets imageUrl as the reference. Only the character's own images or permanent AetherWave storage (media.aetherwavestudio.com) are accepted.

ParamTypeRequiredDefaultNotes
projectIdstringyes-
actionenumyes-generate or approve
characterId or characterNamestringone of-Name is matched without case
countint (1-4)no1generate
editPromptstring (max 500)no-generate
baseUrlURLno-generate; needs editPrompt
imageUrlURLapprove-

Returns (generate): { account, characterId, characterName, newImages, creditsCharged, stillGenerating, errors, referenceOptions, nextStep }. Returns (approve): { account, approved, characterId, characterName, referenceImageUrl }

aetherwave_comic_write_script

Starts the script and returns. About 2 to 3 minutes; charged on actual use when it finishes (40 credits for the 12-page book). Refuses on a project that already has panels unless replaceExisting: true, because a new script deletes them all.

ParamTypeRequiredDefaultNotes
projectIdstringyes-
replaceExistingbooleannofalseRequired to rewrite a script that already has panels

Returns: { account, started, status, message, warning?, nextStep }. warning names characters with no approved reference.

Documentation truncated — see the full README on GitHub.

Reviews

No reviews yet

Be the first to review this server!