ImagineArt

ImagineArt's hosted MCP server — image generation, video, music, upscaling, background removal, logos, fashion photoshoots, and ad creation through a single…

Community: Submitted by a user or imported; check the owner before granting accessOnlineNo sign-inGlobalFreeCan modify data

What it can do

  • Animate Fashion Image: Back-channel tool: animate a finished fashion still into a short campaign video. Two modes: (1) template mode — pass a template_id from list_fashion_video_templates; the templat
  • Apply Image Effect: Back-channel tool: apply a chosen image effect (a grain / film-stock or color-grade preset from list_image_effects) to an existing generation. It runs a two-step workflow — analyze
  • Composite Shoot: Composite two or more source images into a single reconciled frame — e.g. place the same model across shots into one scene, or merge separate product/garment stills into one compositi

What data it sees

Do you need an account

No: the server works without sign-in

ImagineArt's hosted MCP server — image generation, video, music, upscaling, background removal, logos, fashion photoshoots, and ad creation through a single connection.

Sign in with your imagine.art account when prompted; there is no API key to create or manage. Generations draw from your existing imagine.art credits, and the free tier includes 100 credits/day.

Server tool list (60)

Raw names from tools/list. Only developers need these.

animate_fashion_imageBack-channel tool: animate a finished fashion still into a short campaign video. Two modes: (1) template mode — pass a template_id from list_fashion_video_templates; the template drives the backgrounds, camera, transitions, and pacing. (2) advanced mode — pass a free-text prompt describing the motion, plus an optional camera_movement_id from list_camera_movements (e.g. Pan Right, Push In, Orbit Left). Supply exactly one of template_id or prompt. In both modes the model and wardrobe stay locked to the source still. It registers the still with bytedance (or reuses an existing reference) and runs a reference-to-video generation. Returns immediately with the queued video uuid; if a widget is rendered it polls fetch_status and updates in place, so do NOT poll yourself. In a text-only context, poll fetch_status (id=<uuid>, sync:true) until status is "complete" or "error", then use the returned url. Requires an active subscription (paid organizations only). Arguments: • org_id (required) — the organization the user selected via select_organization; call that tool first if you don't have one. • fashion_project_id (required) — the numeric project id threaded from select_fashion_project; the clip is linked to it. • images — a JSON array STRING of reference stills (stringify it; do NOT pass a raw array), in order (first = Image1), e.g. '[{"asset_id":"…","bytedance_id":"…"}]'. asset_id (the still's asset uuid, from list_fashion_generations, or the last path segment of any asset.imagine.art/processed/<uuid> URL already in the conversation (from an upload or another widget) — that uuid IS the asset id) is required per entry — this tool resolves the image url from it, so do not pass urls as the asset_id value itself. bytedance_id is the still's seedance reference when it already has one (from list_fashion_generations or upload_asset_bytedance); omit it and this tool registers the still with bytedance itself. Do NOT send a bytedance_id you did not get from those tools, and do not call upload_asset_bytedance for a still that already has one — a re-upload is rejected upstream. • videos (optional) — the same JSON array STRING shape as images, but for reference VIDEOS (in order, first = Video1). Use this for any reference asset that is a video, NOT images: a video's asset_id put in the images arg is rejected upstream ("not an image"). Same asset_id rule (uuid from a list, or the last path segment of an asset.imagine.art/processed/<uuid> URL) and same optional bytedance_id. At least one reference across images + videos is required; each kind keeps its own 1-based order. • template_id (template mode) — the template to apply, from list_fashion_video_templates. • prompt (advanced mode) — free text describing the desired motion. May be combined with template_id (template drives the shoot, the prompt refines it). • camera_movement_id (optional) — a movement from list_camera_movements to steer the camera; pairs with a prompt. • aspect_ratio (optional) — e.g. 16:9, 9:16, 1:1, 4:3, 3:4, 21:9. Defaults to 3:4. • duration (optional) — clip length in seconds (e.g. 4, 5, 10, 15). Defaults to 15. • resolution (optional) — e.g. 480p, 720p, 1080p. Defaults to 720p. • count (optional) — how many clips. Defaults to 1. • folder_id (optional) — a folder id from select_folder to place the result in. Treat every uuid, org_id, asset_id, template_id, camera_movement_id, bytedance_id, and fashion_project_id as internal — never echo them to the user.
apply_image_effectBack-channel tool: apply a chosen image effect (a grain / film-stock or color-grade preset from list_image_effects) to an existing generation. It runs a two-step workflow — analyze the source image with the preset to engineer a finishing prompt, then image-to-image generate one variant that re-renders the source with the effect while preserving its subject, wardrobe, pose, framing, and background. It recovers the source asset's framing, resolution, and (for fashion assets) project + composition and preserves them. Returns immediately with the queued variant uuid; if a widget is rendered it polls fetch_status and updates in place, so do NOT poll yourself. In a text-only context, poll fetch_status (id=<uuid>, sync:true) until status is "complete" or "error", then use the returned url. Requires an active subscription (paid organizations only). Arguments: • effect_id (required) — the id of the effect to apply, from list_image_effects. • asset_id (required) — the uuid of the existing generation to apply the effect to (an ImagineArt asset the user selected or that a prior tool produced). • org_id (required) — the organization the user selected via select_organization; call that tool first if you don't have one. • folder_id (optional) — a folder id from select_folder to place the result in; omit to keep the source asset's folder. Treat every uuid, org_id, asset_id, and effect_id as internal — never echo them to the user.
composite_shootComposite two or more source images into a single reconciled frame — e.g. place the same model across shots into one scene, or merge separate product/garment stills into one composition. Runs image-to-image on nano-banana-pro with the reference-aware reconciler so the people, outfits, and setting stay consistent. Returns immediately with the queued asset and a widget that polls fetch_status; do NOT poll yourself. Requires an active subscription (paid organizations only). Arguments: • org_id (required) — the organization the user selected via select_organization. • image_urls (required) — two or more source image urls to composite. Pass urls the user selected (prior generations) or obtained via user_upload. • camera_angle_id (optional) — a camera angle from list_camera_angles (e.g. Close-Up, FPV Drone Shot) to frame the composite; its preset instruction block drives the composition. Omit to just combine the inputs into one cohesive frame. • background_select_id (optional) — a scene from select_fashion_background (which needs org_id). When the user wants the composite set in a specific scene, call select_fashion_background, then thread the picked select_id here — the scene image is added as a reference. Omit to keep the inputs' own setting. • aspect_ratio (optional) — defaults to the model default. • resolution (optional) — e.g. "1K", "2K", "4K". • count (optional) — how many composites. Defaults to 1. • fashion_project_id (optional) — link the result to a fashion project. • folder_id (optional) — a folder id from select_folder to place the result in. Treat every uuid, org_id, image_url, fashion_project_id, and select_id as internal — never echo them to the user.
create_adCall this FIRST whenever the user asks to create an ad of ANY kind — "create an ad", "product ad", "UGC ad", "video ad", "hyper-motion ad", "make an ad for <product>", etc. It returns the step-by-step ad-studio workflow to run (organization → product → avatar → format → hook → setting → project → generate_ad). Do NOT ask the user for a product photo or description, and do NOT reach for generate_image / generate_video for an ad request — call create_ad and follow the returned steps. Takes no arguments.
create_avatarWidget back-channel: create a market avatar for the ad studio from already-uploaded photos (upload_market_image with kind "avatar"). Args: org_id, name, gender ("male"/"female"/"neutral"), photos. The ad-studio widget drives this; do NOT call it yourself. Returns {id}; treat it as INTERNAL.
create_fashionCall this FIRST whenever the user asks to create anything with the fashion studio — a photoshoot of ANY kind ("fashion photoshoot", "fashion shoot", "lookbook", "editorial shoot", "model wearing <garment>", "put this outfit on a model", etc.) OR a fashion video ("fashion video", "animate this look", "turn the shoot into a clip"). It returns the step-by-step fashion-studio workflow, which shares one setup (organization → shoot type → project) and then splits: a photoshoot branch (model → wardrobe → background → pose → generate_fashion_photoshoot) or a video branch (fashion_video_shoot). Do NOT ask the user for a model or garment photo, and do NOT reach for generate_image / generate_video for a fashion request — call create_fashion and follow the returned steps. Takes no arguments.
create_fashion_modelCreate a fashion model for the organization from one or more reference photos. Returns the created model immediately, then generates its character sheet (a 2x2 grid of the same person from four angles, used to keep later fashion generations identity-consistent) in the background and saves it onto the model when ready — you don't wait for it or poll anything. Requires org_id (call select_organization first), a name, a gender, and at least one image_url reference photo; description, age, and size are optional but size improves the sheet. visibility is optional and defaults to "organization" (shared with the rest of the org); pass "private" to keep the model to the creator. Treat returned ids as internal — never echo them.
create_fashion_outfitCreate a fashion outfit (a top or bottom) for the organization. Requires org_id, a title, and a type; frontal/rear/fabric image_urls, metadata, and visibility are optional. visibility defaults to "organization" (shared with the rest of the org); pass "private" to keep the outfit to the creator. Treat ids as internal — never echo them.
create_fashion_projectWidget back-channel: create a new fashion project in the selected folder and return its fashion_project_id. The select_fashion_project widget drives this via its inline "Create new project" field, so you normally should NOT call it yourself. Call it directly only as a fallback when no widget is rendered and the user asked for a new project; then you need a name (ask the user) plus org_id and directory_id (the user must have selected an organization and a folder first). Treat the returned fashion_project_id as INTERNAL: use it only as the tool argument; never display, repeat, or mention it to the user.
create_fashion_shot_settingCreate a fashion shot setting — a scene (type "background") or pose (type "pose") — for the organization. Requires org_id, a title, and a type; category, image_urls, metadata, and visibility are optional. visibility defaults to "organization" (shared with the rest of the org); pass "private" to keep the shot setting to the creator. For type "background" with an image, the server auto-derives a lighting prompt from the image and stores it in metadata.prompt (unless metadata already has a prompt), so the subject is lit as if inside the scene. Treat ids as internal — never echo them.
create_fashion_utilityCreate a fashion utility (footwear or accessory) for the organization. Requires org_id, a title, and a type; description, image_urls, metadata, and visibility are optional. visibility defaults to "organization" (shared with the rest of the org); pass "private" to keep the utility to the creator. Treat ids as internal — never echo them.
create_market_projectWidget back-channel: create a new marketing project (campaign container) in the selected folder and return its market_project_id. The select_market_project widget drives this via its inline "Create new project" field, so you normally should NOT call it yourself. Call it directly only as a fallback when no widget is rendered and the user asked for a new project; then you need a name (ask the user) plus org_id and folder_id (the user must have selected an organization and a folder first). Treat the returned market_project_id as INTERNAL: use it only as the market_project_id tool argument on the ad generation call; never display, repeat, or mention it to the user.
create_productWidget back-channel: create a market product for the ad studio. Provide EITHER url (a product/source page — scraped asynchronously; the result starts "processing", poll fetch_product_status until "finished"/"failed") OR name + description + photos (from upload_market_image — created immediately, "finished"). Requires org_id. The ad-studio widget drives this; do NOT call it yourself. Returns {id, status}; treat the id as INTERNAL.
delete_avatarDelete a saved market avatar. Provide avatar_id (from a prior select_avatar) plus org_id. The ad-studio widget drives this; the model may also call it when the user explicitly asks to delete an avatar. Returns {id}.
delete_fashion_assetDelete a generated asset from a fashion project. Requires org_id, the project_uuid, and the asset_id. Treat ids as internal — never echo them.
delete_fashion_modelDelete an organization's saved fashion model. Requires org_id and the model id. Treat ids as internal — never echo them.
delete_fashion_outfitDelete an organization's saved fashion outfit. Requires org_id and the outfit id. Treat ids as internal — never echo them.
delete_fashion_projectDelete a fashion project. Requires org_id and the project uuid. Treat ids as internal — never echo them.
delete_fashion_shot_settingDelete an organization's saved fashion shot setting. Requires org_id and the shot setting id. Treat ids as internal — never echo them.
delete_fashion_utilityDelete an organization's saved fashion utility. Requires org_id and the utility id. Treat ids as internal — never echo them.
delete_productDelete a saved market product. Provide product_id (from a prior select_product) plus org_id. The ad-studio widget drives this; the model may also call it when the user explicitly asks to delete a product. Returns {id}.
edit_photoBack-channel tool: apply a photo edit to an existing generation. It runs a two-step workflow — analyze the source image to engineer edit prompt(s), then image-to-image generate one variant per prompt (each effect returns a 4-shot set). It recovers the source asset's framing, resolution, and (for fashion assets) project + composition and preserves them on the edit. Returns immediately with the queued variant uuids; if a widget is rendered it polls fetch_status and updates in place, so do NOT poll yourself. In a text-only context, poll fetch_status (id=<uuid>, sync:true) on each uuid until status is "complete" or "error", then use the returned urls. Requires an active subscription (paid organizations only). Arguments: • effect (required) — which edit to apply; each produces a 4-shot set anchored on the source. One of: Editorial (narrative/creative coverage of the same look): editorial_pose_variation — different poses, gestures, and expressions; look, location, and mood held. editorial_angle_coverage — cinematic camera setups (low, overhead, profile, dutch, over-the-shoulder). editorial_mood_lighting_shift — same outfit and location under different lighting/atmosphere. editorial_location_jump — same look carried across different environments; wardrobe and model held. editorial_time_season_shift — same scene progressed through times of day or seasons. editorial_story_progression — sequential narrative beats within the same scene (a film-still arc). Catalog (e-commerce product coverage): catalog_standard_angle_coverage — the canonical front/back/3-4-left/3-4-right/side set. catalog_pose_variation — clean catalog poses keeping the garment fully visible and silhouette readable. catalog_colorway_swap — recolor the hero garment across color variants at full styling parity. catalog_detail_feature — close-up inserts (collar, cuffs, hem, hardware, stitching, labels, trims). catalog_styling_combinations — the same hero piece restyled with different complementary garments. catalog_model_fit_coverage — the same garment on a range of body types, heights, or sizes. • asset_id (required) — the uuid of the existing generation to edit (an ImagineArt asset the user selected or that a prior tool produced). • org_id (required) — the organization the user selected via select_organization; call that tool first if you don't have one. Treat every uuid and org_id as internal — never echo them to the user.
enhance_imageEnhance an image using the ImagineArt API. Pass org_id (required) — the organization id the user selected via select_organization; call that tool first if you don't have one. Optionally pass folder_id (a folder the user picked via select_folder) to create the result inside that folder; omit it to use the workspace root. Pass image_url — if the user selected an existing generation, pass its url; for a non-ImagineArt asset, first call user_upload and pass the resulting url. Returns immediately with a uuid and a widget that mounts in the queued state; the widget polls fetch_status and updates in place. Do not poll yourself. IMPORTANT: On success, do NOT write any text reply, summary, or commentary. The widget is the complete user-facing response. Reply only when the tool result text begins with "Unable to" (an error).
extract_garmentBack-channel tool: extract a single garment (or its motif) from a reference photo and render it as a clean, isolated product asset suitable for virtual try-on — a ghost-mannequin garment view on a white background, or a flat isolated motif. Renders NO widget. Runs image-to-image and returns immediately with a uuid; poll fetch_status yourself (id=<uuid>, sync:true) until status is "complete" or "error", then use the returned image url as the extracted asset. Requires an active subscription (paid organizations only). Arguments: • org_id (required) — the organization the user selected via select_organization; call that tool first if you don't have one. • image_url (required) — the reference photo. If the user selected an existing generation, pass its url; for a non-ImagineArt asset (a user attachment), call user_upload first and pass the returned url. • garment_type (required) — which view to extract. One of: top_front / top_back — the upper-body garment (shirt/blouse/top), front or back. bottom_front / bottom_back — the lower-body garment (pants/skirt/shorts), front or back. dress_front / dress_back — a one-piece / full-length garment (dress/kurta/jumpsuit), front or back. motif — only the print/graphic/logo/embroidery, isolated as flat artwork. • folder_id (optional) — a folder id from select_folder to place the result in; omit for the workspace root.
fashion_video_shootOpen the fashion video shoot: a single interactive surface where the user builds a fashion reference-to-video clip end to end — picking a source still, a template or free-text motion, an optional camera movement, duration/aspect/resolution — and runs the generation. This is data-less: the widget drives the whole flow itself, calling list_fashion_video_templates, list_camera_movements, and animate_fashion_image via its own controls. Call this tool when the user wants to animate a fashion still into a video or asks for a fashion video; do NOT call the underlying generation tools yourself unless the result reports no widget rendered. After calling this tool, call list_fashion_generations with the same organization ID and fashion project ID you used here Requires org_id (the organization the user selected via select_organization; call that tool first if you don't have one), fashion_project_id (from select_fashion_project — scopes which stills the widget offers as animation sources), and shoot_type — "editorial" or "catalog" — which the widget uses to filter its templates. shoot_type is required: ask the user whether they want an editorial or catalog shoot and confirm their choice before calling. Treat org_id and fashion_project_id as internal — never echo them to the user.
fetch_music_statusStatus fetcher for queued music generations. The widget polls this silently via the callServerTool backchannel during the queued → generating → complete transition; if a widget is rendered, do NOT call this yourself. In text-only contexts, pass sync:true to wait server-side for completion (bounded ~45s). Without sync (default), it's a single point-in-time check.
fetch_product_statusWidget back-channel: report a product's scrape status after a from-URL create_product. The ad-studio widget polls this (every ~2.5s) with the product id until status is "finished" or "failed". No _meta.ui; do NOT call it yourself. Returns {id, status}.
fetch_statusStatus fetcher for queued image or video generations (the asset type is derived from the generation, not fixed). The widget polls this silently via the callServerTool backchannel during the queued → generating → complete transition; if a widget is rendered, do NOT call this yourself. In text-only contexts, pass sync:true to wait server-side for completion (bounded ~45s). Without sync (default), it's a single point-in-time check.
generate_3d_logo_animationTurn a flat 2D logo into a premium 3D version and animate it into a short cinematic logo-reveal clip — smooth rotation, dynamic studio lighting sweeps, reflections gliding over the material, and motion-graphics polish, building to a clean hero hold. This runs the whole 3d-logo-animation recipe in ONE call: internally it first converts the supplied 2D logo into a high-quality 3D version (realistic reflections, studio lighting), waits for that to finish, then animates the 3D logo into the reveal. PREFER this whenever the user asks for a 3D logo, an animated logo, a logo reveal / intro, or wants to turn a flat logo into a cinematic motion graphic. Phase A renders on nano-banana-2 (image-to-image edit) and phase B on veo-3.1-fast (image-to-video). Because it renders the 3D logo first, this tool BLOCKS for a short while (typically under a minute) before it returns the queued video — that wait is expected; do not retry or call it again while it is running. It then returns a uuid and a widget that mounts in the queued state — the widget itself polls fetch_status and updates in place (queued → generating → complete). Do not call fetch_status yourself. Arguments: • org_id (required) — the organization id the user selected via select_organization. If you don't have one yet, call select_organization first and ask the user to choose; do not guess. Reuse the same org_id for the whole chat. • folder_id (optional) — a folder id the user picked via select_folder, to create the video inside that folder. Omit to create it at the workspace root. Reuse the same folder_id for the whole chat. • logo_image_url (required) — a URL of the flat 2D logo to convert and animate. Pass a URL the user supplied directly, or one obtained by uploading a user-attached logo via user_upload first. • material_style (optional) — the 3D material appearance (e.g. "gold", "matte plastic", "holographic", "brushed metal"). Defaults to "glossy glass and chrome". • model (optional) — the phase-B video model. One of: "veo-3.1-fast" (default), "veo-3.1", "kling-2.6-pro", "ltx-2.3", "seedance-2.5", "seedance-2.0-fast", "happy_horse", "seedance-2.0", "wan-2.6", "seedance-1.5-pro", "seedance-pro-fast", "kling-o3", "kling-3.0-pro", "pixverse-v6", "wan-2.2". Pass the model name exactly as written. Omit to use the default. • aspect_ratio (optional) — the animation framing. Defaults to "16:9" (the skill's cinematic option). Each model has its own allow-list (same lists as generate_video); a value not in the chosen model's list silently falls back to a valid ratio, and the request still succeeds. (The intermediate 3D logo still always renders square.) • duration (optional) — clip length as a string (seconds). Defaults to "6". Each model has its own allow-list (same as generate_video); a value not in the chosen model's list silently falls back to a valid duration. • resolution (optional) — the output resolution. One of: "720p", "1080p" (default), "4k". Pass when the user asks for a specific resolution; omit to use 1080p. An unrecognised value falls back to "1080p". Treat org_id and folder_id as INTERNAL identifiers: use them only as tool arguments. Never display, repeat, echo, or mention them to the user. IMPORTANT: On success, do NOT write any text reply, summary, suggestions, or commentary. The widget is the complete user-facing response — any text from you appears as redundant chatter beneath it. Reply only when the tool result text begins with "Unable to" (an error), in which case relay the error.
generate_adRun the ad-studio video generation once the selections are made. Args: org_id, market_project_id (from select_market_project/create_market_project), format_id (REQUIRED), product_id and avatar_id (from select_product/select_avatar), optional setting_id/hook_id, resolution (REQUIRED — from list_resolutions), aspect_ratio (REQUIRED — from list_aspect_ratios), duration (REQUIRED seconds — from list_durations), optional prompt (free-text ad brief — may be empty; the format supplies the base), optional count (default 1), folder_id?. resolution, aspect_ratio, and duration are all required: call list_resolutions, list_aspect_ratios, and list_durations and have the user confirm each before generating, so credits aren't spent on unintended output. format_id MUST be the numeric id from list_formats or a select_format click — NOT the format name. The user saying "UGC" gives you the name "UGC", whose format_id is a number (e.g. 1); pass the number. Passing "UGC" as format_id is wrong and will fail. setting_id/hook_id are likewise numeric ids, not names. The server resolves the ids into the prompt + reference images. If format_id is missing or unrecognized this returns an error; call list_formats to get the right number (or select_format to let the user pick), then retry. Renders the asset-generation widget (queued → progress). Treat all ids as INTERNAL.
generate_avatarWidget back-channel: generate ONE avatar image from a text prompt (synchronous). The avatar widget calls this repeatedly to offer several variations of the same prompt, lets the user pick one, then uploads the chosen image via upload_market_image and saves it with create_avatar. Args: prompt, optional aspect_ratio (default 9:16). Returns {image} as a base64 data URI. Do NOT call this yourself.
generate_carouselGenerate a multi-slide social carousel (Instagram / LinkedIn style) from one topic. The server plans the deck — cover, content slides, CTA, each with its own headline, subtext and visual in a shared brand style — so pass the topic, NOT per-slide prompts or copy. Returns one uuid per slide; the result text says what to do next. Use for any carousel / swipe post / slide deck; for a single image use generate_image. Before the first carousel in a chat, ask slides (3/5/7, default 5) and frame (4:5 default, 1:1, 9:16) in ONE question via your native choice interface — not two questions, not an interview. Skip it when the user already said, or told you to just make it, then reuse those answers all chat. Audience and tone go in prompt, never a separate question. For a carousel about a concrete product, call select_product after that question, WAIT for the choice, then pass product_id. The picker collects the photo itself: never ask for a photo or link in chat, never call user_upload, never invent an image_url. No other ad-studio step belongs in a carousel. For a generic deck — tips, education, quotes — skip the picker and generate straight away.
generate_cooking_videoTurn a single photo of a person into a polished, cinematic cooking tutorial video. This runs the whole storyboard-to-cooking-video recipe in ONE call: internally it first renders a composite production reference board (a character reference preserving the person's face, a kitchen location reference, and a 9-panel step-by-step action sequence for the dish), waits for that board to finish, then animates it into a single continuous cinematic clip with soft kitchen ambience — following the steps beat by beat from raw ingredients to a final plated close-up. PREFER this whenever the user wants to turn a person's photo into a cooking / recipe tutorial video. Stage 1 renders on gpt-image-2 and stage 2 on seedance-2.0-fast (image-to-video). Because it renders the reference board first, this tool BLOCKS for a short while (typically under a minute) before it returns the queued video — that wait is expected; do not retry or call it again while it is running. It then returns a uuid and a widget that mounts in the queued state — the widget itself polls fetch_status and updates in place (queued → generating → complete). Do not call fetch_status yourself. Arguments: • org_id (required) — the organization id the user selected via select_organization. If you don't have one yet, call select_organization first and ask the user to choose; do not guess. Reuse the same org_id for the whole chat. • folder_id (optional) — a folder id the user picked via select_folder, to create the video inside that folder. Omit to create it at the workspace root. Reuse the same folder_id for the whole chat. • person_image_url (required) — a reference image URL of the person who will star in the tutorial. If the user attaches an image, first call user_upload with it and pass the returned url here; if the user gives an image URL directly, pass it as-is. Treat person_image_url as internal — never echo it. • dish (optional) — the food being made (e.g. "fresh pasta", "chocolate soufflé", "sushi rolls"). Defaults to "fresh pasta". • kitchen_style (optional) — the kitchen aesthetic (e.g. "modern minimalist", "cozy farmhouse"). Defaults to "Italian rustic-modern". • outfit (optional) — what the person wears (e.g. "chef's whites", "casual sweater and apron"). Defaults to "a clean apron over smart-casual clothing, sleeves rolled up". • duration_seconds (optional) — clip length in seconds. Defaults to "15". An unsupported value for the model silently falls back to a valid duration and the request still succeeds. • aspect_ratio (optional) — pass when the user specifies one. Defaults to "16:9"; pass "9:16" for vertical social-media reels. An unsupported value falls back to a valid ratio. • resolution (optional) — the output resolution. One of: "480p", "720p" (default), "1080p". Pass when the user asks for a specific resolution; omit to use 720p. An unrecognised value falls back to "720p". Treat org_id, folder_id, and person_image_url as INTERNAL identifiers: use them only as tool arguments. Never display, repeat, echo, or mention them to the user. IMPORTANT: On success, do NOT write any text reply, summary, suggestions, or commentary. The widget is the complete user-facing response — any text from you appears as redundant chatter beneath it. Reply only when the tool result text begins with "Unable to" (an error), in which case relay the error.
generate_drone_videoGenerate a cinematic aerial / drone-style video using the ImagineArt API — sweeping bird's-eye views, orbit shots, flyovers, and top-down footage of landscapes, architecture, and events. PREFER this over generate_video whenever the user asks for drone, aerial, bird's-eye, flyover, overhead, or top-down footage. It expands a subject + shot type + style into an aerial-tuned prompt and renders it on the veo-3.1 model by default (best physics and camera motion for aerial scenes). Returns immediately with a uuid and a widget that mounts in the queued state — the widget itself polls fetch_status and updates in place (queued → generating → complete). Do not call fetch_status yourself. Arguments: • org_id (required) — the organization id the user selected via select_organization. If you don't have one yet, call select_organization first and ask the user to choose; do not guess. Reuse the same org_id for the whole chat. • folder_id (optional) — a folder id the user picked via select_folder, to create the video inside that folder. Omit to create it at the workspace root. Reuse the same folder_id for the whole chat. • location_or_subject (required) — what to shoot from above (e.g. "a mountain valley at sunrise", "a luxury villa by the ocean", "a crowded city intersection"). • shot_type (optional) — the camera movement. One of: "reveal" (default — ascends and reveals the subject), "orbit" (smooth 360° circular arc around the subject), "flyover" (low, fast forward tracking with depth of field), "top-down" (static overhead bird's-eye). An unrecognised value falls back to "reveal". • style (optional) — the visual atmosphere (e.g. "dramatic storm clouds", "misty morning", "blue hour city lights"). Defaults to "golden hour, cinematic, 4K, ultra-detailed". • reference_image (optional) — an aerial/location reference image to run image-to-video instead of text-to-video. If the user attaches an image, first call user_upload with it and pass the returned url here; if the user gives an image URL directly, pass it as-is. Omit for plain text-to-video. Treat reference_image as internal — never echo it. • model (optional) — one of: "veo-3.1" (default), "veo-3.1-fast", "ltx-2.3", "seedance-2.5", "seedance-2.0-fast", "happy_horse", "seedance-2.0", "wan-2.6", "seedance-1.5-pro", "seedance-pro-fast", "kling-2.6-pro", "kling-o3", "kling-3.0-pro", "pixverse-v6", "wan-2.2". Pass the model name exactly as written. Omit to use the aerial-tuned default. • aspect_ratio (optional) — pass when the user specifies one. Defaults to "16:9". Per-model allow-lists: - veo-3.1: 16:9, 9:16 - veo-3.1-fast: 16:9, 9:16 - ltx-2.3: 16:9, 9:16 - seedance-2.5: 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive (with a reference_image the ratio is always "adaptive") - seedance-2.0-fast: 21:9, 16:9, 9:16, 3:4, 4:3, 1:1, auto - happy_horse: 16:9, 9:16, 1:1, 4:3, 3:4 - seedance-2.0: 21:9, 16:9, 9:16, 3:4, 4:3, 1:1, auto - wan-2.6: 16:9, 9:16, 1:1, 4:3, 3:4 - seedance-1.5-pro: 21:9, 16:9, 9:16, 3:4, 4:3, 1:1 - seedance-pro-fast: 16:9, 4:3, 1:1, 9:16, 21:9, 3:4 - kling-2.6-pro: 16:9, 9:16, 1:1 - kling-o3: 16:9, 9:16, 1:1 - kling-3.0-pro: 16:9, 9:16, 1:1 - pixverse-v6: 16:9, 9:16, 4:3, 3:4, 1:1, 2:3, 3:2, 21:9 - wan-2.2: (none — always uses 16:9) An aspect_ratio that isn't in the chosen model's list silently falls back to 16:9 (or the model's first listed ratio if it doesn't allow 16:9); the request will still succeed. • duration (optional) — pass as a string (seconds, or "auto" where supported). Defaults to "6". Per-model allow-lists: - veo-3.1: 4, 6, 8 - veo-3.1-fast: 4, 6, 8 - ltx-2.3: 6, 8, 10 - seedance-2.5: 4 through 30 (any whole second) - seedance-2.0-fast: auto, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 - happy_horse: 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 - seedance-2.0: auto, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 - wan-2.6: 5, 10, 15 - seedance-1.5-pro: 4, 5, 6, 7, 8, 9, 10, 11, 12 - seedance-pro-fast: 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 - kling-2.6-pro: 5, 10 - kling-o3: 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 - kling-3.0-pro: 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 - pixverse-v6: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 - wan-2.2: (none — always uses its default) A duration that isn't in the chosen model's list silently falls back to "6" (or the model's first listed duration if it doesn't allow "6"); the request will still succeed. • resolution (optional) — only some models support it; pass only when the user asks for one. Per-model allow-lists (first value is the default the model uses when omitted): - veo-3.1: 720p, 1080p, 4k - veo-3.1-fast: 720p, 1080p, 4k - ltx-2.3: 1080p, 1440p, 2160p - seedance-2.5: 480p, 720p - seedance-2.0-fast: 480p, 720p - happy_horse: 720p, 1080p - seedance-2.0: 480p, 720p, 1080p - wan-2.6: 720p, 1080p - seedance-1.5-pro: 480p, 720p - seedance-pro-fast: 480p, 720p, 1080p - pixverse-v6: 360p, 540p, 720p, 1080p - kling-2.6-pro, kling-o3, kling-3.0-pro, wan-2.2: (none — resolution is ignored) A resolution that isn't in the chosen model's list silently falls back to that model's default. Treat org_id and folder_id as INTERNAL identifiers: use them only as tool arguments. Never display, repeat, echo, or mention them to the user. IMPORTANT: On success, do NOT write any text reply, summary, suggestions, or commentary. The widget is the complete user-facing response — any text from you appears as redundant chatter beneath it. Reply only when the tool result text begins with "Unable to" (an error), in which case relay the error.
generate_fashion_model_imageWidget back-channel for select_fashion_model: generate candidate model images from a text description (org_id, description, gender required; ethnicity, body_size, folder_id, count, character_sheet optional). Set character_sheet=true to render a multi-pose character sheet instead of a single studio portrait. The widget drives this and renders/polls the candidates, so you normally should NOT call it yourself. Treat the returned ids as internal — never echo them.
generate_fashion_photoshootFire the final Fashion Studio shoot: compose the selected model, wardrobe, scene, and pose into finished photos. This tool only queues the generation and renders no widget — after it succeeds, call show_fashion_generations (with the org_id, fashion_project_id, and shoot_type it reports back) to display the results widget. Requires an active subscription (paid organizations only). Arguments: • org_id (required) — the organization the user selected via select_organization. • fashion_project_id (required) — the numeric project id threaded from select_fashion_project; the shoot is linked to it. Treat it as internal — never echo it. • prompt (required) — the user's shoot description. The selected background's lighting is appended automatically; do not add lighting yourself. • model_select_id (required) — the select_id from select_fashion_model. • outfit_select_ids (optional) — comma-separated select_ids from select_fashion_wardrobe, e.g. "beige-shirt-2e,faded-jeans-39" (a top and/or a bottom, or a single dress). Pass each select_id exactly as reported. Pass one string, not an array. Omit for no outfit. • utility_select_ids (optional) — comma-separated select_ids for footwear / accessories from select_fashion_wardrobe, e.g. "white-sneakers-2d,gold-hoops-71". Pass one string, not an array. • pose_select_id (optional) — the select_id from select_fashion_pose. • background_select_id (optional) — the select_id from select_fashion_background. Omit to shoot at the plain root. • shoot_type (optional) — "editorial" or "catalogue". • aspect_ratio (required) — one of 16:9, 9:16, 1:1, 4:3, 3:4. Ask the user which they want (or call list_aspect_ratios) before generating; the shoot fails if it is empty. • count (optional) — how many images, as a numeric string, e.g. "1". Defaults to the standard batch. • folder_id (optional) — a folder id from select_folder to place the assets in. All select_id / fashion_project_id / folder_id values are INTERNAL — use them only as arguments; never display, repeat, or mention them to the user.
generate_giant_product_showcaseGenerate a dramatic "giant product" advertising image — a regular product enlarged to a massive, building-sized scale, towering next to a person for scale comparison, in a polished commercial studio setting. PREFER this over generate_image whenever the user wants a giant/oversized product visual, a surreal scale-comparison ad, or a "product as a building" hero shot. It takes the product photo and renders the giant-scale scene (image-to-image) on the nano-banana-pro model. Returns immediately with a uuid and a widget that mounts in the queued state — the widget itself polls fetch_status and updates in place (queued → generating → complete). Do not call fetch_status yourself. Arguments: • org_id (required) — the organization id the user selected via select_organization. If you don't have one yet, call select_organization first and ask the user to choose; do not guess. Reuse the same org_id for the whole chat. • folder_id (optional) — a folder id the user picked via select_folder, to create the image inside that folder. Omit to create it at the workspace root. Reuse the same folder_id for the whole chat. • product_image (required) — the product photo to enlarge. If the user attaches an image, first call user_upload with it and pass the returned url here; if the user gives an image URL directly, pass it as-is. This is essential — the giant scene is rendered from this image. Treat product_image as internal — never echo it. • person_description (optional) — the person standing beside the giant product for scale, e.g. "a woman in a red dress", "a child looking up in awe". Defaults to "a stylishly dressed man". Treat org_id and folder_id as INTERNAL identifiers: use them only as tool arguments. Never display, repeat, echo, or mention them to the user. IMPORTANT: On success, do NOT write any text reply, summary, suggestions, or commentary. The widget is the complete user-facing response — any text from you appears as redundant chatter beneath it. Reply only when the tool result text begins with "Unable to" (an error), in which case relay the error.
generate_imageGenerate an image using the ImagineArt API. Returns immediately with a uuid and a widget that mounts in the queued state — the widget itself polls fetch_status and updates in place as the generation progresses (queued → generating → complete). Do not call fetch_status yourself. Arguments: • org_id (required) — the organization id the user selected via select_organization. If you don't have one yet, call select_organization first and ask the user to choose; do not guess. Reuse the same org_id for the whole chat. • folder_id (optional) — a folder id the user picked via select_folder, to create the image inside that folder. Omit to create it at the workspace root. Reuse the same folder_id for the whole chat. • prompt (required) — the text prompt. • image_url (optional) — a reference image to run image-to-image (edit / variation) mode instead of text-to-image. If the user attaches an image, first call user_upload with it and pass the returned url here; if the user gives an image URL directly, pass it as-is. Omit for plain text-to-image. When set, the request automatically switches to the img2img variation (models that don't support img2img silently fall back to text-to-image). Treat image_url as internal — never echo it. • model (optional) — one of: "nano-banana-pro" (default), "imagine-art-2.0", "nano-banana-2", "gpt-image-2", "imagine-art-1.5", "imagine-art-1.5-pro", "recraft-v4.1", "ideogram-v4", "seedream-v5-lite", "xAI-grok-imagine". Pass the model name exactly as written. Omit unless the user asks for a specific model. • aspect_ratio (optional) — pass when the user specifies one. Defaults to "1:1". Per-model allow-lists: - nano-banana-pro: 21:9, 16:9, 3:2, 4:3, 5:4, 1:1, 4:5, 3:4, 2:3, 9:16 - imagine-art-2.0: 1:1, 9:16, 16:9, 4:3, 3:4, 2:3, 3:2, 21:9, 4:5, 5:4 - nano-banana-2: 21:9, 16:9, 3:2, 4:3, 5:4, 1:1, 4:5, 3:4, 2:3, 9:16 - gpt-image-2: 1:1, 4:3, 3:4, 3:2, 16:9, 9:16, 21:9, 2:3 - imagine-art-1.5: 1:1, 9:16, 16:9, 4:3, 3:4, 1:3, 3:1, 2:3, 3:2 - imagine-art-1.5-pro: 1:1, 9:16, 16:9, 4:3, 3:4, 1:3, 3:1, 2:3, 3:2 - recraft-v4.1: 1:1, 4:3, 3:4, 16:9, 9:16 - ideogram-v4: 1:1, 4:3, 3:4, 16:9, 9:16 - seedream-v5-lite: 1:1, 2:3, 3:2, 4:3, 3:4, 16:9, 9:16 - xAI-grok-imagine: 2:1, 20:9, 19.5:9, 16:9, 4:3, 3:2, 1:1, 2:3, 3:4, 9:16, 9:19.5, 9:20, 1:2 An aspect_ratio that isn't in the chosen model's list silently falls back to 1:1; the request will still succeed. • resolution (optional) — only some models support it; pass only when the user asks for one. Per-model allow-lists (first value is the default the model uses when omitted): - nano-banana-pro: 1K, 2K, 4K - nano-banana-2: 1K, 2K, 4K - gpt-image-2: 1K, 2K, 4K Other models ignore resolution entirely. A value not in the chosen model's list silently falls back to that model's default. • quality (optional) — only gpt-image-2 supports it: "low", "medium", "high" (first value is the default when omitted). Other models ignore quality. A value not in the model's list silently falls back to the model's default. IMPORTANT: On success, do NOT write any text reply, summary, suggestions, or commentary. The widget is the complete user-facing response — any text from you appears as redundant chatter beneath it. Reply only when the tool result text begins with "Unable to" (an error), in which case relay the error.
generate_instagram_postGenerate a polished, Instagram-ready post using the ImagineArt API: a scroll-stopping hero image plus a caption and hashtags. PREFER this over generate_image whenever the user asks for an Instagram post, a social media post/visual, a feed or Reels image, or "content for Instagram". It expands a short brief (and optional brand style) into a prompt tuned for social-media photography that grabs attention within two seconds, and renders it on the nano-banana-pro model. Returns immediately with a uuid and a widget that mounts in the queued state — the widget itself polls fetch_status and updates in place (queued → generating → complete). Do not call fetch_status yourself. This recipe has two phases. Phase A (the hero image) is produced by this tool and shown in the widget. Phase B (the caption + hashtags) is text you write: UNLIKE other generation tools, you SHOULD reply with text here — a 2–4 line caption (hook, brand message, call-to-action) based on the brief, followed by a separate block of 15–20 mixed-tier hashtags (broad, niche, and branded). Do not describe or restate the image itself — the widget already shows it. Arguments: • org_id (required) — the organization id the user selected via select_organization. If you don't have one yet, call select_organization first and ask the user to choose; do not guess. Reuse the same org_id for the whole chat. • folder_id (optional) — a folder id the user picked via select_folder, to create the post inside that folder. Omit to create it at the workspace root. Reuse the same folder_id for the whole chat. • brief (required) — what the post is about or promotes, e.g. "launch of our summer cold-brew coffee line" or "behind-the-scenes of our pottery studio". • brand_style (optional) — the post's visual personality, e.g. "earthy, minimal, warm film tones". Defaults to "modern, vibrant, clean typography, lifestyle photography aesthetic". • format (optional) — the post aspect ratio: "1:1" (square feed), "4:5" (portrait) or "9:16" (Reels). Defaults to "4:5". Any other value falls back to the default. Boundary: this makes ONE social hero image + caption. If the request involves fashion at all — a garment on a model, a "fashion post", a lookbook, an editorial shoot, or "put this outfit on a model" — call create_fashion instead; default fashion requests into the fashion workflow. Treat org_id and folder_id as INTERNAL identifiers: use them only as tool arguments. Never display, repeat, echo, or mention them to the user.
generate_interior_designGenerate a professional interior design visualization using the ImagineArt API — redesign an existing room from a photo, generate a brand-new room concept, or visualize a furniture style in a space. PREFER this over generate_image whenever the user asks for interior design, a room redesign, home decor, an architecture/room visualization, a furniture layout, or house design. It expands a room type (and optional style / color palette / specific elements) into a prompt tuned for high-end, magazine-quality renders and renders it on the nano-banana-pro model by default. Returns immediately with a uuid and a widget that mounts in the queued state — the widget itself polls fetch_status and updates in place (queued → generating → complete). Do not call fetch_status yourself. Arguments: • org_id (required) — the organization id the user selected via select_organization. If you don't have one yet, call select_organization first and ask the user to choose; do not guess. Reuse the same org_id for the whole chat. • folder_id (optional) — a folder id the user picked via select_folder, to create the render inside that folder. Omit to create it at the workspace root. Reuse the same folder_id for the whole chat. • room_type (required) — the type of room (e.g. "modern living room", "scandinavian kitchen", "luxury master bedroom", "minimalist home office"). • design_style (optional) — the aesthetic direction (e.g. "japandi", "industrial loft", "boho chic", "mid-century modern", "art deco"). Defaults to "modern minimalist". • color_palette (optional) — preferred colors and materials (e.g. "sage green and brass", "monochrome black and white", "warm terracotta"). Defaults to "neutral tones with wood accents". • specific_elements (optional) — particular items to include (e.g. "large floor-to-ceiling windows", "velvet green sofa", "statement pendant light"). • room_photo (optional) — a photo of an existing room to redesign or use as a layout reference. When supplied, the render keeps the room's structural layout and window placement and transforms only the furniture, decor, and finishes (image-to-image). If the user attaches an image, first call user_upload with it and pass the returned url here; if the user gives an image URL directly, pass it as-is. Omit for a brand-new room concept (text-to-image). Treat room_photo as internal — never echo it. • model (optional) — one of: "nano-banana-pro" (default), "imagine-art-2.0", "nano-banana-2", "gpt-image-2", "imagine-art-1.5", "imagine-art-1.5-pro", "recraft-v4.1", "ideogram-v4", "seedream-v5-lite", "xAI-grok-imagine". Pass the model name exactly as written. Omit unless the user asks for a specific model — the default handles both photo redesigns and new concepts. • aspect_ratio (optional) — defaults to "16:9" (standard for room views). nano-banana-pro allows 21:9, 16:9, 3:2, 4:3, 5:4, 1:1, 4:5, 3:4, 2:3, 9:16; a value the chosen model doesn't allow silently falls back to 16:9 (or the model's first listed ratio) and the request still succeeds. Treat org_id and folder_id as INTERNAL identifiers: use them only as tool arguments. Never display, repeat, echo, or mention them to the user. IMPORTANT: On success, do NOT write any text reply, summary, suggestions, or commentary. The widget is the complete user-facing response — any text from you appears as redundant chatter beneath it. Reply only when the tool result text begins with "Unable to" (an error), in which case relay the error.
generate_jewelry_videoGenerate a luxury jewelry advertisement video — a premium, high-end commercial clip with detailed macro animation: a slow, elegant camera rotation around the piece followed by an extreme close-up that glides over the diamond facets under a focused light. This runs the whole jewelry-product-video recipe in ONE call: internally it first renders a luxury product still of the jewelry (100mm macro lens, warm key light, shallow depth of field) from a text description, waits for that still to finish, then animates it into the cinematic commercial. PREFER this whenever the user asks for a jewelry video, a luxury / diamond / ring ad, a high-end jewelry showcase, or wants to turn a jewelry description into a commercial. Phase A renders on nano-banana-2 (text-to-image) and phase B on kling-2.6-pro (image-to-video). Because it renders the still first, this tool BLOCKS for a short while (typically under a minute) before it returns the queued video — that wait is expected; do not retry or call it again while it is running. It then returns a uuid and a widget that mounts in the queued state — the widget itself polls fetch_status and updates in place (queued → generating → complete). Do not call fetch_status yourself. Arguments: • org_id (required) — the organization id the user selected via select_organization. If you don't have one yet, call select_organization first and ask the user to choose; do not guess. Reuse the same org_id for the whole chat. • folder_id (optional) — a folder id the user picked via select_folder, to create the video inside that folder. Omit to create it at the workspace root. Reuse the same folder_id for the whole chat. • jewelry_description (optional) — the jewelry item to feature (e.g. "an emerald-cut diamond pendant on a white gold chain", "a vintage sapphire halo ring"). Defaults to "a delicate rose gold ring with a lotus design and a sparkling diamond". • surface_description (optional) — the surface the jewelry rests on (e.g. "a black marble slab", "folded ivory silk"). Defaults to "a beige surface". • model (optional) — the phase-B video model. One of: "kling-2.6-pro" (default), "veo-3.1", "veo-3.1-fast", "ltx-2.3", "seedance-2.5", "seedance-2.0-fast", "happy_horse", "seedance-2.0", "wan-2.6", "seedance-1.5-pro", "seedance-pro-fast", "kling-o3", "kling-3.0-pro", "pixverse-v6", "wan-2.2". Pass the model name exactly as written. Omit to use the default. • aspect_ratio (optional) — pass when the user specifies one. Defaults to "1:1" (the skill's square macro framing). Each model has its own allow-list (same lists as generate_video); a value not in the chosen model's list silently falls back to a valid ratio, and the request still succeeds. • duration (optional) — clip length as a string (seconds). Defaults to "5" (the skill's combined macro rotation + facet glide). Each model has its own allow-list (same as generate_video); a value not in the chosen model's list silently falls back to a valid duration. • resolution (optional) — the output resolution. One of: "720p", "1080p" (default), "4k". Pass when the user asks for a specific resolution; omit to use 1080p. An unrecognised value falls back to "1080p". Treat org_id and folder_id as INTERNAL identifiers: use them only as tool arguments. Never display, repeat, echo, or mention them to the user. IMPORTANT: On success, do NOT write any text reply, summary, suggestions, or commentary. The widget is the complete user-facing response — any text from you appears as redundant chatter beneath it. Reply only when the tool result text begins with "Unable to" (an error), in which case relay the error.
generate_logoQuickly generate a single polished brand logo — a clean, scalable, vector-style mark with the brand name rendered legibly. PREFER this over generate_image whenever the user wants a logo, brand mark, or "logo for my brand". It builds a focused logo prompt from the brand name (+ optional style, industry, colors, background) and renders a single logo. Returns immediately with a uuid and a widget that mounts in the queued state — the widget itself polls fetch_status and updates in place (queued → generating → complete). Do not call fetch_status yourself. Arguments: • org_id (required) — the organization id the user selected via select_organization. If you don't have one yet, call select_organization first and ask the user to choose; do not guess. Reuse the same org_id for the whole chat. • folder_id (optional) — a folder id the user picked via select_folder, to create the logo inside that folder. Omit to create it at the workspace root. Reuse the same folder_id for the whole chat. • brand_name (required) — the brand or company name to render in the logo, e.g. "Northwind Coffee". • style (optional) — the logo style, e.g. "monogram initials", "icon + text horizontal", "bold sans-serif wordmark", "badge/emblem", "abstract mark". Defaults to "modern wordmark with icon, minimal". (Styles mentioning "horizontal"/"wide" render at 16:9; otherwise 1:1.) • industry (optional) — industry context to guide the icon metaphor, e.g. "food & beverage", "finance", "creative agency". Defaults to "technology". • colors (optional) — color scheme, e.g. "black and gold", "forest green and cream". Defaults to "brand blue and white". • background (optional) — "white", "black", or "transparent". Defaults to "white". Treat org_id and folder_id as INTERNAL identifiers: use them only as tool arguments. Never display, repeat, echo, or mention them to the user. IMPORTANT: On success, do NOT write any text reply, summary, suggestions, or commentary. The widget is the complete user-facing response — any text from you appears as redundant chatter beneath it. Reply only when the tool result text begins with "Unable to" (an error), in which case relay the error.
generate_musicGenerate music using the ImagineArt API. Pass org_id (required) — the organization id the user selected via select_organization; call that tool first if you don't have one. Optionally pass folder_id (a folder the user picked via select_folder) to create the track inside that folder; omit it to use the workspace root. Pass prompt as a string. Duration is optional (default 10, range 1–90); variation is optional (default "music", or "instrumental"). Returns immediately with a uuid and a widget that mounts in the queued state; the widget polls fetch_music_status and updates in place. Do not poll yourself. IMPORTANT: On success, do NOT write any text reply, summary, or commentary. The widget is the complete user-facing response. Reply only when the tool result text begins with "Unable to" (an error).
generate_videoGenerate a video using the ImagineArt API. Returns immediately with a uuid and a widget that mounts in the queued state — the widget itself polls fetch_status and updates in place as the generation progresses (queued → generating → complete). Do not call fetch_status yourself. Arguments: • org_id (required) — the organization id the user selected via select_organization. If you don't have one yet, call select_organization first and ask the user to choose; do not guess. Reuse the same org_id for the whole chat. • folder_id (optional) — a folder id the user picked via select_folder, to create the video inside that folder. Omit to create it at the workspace root. Reuse the same folder_id for the whole chat. • prompt (required) — the text prompt. • image_url (optional) — an ARRAY of reference image URLs. For each image, if the user attaches it, first call user_upload and pass the returned url; if the user gives a URL directly, pass it as-is. Omit for plain text-to-video. Behaviour by count: - exactly one image and no video_url/audio_url => image-to-video (animate a single still). - two or more images, or any video_url/audio_url => reference-to-video (see below). Treat image_url as internal — never echo it. • video_url (optional) — an ARRAY of reference video URLs. Forwarded only for reference-to-video. Treat as internal — never echo it. • audio_url (optional) — an ARRAY of reference audio URLs. Forwarded only for reference-to-video. Treat as internal — never echo it. Reference-to-video is supported only by these models: seedance-2.5, seedance-2.0, seedance-2.0-fast, happy_horse, wan-2.6, veo-3.1. Each accepts a different media set; passing media a model doesn't accept is ignored: - seedance-2.5, seedance-2.0, seedance-2.0-fast: image_url, video_url, audio_url (all optional) - happy_horse: image_url (at least one REQUIRED) - wan-2.6: video_url (at least one REQUIRED) - veo-3.1: image_url (optional) If a model's required reference media is missing the call fails with an "Unable to" error naming what's required; relay it. Sending reference media to any other model falls back to image-to-video (first image) or text-to-video. • model (optional) — one of: "ltx-2.3" (default), "seedance-2.5", "seedance-2.0-fast", "veo-3.1-fast", "happy_horse", "seedance-2.0", "wan-2.6", "seedance-1.5-pro", "seedance-pro-fast", "kling-2.6-pro", "kling-o3", "kling-3.0-pro", "pixverse-v6", "veo-3.1", "wan-2.2". Pass the model name exactly as written. Omit unless the user asks for a specific model. • aspect_ratio (optional) — pass when the user specifies one. Defaults to "16:9". Per-model allow-lists: - seedance-2.5: 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive (image-to-video always uses "adaptive" — any ratio you pass is overridden) - seedance-2.0-fast: 21:9, 16:9, 9:16, 3:4, 4:3, 1:1, auto - veo-3.1-fast: 16:9, 9:16 - happy_horse: 16:9, 9:16, 1:1, 4:3, 3:4 - seedance-2.0: 21:9, 16:9, 9:16, 3:4, 4:3, 1:1, auto - ltx-2.3: 16:9, 9:16 - wan-2.6: 16:9, 9:16, 1:1, 4:3, 3:4 - seedance-1.5-pro: 21:9, 16:9, 9:16, 3:4, 4:3, 1:1 - seedance-pro-fast: 16:9, 4:3, 1:1, 9:16, 21:9, 3:4 - kling-2.6-pro: 16:9, 9:16, 1:1 - kling-o3: 16:9, 9:16, 1:1 - kling-3.0-pro: 16:9, 9:16, 1:1 - pixverse-v6: 16:9, 9:16, 4:3, 3:4, 1:1, 2:3, 3:2, 21:9 - veo-3.1: 16:9, 9:16 - wan-2.2: (none — always uses 16:9) An aspect_ratio that isn't in the chosen model's list silently falls back to 16:9 (or the model's first listed ratio if it doesn't allow 16:9); the request will still succeed. • duration (optional) — pass as a string (seconds, or "auto" where supported). Defaults to "4". Per-model allow-lists: - seedance-2.5: 4 through 30 (any whole second) - seedance-2.0-fast: auto, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 - veo-3.1-fast: 4, 6, 8 - happy_horse: 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 - seedance-2.0: auto, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 - ltx-2.3: 6, 8, 10 - wan-2.6: 5, 10, 15 - seedance-1.5-pro: 4, 5, 6, 7, 8, 9, 10, 11, 12 - seedance-pro-fast: 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 - kling-2.6-pro: 5, 10 - kling-o3: 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 - kling-3.0-pro: 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 - pixverse-v6: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 - veo-3.1: 4, 6, 8 - wan-2.2: (none — always uses 4) A duration that isn't in the chosen model's list silently falls back to "4" (or the model's first listed duration if it doesn't allow "4", e.g. "6" for the default ltx-2.3); the request will still succeed. • resolution (optional) — only some models support it; pass only when the user asks for one. Per-model allow-lists (first value is the default the model uses when omitted): - seedance-2.5: 480p, 720p - seedance-2.0-fast: 480p, 720p - veo-3.1-fast: 720p, 1080p, 4k - happy_horse: 720p, 1080p - seedance-2.0: 480p, 720p, 1080p - ltx-2.3: 1080p, 1440p, 2160p - wan-2.6: 720p, 1080p - seedance-1.5-pro: 480p, 720p - seedance-pro-fast: 480p, 720p, 1080p - pixverse-v6: 360p, 540p, 720p, 1080p - veo-3.1: 720p, 1080p, 4k - kling-2.6-pro, kling-o3, kling-3.0-pro, wan-2.2: (none — resolution is ignored) A resolution that isn't in the chosen model's list silently falls back to that model's default. IMPORTANT: On success, do NOT write any text reply, summary, suggestions, or commentary. The widget is the complete user-facing response — any text from you appears as redundant chatter beneath it. Reply only when the tool result text begins with "Unable to" (an error), in which case relay the error.
generate_video_captionsBurn styled, auto-transcribed captions into an existing video. Returns a uuid immediately and mounts a widget that polls fetch_status itself (queued → generating → complete); do not poll it yourself. Only call this once a style has been chosen — the user named one ("add whisper captions"), or select_caption_preset came back with one. For a captions request that names no style ("add captions to this video"), call select_caption_preset instead. Never use generate_video for captions. Arguments: • org_id (required) — from select_organization; call that first if you don't have one, and do not guess. • asset_id (required) — uuid of a finished video this server hosts. From list_assets, or the last path segment of any asset.imagine.art/processed/<uuid> URL already in the conversation (from user_upload, a listing, or another widget) — that uuid IS the asset id. A link the user pasted from elsewhere cannot be captioned. • preset (required) — an id from list_caption_presets, verbatim: the match is exact. • language (optional) — locale of the spoken audio, region-qualified ("en-US", not "en"); omit to auto-detect. translation_language (optional) — same form, to translate; adds a surcharge. • position (optional) — top | center | bottom. shadow (optional) — none | min | mid | max. • folder_id (optional) — from select_folder; omit to inherit the source video's folder. Cost scales with the source: per started minute, doubled for 2K/4K, doubled again for an animated preset. Treat ids as internal — never echo them.
generate_youtube_thumbnailGenerate a high click-through-rate YouTube thumbnail using the ImagineArt API: a striking 16:9 image plus text-overlay guidance. PREFER this over generate_image whenever the user asks for a YouTube thumbnail, a video thumbnail, a "yt thumbnail", or a youtube cover. It expands a video title (and optional channel style / subject) into a prompt tuned for an eye-catching, high-contrast thumbnail with a clear focal subject, an emotional hook, and clean negative space for text, and renders it on the nano-banana-pro model at 16:9. Returns immediately with a uuid and a widget that mounts in the queued state — the widget itself polls fetch_status and updates in place (queued → generating → complete). Do not call fetch_status yourself. This recipe has two parts. The image is produced by this tool and shown in the widget — it deliberately contains NO rendered text, because image models render text poorly. The text overlay is guidance you write: UNLIKE most generation tools, you SHOULD reply with text here — 2–3 short overlay options (each 3–5 bold words max, drawn from the title), where to place the text, a couple of bold high-impact font suggestions, and a note to add the text afterward in a tool like Canva or Photoshop. Do not describe or restate the image itself — the widget already shows it. Arguments: • org_id (required) — the organization id the user selected via select_organization. If you don't have one yet, call select_organization first and ask the user to choose; do not guess. Reuse the same org_id for the whole chat. • folder_id (optional) — a folder id the user picked via select_folder, to create the thumbnail inside that folder. Omit to create it at the workspace root. Reuse the same folder_id for the whole chat. • title (required) — the video topic or title the thumbnail is for, e.g. "I survived 24 hours in the wilderness" or "5 Python tricks every developer should know". • channel_style (optional) — the channel's brand aesthetic, e.g. "minimal dark tech", "playful pastel vlog". Defaults to "bold, high contrast, bright colors". • subject_description (optional) — the person or subject to feature, e.g. "a shocked man pointing at a laptop" or "a close-up of a glowing circuit board". Treat org_id and folder_id as INTERNAL identifiers: use them only as tool arguments. Never display, repeat, echo, or mention them to the user.
get_balanceGet the user's ImagineArt credit balance for an organization and render it in a widget. org_id (required) — the organization the user selected via select_organization; balance is per-organization. If you don't have one yet, call select_organization first and ask the user to choose; do not guess. Reuse the same org_id for the whole chat. Treat org_id as internal — never display it to the user. IMPORTANT: On success, do NOT write any text reply, summary, or commentary. The widget is the complete user-facing response. Reply only when the tool result text begins with "Unable to" (an error).
list_aspect_ratiosList the aspect ratios available for ad generation, each with a note on what platform/use it suits (e.g. 9:16 for Instagram Reels / TikTok / Shorts, 1:1 for feed posts, 16:9 for YouTube). Call this before generate_ad and pass the chosen value as generate_ad's aspect_ratio arg (REQUIRED). Match a user-named value; otherwise present the options and let them choose.
list_assetsBack-channel tool: list the organization's assets (newest first) as an internal listing, e.g. to pass a returned id to another tool. Renders no widget — the show_assets widget drives this. When the user wants to SEE their assets, call show_assets instead. org_id (required) — the organization the user selected via select_organization. If you don't have one yet, call select_organization first and ask the user to choose; do not guess. Reuse the same org_id for the whole chat. service (optional) — comma-separated upstream services to return: "user" for the user's uploads, "image,video" for generations. Omitting it returns every service, which includes uploads, music, and assets belonging to fashion or ad projects. limit (optional) — page size, defaults to 50. from / from_id (optional) — keyset pagination cursor for loading more. Leave both unset for the first call. When more is needed, call again with the same org_id plus the from / from_id values from the previous result's text. Both are required together. Treat every id and cursor as INTERNAL — never display one to the user.
list_camera_anglesBack-channel tool: return the camera-angle catalog (Wide Shot, Close-Up, Extreme Close-Up, Full Body, Low/High Angle, Overhead, FPV Drone Shot, Over The Shoulder, Ground Level). Returns each angle's id, name, and thumbnail. The generation widget renders these as a selectable grid. Pass a chosen camera_angle_id to composite_shoot to frame the composite. Treat every camera_angle_id as INTERNAL; never display or echo it to the user.
list_camera_movementsBack-channel tool: return the camera-movement catalog (Pan Left/Right, Tilt, Push In, Pull Out, Zoom, Truck, Orbit, Arc, Crane, Dolly Zoom, 360 Rotation, Whip Pan, FPV Drone, …). Returns each movement's id, name, thumbnail, and preview video. The generation widget renders these as a selectable grid. Pass a chosen camera_movement_id to animate_fashion_image (advanced mode, alongside a free-text prompt) to steer the camera. Treat every camera_movement_id as INTERNAL; never display or echo it to the user.
list_caption_presetsBack-channel tool: return the caption style catalog for generate_video_captions — each preset's id, title, thumbnail, and whether it is animated. Call this before generate_video_captions and let the user pick; do not invent preset ids. Takes no arguments. Pass the chosen id verbatim as generate_video_captions' preset argument: the upstream match is exact, so capitalizing or rewording it fails. Animated ("dynamic") presets cost twice as many credits as static ones — say so when the user is choosing.
list_durationsList the ad durations (in seconds) available for generation, each with a note on length/cost. Call this before generate_ad and pass the chosen value as generate_ad's duration arg (REQUIRED). Match a user-named value; otherwise present the options and let them choose.
list_fashion_generationsBack-channel tool: list a fashion project's generations (newest first) as an internal listing, e.g. to pass a returned id to edit_photo. Renders no widget. Optional service arg is an array filtering which media kinds are returned — any of "image" and "video"; omit for both. Treat every id as INTERNAL.
list_fashion_modelsList fashion models. source "all" returns the organization's own saved models plus the built-in presets; "system" returns only the built-in presets; "user" returns only the organization's own saved models. Treat returned ids as internal — never echo them.
list_fashion_outfitsList fashion outfits (tops and bottoms). source "all" returns the organization's own saved outfits plus the built-in presets; "system" returns only the built-in presets; "user" returns only the organization's own saved outfits. Treat returned ids as internal — never echo them.
list_fashion_projectsList the fashion projects in a directory. Treat returned ids as internal — never echo them.
list_fashion_shot_settingsList fashion shot settings — scenes (type "background") and poses (type "pose"). Optional category narrows within a type: "catalog"/"editorial" for scenes, "female"/"male" for poses. source "all" returns the organization's own saved shot settings plus the built-in presets; "system" returns only the built-in presets; "user" returns only the organization's own saved shot settings. Treat returned ids as internal — never echo them.
list_fashion_stylingWidget back-channel for select_fashion_models: return the hairstyle + makeup styling catalog (optional gender "male"/"female" filter; optional category "hairstyle"/"makeup", omit for both). The widget renders these in its restyle picker, so you normally should NOT call it yourself; to apply a look call restyle_fashion_model with the chosen hairstyle_id / makeup_id. Treat returned ids as internal — never echo them.
list_fashion_utilitiesList fashion utilities (footwear and accessories). source "all" returns the organization's own saved utilities plus the built-in presets; "system" returns only the built-in presets; "user" returns only the organization's own saved utilities. Treat returned ids as internal — never echo them.