{
  "data": {
    "a": {
      "slug": "gemini-omni-1-2-flash",
      "name": "Gemini Omni 1.2 Flash",
      "vendor": "Google",
      "vendorUrl": "https://ai.google.dev",
      "kind": "model",
      "category": "video-generation",
      "summary": "Gemini Omni 1.2 Flash is Google's generally available video model. It generates and edits clips of up to 15 seconds with audio from text, images, short clips and keyframes, from $0.023 a second at 360p to $0.209 at 4K.",
      "url": "https://www.anchorterminal.com/tools/gemini-omni-1-2-flash",
      "markdownUrl": "https://www.anchorterminal.com/tools/gemini-omni-1-2-flash.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/gemini-omni-1-2-flash.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/gemini-omni-1-2-flash.json",
      "dns": "gemini-omni-1-2-flash.grade.anchorterminal.com",
      "license": "Closed model, used through the Gemini API and Google Cloud under Google's terms. The google-genai SDKs are Apache-2.0",
      "transports": [
        "http"
      ],
      "packages": [],
      "auth": "api-key",
      "authNotes": "An `x-goog-api-key` from Google AI Studio on the Gemini API, per the Gemini API listing; on Google Cloud, a project with Gemini for business. Paid use needs billing on the Cloud project.",
      "pricing": "usage",
      "pricingNotes": "$1.50 per million input tokens, $9 per million text output tokens and $12 per million video output tokens. Video bills at 5,792 tokens a second at 720p, about $0.07 a second; Google gives $0.023 a second at 360p, $0.104 at 1080p and $0.209 at 4K with upsampling. No free tier, Batch, Flex or Priority. From 3 December 2026 requests to Omni 1.1 Flash route to 1.2 Flash at 1.2 rates. Per the pricing page, 11 November 2026.",
      "priceSummary": "Pay per use",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in Google's announcement of 5 November 2026. Paid use is billed to a Cloud project, per the Gemini API listing.",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-11-11"
      },
      "docsUrl": "https://aistudio.google.com/docs/omni",
      "llmsTxt": "https://ai.google.dev/gemini-api/docs/llms.txt",
      "capabilities": [
        "video.generate",
        "video.edit",
        "video.image-to-video",
        "video.audio"
      ],
      "tags": [
        "official",
        "hosted",
        "model",
        "multimodal",
        "usage-priced",
        "closed-source",
        "llms-txt",
        "watermark",
        "new"
      ],
      "lastRelease": "2026-11-05",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 55.1,
        "grade": "C",
        "agentReady": false,
        "rank": 972,
        "ranked": true,
        "rankOf": 1524,
        "categoryRank": 10,
        "methodology": "0.8",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 54,
          "maintenance": 83,
          "payments": 30,
          "reliability": 45,
          "schema": 69,
          "security": 50,
          "transparency": 72
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-11"
        },
        "negative": 0,
        "verdict": "Google's generally available video model makes clips of up to 15 seconds with audio, edits them turn by turn and upscales drafts to 1080p or 4K, from $0.023 a second at 360p to $0.209 at 4K. It is paid only, the guide still describes Omni 1.1, and every quality claim is Google's.",
        "bestFor": "Short product, ad and explainer clips with audio where an agent needs to revise a clip over several turns rather than regenerate it.",
        "strengths": [
          "Generally available on the Gemini API and Google Cloud, per Google's post of 5 November 2026",
          "Per-second rates published without a login: $0.023 at 360p, about $0.07 at 720p, $0.104 at 1080p, $0.209 at 4K",
          "Edits run turn by turn through previous_interaction_id instead of regenerating the clip",
          "Takes text, reference images, up to three short reference clips and first and last keyframes",
          "Paid-tier content isn't used to improve Google's products, and outputs carry a SynthID watermark"
        ],
        "weaknesses": [
          "No free tier, per the pricing page",
          "The Omni guide, read on 11 November, still describes Omni 1.1 Flash and doesn't mention 1.2",
          "Length is set in the prompt with timecodes, not by a request field",
          "Editing or extending uploaded videos isn't available in the EEA, Switzerland or the UK",
          "Google says fast sports action, rapid script changes and complex physics are still weak"
        ],
        "agentNotes": [
          "Call POST /v1beta/interactions with model gemini-omni-1.2-flash and response_format type video; Veo is gone from the Gemini API",
          "Set delivery to uri for clips over 4 MB and poll the file until ACTIVE; a later GET returns base64 only",
          "Edit with previous_interaction_id and leave store on, or the clip can't be edited in a later turn",
          "Set length in the prompt with timecodes such as [0-3s]; there is no duration field",
          "Draft at 360p or 720p and upscale only the keepers: 4K costs about nine times 360p"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "C",
            "methodology": "0.8",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 55.1
          }
        ],
        "editorialScores": {
          "ergonomics": 54,
          "maintenance": 83,
          "payments": 30,
          "reliability": 45,
          "schema": 69,
          "security": 50,
          "transparency": 55
        },
        "provenanceScore": 89,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-11",
            "maintenance": "2026-11-11",
            "payments": "2026-11-11",
            "reliability": "2026-11-11",
            "schema": "2026-11-11",
            "security": "2026-11-11",
            "transparency": "2026-11-11"
          },
          "last": "2026-11-11",
          "lastMoved": "2026-11-13",
          "oldest": "2026-11-11",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "http": "curl -X POST \"https://generativelanguage.googleapis.com/v1beta/interactions\" \\\n  -H \"x-goog-api-key: $GEMINI_API_KEY\" -H \"content-type: application/json\" \\\n  -d '{\"model\":\"gemini-omni-1.2-flash\",\"input\":\"[0-6s] A ceramic mug turning slowly on a wooden table, continuous shot.\",\"response_format\":{\"type\":\"video\",\"aspect_ratio\":\"16:9\",\"resolution\":\"720p\",\"delivery\":\"uri\"}}'"
      },
      "letme": {
        "capability": "https://letme.dev/video.generate",
        "tool": "https://letme.dev/gemini-omni-1-2-flash"
      },
      "sameCompany": [
        "gemini-4-carbon",
        "gemini-4-hydrogen",
        "vertex-ai",
        "embeddinggemma-2",
        "embeddinggemma-300m",
        "gemini-embedding",
        "vertex-ai-tuning",
        "cloud-run-gpus",
        "google-model-armor",
        "shieldgemma",
        "google-imagen",
        "google-veo",
        "google-lyria",
        "google-speech-to-text",
        "google-cloud-tts",
        "gemini-live",
        "google-adk",
        "google-memory-bank",
        "google-secret-manager",
        "google-cloud-document-ai",
        "google-weather-api",
        "chrome-devtools-mcp",
        "puppeteer",
        "mcp-toolbox-databases",
        "google-maps-platform",
        "google-cloud-translation",
        "google-calendar-api",
        "firebase-cloud-messaging",
        "google-cloud-storage",
        "google-drive-api",
        "gemini-enterprise",
        "gemini-decision-1",
        "antigravity-cli",
        "gemini-cli",
        "harness2",
        "jules",
        "gemini-spark",
        "google-search-console",
        "google-ads-api",
        "google-forms",
        "google-sheets-api",
        "gmail-api",
        "google-people-api",
        "diffusiongemma-26b-a4b-it",
        "gemma-4-12b-it",
        "gemma-4-26b-a4b-it",
        "gemma-4-31b-it",
        "gemma-4-e2b-it",
        "gemma-4-e4b-it",
        "virustotal"
      ],
      "sameModel": [
        "gemini-api"
      ],
      "area": "content",
      "unitPrices": [
        {
          "item": "Gemini Omni 1.2 Flash, 360p",
          "unit": "video-second",
          "usd": 0.023,
          "note": "Pricing page effective rate"
        },
        {
          "item": "Gemini Omni 1.2 Flash, 720p",
          "unit": "video-second",
          "usd": 0.07,
          "note": "About; 5,792 output tokens a second at $12 per million"
        },
        {
          "item": "Gemini Omni 1.2 Flash, 1080p",
          "unit": "video-second",
          "usd": 0.104,
          "note": "With upsampling"
        },
        {
          "item": "Gemini Omni 1.2 Flash, 4K",
          "unit": "video-second",
          "usd": 0.209,
          "note": "With upsampling"
        }
      ],
      "provenance": {
        "legalEntity": "Google LLC",
        "domain": "google.com",
        "domainRegistered": "1997-09-15",
        "domainNote": "The endpoint is on googleapis.com, Google's API domain. google.com was registered in 1997.",
        "endpointOnVendorDomain": true,
        "terms": "https://ai.google.dev/gemini-api/terms",
        "privacy": "https://policies.google.com/privacy",
        "statusPage": "https://aistudio.google.com/status",
        "changelog": "https://ai.google.dev/gemini-api/docs/changelog",
        "securityTxt": "valid",
        "checked": "2026-11-11",
        "score": 89
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/gemini-omni-1-2-flash.json",
      "live": {
        "slug": "gemini-omni-1-2-flash",
        "securityTxt": {
          "url": "https://google.com/.well-known/security.txt",
          "state": "valid",
          "expires": "2030-04-01T00:00:00z",
          "checkedAt": "2026-11-13T16:15:44.621683591Z"
        },
        "llmsTxt": {
          "url": "https://ai.google.dev/gemini-api/docs/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-13T15:54:29.187425516Z"
        },
        "updatedAt": "2026-11-13T16:15:44.621683591Z"
      }
    },
    "answer": "Gemini Omni 1.2 Flash scores 55.1 (C) on agent readiness against Magic Hour MCP's 51.7 (D), and leads in 5 of 7 scored categories. Magic Hour MCP leads on schema \u0026 documentation.",
    "b": {
      "slug": "magic-hour-mcp",
      "name": "Magic Hour MCP",
      "vendor": "Magic Hour AI, Inc.",
      "vendorUrl": "https://magichour.ai",
      "kind": "mcp",
      "category": "video-generation",
      "summary": "Magic Hour MCP is a hosted server with 50 tools that create and edit images and video, from text-to-video, lip sync and face swap to upscaling, subtitles and music, billed in Magic Hour credits.",
      "url": "https://www.anchorterminal.com/tools/magic-hour-mcp",
      "markdownUrl": "https://www.anchorterminal.com/tools/magic-hour-mcp.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/magic-hour-mcp.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/magic-hour-mcp.json",
      "dns": "magic-hour-mcp.grade.anchorterminal.com",
      "repo": "https://github.com/magichourhq/magic-hour-mcp",
      "transports": [
        "streamable-http"
      ],
      "remoteUrl": "https://mcp.magichour.ai/",
      "packages": [],
      "auth": "mixed",
      "authNotes": "Tool discovery is public. Calls need a Magic Hour API key as a Bearer token (Claude Code, Codex CLI, Manus), or OAuth sign-in through the Claude and ChatGPT connectors.",
      "pricing": "freemium",
      "pricingNotes": "Paid plans from $12 a month billed yearly ($19 monthly) with 144,000 credits a year and API access; one-time credit packs without a subscription. A free account gets 400 sign-up credits, and some public tools work without an account; API access is listed on paid plans (checked 2026-11-07).",
      "priceSummary": "Freemium",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 on the MCP docs or pricing page (checked 2026-11-07).",
        "endpoints": []
      },
      "toolCount": 50,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-11-07"
      },
      "docsUrl": "https://docs.magichour.ai/integration/model-context-protocol",
      "llmsTxt": "https://docs.magichour.ai/llms.txt",
      "registryName": "io.github.magichourhq/magic-hour",
      "capabilities": [
        "video.generate",
        "video.image-to-video",
        "video.edit",
        "image.generate",
        "image.edit",
        "image.upscale",
        "music.generate"
      ],
      "tags": [
        "official",
        "hosted",
        "mcp",
        "remote-mcp",
        "api-key",
        "oauth",
        "freemium",
        "status-page",
        "llms-txt",
        "mcp-registry",
        "annotated-tools"
      ],
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 51.7,
        "grade": "D",
        "agentReady": false,
        "rank": 1090,
        "ranked": true,
        "rankOf": 1524,
        "categoryRank": 13,
        "methodology": "0.8",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 55,
          "maintenance": 75,
          "payments": 23,
          "reliability": 35,
          "schema": 82,
          "security": 45,
          "transparency": 58
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-07"
        },
        "negative": 0,
        "verdict": "Magic Hour's MCP server exposes its whole image and video toolkit, lip sync, face swap, upscaling and text-to-video, with typed schemas built from its OpenAPI file and every tool annotated. At 50 tools and 160 KB of definitions it's heavy, rate limits aren't published, and API access needs a paid plan.",
        "bestFor": "Agents making short-form video and images, from talking photos and ads to lip-synced translations, on a credit plan.",
        "strengths": [
          "50 tools with typed JSON Schema built from the OpenAPI specification",
          "Every tool annotated; deletes marked destructive",
          "A workflow guide and wait tools for long generation jobs",
          "Prompts, uploads and outputs aren't used for training",
          "Tool discovery works without a key"
        ],
        "weaknesses": [
          "About 160 KB of tool definitions",
          "No published rate limits or error docs",
          "API access sits on paid plans",
          "Face swap and head swap tools need care with consent"
        ],
        "agentNotes": [
          "Call get_workflow_guide first to pick the right tool",
          "Use the wait_for_* tools instead of polling project status yourself",
          "Check credits with get_account_info before long video jobs",
          "Only swap faces or voices of people who consented"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "D",
            "methodology": "0.8",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 51.7
          }
        ],
        "editorialScores": {
          "ergonomics": 55,
          "maintenance": 75,
          "payments": 23,
          "reliability": 35,
          "schema": 82,
          "security": 45,
          "transparency": 50
        },
        "provenanceScore": 65,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-07",
            "maintenance": "2026-11-07",
            "payments": "2026-11-07",
            "reliability": "2026-11-07",
            "schema": "2026-11-07",
            "security": "2026-11-07",
            "transparency": "2026-11-07"
          },
          "last": "2026-11-07",
          "lastMoved": "2026-11-13",
          "oldest": "2026-11-07",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "claudeCode": "claude mcp add magic-hour --transport http https://mcp.magichour.ai/ --header \"Authorization: Bearer $MAGIC_HOUR_API_KEY\"",
        "config": {
          "mcpServers": {
            "magic-hour": {
              "headers": {
                "Authorization": "Bearer YOUR_MAGIC_HOUR_API_KEY"
              },
              "url": "https://mcp.magichour.ai/"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/video.generate",
        "tool": "https://letme.dev/magic-hour-mcp"
      },
      "area": "content",
      "provenance": {
        "legalEntity": "Magic Hour AI, Inc.",
        "domain": "magichour.ai",
        "domainRegistered": "",
        "domainNote": "Not looked up: RDAP isn't requested under the 1 November 2026 rules.",
        "endpointOnVendorDomain": true,
        "terms": "https://magichour.ai/terms-of-service",
        "privacy": "https://magichour.ai/privacy-policy",
        "statusPage": "https://status.magichour.ai",
        "changelog": "https://docs.magichour.ai/changelog",
        "securityTxt": "none",
        "checked": "2026-11-07",
        "notes": [
          "Terms revised 3 October 2026 naming Magic Hour AI, Inc."
        ],
        "score": 65
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/magic-hour-mcp.json",
      "live": {
        "slug": "magic-hour-mcp",
        "probe": {
          "target": "https://mcp.magichour.ai/",
          "method": "mcp-initialize",
          "lastAt": "2026-11-14T00:28:00.774497905Z",
          "lastOk": true,
          "lastStatus": 200,
          "lastMs": 158,
          "lastNote": "initialize answered",
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 161,
          "p95ms24h": 273,
          "samples24h": 238,
          "samples30d": 1515,
          "days": [
            {
              "date": "2026-11-07",
              "probes": 53,
              "ok": 53
            },
            {
              "date": "2026-11-08",
              "probes": 243,
              "ok": 243
            },
            {
              "date": "2026-11-09",
              "probes": 243,
              "ok": 243
            },
            {
              "date": "2026-11-10",
              "probes": 244,
              "ok": 244
            },
            {
              "date": "2026-11-11",
              "probes": 244,
              "ok": 244
            },
            {
              "date": "2026-11-12",
              "probes": 245,
              "ok": 245
            },
            {
              "date": "2026-11-13",
              "probes": 238,
              "ok": 238
            },
            {
              "date": "2026-11-14",
              "probes": 5,
              "ok": 5
            }
          ],
          "since": "2026-11-07T00:00:00Z"
        },
        "vendorStatus": {
          "page": "https://status.magichour.ai",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-11-13T23:54:43.067057859Z"
        },
        "versions": [
          {
            "registry": "mcp-registry",
            "name": "io.github.magichourhq/magic-hour",
            "version": "0.1.1",
            "seenAt": "2026-11-13T20:30:05.021626978Z"
          }
        ],
        "githubStars": 10,
        "securityTxt": {
          "url": "https://magichour.ai/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-13T16:16:29.131947909Z"
        },
        "llmsTxt": {
          "url": "https://docs.magichour.ai/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-13T15:54:53.991260539Z"
        },
        "domain": {
          "domain": "magichour.ai",
          "registered": "2023-01-22",
          "source": "https://rdap.identitydigital.services/rdap/domain/magichour.ai",
          "checkedAt": "2026-11-08T15:03:14.089825607Z"
        },
        "pages": [
          {
            "url": "https://docs.magichour.ai/changelog",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-11-13T18:16:55.771121686Z",
            "changedAt": "2026-11-12T17:36:40.165791651Z",
            "fingerprint": "0ef7acf5d706"
          },
          {
            "url": "https://magichour.ai/privacy-policy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-11-13T18:24:02.769192165Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "d73d8401d16b"
          },
          {
            "url": "https://magichour.ai/terms-of-service",
            "kind": "terms",
            "status": 304,
            "checkedAt": "2026-11-13T18:24:05.126871553Z",
            "changedAt": "2026-11-09T15:44:53.688167463Z",
            "fingerprint": "e9d3e9a3561f"
          }
        ],
        "mcpTools": {
          "url": "https://mcp.magichour.ai/",
          "checkedAt": "2026-11-13T03:11:29.069576533Z",
          "status": "ok",
          "protocol": "2025-11-25",
          "tools": [
            {
              "name": "get_workflow_guide",
              "title": "Choose a media workflow",
              "description": "Returns required inputs, ordered steps, example requests and review criteria for eight supported Magic Hour workflows. Use when planning a generation, not to run one. Requires authentication but does not check account eligibility or spend credits.",
              "inputSchema": {
                "additionalProperties": false,
                "properties": {
                  "workflow": {
                    "description": "Choose the workflow matching the task and supplied inputs. Returns static planning guidance, not an account eligibility or cost quote.",
                    "enum": [
                      "video-face-swap",
                      "image-editor",
                      "image-to-video",
                      "video-generator",
                      "lip-sync",
                      "ugc-ads",
                      "talking-photo",
                      "media-apis"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "workflow"
                ],
                "type": "object"
              },
              "outputSchema": {
                "additionalProperties": true,
                "description": "Static workflow planning guidance. Does not verify account access, eligibility, current price or output quality.",
                "properties": {
                  "api_docs_url": {
                    "description": "API documentation for the selected workflow.",
                    "type": "string"
                  },
                  "creation_tool": {
                    "description": "MCP creation tool, or null for general API integration guidance.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "evaluation_url": {
                    "description": "Guidance for evaluating completed media outputs.",
                    "type": "string"
                  },
                  "example_request": {
                    "description": "Example user request for this workflow.",
                    "type": "string"
                  },
                  "follow_up": {
                    "description": "How to reuse or edit an accepted result.",
                    "type": "string"
                  },
                  "guidance": {
                    "description": "Account, cost, recovery and usage caveats.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "input": {
                    "description": "Required source media and other inputs.",
                    "type": "string"
                  },
                  "models_and_costs_url": {
                    "description": "Documentation of model constraints and credit costs.",
                    "type": "string"
                  },
                  "product_url": {
                    "description": "Relevant Magic Hour product page.",
                    "type": "string"
                  },
                  "review": {
                    "description": "Output checks and workflow-specific limitations.",
                    "type": "string"
                  },
                  "starter_recipes_url": {
                    "description": "API starter recipes.",
                    "type": "string"
                  },
                  "steps": {
                    "description": "Ordered upload, creation and retrieval steps.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "title": {
                    "description": "Human-readable workflow purpose.",
                    "type": "string"
                  },
                  "workflow": {
                    "description": "Requested workflow identifier.",
                    "type": "string"
                  }
                },
                "required": [
                  "workflow",
                  "title",
                  "input",
                  "product_url",
                  "api_docs_url",
                  "steps",
                  "example_request",
                  "follow_up",
                  "review",
                  "models_and_costs_url",
                  "evaluation_url",
                  "starter_recipes_url",
                  "guidance"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "upload_chatgpt_image",
              "title": "Upload attached image",
              "description": "Uploads a PNG, JPEG or WebP image attached in ChatGPT to the connected Magic Hour account. Use this for native ChatGPT photo attachments instead of asking the chat's file runtime to PUT bytes to get_upload_urls. Pass the returned file_path to the existing image or video generation tool. Accepts one image up to 20 MiB. Does not generate media or spend generation credits.",
              "inputSchema": {
                "additionalProperties": false,
                "properties": {
                  "image": {
                    "description": "The native attached image. ChatGPT supplies download_url and file_id; direct MCP callers must supply that file object, not a bare file ID, filename or local path.",
                    "properties": {
                      "download_url": {
                        "description": "Exact HTTPS download URL supplied for the native ChatGPT attachment, including its signed query.",
                        "type": "string"
                      },
                      "file_id": {
                        "description": "Native ChatGPT file identifier paired with download_url; not a local filesystem path.",
                        "type": "string"
                      },
                      "file_name": {
                        "default": "",
                        "description": "Original attachment filename, when supplied by ChatGPT.",
                        "type": "string"
                      },
                      "mime_type": {
                        "default": "",
                        "description": "Attachment MIME type, when supplied by ChatGPT.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "download_url",
                      "file_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "image"
                ],
                "type": "object"
              },
              "outputSchema": {
                "additionalProperties": {
                  "type": "string"
                },
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Upload attached image"
              }
            },
            {
              "name": "upload_chatgpt_media",
              "title": "Upload attached media",
              "description": "Uploads one native ChatGPT attachment to the connected Magic Hour account: PNG/JPEG/WebP images, MP4/MOV/WebM video, or MP3/WAV/M4A/FLAC/Ogg/WebM audio, up to 20 MiB. Set media_type to the attachment's actual kind, not the requested output: image, video or audio. For multiple references, call separately and keep each returned file_path paired with the intended input. Pass the real attachment through the file parameter; a bare file ID, filename or chat-local path is not the raw MCP file object. Does not generate media or spend generation credits.",
              "inputSchema": {
                "additionalProperties": false,
                "properties": {
                  "file": {
                    "description": "Native ChatGPT attachment object containing download_url and file_id.",
                    "properties": {
                      "download_url": {
                        "description": "Exact HTTPS download URL supplied for the native ChatGPT attachment, including its signed query.",
                        "type": "string"
                      },
                      "file_id": {
                        "description": "Native ChatGPT file identifier paired with download_url; not a local filesystem path.",
                        "type": "string"
                      },
                      "file_name": {
                        "default": "",
                        "description": "Original attachment filename, when supplied by ChatGPT.",
                        "type": "string"
                      },
                      "mime_type": {
                        "default": "",
                        "description": "Attachment MIME type, when supplied by ChatGPT.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "download_url",
                      "file_id"
                    ],
                    "type": "object"
                  },
                  "media_type": {
                    "description": "Actual input attachment kind: image, video or audio, not the desired output kind.",
                    "enum": [
                      "video",
                      "image",
                      "audio"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "file",
                  "media_type"
                ],
                "type": "object"
              },
              "outputSchema": {
                "additionalProperties": {
                  "type": "string"
                },
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Upload attached media"
              }
            },
            {
              "name": "ping",
              "title": "Ping",
              "description": "Checks that the Magic Hour server is reachable. Use for connectivity troubleshooting; it does not validate API credentials or account access. Makes no media or project changes.",
              "inputSchema": {
                "additionalProperties": false,
                "properties": {},
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "result": {
                    "description": "The value 'pong' confirms MCP server liveness only, not API credentials, account access or upstream API health.",
                    "type": "string"
                  }
                },
                "required": [
                  "result"
                ],
                "type": "object",
                "x-fastmcp-wrap-result": true
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Ping"
              }
            },
            {
              "name": "wait_for_video_project",
              "title": "Wait for Video Project",
              "description": "Polls a video project until it completes, errors, is canceled or times out. Use with the id returned by a video create tool. Read-only; returns download URLs when complete. After a timeout, resume with the same id rather than creating another generation. Use signed download URLs exactly as returned. Does not inline video content.",
              "inputSchema": {
                "additionalProperties": false,
                "properties": {
                  "id": {
                    "description": "Existing project ID returned by the matching creation tool. Reuse this ID after a wait timeout.",
                    "type": "string"
                  },
                  "include_inline_downloads": {
                    "default": false,
                    "description": "Reserved for compatibility. Video waits return download links, never inline video, regardless of this value.",
                    "type": "boolean"
                  },
                  "max_inline_downloads": {
                    "default": 0,
                    "description": "Reserved for compatibility. Video waits do not inline downloads; leave at zero.",
                    "type": "integer"
                  },
                  "poll_interval_seconds": {
                    "default": 2,
                    "description": "Seconds between status checks. Must be finite and nonnegative; values below 0.5 use 0.5 seconds.",
                    "type": "number"
                  },
                  "timeout_seconds": {
                    "default": 300,
                    "description": "Maximum seconds for this wait call, finite and greater than zero. Timeout does not cancel the project or start another generation.",
                    "type": "number"
                  }
                },
                "required": [
                  "id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "additionalProperties": true,
                "description": "Existing project status and exact output links. A wait timeout is not a generation failure; resume with the same ID.",
                "properties": {
                  "download_expiration_metadata": {
                    "description": "Expiration metadata only. Never append it to a download URL.",
                    "items": {
                      "properties": {
                        "download_index": {
                          "description": "Zero-based index in the upstream download list, encoded as text.",
                          "type": "string"
                        },
                        "expires_at": {
                          "description": "Expiration timestamp provided by the API.",
                          "type": "string"
                        },
                        "note": {
                          "description": "Guidance for preserving the signed URL.",
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "downloads": {
                    "description": "Available output files with exact signed URLs. May be absent until completion.",
                    "items": {
                      "properties": {
                        "url": {
                          "description": "Use this signed download URL unchanged, including all query parameters.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "url"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "exact_download_urls": {
                    "description": "Convenience list of the same unmodified signed output URLs.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "id": {
                    "description": "Existing project identifier, retained for subsequent status checks.",
                    "type": "string"
                  },
                  "last_project": {
                    "description": "Last observed API project snapshot if the wait timed out after a successful status check.",
                    "type": "object"
                  },
                  "message": {
                    "description": "Wait timeout or recovery guidance, when present.",
                    "type": "string"
                  },
                  "project_type": {
                    "description": "Kind of project being retrieved.",
                    "enum": [
                      "image",
                      "video",
                      "audio"
                    ],
                    "type": "string"
                  },
                  "status": {
                    "description": "Project status such as complete, error or canceled; timeout means only this wait call ended.",
                    "type": "string"
                  }
                },
                "required": [
                  "project_type"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Wait for Video Project"
              }
            },
            {
              "name": "wait_for_image_project",
              "title": "Wait for Image Project",
              "description": "Polls an image project until it completes, errors, is canceled or times out. Use with the id returned by an image create tool. Read-only; returns the project and download URLs, with optional inline image previews sharing an 8 MiB total limit. After a timeout, resume with the same id rather than creating another generation. Use signed download URLs exactly as returned.",
              "inputSchema": {
                "additionalProperties": false,
                "properties": {
                  "id": {
                    "description": "Existing project ID returned by the matching creation tool. Reuse this ID after a wait timeout.",
                    "type": "string"
                  },
                  "include_inline_downloads": {
                    "default": true,
                    "description": "Whether to include image or audio previews for completed projects. Download URLs remain available if preview fetching fails.",
                    "type": "boolean"
                  },
                  "max_bytes_per_download": {
                    "default": 8388608,
                    "description": "Positive maximum raw bytes per preview, capped by the remaining 8 MiB total budget. Larger outputs remain available by URL.",
                    "type": "integer"
                  },
                  "max_inline_downloads": {
                    "default": 4,
                    "description": "Maximum number of previews to include. Zero or negative disables previews; previews share an 8 MiB total limit.",
                    "type": "integer"
                  },
                  "poll_interval_seconds": {
                    "default": 2,
                    "description": "Seconds between status checks. Must be finite and nonnegative; values below 0.5 use 0.5 seconds.",
                    "type": "number"
                  },
                  "timeout_seconds": {
                    "default": 180,
                    "description": "Maximum seconds for this wait call, finite and greater than zero. Timeout does not cancel the project or start another generation.",
                    "type": "number"
                  }
                },
                "required": [
                  "id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "additionalProperties": true,
                "description": "Existing project status and exact output links. A wait timeout is not a generation failure; resume with the same ID.",
                "properties": {
                  "download_expiration_metadata": {
                    "description": "Expiration metadata only. Never append it to a download URL.",
                    "items": {
                      "properties": {
                        "download_index": {
                          "description": "Zero-based index in the upstream download list, encoded as text.",
                          "type": "string"
                        },
                        "expires_at": {
                          "description": "Expiration timestamp provided by the API.",
                          "type": "string"
                        },
                        "note": {
                          "description": "Guidance for preserving the signed URL.",
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "downloads": {
                    "description": "Available output files with exact signed URLs. May be absent until completion.",
                    "items": {
                      "properties": {
                        "url": {
                          "description": "Use this signed download URL unchanged, including all query parameters.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "url"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "exact_download_urls": {
                    "description": "Convenience list of the same unmodified signed output URLs.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "id": {
                    "description": "Existing project identifier, retained for subsequent status checks.",
                    "type": "string"
                  },
                  "last_project": {
                    "description": "Last observed API project snapshot if the wait timed out after a successful status check.",
                    "type": "object"
                  },
                  "message": {
                    "description": "Wait timeout or recovery guidance, when present.",
                    "type": "string"
                  },
                  "project_type": {
                    "description": "Kind of project being retrieved.",
                    "enum": [
                      "image",
                      "video",
                      "audio"
                    ],
                    "type": "string"
                  },
                  "status": {
                    "description": "Project status such as complete, error or canceled; timeout means only this wait call ended.",
                    "type": "string"
                  }
                },
                "required": [
                  "project_type"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Wait for Image Project"
              }
            },
            {
              "name": "wait_for_audio_project",
              "title": "Wait for Audio Project",
              "description": "Polls an audio project until it completes, errors, is canceled or times out. Use with the id returned by an audio create tool. Read-only; returns the project and download URLs, with optional inline audio previews sharing an 8 MiB total limit. After a timeout, resume with the same id rather than creating another generation. Use signed download URLs exactly as returned.",
              "inputSchema": {
                "additionalProperties": false,
                "properties": {
                  "id": {
                    "description": "Existing project ID returned by the matching creation tool. Reuse this ID after a wait timeout.",
                    "type": "string"
                  },
                  "include_inline_downloads": {
                    "default": true,
                    "description": "Whether to include image or audio previews for completed projects. Download URLs remain available if preview fetching fails.",
                    "type": "boolean"
                  },
                  "max_bytes_per_download": {
                    "default": 8388608,
                    "description": "Positive maximum raw bytes per preview, capped by the remaining 8 MiB total budget. Larger outputs remain available by URL.",
                    "type": "integer"
                  },
                  "max_inline_downloads": {
                    "default": 4,
                    "description": "Maximum number of previews to include. Zero or negative disables previews; previews share an 8 MiB total limit.",
                    "type": "integer"
                  },
                  "poll_interval_seconds": {
                    "default": 2,
                    "description": "Seconds between status checks. Must be finite and nonnegative; values below 0.5 use 0.5 seconds.",
                    "type": "number"
                  },
                  "timeout_seconds": {
                    "default": 180,
                    "description": "Maximum seconds for this wait call, finite and greater than zero. Timeout does not cancel the project or start another generation.",
                    "type": "number"
                  }
                },
                "required": [
                  "id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "additionalProperties": true,
                "description": "Existing project status and exact output links. A wait timeout is not a generation failure; resume with the same ID.",
                "properties": {
                  "download_expiration_metadata": {
                    "description": "Expiration metadata only. Never append it to a download URL.",
                    "items": {
                      "properties": {
                        "download_index": {
                          "description": "Zero-based index in the upstream download list, encoded as text.",
                          "type": "string"
                        },
                        "expires_at": {
                          "description": "Expiration timestamp provided by the API.",
                          "type": "string"
                        },
                        "note": {
                          "description": "Guidance for preserving the signed URL.",
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "downloads": {
                    "description": "Available output files with exact signed URLs. May be absent until completion.",
                    "items": {
                      "properties": {
                        "url": {
                          "description": "Use this signed download URL unchanged, including all query parameters.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "url"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "exact_download_urls": {
                    "description": "Convenience list of the same unmodified signed output URLs.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "id": {
                    "description": "Existing project identifier, retained for subsequent status checks.",
                    "type": "string"
                  },
                  "last_project": {
                    "description": "Last observed API project snapshot if the wait timed out after a successful status check.",
                    "type": "object"
                  },
                  "message": {
                    "description": "Wait timeout or recovery guidance, when present.",
                    "type": "string"
                  },
                  "project_type": {
                    "description": "Kind of project being retrieved.",
                    "enum": [
                      "image",
                      "video",
                      "audio"
                    ],
                    "type": "string"
                  },
                  "status": {
                    "description": "Project status such as complete, error or canceled; timeout means only this wait call ended.",
                    "type": "string"
                  }
                },
                "required": [
                  "project_type"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Wait for Audio Project"
              }
            },
            {
              "name": "fetch_image_download",
              "title": "Fetch Image Download",
              "description": "Fetch a completed project's image as inline MCP image content for compatible clients. Use the exact signed download URL, including query parameters. Requires HTTPS at the configured Magic Hour media host. Read-only; limited to 8 MiB, or a smaller requested max_bytes. Use the signed URL directly for larger files.",
              "inputSchema": {
                "additionalProperties": false,
                "properties": {
                  "download_url": {
                    "description": "Exact HTTPS URL from a completed project’s downloads or exact_download_urls. Preserve all query parameters; must use the configured Magic Hour media host.",
                    "type": "string"
                  },
                  "max_bytes": {
                    "default": 8388608,
                    "description": "Positive maximum raw download bytes. The server caps this at 8388608 bytes (8 MiB); use the original URL directly for larger files.",
                    "type": "integer"
                  }
                },
                "required": [
                  "download_url"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Fetch Image Download"
              }
            },
            {
              "name": "fetch_audio_download",
              "title": "Fetch Audio Download",
              "description": "Fetch a completed project's audio as inline MCP audio content for compatible clients. Use the exact signed download URL, including query parameters. Requires HTTPS at the configured Magic Hour media host. Read-only; limited to 8 MiB, or a smaller requested max_bytes. Use the signed URL directly for larger files.",
              "inputSchema": {
                "additionalProperties": false,
                "properties": {
                  "download_url": {
                    "description": "Exact HTTPS URL from a completed project’s downloads or exact_download_urls. Preserve all query parameters; must use the configured Magic Hour media host.",
                    "type": "string"
                  },
                  "max_bytes": {
                    "default": 8388608,
                    "description": "Positive maximum raw download bytes. The server caps this at 8388608 bytes (8 MiB); use the original URL directly for larger files.",
                    "type": "integer"
                  }
                },
                "required": [
                  "download_url"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Fetch Audio Download"
              }
            },
            {
              "name": "fetch_video_download",
              "title": "Fetch Video Download",
              "description": "Fetch a completed project's video as an embedded MCP binary resource for compatible clients. Use the exact signed download URL, including query parameters. Requires HTTPS at the configured Magic Hour media host. Read-only; limited to 8 MiB, or a smaller requested max_bytes. Use the signed URL directly for larger files.",
              "inputSchema": {
                "additionalProperties": false,
                "properties": {
                  "download_url": {
                    "description": "Exact HTTPS URL from a completed project’s downloads or exact_download_urls. Preserve all query parameters; must use the configured Magic Hour media host.",
                    "type": "string"
                  },
                  "max_bytes": {
                    "default": 8388608,
                    "description": "Positive maximum raw download bytes. The server caps this at 8388608 bytes (8 MiB); use the original URL directly for larger files.",
                    "type": "integer"
                  }
                },
                "required": [
                  "download_url"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Fetch Video Download"
              }
            },
            {
              "name": "get_account_info",
              "title": "Get account info",
              "description": "Returns credit balance and subscription details for the connected account. Use to inspect account information before choosing generation settings. Use tier, not the subscription name or credit balance, for plan access. Read-only; this is not a request-specific cost quote or model-eligibility check.",
              "inputSchema": {
                "properties": {},
                "required": [],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "credits": {
                    "description": "Credits currently available to spend. Includes subscription credits and any purchased credit packs.",
                    "example": 12500,
                    "minimum": 0,
                    "type": "integer"
                  },
                  "email": {
                    "description": "Email address of the account.",
                    "example": "user@example.com",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "id": {
                    "description": "Unique ID of the account that owns the API key.",
                    "example": "cuid-example",
                    "type": "string"
                  },
                  "subscription": {
                    "description": "Details of the account's subscription plan. `null` if the account has no subscription, e.g. a free account, an account that only purchased credit packs, or an account on usage-based API pricing.\n\nReflects the plan currently configured on the subscription. If a plan change is scheduled, `tier` stays on the current plan until the next payment succeeds, so `tier` and `name` can briefly disagree.",
                    "properties": {
                      "billing_interval": {
                        "description": "How often the subscription is billed. `null` if unknown.",
                        "enum": [
                          "month",
                          "year",
                          null
                        ],
                        "example": "month",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "cancel_at_period_end": {
                        "description": "Whether the subscription is scheduled to end at `current_period_end` instead of renewing. The subscription stays usable until then.",
                        "example": false,
                        "type": "boolean"
                      },
                      "current_period_end": {
                        "description": "End of the current billing period, in ISO 8601 format. The subscription renews at this time, or ends if `cancel_at_period_end` is `true`.",
                        "example": "2026-10-01T00:00:00.000Z",
                        "format": "date-time",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "discount": {
                        "description": "Discount applied to the subscription. `null` if no discount is applied.",
                        "properties": {
                          "amount_off": {
                            "description": "Fixed amount taken off `price.amount` each billing interval, in the smallest unit of the currency. `null` if the discount is a percentage.",
                            "type": [
                              "integer",
                              "null"
                            ]
                          },
                          "percent_off": {
                            "description": "Percentage taken off `price.amount` each billing interval. `null` if the discount is a fixed amount.",
                            "example": 20,
                            "type": [
                              "number",
                              "null"
                            ]
                          }
                        },
                        "required": [
                          "percent_off",
                          "amount_off"
                        ],
                        "type": [
                          "object",
                          "null"
                        ]
                      },
                      "name": {
                        "description": "Name of the current subscription plan, e.g. `Creator`, `Pro`, `Pro Plus`, `Business`. `null` if the plan cannot be determined. Use `tier` for a machine-readable value.",
                        "example": "Pro",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "price": {
                        "properties": {
                          "amount": {
                            "description": "Price charged per billing interval, in the smallest unit of the currency (e.g. 4900 is $49.00 for `usd`). Discounts are not applied.",
                            "example": 4900,
                            "minimum": 0,
                            "type": "integer"
                          },
                          "currency": {
                            "description": "Three-letter ISO 4217 currency code, lowercase.",
                            "example": "usd",
                            "type": "string"
                          }
                        },
                        "required": [
                          "amount",
                          "currency"
                        ],
                        "type": "object"
                      },
                      "status": {
                        "description": "Status of the subscription.\n- `active`: payments are up to date.\n- `past_due`: the latest payment failed. `tier` is `free` until payment succeeds. The subscription is canceled if payment keeps failing.",
                        "enum": [
                          "active",
                          "past_due"
                        ],
                        "example": "active",
                        "type": "string"
                      }
                    },
                    "required": [
                      "name",
                      "status",
                      "price",
                      "discount",
                      "billing_interval",
                      "current_period_end",
                      "cancel_at_period_end"
                    ],
                    "type": [
                      "object",
                      "null"
                    ]
                  },
                  "tier": {
                    "description": "Subscription tier in effect for the account. `free` if there is no active subscription, including while a subscription is `past_due`.",
                    "enum": [
                      "free",
                      "creator",
                      "pro",
                      "business"
                    ],
                    "example": "pro",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "email",
                  "tier",
                  "credits",
                  "subscription"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Get account info"
              }
            },
            {
              "name": "list_saved_items",
              "title": "List saved items",
              "description": "Lists the account's active saved characters, references, voice recordings, moodboards and brand kits, newest first. Reusable paths are in each item's assets[].file_path; temporary signed URLs support preview/download. Read-only; pass next_cursor as cursor for the next page.",
              "inputSchema": {
                "properties": {
                  "cursor": {
                    "description": "Opaque pagination cursor from the previous response's next_cursor.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "limit": {
                    "default": 20,
                    "description": "Maximum number of saved items to return. Defaults to 20.",
                    "example": 20,
                    "maximum": 100,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "type": {
                    "description": "Only return saved items of this type.",
                    "enum": [
                      "character",
                      "reference",
                      "voice",
                      "moodboard",
                      "brand_kit"
                    ],
                    "example": "character",
                    "type": "string"
                  }
                },
                "required": [],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "items": {
                    "items": {
                      "properties": {
                        "assets": {
                          "items": {
                            "properties": {
                              "file_path": {
                                "description": "Durable asset path. Pass it to a compatible API asset field without uploading it again.",
                                "example": "saved-items/user-id/item-id/image.png",
                                "type": "string"
                              },
                              "is_primary": {
                                "description": "Whether this asset is the saved item's primary asset.",
                                "example": true,
                                "type": "boolean"
                              },
                              "media_kind": {
                                "description": "Media type of the asset.",
                                "enum": [
                                  "IMAGE",
                                  "VIDEO",
                                  "AUDIO"
                                ],
                                "example": "IMAGE",
                                "type": "string"
                              },
                              "url": {
                                "description": "Signed URL for previewing or downloading the asset. Expires after 24 hours.",
                                "format": "uri",
                                "type": "string"
                              },
                              "url_expires_at": {
                                "description": "When the signed URL expires. The saved asset and file_path do not expire.",
                                "example": "2026-09-17T00:00:00.000Z",
                                "format": "date-time",
                                "type": "string"
                              }
                            },
                            "required": [
                              "file_path",
                              "media_kind",
                              "is_primary",
                              "url",
                              "url_expires_at"
                            ],
                            "type": "object"
                          },
                          "type": "array"
                        },
                        "id": {
                          "description": "Unique ID of the saved item.",
                          "example": "cuid-example",
                          "type": "string"
                        },
                        "name": {
                          "description": "User-provided name of the saved item.",
                          "example": "Alex",
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "type": {
                          "description": "Saved item type.",
                          "enum": [
                            "character",
                            "reference",
                            "voice",
                            "moodboard",
                            "brand_kit"
                          ],
                          "example": "character",
                          "type": "string"
                        }
                      },
                      "required": [
                        "id",
                        "type",
                        "name",
                        "assets"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "next_cursor": {
                    "description": "Cursor for the next page, or null when there are no more saved items.",
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "required": [
                  "items",
                  "next_cursor"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "List saved items"
              }
            },
            {
              "name": "voices_list",
              "title": "List voices",
              "description": "List the voices available for text-to-speech. Use a voice's `id` as `style.voice_name` in the AI Voice Generator API. To fetch the next page, pass the response's next_cursor as cursor.",
              "inputSchema": {
                "properties": {
                  "cursor": {
                    "description": "Opaque pagination cursor from the previous response's next_cursor.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "limit": {
                    "default": 20,
                    "description": "Maximum number of voices to return. Defaults to 20.",
                    "example": 20,
                    "maximum": 100,
                    "minimum": 1,
                    "type": "integer"
                  }
                },
                "required": [],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "next_cursor": {
                    "description": "Cursor for the next page, or null when there are no more voices.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "voices": {
                    "items": {
                      "properties": {
                        "avatar_url": {
                          "description": "URL of the voice's avatar image, or null when the voice has no avatar.",
                          "example": "https://d28dkohlqf5vwj.cloudfront.net/models/nano-banana/female-portrait-turtleneck.webp",
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "id": {
                          "description": "Unique ID of the voice. Pass it as `style.voice_name` when generating speech. Names are not unique, so use the ID.",
                          "example": "cv-0001",
                          "type": "string"
                        },
                        "name": {
                          "description": "Display name of the voice.",
                          "example": "Ashley",
                          "type": "string"
                        },
                        "preview_url": {
                          "description": "URL of an audio sample of the voice.",
                          "example": "https://videos.magichour.ai/presets/voices/v2/cv-0001-ashley.mp3",
                          "type": "string"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "avatar_url",
                        "preview_url"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "voices",
                  "next_cursor"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "List voices"
              }
            },
            {
              "name": "get_upload_urls",
              "title": "Get upload URLs",
              "description": "Creates presigned upload URL and file-path pairs for local media. Use when a generation needs a file the user has locally: upload raw bytes to the returned upload_url, then pass its file_path to the create tool. Does not upload file bytes or start a generation.",
              "inputSchema": {
                "properties": {
                  "items": {
                    "description": "The list of assets to upload. The response array will match the order of items in the request body.",
                    "example": [
                      {
                        "extension": "mp4",
                        "type": "video"
                      },
                      {
                        "extension": "mp3",
                        "type": "audio"
                      }
                    ],
                    "items": {
                      "properties": {
                        "extension": {
                          "description": "The extension of the file to upload. Do not include the dot (.) before the extension. Possible extensions are mp4,m4v,mov,webm,mp3,wav,aac,flac,webm,weba,m4a,opus,ogg,oga,aiff,amr,png,jpg,jpeg,jpe,jfif,heic,heif,webp,avif,jp2,tiff,tif,bmp,gif,webp,webm",
                          "example": "mp4",
                          "pattern": "^[a-z0-9]+$",
                          "type": "string"
                        },
                        "type": {
                          "description": "The type of asset to upload. Possible types are video, audio, image",
                          "enum": [
                            "video",
                            "audio",
                            "image"
                          ],
                          "example": "video",
                          "type": "string"
                        }
                      },
                      "required": [
                        "type",
                        "extension"
                      ],
                      "type": "object"
                    },
                    "minItems": 1,
                    "type": "array"
                  }
                },
                "required": [
                  "items"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "items": {
                    "description": "The list of upload URLs and file paths for the assets. The response array will match the order of items in the request body. Refer to the [Input Files Guide](https://docs.magichour.ai/integration/inputs-and-outputs) for more details.",
                    "example": [
                      {
                        "expires_at": "2024-07-25T16:56:21.932Z",
                        "file_path": "api-assets/id/video.mp4",
                        "upload_url": "https://videos.magichour.ai/api-assets/id/video.mp4?auth-value=1234567890"
                      },
                      {
                        "expires_at": "2024-07-25T16:56:21.932Z",
                        "file_path": "api-assets/id/audio.mp3",
                        "upload_url": "https://videos.magichour.ai/api-assets/id/audio.mp3?auth-value=1234567890"
                      }
                    ],
                    "items": {
                      "properties": {
                        "expires_at": {
                          "description": "when the upload url expires, and will need to request a new one.",
                          "example": "2024-07-21T17:32:28Z",
                          "format": "date-time",
                          "type": "string"
                        },
                        "file_path": {
                          "description": "this value is used in APIs that needs assets, such as image_file_path, video_file_path, and audio_file_path",
                          "example": "video/id/1234.mp4",
                          "type": "string"
                        },
                        "upload_url": {
                          "description": "Used to upload the file to storage, send a PUT request with the file as data to upload.",
                          "example": "https://videos.magichour.ai/id/video.mp4?auth-value=1234567890",
                          "format": "uri",
                          "type": "string"
                        }
                      },
                      "required": [
                        "upload_url",
                        "expires_at",
                        "file_path"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "items"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Get upload URLs"
              }
            },
            {
              "name": "get_face_detection_results",
              "title": "Get face detection results",
              "description": "Returns a face-detection job's status and detected faces. Use with the id from detect_faces to inspect progress and choose face mappings before a selected-face swap. Read-only; faces may populate while processing.",
              "inputSchema": {
                "properties": {
                  "id": {
                    "description": "The id of the task. This value is returned by the [face detection API](https://docs.magichour.ai/api-reference/files/face-detection#response-id).",
                    "example": "uuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "credits_charged": {
                    "description": "The credits charged for the task.",
                    "example": 0,
                    "type": "integer"
                  },
                  "error": {
                    "description": "Why the face detection failed. Present only when `status` is `error`; `null` otherwise.",
                    "properties": {
                      "code": {
                        "description": "An error code to indicate why a failure happened.",
                        "example": "no_source_face",
                        "type": "string"
                      },
                      "message": {
                        "description": "Details on the reason why a failure happened.",
                        "example": "Please use an image with a detectable face",
                        "type": "string"
                      }
                    },
                    "required": [
                      "message",
                      "code"
                    ],
                    "type": [
                      "object",
                      "null"
                    ]
                  },
                  "faces": {
                    "description": "The faces detected in the image or video. The list is populated as faces are detected.",
                    "example": [
                      {
                        "path": "api-assets/id/0-0.png",
                        "url": "https://videos.magichour.ai/api-assets/id/0-0.png"
                      }
                    ],
                    "items": {
                      "properties": {
                        "path": {
                          "description": "The path to the face image. This should be used in face swap photo/video API calls as `.assets.face_mappings.original_face`",
                          "example": "api-assets/id/0-0.png",
                          "type": "string"
                        },
                        "url": {
                          "description": "The url to the face image. This is used to render the image in your applications.",
                          "example": "https://videos.magichour.ai/api-assets/id/0-0.png",
                          "type": "string"
                        }
                      },
                      "required": [
                        "path",
                        "url"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "id": {
                    "description": "The id of the task. This value is returned by the [face detection API](https://docs.magichour.ai/api-reference/files/face-detection#response-id).",
                    "example": "uuid-example",
                    "type": "string"
                  },
                  "status": {
                    "description": "The status of the detection.",
                    "enum": [
                      "queued",
                      "rendering",
                      "complete",
                      "error"
                    ],
                    "example": "complete",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged",
                  "status",
                  "faces",
                  "error"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Get face detection results"
              }
            },
            {
              "name": "detect_faces",
              "title": "Detect faces",
              "description": "Starts an asynchronous face-detection task for a supplied image or video and returns its id and charge information. Use before a selected-face swap, then retrieve its status and detected faces with get_face_detection_results. Current API documentation describes detection as free; pricing may change.",
              "inputSchema": {
                "properties": {
                  "assets": {
                    "description": "Provide the assets for face detection",
                    "properties": {
                      "target_file_path": {
                        "description": "This is the image or video where the face will be detected. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.png",
                        "type": "string"
                      }
                    },
                    "required": [
                      "target_file_path"
                    ],
                    "type": "object"
                  },
                  "confidence_score": {
                    "default": 0.5,
                    "description": "Confidence threshold for filtering detected faces. \n* Higher values (e.g., 0.9) include only faces detected with high certainty, reducing false positives. \n* Lower values (e.g., 0.3) include more faces, but may increase the chance of incorrect detections.",
                    "example": 0.5,
                    "maximum": 1,
                    "minimum": 0,
                    "multipleOf": 0.05,
                    "type": "number"
                  }
                },
                "required": [
                  "assets"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "credits_charged": {
                    "description": "The credits charged for the task.",
                    "type": "integer"
                  },
                  "id": {
                    "description": "The id of the task. Use this value in the [get face detection details API](https://docs.magichour.ai/api-reference/files/get-face-detection-details) to get the details of the face detection task.",
                    "example": "uuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Detect faces"
              }
            },
            {
              "name": "get_video_project",
              "title": "Get video project",
              "description": "Returns a video project's status and, once complete, its download URLs. Use to check progress with the id from a video create tool. Read-only.",
              "inputSchema": {
                "properties": {
                  "id": {
                    "description": "Unique ID of the video project. This value is returned by all of the POST APIs that create a video.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "created_at": {
                    "format": "date-time",
                    "type": "string"
                  },
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the video. If the status is not 'complete', this value is an estimate and may be adjusted upon completion based on the actual FPS of the output video. \n\nIf video generation fails, credits will be refunded, and this field will be updated to include the refund.",
                    "example": 450,
                    "type": "integer"
                  },
                  "downloads": {
                    "items": {
                      "description": "The download url and expiration date of the image project",
                      "properties": {
                        "expires_at": {
                          "example": "2024-10-19T05:16:19.027Z",
                          "format": "date-time",
                          "type": "string"
                        },
                        "url": {
                          "example": "https://videos.magichour.ai/id/output.mp4",
                          "format": "uri",
                          "type": "string"
                        }
                      },
                      "required": [
                        "url",
                        "expires_at"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "enabled": {
                    "description": "Whether this resource is active. If false, it is deleted.",
                    "type": "boolean"
                  },
                  "end_seconds": {
                    "description": "End time of your clip (seconds). Must be greater than start_seconds.",
                    "example": 5,
                    "format": "float",
                    "minimum": 0.1,
                    "type": "number"
                  },
                  "error": {
                    "description": "In the case of an error, this object will contain the error encountered during video render",
                    "properties": {
                      "code": {
                        "description": "An error code to indicate why a failure happened.",
                        "example": "no_source_face",
                        "type": "string"
                      },
                      "message": {
                        "description": "Details on the reason why a failure happened.",
                        "example": "Please use an image with a detectable face",
                        "type": "string"
                      }
                    },
                    "required": [
                      "message",
                      "code"
                    ],
                    "type": [
                      "object",
                      "null"
                    ]
                  },
                  "fps": {
                    "description": "Frame rate of the video. If the status is not 'complete', the frame rate is an estimate and will be adjusted when the video completes.",
                    "example": 30,
                    "type": "number"
                  },
                  "height": {
                    "description": "The height of the final output video. A value of -1 indicates the height can be ignored.",
                    "example": 960,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the video. Use it with the [Get video Project API](https://docs.magichour.ai/api-reference/video-projects/get-video-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  },
                  "name": {
                    "description": "The name of the video.",
                    "example": "Example Name",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "start_seconds": {
                    "description": "Start time of your clip (seconds). Must be ≥ 0.",
                    "example": 0,
                    "format": "float",
                    "minimum": 0,
                    "type": "number"
                  },
                  "status": {
                    "description": "The status of the video.\n\n- `draft` - the project was created but has not been submitted for rendering\n- `queued` - the job is waiting for an available server\n- `rendering` - the job is being processed; the `video.started` webhook event fires when rendering begins\n- `complete` - the job finished successfully; fires `video.completed`\n- `error` - the job failed during processing; fires `video.errored`\n- `canceled` - the job was manually canceled (for example from the Magic Hour web app)\n\n**Note:** `rendering`, `complete`, and `error` have matching webhook events; `canceled` does not - a canceled job emits no webhook event, so poll this endpoint to detect cancellation.",
                    "enum": [
                      "draft",
                      "queued",
                      "rendering",
                      "complete",
                      "error",
                      "canceled"
                    ],
                    "example": "complete",
                    "type": "string"
                  },
                  "type": {
                    "description": "The type of the video project. Possible values are ANIMATION, AUTO_SUBTITLE, VIDEO_TO_VIDEO, FACE_SWAP, TEXT_TO_VIDEO, IMAGE_TO_VIDEO, LIP_SYNC, TALKING_PHOTO, AVATAR, VIDEO_UPSCALER, VIDEO_EDITOR, CHARACTER_REPLACE, VIDEO_COLORIZER, VIDEO_WATERMARK_REMOVER, VIDEO_COLOR_GRADER, VIDEO_TRANSLATOR, MUSIC_VIDEO, EXTEND, AUDIO_TO_VIDEO, VIDEO_EXPANDER, UGC_AD",
                    "example": "FACE_SWAP",
                    "type": "string"
                  },
                  "width": {
                    "description": "The width of the final output video. A value of -1 indicates the width can be ignored.",
                    "example": 512,
                    "type": "integer"
                  }
                },
                "required": [
                  "id",
                  "name",
                  "status",
                  "type",
                  "created_at",
                  "width",
                  "height",
                  "enabled",
                  "start_seconds",
                  "end_seconds",
                  "credits_charged",
                  "fps",
                  "error",
                  "downloads"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Get video project"
              }
            },
            {
              "name": "delete_video_project",
              "title": "Delete video project",
              "description": "Deletes the video project and attempts to delete its completed output. Cannot be undone; confirm with the user first.",
              "inputSchema": {
                "properties": {
                  "id": {
                    "description": "Unique ID of the video project. This value is returned by all of the POST APIs that create a video.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Delete video project"
              }
            },
            {
              "name": "create_talking_photo",
              "title": "Create talking photo",
              "description": "Use only with the user's own likeness or content they are authorized to use. Do not use for impersonation, deception, sexual content, or content involving minors.\n\nUse a still portrait and an existing speech recording to make the portrait speak. A written script needs audio first. For a prepared ad image and written script, use create_spoken_ad_video. For existing video and replacement audio, use create_lip_sync_video. Starts a background job that costs credits; returns a project id for wait_for_video_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable. For attached ChatGPT files, upload with upload_chatgpt_media and pass its returned file_path. Reuse existing Magic Hour paths only from the connected account. Do not pass a filename, chat-local path or file ID as a file path.",
              "inputSchema": {
                "properties": {
                  "assets": {
                    "description": "Provide the assets for creating a talking photo",
                    "properties": {
                      "audio_file_path": {
                        "description": "The audio file to sync with the image. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.mp3",
                        "minLength": 1,
                        "type": "string"
                      },
                      "image_file_path": {
                        "description": "The source image to animate. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.png",
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "image_file_path",
                      "audio_file_path"
                    ],
                    "type": "object"
                  },
                  "end_seconds": {
                    "description": "The end time of the input audio in seconds. Maximum clip length depends on style.generation_mode: realistic 300s, prompted 60s.",
                    "example": 5,
                    "format": "float",
                    "minimum": 0.1,
                    "type": "number"
                  },
                  "name": {
                    "default": "Talking Photo - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Talking Photo video",
                    "type": "string"
                  },
                  "resolution": {
                    "description": "Output preset. Overrides `max_resolution`. Defaults to 480p in prompted mode; realistic mode uses the mapped plan maximum.",
                    "enum": [
                      "480p",
                      "720p"
                    ],
                    "example": "480p",
                    "type": "string"
                  },
                  "start_seconds": {
                    "description": "The start time of the input audio in seconds. Maximum clip length depends on style.generation_mode: realistic 300s, prompted 60s.",
                    "example": 0,
                    "format": "float",
                    "minimum": 0,
                    "type": "number"
                  },
                  "style": {
                    "description": "Attributes used to dictate the style of the output",
                    "properties": {
                      "generation_mode": {
                        "default": "realistic",
                        "description": "Controls motion style. `realistic` animates the supplied portrait; `prompted` also accepts a scene prompt. Deprecated aliases remain supported: `pro` and `stable` select `realistic`; `standard` and `expressive` select `prompted`.",
                        "enum": [
                          "realistic",
                          "prompted",
                          "pro",
                          "standard",
                          "stable",
                          "expressive"
                        ],
                        "example": "realistic",
                        "type": "string"
                      },
                      "prompt": {
                        "description": "A text prompt to guide the generation. Only applicable when generation_mode is `prompted`.\nThis field is ignored for other modes.",
                        "example": "A person smiling and speaking naturally to the camera",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  }
                },
                "required": [
                  "start_seconds",
                  "end_seconds",
                  "assets"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the video. If the status is not 'complete', this value is an estimate and may be adjusted upon completion based on the actual FPS of the output video. \n\nIf video generation fails, credits will be refunded, and this field will be updated to include the refund.",
                    "example": 450,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the video. Use it with the [Get video Project API](https://docs.magichour.ai/api-reference/video-projects/get-video-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Create talking photo"
              }
            },
            {
              "name": "create_spoken_ad_video",
              "title": "Create spoken ad video",
              "description": "Use a prepared image and a written script to generate a spoken ad with synthesized dialogue. For a still portrait and an existing speech recording, use create_talking_photo. Starts a background job that costs credits; returns a project id for wait_for_video_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable. For attached ChatGPT files, upload with upload_chatgpt_media and pass its returned file_path. Reuse existing Magic Hour paths only from the connected account. Do not pass a filename, chat-local path or file ID as a file path.",
              "inputSchema": {
                "properties": {
                  "assets": {
                    "additionalProperties": false,
                    "description": "Prepared image to animate into the spoken ad. The script is supplied separately.",
                    "properties": {
                      "image_file_path": {
                        "description": "Prepared image to animate. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/image.jpg",
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "image_file_path"
                    ],
                    "type": "object"
                  },
                  "end_seconds": {
                    "description": "Video duration in seconds. Supported values by model:\n* kling-3.0: 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 seconds.\n* ltx-2.5: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60 seconds.\n* veo3.1: 4, 6, 8, 15, 22, 29, 36, 43, 50, 57, 64, 71, 78, 85, 92, 99, 106, 113, 120, 127, 134, 141 seconds.\nFree plans are limited to 5 seconds unless a credit pack has been purchased.",
                    "example": 4,
                    "minimum": 1,
                    "type": "number"
                  },
                  "model": {
                    "description": "Defaults to kling-3.0 on paid plans and ltx-2.5 on free plans.",
                    "enum": [
                      "kling-3.0",
                      "ltx-2.5",
                      "veo3.1"
                    ],
                    "example": "ltx-2.5",
                    "type": "string"
                  },
                  "resolution": {
                    "description": "Defaults to 720p on paid plans and 480p on free plans. Unsupported model/resolution combinations and resolutions unavailable for your plan are rejected.",
                    "enum": [
                      "480p",
                      "720p",
                      "1080p"
                    ],
                    "example": "480p",
                    "type": "string"
                  },
                  "script": {
                    "description": "The words the actor should speak. Character limits apply after trimming:\n* kling-3.0: 2304 characters.\n* ltx-2.5: 1804 characters.\n* veo3.1: 2500 characters.\nLTX and Kling dialogue wrappers count toward their model prompt limit.",
                    "example": "Meet your new everyday essential.",
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "required": [
                  "assets",
                  "script",
                  "end_seconds"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the video. If the status is not 'complete', this value is an estimate and may be adjusted upon completion based on the actual FPS of the output video. \n\nIf video generation fails, credits will be refunded, and this field will be updated to include the refund.",
                    "example": 450,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the video. Use it with the [Get video Project API](https://docs.magichour.ai/api-reference/video-projects/get-video-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Create spoken ad video"
              }
            },
            {
              "name": "edit_video",
              "title": "Edit video",
              "description": "Edits the appearance or content of a supplied video segment using a text prompt. Use with a source video, the requested changes and the clip end time. Starts a background job that costs credits; returns a project id for wait_for_video_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable. For attached ChatGPT files, upload with upload_chatgpt_media and pass its returned file_path. Reuse existing Magic Hour paths only from the connected account. Do not pass a filename, chat-local path or file ID as a file path.",
              "inputSchema": {
                "properties": {
                  "assets": {
                    "description": "Provide the assets for video editing.",
                    "properties": {
                      "video_file_path": {
                        "description": "The video to edit. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.mp4",
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "video_file_path"
                    ],
                    "type": "object"
                  },
                  "end_seconds": {
                    "description": "End time of your clip in seconds. Must be greater than `start_seconds`. Allowed duration depends on model: `gemini-omni-1.2`: 3-15s, `wan-3.0`: 2-15s, `ltx-2.5`: 0.5-60s (30s at 1080p), `kling-4.0`: 3-30s.",
                    "example": 5,
                    "format": "float",
                    "minimum": 0.1,
                    "type": "number"
                  },
                  "model": {
                    "description": "The AI model to use for video editing. Defaults to `ltx-2.5` on free tiers and `gemini-omni-1.2` on paid tiers.\n\n* `gemini-omni-1.2`: Best for precise clips up to 15s, references, and high-resolution output. Requires a paid tier.\n* `wan-3.0`: High-quality video with native audio, long clips, and end-frame control. Requires a paid tier.\n* `ltx-2.5`: Fastest for general scenes, long clips, audio, and rapid iteration.\n* `kling-4.0`: Create cinematic videos with image and video references and optional audio. Requires a paid tier.",
                    "enum": [
                      "gemini-omni-1.1",
                      "gemini-omni-1.2",
                      "wan-3.0",
                      "ltx-2.5",
                      "kling-4.0",
                      "gemini-omni",
                      "ltx-2.3"
                    ],
                    "example": "ltx-2.5",
                    "type": "string"
                  },
                  "name": {
                    "default": "Video Editor - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Video Editor video",
                    "type": "string"
                  },
                  "references": {
                    "description": "Name references without @ and refer to them as @name in style.prompt. Names must be unique, ignoring case. Maximum 10 references total. Omit for no references.\n\nReference images for gemini-omni-1.2, wan-3.0, kling-4.0.",
                    "items": {
                      "properties": {
                        "file_path": {
                          "description": "This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                          "example": "api-assets/id/1234.png",
                          "minLength": 1,
                          "type": "string"
                        },
                        "name": {
                          "description": "Reference label without @. Use @name in style.prompt to refer to this file; labels must be unique ignoring case.",
                          "example": "hero",
                          "pattern": "^[A-Za-z][\\w-]*$",
                          "type": "string"
                        }
                      },
                      "required": [
                        "name",
                        "file_path"
                      ],
                      "type": "object"
                    },
                    "maxItems": 10,
                    "minItems": 0,
                    "type": "array"
                  },
                  "resolution": {
                    "description": "Output resolution. Defaults to `480p` for free tier and `720p` for paid. Supported per model: `gemini-omni-1.2`: 360p, 720p, 1080p, 4k; `wan-3.0`: 480p, 720p, 1080p; `ltx-2.5`: 480p, 720p, 1080p; `kling-4.0`: 720p, 1080p.",
                    "enum": [
                      "360p",
                      "480p",
                      "720p",
                      "1080p",
                      "4k"
                    ],
                    "example": "480p",
                    "type": "string"
                  },
                  "start_seconds": {
                    "default": 0,
                    "description": "Start time of your clip (seconds). Must be ≥ 0.",
                    "example": 0,
                    "format": "float",
                    "minimum": 0,
                    "type": "number"
                  },
                  "style": {
                    "description": "Instructions describing the changes to make to the source video.",
                    "properties": {
                      "prompt": {
                        "description": "The prompt used to edit the video.",
                        "example": "Change the car color to blue",
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "prompt"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "end_seconds",
                  "style",
                  "assets"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the video. If the status is not 'complete', this value is an estimate and may be adjusted upon completion based on the actual FPS of the output video. \n\nIf video generation fails, credits will be refunded, and this field will be updated to include the refund.",
                    "example": 450,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the video. Use it with the [Get video Project API](https://docs.magichour.ai/api-reference/video-projects/get-video-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Edit video"
              }
            },
            {
              "name": "translate_video",
              "title": "Translate video",
              "description": "Translates speech in a supplied video segment into a supported target language. Starts a background job that costs credits; returns a project id for wait_for_video_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable. For attached ChatGPT files, upload with upload_chatgpt_media and pass its returned file_path. Reuse existing Magic Hour paths only from the connected account. Do not pass a filename, chat-local path or file ID as a file path.",
              "inputSchema": {
                "properties": {
                  "assets": {
                    "description": "Source video for the translation job.",
                    "properties": {
                      "video_file_path": {
                        "description": "Source video containing the speech to translate. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.mp4",
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "video_file_path"
                    ],
                    "type": "object"
                  },
                  "end_seconds": {
                    "description": "End time of your clip (seconds). Must be greater than start_seconds. The clip must be 1-30 seconds long.",
                    "example": 5,
                    "format": "float",
                    "minimum": 0.1,
                    "type": "number"
                  },
                  "name": {
                    "default": "Video Translator - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Video Translator video",
                    "type": "string"
                  },
                  "resolution": {
                    "description": "Output video resolution. Defaults to 480p. 720p and 1080p require a paid plan.",
                    "enum": [
                      "480p",
                      "720p",
                      "1080p"
                    ],
                    "example": "480p",
                    "type": "string"
                  },
                  "start_seconds": {
                    "default": 0,
                    "description": "Start time of your clip (seconds). Must be ≥ 0.",
                    "example": 0,
                    "format": "float",
                    "minimum": 0,
                    "type": "number"
                  },
                  "target_language": {
                    "description": "Language to translate the video's speech into.",
                    "enum": [
                      "English",
                      "Chinese (Simplified)",
                      "Hindi",
                      "Spanish",
                      "Arabic",
                      "French",
                      "Afrikaans",
                      "Bengali",
                      "Bulgarian",
                      "Catalan",
                      "Croatian",
                      "Czech",
                      "Danish",
                      "Dutch",
                      "Estonian",
                      "Finnish",
                      "German",
                      "Greek",
                      "Gujarati",
                      "Hebrew",
                      "Hungarian",
                      "Indonesian",
                      "Italian",
                      "Japanese",
                      "Kannada",
                      "Kazakh",
                      "Korean",
                      "Latvian",
                      "Lithuanian",
                      "Malay",
                      "Malayalam",
                      "Marathi",
                      "Norwegian",
                      "Persian",
                      "Polish",
                      "Portuguese",
                      "Punjabi",
                      "Romanian",
                      "Russian",
                      "Serbian",
                      "Slovak",
                      "Slovenian",
                      "Swahili",
                      "Swedish",
                      "Tamil",
                      "Telugu",
                      "Thai",
                      "Chinese (Traditional)",
                      "Turkish",
                      "Ukrainian",
                      "Urdu",
                      "Vietnamese",
                      "Welsh"
                    ],
                    "example": "Spanish",
                    "type": "string"
                  }
                },
                "required": [
                  "end_seconds",
                  "target_language",
                  "assets"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the video. If the status is not 'complete', this value is an estimate and may be adjusted upon completion based on the actual FPS of the output video. \n\nIf video generation fails, credits will be refunded, and this field will be updated to include the refund.",
                    "example": 450,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the video. Use it with the [Get video Project API](https://docs.magichour.ai/api-reference/video-projects/get-video-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Translate video"
              }
            },
            {
              "name": "upscale_video",
              "title": "Upscale video",
              "description": "Upscales a supplied video segment to a selected output resolution while preserving its aspect ratio. Starts a background job that costs credits; returns a project id for wait_for_video_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable. For attached ChatGPT files, upload with upload_chatgpt_media and pass its returned file_path. Reuse existing Magic Hour paths only from the connected account. Do not pass a filename, chat-local path or file ID as a file path.",
              "inputSchema": {
                "properties": {
                  "assets": {
                    "description": "Source video for the upscale job.",
                    "properties": {
                      "video_file_path": {
                        "description": "Video to upscale. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.mp4",
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "video_file_path"
                    ],
                    "type": "object"
                  },
                  "end_seconds": {
                    "description": "End time of your clip (seconds). Must be greater than start_seconds.",
                    "example": 5,
                    "format": "float",
                    "minimum": 0.1,
                    "type": "number"
                  },
                  "name": {
                    "default": "Video Upscaler - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Video Upscaler video",
                    "type": "string"
                  },
                  "resolution": {
                    "description": "Output resolution. `720p` and `1080p` set the output's short side, `2k` and `4k` its long side; the aspect ratio is kept. Requires a paid plan.",
                    "enum": [
                      "720p",
                      "1080p",
                      "2k",
                      "4k"
                    ],
                    "example": "1080p",
                    "type": "string"
                  },
                  "start_seconds": {
                    "default": 0,
                    "description": "Start time of your clip (seconds). Must be ≥ 0.",
                    "example": 0,
                    "format": "float",
                    "minimum": 0,
                    "type": "number"
                  }
                },
                "required": [
                  "end_seconds",
                  "resolution",
                  "assets"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the video. If the status is not 'complete', this value is an estimate and may be adjusted upon completion based on the actual FPS of the output video. \n\nIf video generation fails, credits will be refunded, and this field will be updated to include the refund.",
                    "example": 450,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the video. Use it with the [Get video Project API](https://docs.magichour.ai/api-reference/video-projects/get-video-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Upscale video"
              }
            },
            {
              "name": "create_animation",
              "title": "Create animation",
              "description": "Creates a stylized animated video with art and camera settings, using a custom prompt or an audio-derived prompt mode. Can use an initial image and audio. Credits depend on frame rate and duration; returns a project id for wait_for_video_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable. For attached ChatGPT files, upload with upload_chatgpt_media and pass its returned file_path. Reuse existing Magic Hour paths only from the connected account. Do not pass a filename, chat-local path or file ID as a file path.",
              "inputSchema": {
                "properties": {
                  "assets": {
                    "description": "Provide the assets for animation.",
                    "example": {
                      "audio_file_path": "api-assets/id/1234.mp3",
                      "audio_source": "file",
                      "image_file_path": "api-assets/id/1234.png"
                    },
                    "properties": {
                      "audio_file_path": {
                        "description": "The path of the input audio. This field is required if `audio_source` is `file`. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.mp3",
                        "minLength": 1,
                        "type": "string"
                      },
                      "audio_source": {
                        "description": "Optionally add an audio source if you'd like to incorporate audio into your video",
                        "enum": [
                          "none",
                          "file",
                          "youtube"
                        ],
                        "example": "file",
                        "type": "string"
                      },
                      "image_file_path": {
                        "description": "An initial image to use a the first frame of the video. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.png",
                        "minLength": 1,
                        "type": "string"
                      },
                      "youtube_url": {
                        "description": "Using a youtube video as the input source. This field is required if `audio_source` is `youtube`",
                        "format": "uri",
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "audio_source"
                    ],
                    "type": "object"
                  },
                  "end_seconds": {
                    "description": "This value determines the duration of the output video.",
                    "example": 5,
                    "format": "float",
                    "minimum": 0.1,
                    "type": "number"
                  },
                  "fps": {
                    "description": "The desire output video frame rate",
                    "example": 12,
                    "minimum": 1,
                    "type": "number"
                  },
                  "height": {
                    "description": "The height of the final output video. The maximum height depends on your subscription. Please refer to our [pricing page](https://magichour.ai/pricing) for more details",
                    "example": 512,
                    "minimum": 64,
                    "type": "integer"
                  },
                  "name": {
                    "default": "Animation - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Animation video",
                    "type": "string"
                  },
                  "style": {
                    "description": "Defines the style of the output video",
                    "properties": {
                      "art_style": {
                        "description": "The art style used to create the output video",
                        "enum": [
                          "Custom",
                          "Painterly Illustration",
                          "Vibrant Matte Illustration",
                          "Traditional Watercolor",
                          "Cyberpunk",
                          "Ink and Watercolor Portrait",
                          "Intricate Abstract Lines Portrait",
                          "3D Render",
                          "Old School Comic",
                          "Bold Colored Illustration",
                          "Synthwave",
                          "Minimal Cold Futurism",
                          "Futuristic Anime",
                          "Cinematic Miyazaki",
                          "Studio Ghibli Film Still",
                          "Soft Delicate Matte Portrait",
                          "Cinematic Landscape",
                          "Landscape Painting",
                          "Photograph",
                          "Jackson Pollock",
                          "Cubist",
                          "Abstract Minimalist",
                          "Impressionism",
                          "Van Gogh",
                          "Woodcut",
                          "Oil Painting",
                          "Vintage Japanese Anime",
                          "Pixar",
                          "Cosmic",
                          "Pixel Art",
                          "Fantasy",
                          "Arcane",
                          "Sin City",
                          "Double Exposure",
                          "Painted Cityscape",
                          "90s Streets",
                          "Overgrown",
                          "Postapocalyptic",
                          "Spooky",
                          "Miniatures",
                          "Low Poly",
                          "Art Deco",
                          "Inkpunk",
                          "Dark Graphic Illustration",
                          "Dark Watercolor",
                          "Faded Illustration",
                          "Directed by AI"
                        ],
                        "example": "Painterly Illustration",
                        "type": "string"
                      },
                      "art_style_custom": {
                        "description": "Describe custom art style. This field is required if `art_style` is `Custom`",
                        "example": "Watercolor painting with soft pastel colors",
                        "type": "string"
                      },
                      "camera_effect": {
                        "description": "The camera effect used to create the output video",
                        "enum": [
                          "Simple Zoom Out",
                          "Simple Zoom In",
                          "Bounce Out",
                          "Spin Bounce",
                          "Rolling Bounces",
                          "Rise and Climb",
                          "Dramatic Zoom In",
                          "Dramatic Zoom Out",
                          "Sway Out",
                          "Boost Zoom In",
                          "Boost Zoom Out",
                          "Heartbeat",
                          "Bounce in Place",
                          "Earthquake Bounce",
                          "Slice Bounce",
                          "Bounce In And Out",
                          "Jump",
                          "Road Trip",
                          "Traverse",
                          "Rubber Band",
                          "Rodeo",
                          "Accelerate",
                          "Speed of Light",
                          "Drift Spin",
                          "Vertigo",
                          "Cog in the Machine",
                          "Quadrant",
                          "Tron",
                          "Pusher",
                          "Roll In",
                          "Hesitate In",
                          "Zoom In - Audio Sync",
                          "Pulse - Audio Sync",
                          "Aggressive Zoom In - Audio Sync",
                          "Roll In - Audio Sync",
                          "Zoom Out - Audio Sync",
                          "Aggressive Zoom Out - Audio Sync",
                          "Sway Out - Audio Sync",
                          "Bounce and Spin - Audio Sync",
                          "Zoom In and Spin - Audio Sync",
                          "Vertigo - Audio Sync",
                          "Bounce Out - Audio Sync",
                          "Earthquake Bounce - Audio Sync",
                          "Pusher - Audio Sync",
                          "Evolve - Audio Sync",
                          "Devolve - Audio Sync",
                          "Slideshow",
                          "Pan Left",
                          "Pan Right",
                          "Tilt Up",
                          "Tilt Down",
                          "Directed by AI"
                        ],
                        "example": "Simple Zoom In",
                        "type": "string"
                      },
                      "prompt": {
                        "description": "The prompt used for the video. Prompt is required if `prompt_type` is `custom`. Otherwise this value is ignored",
                        "example": "Cyberpunk city",
                        "type": "string"
                      },
                      "prompt_type": {
                        "description": "\n* `custom` - Use your own prompt for the video.\n* `use_lyrics` - Use the lyrics of the audio to create the prompt. If this option is selected, then `assets.audio_source` must be `file` or `youtube`.\n* `ai_choose` - Let AI write the prompt. If this option is selected, then `assets.audio_source` must be `file` or `youtube`.",
                        "enum": [
                          "custom",
                          "use_lyrics",
                          "ai_choose"
                        ],
                        "example": "custom",
                        "type": "string"
                      },
                      "transition_speed": {
                        "description": "Change determines how quickly the video's content changes across frames. \n* Higher = more rapid transitions.\n* Lower = more stable visual experience.",
                        "example": 5,
                        "maximum": 10,
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "art_style",
                      "camera_effect",
                      "prompt_type",
                      "transition_speed"
                    ],
                    "type": "object"
                  },
                  "width": {
                    "description": "The width of the final output video. The maximum width depends on your subscription. Please refer to our [pricing page](https://magichour.ai/pricing) for more details",
                    "example": 512,
                    "minimum": 64,
                    "type": "integer"
                  }
                },
                "required": [
                  "fps",
                  "end_seconds",
                  "height",
                  "width",
                  "style",
                  "assets"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the video. If the status is not 'complete', this value is an estimate and may be adjusted upon completion based on the actual FPS of the output video. \n\nIf video generation fails, credits will be refunded, and this field will be updated to include the refund.",
                    "example": 450,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the video. Use it with the [Get video Project API](https://docs.magichour.ai/api-reference/video-projects/get-video-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Create animation"
              }
            },
            {
              "name": "create_video_from_audio",
              "title": "Create video from audio",
              "description": "Generates an audio-guided video from a supplied audio track, with an optional starting image and visual prompt. Starts a background job that costs credits; returns a project id for wait_for_video_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable. For attached ChatGPT files, upload with upload_chatgpt_media and pass its returned file_path. Reuse existing Magic Hour paths only from the connected account. Do not pass a filename, chat-local path or file ID as a file path.",
              "inputSchema": {
                "properties": {
                  "assets": {
                    "description": "Provide the audio file and an optional reference image.",
                    "properties": {
                      "audio_file_path": {
                        "description": "The path of the audio file. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.mp3",
                        "minLength": 1,
                        "type": "string"
                      },
                      "image_file_path": {
                        "description": "Reference image for the initial frame of the video. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.png",
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "audio_file_path"
                    ],
                    "type": "object"
                  },
                  "end_seconds": {
                    "description": "End time of your clip (seconds). Must be greater than start_seconds.",
                    "example": 5,
                    "format": "float",
                    "minimum": 0.1,
                    "type": "number"
                  },
                  "name": {
                    "default": "Audio To Video - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Audio To Video video",
                    "type": "string"
                  },
                  "resolution": {
                    "description": "Output video resolution. Defaults to `720p` on paid tiers and `480p` on free tiers.",
                    "enum": [
                      "480p",
                      "720p",
                      "1080p"
                    ],
                    "example": "480p",
                    "type": "string"
                  },
                  "start_seconds": {
                    "default": 0,
                    "description": "Start time of your clip (seconds). Must be ≥ 0.",
                    "example": 0,
                    "format": "float",
                    "minimum": 0,
                    "type": "number"
                  },
                  "style": {
                    "description": "Attributes used to dictate the style of the output",
                    "properties": {
                      "prompt": {
                        "description": "Prompt to guide the visual style of the video.",
                        "example": "Car driving through a city",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  }
                },
                "required": [
                  "end_seconds",
                  "assets"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the video. If the status is not 'complete', this value is an estimate and may be adjusted upon completion based on the actual FPS of the output video. \n\nIf video generation fails, credits will be refunded, and this field will be updated to include the refund.",
                    "example": 450,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the video. Use it with the [Get video Project API](https://docs.magichour.ai/api-reference/video-projects/get-video-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Create video from audio"
              }
            },
            {
              "name": "add_subtitles_to_video",
              "title": "Add subtitles to video",
              "description": "Adds automatically generated subtitles to a supplied video segment using a subtitle preset or custom text styling. Starts a background job that costs credits; returns a project id for wait_for_video_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable. For attached ChatGPT files, upload with upload_chatgpt_media and pass its returned file_path. Reuse existing Magic Hour paths only from the connected account. Do not pass a filename, chat-local path or file ID as a file path.",
              "inputSchema": {
                "properties": {
                  "assets": {
                    "description": "Provide the assets for auto subtitle generator",
                    "properties": {
                      "video_file_path": {
                        "description": "This is the video used to add subtitles. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.mp4",
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "video_file_path"
                    ],
                    "type": "object"
                  },
                  "end_seconds": {
                    "description": "End time of your clip (seconds). Must be greater than start_seconds.",
                    "example": 5,
                    "format": "float",
                    "minimum": 0.1,
                    "type": "number"
                  },
                  "name": {
                    "default": "Auto Subtitle - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Auto Subtitle video",
                    "type": "string"
                  },
                  "start_seconds": {
                    "description": "Start time of your clip (seconds). Must be ≥ 0.",
                    "example": 0,
                    "format": "float",
                    "minimum": 0,
                    "type": "number"
                  },
                  "style": {
                    "description": "Style of the subtitle. At least one of `.style.template` or `.style.custom_config` must be provided. \n* If only `.style.template` is provided, default values for the template will be used.\n* If both are provided, the fields in `.style.custom_config` will be used to overwrite the fields in `.style.template`.\n* If only `.style.custom_config` is provided, then all fields in `.style.custom_config` will be used.\n\nTo use custom config only, the following `custom_config` params are required:\n* `.style.custom_config.font`\n* `.style.custom_config.text_color`\n* `.style.custom_config.vertical_position`\n* `.style.custom_config.horizontal_position`\n",
                    "properties": {
                      "custom_config": {
                        "description": "Custom subtitle configuration.",
                        "properties": {
                          "font": {
                            "description": "Font name from Google Fonts. Not all fonts support all languages or character sets. \nWe recommend verifying language support and appearance directly on https://fonts.google.com before use.",
                            "example": "Noto Sans",
                            "type": "string"
                          },
                          "font_size": {
                            "description": "Font size in pixels. If not provided, the font size is automatically calculated based on the video resolution.",
                            "example": 24,
                            "type": "number"
                          },
                          "font_style": {
                            "description": "Font style (e.g., normal, italic, bold)",
                            "example": "normal",
                            "type": "string"
                          },
                          "highlighted_text_color": {
                            "description": "Color used to highlight the current spoken text",
                            "example": "#FFD700",
                            "type": "string"
                          },
                          "horizontal_position": {
                            "description": "Horizontal alignment of the text (e.g., left, center, right)",
                            "example": "center",
                            "type": "string"
                          },
                          "stroke_color": {
                            "description": "Stroke (outline) color of the text",
                            "example": "#000000",
                            "type": "string"
                          },
                          "stroke_width": {
                            "description": "Width of the text stroke in pixels. If `stroke_color` is provided, but `stroke_width` is not, the `stroke_width` will be calculated automatically based on the font size.",
                            "example": 1,
                            "type": "number"
                          },
                          "text_color": {
                            "description": "Primary text color in hex format",
                            "example": "#FFFFFF",
                            "type": "string"
                          },
                          "vertical_position": {
                            "description": "Vertical alignment of the text (e.g., top, center, bottom)",
                            "example": "bottom",
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "template": {
                        "description": "Preset subtitle templates. Please visit https://magichour.ai/create/auto-subtitle-generator to see the style of the existing templates.",
                        "enum": [
                          "karaoke",
                          "cinematic",
                          "minimalist",
                          "highlight"
                        ],
                        "example": "karaoke",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  }
                },
                "required": [
                  "start_seconds",
                  "end_seconds",
                  "assets",
                  "style"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the video. If the status is not 'complete', this value is an estimate and may be adjusted upon completion based on the actual FPS of the output video. \n\nIf video generation fails, credits will be refunded, and this field will be updated to include the refund.",
                    "example": 450,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the video. Use it with the [Get video Project API](https://docs.magichour.ai/api-reference/video-projects/get-video-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Add subtitles to video"
              }
            },
            {
              "name": "replace_character_in_video",
              "title": "Replace character in video",
              "description": "Use only with the user's own likeness or content they are authorized to use. Do not use for impersonation, deception, sexual content, or content involving minors.\n\nReplaces a subject in a video with a character from a reference image, or transfers the video's motion onto that character. Starts a background job that costs credits; returns a project id for wait_for_video_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable. For attached ChatGPT files, upload with upload_chatgpt_media and pass its returned file_path. Reuse existing Magic Hour paths only from the connected account. Do not pass a filename, chat-local path or file ID as a file path.",
              "inputSchema": {
                "properties": {
                  "assets": {
                    "description": "Source video and reference character image for the job.",
                    "properties": {
                      "image_file_path": {
                        "description": "Reference character image used as the replacement or animation target. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/5678.png",
                        "minLength": 1,
                        "type": "string"
                      },
                      "video_file_path": {
                        "description": "Source video containing the subject to replace or animate. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.mp4",
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "video_file_path",
                      "image_file_path"
                    ],
                    "type": "object"
                  },
                  "end_seconds": {
                    "description": "End time of your clip (seconds). Must be greater than start_seconds.",
                    "example": 5,
                    "format": "float",
                    "minimum": 0.1,
                    "type": "number"
                  },
                  "model": {
                    "default": "wan-animate",
                    "description": "Model to use. Defaults to `wan-animate`.\n\n* **`wan-animate`**: 480p, 720p. Supports `points` subject selection.\n* **`kling-3.0`**: 720p, 1080p. Clips of 3–10 seconds in `replace` mode or 3–30 seconds in `animate` mode. Picks the main person automatically, so `points` are rejected.\n* **`minimax-h3`**: 480p, 720p, 1080p. Clips of 1–60 seconds in `replace` mode or 1–60 seconds in `animate` mode. Subject `points` are `replace`-only; `animate` with `selection_mode` `point` returns 422, and with `auto` or no `selection_mode` the points are ignored.",
                    "enum": [
                      "wan-animate",
                      "kling-3.0",
                      "minimax-h3"
                    ],
                    "example": "wan-animate",
                    "type": "string"
                  },
                  "name": {
                    "default": "Character Replace - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Character Replace video",
                    "type": "string"
                  },
                  "resolution": {
                    "description": "Output video resolution. Must be supported by `model`. Defaults to the lowest resolution available on your plan for that model.",
                    "enum": [
                      "480p",
                      "720p",
                      "1080p"
                    ],
                    "example": "480p",
                    "type": "string"
                  },
                  "start_seconds": {
                    "default": 0,
                    "description": "Start time of your clip (seconds). Must be ≥ 0.",
                    "example": 0,
                    "format": "float",
                    "minimum": 0,
                    "type": "number"
                  },
                  "style": {
                    "description": "Optional style controls for replace vs animate mode and subject selection.",
                    "example": {
                      "mode": "replace",
                      "selection_mode": "auto"
                    },
                    "properties": {
                      "mode": {
                        "description": "Processing mode. `replace` swaps the detected subject with your reference character. `animate` transfers motion from the video onto your character image.",
                        "enum": [
                          "replace",
                          "animate"
                        ],
                        "example": "replace",
                        "type": "string"
                      },
                      "points": {
                        "description": "On-frame markers for manual subject selection. Required when `selection_mode` is `point`. Ignored when `selection_mode` is `auto` or omitted. Rejected for models without subject selection (supported by `wan-animate`, `minimax-h3`). `minimax-h3` subject `points` are `replace`-only; `animate` with `selection_mode` `point` returns 422, and with `auto` or no `selection_mode` the points are ignored.",
                        "items": {
                          "properties": {
                            "position_x": {
                              "description": "Horizontal pixel coordinate in the source video frame at `time_seconds`, measured from the left edge.",
                              "example": 320,
                              "minimum": 0,
                              "type": "integer"
                            },
                            "position_y": {
                              "description": "Vertical pixel coordinate in the source video frame at `time_seconds`, measured from the top edge.",
                              "example": 180,
                              "minimum": 0,
                              "type": "integer"
                            },
                            "time_seconds": {
                              "description": "Timestamp on the source video timeline in seconds. Uses the same clock as `start_seconds` and `end_seconds`.",
                              "example": 2.5,
                              "format": "float",
                              "minimum": 0,
                              "type": "number"
                            }
                          },
                          "required": [
                            "position_x",
                            "position_y",
                            "time_seconds"
                          ],
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "prompt": {
                        "description": "Optional direction. Supported by kling-3.0, minimax-h3.",
                        "maxLength": 2000,
                        "type": "string"
                      },
                      "selection_mode": {
                        "description": "How to locate the subject in the source video. `auto` detects a person automatically. `point` uses your `points` to mark the subject and is supported by `wan-animate`, `minimax-h3`. `minimax-h3` subject `points` are `replace`-only; `animate` with `selection_mode` `point` returns 422, and with `auto` or no `selection_mode` the points are ignored. Defaults to `auto`.",
                        "enum": [
                          "auto",
                          "point"
                        ],
                        "example": "auto",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  }
                },
                "required": [
                  "end_seconds",
                  "assets"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the video. If the status is not 'complete', this value is an estimate and may be adjusted upon completion based on the actual FPS of the output video. \n\nIf video generation fails, credits will be refunded, and this field will be updated to include the refund.",
                    "example": 450,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the video. Use it with the [Get video Project API](https://docs.magichour.ai/api-reference/video-projects/get-video-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Replace character in video"
              }
            },
            {
              "name": "swap_face_in_video",
              "title": "Swap face in video",
              "description": "Use only with the user's own likeness or content they are authorized to use. Do not use for impersonation, deception, sexual content, or content involving minors.\n\nSwaps faces in an existing video: all faces with a reference image, or selected faces using detect_faces results. Starts a background job that costs credits; returns a project id for wait_for_video_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable. For attached ChatGPT files, upload with upload_chatgpt_media and pass its returned file_path. Reuse existing Magic Hour paths only from the connected account. Do not pass a filename, chat-local path or file ID as a file path.",
              "inputSchema": {
                "properties": {
                  "assets": {
                    "description": "Provide the assets for face swap. For video, The `video_source` field determines whether `video_file_path` or `youtube_url` field is used",
                    "example": {
                      "face_swap_mode": "all-faces",
                      "image_file_path": "api-assets/id/1234.png",
                      "video_file_path": "api-assets/id/1234.mp4",
                      "video_source": "file"
                    },
                    "properties": {
                      "face_mappings": {
                        "description": "This is the array of face mappings used for multiple face swap. The value is required if `face_swap_mode` is `individual-faces`.",
                        "example": [
                          {
                            "new_face": "api-assets/id/1234.png",
                            "original_face": "api-assets/id/0-0.png"
                          }
                        ],
                        "items": {
                          "properties": {
                            "new_face": {
                              "description": "The face image that will be used to replace the face in the `original_face`. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                              "example": "api-assets/id/1234.png",
                              "type": "string"
                            },
                            "original_face": {
                              "description": "The face detected from the image in `target_file_path`. The file name is in the format of `\u003cface_frame\u003e-\u003cface_index\u003e.png`. This value is corresponds to the response in the [face detection API](https://docs.magichour.ai/api-reference/files/get-face-detection-details).\n\n* The face_frame is the frame number of the face in the target image. For images, the frame number is always 0.\n* The face_index is the index of the face in the target image, starting from 0 going left to right.",
                              "example": "api-assets/id/0-0.png",
                              "type": "string"
                            }
                          },
                          "required": [
                            "original_face",
                            "new_face"
                          ],
                          "type": "object"
                        },
                        "maxItems": 5,
                        "type": "array"
                      },
                      "face_swap_mode": {
                        "default": "all-faces",
                        "description": "Choose which faces to swap. `all-faces` uses one source image for all detected faces (`image_file_path` required). `individual-faces` uses exact `face_mappings`.",
                        "enum": [
                          "all-faces",
                          "individual-faces"
                        ],
                        "example": "all-faces",
                        "type": "string"
                      },
                      "image_file_path": {
                        "description": "The path of the input image with the face to be swapped.  The value is required if `face_swap_mode` is `all-faces`.\n\nThis value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.png",
                        "type": "string"
                      },
                      "video_file_path": {
                        "description": "Your video file. Required if `video_source` is `file`. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.mp4",
                        "type": "string"
                      },
                      "video_source": {
                        "description": "Choose your video source.",
                        "enum": [
                          "file",
                          "youtube"
                        ],
                        "example": "file",
                        "type": "string"
                      },
                      "youtube_url": {
                        "description": "YouTube URL (required if `video_source` is `youtube`).",
                        "format": "uri",
                        "type": "string"
                      }
                    },
                    "required": [
                      "video_source"
                    ],
                    "type": "object"
                  },
                  "end_seconds": {
                    "description": "End time of your clip (seconds). Must be greater than start_seconds.",
                    "example": 5,
                    "format": "float",
                    "minimum": 0.1,
                    "type": "number"
                  },
                  "name": {
                    "default": "Face Swap - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Face Swap video",
                    "type": "string"
                  },
                  "start_seconds": {
                    "description": "Start time of your clip (seconds). Must be ≥ 0.",
                    "example": 0,
                    "format": "float",
                    "minimum": 0,
                    "type": "number"
                  },
                  "style": {
                    "description": "Style of the face swap video.",
                    "example": {
                      "version": "default"
                    },
                    "properties": {
                      "version": {
                        "description": "Select face-swap version `v1` or `v2`. `default` uses the server-selected version, which may change over time.",
                        "enum": [
                          "v1",
                          "v2",
                          "default"
                        ],
                        "example": "default",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  }
                },
                "required": [
                  "start_seconds",
                  "end_seconds",
                  "assets"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the video. If the status is not 'complete', this value is an estimate and may be adjusted upon completion based on the actual FPS of the output video. \n\nIf video generation fails, credits will be refunded, and this field will be updated to include the refund.",
                    "example": 450,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the video. Use it with the [Get video Project API](https://docs.magichour.ai/api-reference/video-projects/get-video-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Swap face in video"
              }
            },
            {
              "name": "create_video_from_image",
              "title": "Create video from image",
              "description": "Use a still image as the first frame and describe what should move. For a portrait speaking to an existing recording, use create_talking_photo. For a prepared ad image and written script, use create_spoken_ad_video. Starts a background job that costs credits; returns a project id for wait_for_video_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable. For attached ChatGPT files, upload with upload_chatgpt_media and pass its returned file_path. Reuse existing Magic Hour paths only from the connected account. Do not pass a filename, chat-local path or file ID as a file path.",
              "inputSchema": {
                "properties": {
                  "assets": {
                    "description": "Provide the assets for image-to-video.",
                    "properties": {
                      "end_image_file_path": {
                        "description": "The image to use as the last frame of the video.\n\n* **`gemini-omni-1.2`**: Supports 360p, 720p, 1080p, 4k. Requires a duration of 10 seconds or less.\n* **`kling-2.6`**: Supports 1080p.\n* **`kling-3.0`**: Supports 720p, 1080p, 4k.\n* **`kling-4.0`**: Supports 720p, 1080p.\n* **`ltx-2.5`**: Supports 480p, 720p, 1080p.\n* **`minimax-h3`**: Supports 480p, 720p, 1080p.\n* **`seedance-1.5`**: Supports 480p, 720p, 1080p.\n* **`seedance-2.0`**: Supports 480p, 720p, 1080p, 4k.\n* **`seedance-2.0-fast`**: Supports 480p, 720p.\n* **`seedance-2.0-mini`**: Supports 480p, 720p.\n* **`seedance-2.5`**: Supports 480p, 720p, 1080p.\n* **`veo3.1`**: Supports 720p, 1080p. Requires a duration of 8 seconds or less.\n* **`veo3.1-lite`**: Supports 720p, 1080p. Requires a duration of 8 seconds or less.\n* **`wan-2.2`**: Not supported\n* **`wan-3.0`**: Supports 480p, 720p, 1080p.\n\nThis value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.png",
                        "minLength": 1,
                        "type": "string"
                      },
                      "image_file_path": {
                        "description": "The path of the image file. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.png",
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "image_file_path"
                    ],
                    "type": "object"
                  },
                  "audio": {
                    "description": "Whether to include audio in the video. Defaults to `false` if not specified.\n\nAudio support varies by model:\n* **`gemini-omni-1.2`**: Toggle-able: no additional credits for audio\n* **`kling-2.6`**: Not supported\n* **`kling-3.0`**: Toggle-able: audio adds extra credits when enabled\n* **`kling-4.0`**: Toggle-able: no additional credits for audio\n* **`ltx-2.5`**: Toggle-able: no additional credits for audio\n* **`minimax-h3`**: Toggle-able: no additional credits for audio\n* **`seedance-1.5`**: Toggle-able: audio adds extra credits when enabled\n* **`seedance-2.0`**: Toggle-able: no additional credits for audio\n* **`seedance-2.0-fast`**: Toggle-able: no additional credits for audio\n* **`seedance-2.0-mini`**: Toggle-able: no additional credits for audio\n* **`seedance-2.5`**: Toggle-able: no additional credits for audio\n* **`veo3.1`**: Toggle-able: audio adds extra credits when enabled\n* **`veo3.1-lite`**: Toggle-able: audio adds extra credits when enabled\n* **`wan-2.2`**: Not supported\n* **`wan-3.0`**: Toggle-able: no additional credits for audio\n",
                    "example": true,
                    "type": "boolean"
                  },
                  "end_seconds": {
                    "description": "The total duration of the output video in seconds. Supported durations depend on the chosen model:\n\n* **`gemini-omni-1.2`**: any integer from 3 to 15\n* **`kling-2.6`**: 5, 10\n* **`kling-3.0`**: any integer from 3 to 15\n* **`kling-4.0`**: any integer from 3 to 30\n* **`ltx-2.5`**: any integer from 1 to 60\n* **`minimax-h3`**: any integer from 1 to 30\n* **`seedance-1.5`**: any integer from 4 to 12\n* **`seedance-2.0`**: any integer from 4 to 15\n* **`seedance-2.0-fast`**: any integer from 4 to 15\n* **`seedance-2.0-mini`**: any integer from 4 to 15\n* **`seedance-2.5`**: any integer from 4 to 30\n* **`veo3.1`**: 4, 6, 8, 16, 24, 32, 40, 48, 56\n* **`veo3.1-lite`**: 4, 6, 8, 16, 24, 32, 40, 48, 56\n* **`wan-2.2`**: 3, 4, 5, 6, 7, 8, 9, 10, 15\n* **`wan-3.0`**: any integer from 2 to 30\n",
                    "example": 5,
                    "format": "float",
                    "maximum": 60,
                    "minimum": 1,
                    "type": "number"
                  },
                  "model": {
                    "default": "default",
                    "description": "The video generation model. With `default`, paid tiers use `kling-3.0` and Free uses `ltx-2.5`. Duration, resolution, audio and reference support depend on the selected model. When no model was requested, use `default` rather than choosing a named premium model; omit an unrequested resolution so the API resolves it for the account. Preserve explicit settings and required input capabilities. Deprecated model values ending in `-audio` enable `audio`.",
                    "enum": [
                      "default",
                      "minimax-h3",
                      "kling-4.0",
                      "kling-3.0",
                      "ltx-2.5",
                      "wan-2.2",
                      "seedance-2.5",
                      "wan-3.0",
                      "seedance-2.0-mini",
                      "veo3.1",
                      "veo3.1-lite",
                      "seedance-2.0",
                      "kling-2.6",
                      "gemini-omni-1.2",
                      "gemini-omni-1.1",
                      "seedance-2.0-fast",
                      "seedance-1.5",
                      "sora-2",
                      "ltx-2.3",
                      "ltx-2",
                      "kling-2.5",
                      "kling-1.6",
                      "seedance",
                      "kling-2.5-audio",
                      "veo3.1-audio"
                    ],
                    "example": "ltx-2.5",
                    "type": "string"
                  },
                  "name": {
                    "default": "Image To Video - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Image To Video video",
                    "type": "string"
                  },
                  "resolution": {
                    "description": "Controls the output video resolution. Defaults to `720p` on paid tiers and `480p` on free tiers.\n\n* **`gemini-omni-1.2`**: Supports 360p, 720p, 1080p, 4k.\n* **`kling-2.6`**: Supports 720p, 1080p.\n* **`kling-3.0`**: Supports 720p, 1080p, 4k.\n* **`kling-4.0`**: Supports 720p, 1080p.\n* **`ltx-2.5`**: Supports 480p, 720p, 1080p.\n* **`minimax-h3`**: Supports 480p, 720p, 1080p.\n* **`seedance-1.5`**: Supports 480p, 720p, 1080p.\n* **`seedance-2.0`**: Supports 480p, 720p, 1080p, 4k.\n* **`seedance-2.0-fast`**: Supports 480p, 720p.\n* **`seedance-2.0-mini`**: Supports 480p, 720p.\n* **`seedance-2.5`**: Supports 480p, 720p, 1080p.\n* **`veo3.1`**: Supports 720p, 1080p.\n* **`veo3.1-lite`**: Supports 720p, 1080p.\n* **`wan-2.2`**: Supports 480p, 720p, 1080p.\n* **`wan-3.0`**: Supports 480p, 720p, 1080p.\n",
                    "enum": [
                      "360p",
                      "480p",
                      "720p",
                      "1080p",
                      "4k"
                    ],
                    "example": "480p",
                    "type": "string"
                  },
                  "style": {
                    "description": "Attributed used to dictate the style of the output",
                    "properties": {
                      "prompt": {
                        "description": "The prompt used for the video. Maximum length depends on the model that runs, in characters:\n\n* **`gemini-omni-1.2`**: 2500 characters.\n* **`kling-2.6`**: 2500 characters.\n* **`kling-3.0`**: 2500 characters.\n* **`kling-4.0`**: 10000 characters.\n* **`ltx-2.5`**: 2000 characters.\n* **`minimax-h3`**: 20000 characters.\n* **`seedance-1.5`**: 2000 characters.\n* **`seedance-2.0`**: 2000 characters.\n* **`seedance-2.0-fast`**: 2000 characters.\n* **`seedance-2.0-mini`**: 2000 characters.\n* **`seedance-2.5`**: 2000 characters.\n* **`veo3.1`**: 2500 characters.\n* **`veo3.1-lite`**: 2500 characters.\n* **`wan-2.2`**: 10000 characters.\n* **`wan-3.0`**: 10000 characters.\n\nFor `default`, the limit of the automatically selected model applies. Selection depends on subscription tier, resolution and duration. Specify an explicit model to use a known prompt limit. Prompts exceeding the effective model's limit are rejected, not truncated.",
                        "example": "a dog running",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  }
                },
                "required": [
                  "end_seconds",
                  "assets"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the video. If the status is not 'complete', this value is an estimate and may be adjusted upon completion based on the actual FPS of the output video. \n\nIf video generation fails, credits will be refunded, and this field will be updated to include the refund.",
                    "example": 450,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the video. Use it with the [Get video Project API](https://docs.magichour.ai/api-reference/video-projects/get-video-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Create video from image"
              }
            },
            {
              "name": "create_lip_sync_video",
              "title": "Create lip sync video",
              "description": "Use only with the user's own likeness or content they are authorized to use. Do not use for impersonation, deception, sexual content, or content involving minors.\n\nUse existing video and replacement audio to match the speaker's lip movements to the recording. For a still portrait and existing speech recording, use create_talking_photo. Starts a background job that costs credits; returns a project id for wait_for_video_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable. For attached ChatGPT files, upload with upload_chatgpt_media and pass its returned file_path. Reuse existing Magic Hour paths only from the connected account. Do not pass a filename, chat-local path or file ID as a file path.",
              "inputSchema": {
                "properties": {
                  "assets": {
                    "description": "Provide the assets for lip-sync. For video, The `video_source` field determines whether `video_file_path` or `youtube_url` field is used",
                    "example": {
                      "audio_file_path": "api-assets/id/1234.mp3",
                      "video_file_path": "api-assets/id/1234.mp4",
                      "video_source": "file"
                    },
                    "properties": {
                      "audio_file_path": {
                        "description": "The path of the audio file. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.mp3",
                        "minLength": 1,
                        "type": "string"
                      },
                      "video_file_path": {
                        "description": "Your video file. Required if `video_source` is `file`. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.mp4",
                        "type": "string"
                      },
                      "video_source": {
                        "description": "Choose your video source.",
                        "enum": [
                          "file",
                          "youtube"
                        ],
                        "example": "file",
                        "type": "string"
                      },
                      "youtube_url": {
                        "description": "YouTube URL (required if `video_source` is `youtube`).",
                        "format": "uri",
                        "type": "string"
                      }
                    },
                    "required": [
                      "audio_file_path",
                      "video_source"
                    ],
                    "type": "object"
                  },
                  "end_seconds": {
                    "description": "End time of your clip (seconds). Must be greater than start_seconds.",
                    "example": 5,
                    "format": "float",
                    "minimum": 0.1,
                    "type": "number"
                  },
                  "max_fps_limit": {
                    "description": "Defines the maximum FPS (frames per second) for the output video. If the input video's FPS is lower than this limit, the output video will retain the input FPS. This is useful for reducing unnecessary frame usage in scenarios where high FPS is not required.",
                    "example": 12,
                    "minimum": 1,
                    "type": "number"
                  },
                  "name": {
                    "default": "Lip Sync - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Lip Sync video",
                    "type": "string"
                  },
                  "start_seconds": {
                    "description": "Start time of your clip (seconds). Must be ≥ 0.",
                    "example": 0,
                    "format": "float",
                    "minimum": 0,
                    "type": "number"
                  },
                  "style": {
                    "description": "Attributes used to dictate the style of the output",
                    "properties": {
                      "generation_mode": {
                        "default": "lite",
                        "description": "Select the lip-sync mode. `lite` costs 1 credit per video frame. `standard` costs 1 credit per video frame; `pro` costs 2. Both `standard` and `pro` require visible mouth movement in the opening seconds of the input video. `pro` requires a Creator, Pro or Business tier. For a still image, including a static image saved as video, use `create_talking_photo` with the original image and audio.",
                        "enum": [
                          "lite",
                          "standard",
                          "pro"
                        ],
                        "example": "lite",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  }
                },
                "required": [
                  "start_seconds",
                  "end_seconds",
                  "assets"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the video. If the status is not 'complete', this value is an estimate and may be adjusted upon completion based on the actual FPS of the output video. \n\nIf video generation fails, credits will be refunded, and this field will be updated to include the refund.",
                    "example": 450,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the video. Use it with the [Get video Project API](https://docs.magichour.ai/api-reference/video-projects/get-video-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Create lip sync video"
              }
            },
            {
              "name": "create_video_from_text",
              "title": "Create video from text",
              "description": "Generates a video from a text prompt, with optional supported reference inputs and model settings. To animate an existing starting image, use create_video_from_image. Starts a background job that costs credits; returns a project id for wait_for_video_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable.",
              "inputSchema": {
                "properties": {
                  "aspect_ratio": {
                    "description": "Determines the aspect ratio of the output video.\n\n* **`gemini-omni-1.2`**: Supports 16:9, 9:16.\n* **`kling-2.6`**: Supports 9:16, 16:9, 1:1.\n* **`kling-3.0`**: Supports 9:16, 16:9, 1:1.\n* **`kling-4.0`**: Supports 9:16, 16:9, 1:1.\n* **`ltx-2.5`**: Supports 9:16, 16:9, 1:1.\n* **`minimax-h3`**: Supports 16:9, 9:16, 1:1.\n* **`seedance-1.5`**: Supports 9:16, 16:9, 1:1.\n* **`seedance-2.0`**: Supports 9:16, 16:9, 1:1.\n* **`seedance-2.0-fast`**: Supports 9:16, 16:9, 1:1.\n* **`seedance-2.0-mini`**: Supports 9:16, 16:9, 1:1.\n* **`seedance-2.5`**: Supports 9:16, 16:9, 1:1.\n* **`veo3.1`**: Supports 9:16, 16:9.\n* **`veo3.1-lite`**: Supports 9:16, 16:9.\n* **`wan-2.2`**: Supports 9:16, 16:9, 1:1.\n* **`wan-3.0`**: Supports 16:9, 9:16, 1:1.\n",
                    "enum": [
                      "16:9",
                      "9:16",
                      "1:1"
                    ],
                    "example": "16:9",
                    "type": "string"
                  },
                  "audio": {
                    "description": "Whether to include audio in the video. Defaults to `false` if not specified.\n\nAudio support varies by model:\n* **`gemini-omni-1.2`**: Toggle-able: no additional credits for audio\n* **`kling-2.6`**: Not supported\n* **`kling-3.0`**: Toggle-able: audio adds extra credits when enabled\n* **`kling-4.0`**: Toggle-able: no additional credits for audio\n* **`ltx-2.5`**: Toggle-able: no additional credits for audio\n* **`minimax-h3`**: Toggle-able: no additional credits for audio\n* **`seedance-1.5`**: Toggle-able: audio adds extra credits when enabled\n* **`seedance-2.0`**: Toggle-able: no additional credits for audio\n* **`seedance-2.0-fast`**: Toggle-able: no additional credits for audio\n* **`seedance-2.0-mini`**: Toggle-able: no additional credits for audio\n* **`seedance-2.5`**: Toggle-able: no additional credits for audio\n* **`veo3.1`**: Toggle-able: audio adds extra credits when enabled\n* **`veo3.1-lite`**: Toggle-able: audio adds extra credits when enabled\n* **`wan-2.2`**: Not supported\n* **`wan-3.0`**: Toggle-able: no additional credits for audio\n",
                    "example": true,
                    "type": "boolean"
                  },
                  "end_seconds": {
                    "description": "The total duration of the output video in seconds. Supported durations depend on the chosen model:\n\n* **`gemini-omni-1.2`**: any integer from 3 to 15\n* **`kling-2.6`**: 5, 10\n* **`kling-3.0`**: any integer from 3 to 15\n* **`kling-4.0`**: any integer from 3 to 30\n* **`ltx-2.5`**: any integer from 1 to 60\n* **`minimax-h3`**: any integer from 1 to 30\n* **`seedance-1.5`**: any integer from 4 to 12\n* **`seedance-2.0`**: any integer from 4 to 15\n* **`seedance-2.0-fast`**: any integer from 4 to 15\n* **`seedance-2.0-mini`**: any integer from 4 to 15\n* **`seedance-2.5`**: any integer from 4 to 30\n* **`veo3.1`**: 4, 6, 8, 16, 24, 32, 40, 48, 56\n* **`veo3.1-lite`**: 4, 6, 8, 16, 24, 32, 40, 48, 56\n* **`wan-2.2`**: 3, 4, 5, 6, 7, 8, 9, 10, 15\n* **`wan-3.0`**: any integer from 2 to 30\n",
                    "example": 5,
                    "format": "float",
                    "maximum": 60,
                    "minimum": 1,
                    "type": "number"
                  },
                  "model": {
                    "default": "default",
                    "description": "The video generation model. With `default`, paid tiers use `kling-3.0` and Free uses `ltx-2.5`. Duration, resolution, audio and reference support depend on the selected model. When no model was requested, use `default` rather than choosing a named premium model; omit an unrequested resolution so the API resolves it for the account. Preserve explicit settings and required input capabilities. Deprecated model values ending in `-audio` enable `audio`.",
                    "enum": [
                      "default",
                      "minimax-h3",
                      "kling-4.0",
                      "kling-3.0",
                      "ltx-2.5",
                      "wan-2.2",
                      "seedance-2.5",
                      "wan-3.0",
                      "seedance-2.0-mini",
                      "veo3.1",
                      "veo3.1-lite",
                      "seedance-2.0",
                      "kling-2.6",
                      "gemini-omni-1.2",
                      "gemini-omni-1.1",
                      "seedance-2.0-fast",
                      "seedance-1.5",
                      "sora-2",
                      "ltx-2.3",
                      "ltx-2",
                      "kling-2.5",
                      "kling-1.6",
                      "seedance",
                      "kling-2.5-audio",
                      "veo3.1-audio"
                    ],
                    "example": "ltx-2.5",
                    "type": "string"
                  },
                  "name": {
                    "default": "Text To Video - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Text To Video video",
                    "type": "string"
                  },
                  "references": {
                    "description": "Name references without @ and refer to them as @name in style.prompt. Names must be unique, ignoring case. Maximum 50 references total. Omit for no references.\n\nReference media for video generation.\n\nSupported models and reference media:\n* **`gemini-omni-1.2`**: Supports images, videos. Up to 10 references.\n* **`kling-3.0`**: Supports images, videos. Up to 10 references.\n* **`kling-4.0`**: Supports images, videos. Up to 10 references.\n* **`minimax-h3`**: Supports images, videos, audio. Up to 10 references. Video references must be 2–15 seconds each and 15 seconds combined, and are used in full. Audio references must be 2–15 seconds each and are used in full.\n* **`seedance-2.0`**: Supports images, videos, audio. Up to 10 references.\n* **`seedance-2.0-fast`**: Supports images, videos, audio. Up to 10 references.\n* **`seedance-2.0-mini`**: Supports images, videos, audio. Up to 10 references.\n* **`seedance-2.5`**: Supports images, videos, audio. Up to 50 references. Maximum 30 images, 10 videos and 10 audio references. The worker trims video references to 30 seconds combined and audio references to 30 seconds combined. Audio references require an image or video reference.\n* **`veo3.1`**: Supports images. Up to 3 references. Requires `end_seconds` of 8.\n* **`wan-3.0`**: Supports images, videos, audio. Up to 10 references.",
                    "items": {
                      "properties": {
                        "file_path": {
                          "description": "This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                          "example": "api-assets/id/1234.png",
                          "minLength": 1,
                          "type": "string"
                        },
                        "name": {
                          "description": "Reference label without @. Use @name in style.prompt to refer to this file; labels must be unique ignoring case.",
                          "example": "hero",
                          "pattern": "^[A-Za-z][\\w-]*$",
                          "type": "string"
                        }
                      },
                      "required": [
                        "name",
                        "file_path"
                      ],
                      "type": "object"
                    },
                    "maxItems": 50,
                    "minItems": 1,
                    "type": "array"
                  },
                  "resolution": {
                    "description": "Controls the output video resolution. Defaults to `720p` on paid tiers and `480p` on free tiers.\n\n* **`gemini-omni-1.2`**: Supports 360p, 720p, 1080p, 4k.\n* **`kling-2.6`**: Supports 720p, 1080p.\n* **`kling-3.0`**: Supports 720p, 1080p, 4k.\n* **`kling-4.0`**: Supports 720p, 1080p.\n* **`ltx-2.5`**: Supports 480p, 720p, 1080p.\n* **`minimax-h3`**: Supports 480p, 720p, 1080p.\n* **`seedance-1.5`**: Supports 480p, 720p, 1080p.\n* **`seedance-2.0`**: Supports 480p, 720p, 1080p, 4k.\n* **`seedance-2.0-fast`**: Supports 480p, 720p.\n* **`seedance-2.0-mini`**: Supports 480p, 720p.\n* **`seedance-2.5`**: Supports 480p, 720p, 1080p.\n* **`veo3.1`**: Supports 720p, 1080p.\n* **`veo3.1-lite`**: Supports 720p, 1080p.\n* **`wan-2.2`**: Supports 480p, 720p, 1080p.\n* **`wan-3.0`**: Supports 480p, 720p, 1080p.\n",
                    "enum": [
                      "360p",
                      "480p",
                      "720p",
                      "1080p",
                      "4k"
                    ],
                    "example": "480p",
                    "type": "string"
                  },
                  "style": {
                    "description": "Instructions describing the video to generate.",
                    "properties": {
                      "prompt": {
                        "description": "The prompt used for the video. Maximum length depends on the model that runs, in characters:\n\n* **`gemini-omni-1.2`**: 2500 characters.\n* **`kling-2.6`**: 2500 characters.\n* **`kling-3.0`**: 2500 characters.\n* **`kling-4.0`**: 10000 characters.\n* **`ltx-2.5`**: 2000 characters.\n* **`minimax-h3`**: 20000 characters.\n* **`seedance-1.5`**: 2000 characters.\n* **`seedance-2.0`**: 2000 characters.\n* **`seedance-2.0-fast`**: 2000 characters.\n* **`seedance-2.0-mini`**: 2000 characters.\n* **`seedance-2.5`**: 2000 characters.\n* **`veo3.1`**: 2500 characters.\n* **`veo3.1-lite`**: 2500 characters.\n* **`wan-2.2`**: 10000 characters.\n* **`wan-3.0`**: 10000 characters.\n\nFor `default`, the limit of the automatically selected model applies. Selection depends on subscription tier, resolution and duration. Specify an explicit model to use a known prompt limit. Prompts exceeding the effective model's limit are rejected, not truncated.",
                        "example": "a dog running",
                        "maxLength": 20000,
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "prompt"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "end_seconds",
                  "style"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the video. If the status is not 'complete', this value is an estimate and may be adjusted upon completion based on the actual FPS of the output video. \n\nIf video generation fails, credits will be refunded, and this field will be updated to include the refund.",
                    "example": 450,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the video. Use it with the [Get video Project API](https://docs.magichour.ai/api-reference/video-projects/get-video-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Create video from text"
              }
            },
            {
              "name": "restyle_video",
              "title": "Restyle video",
              "description": "Restyles an existing video clip with an art-style preset or a custom prompt. Supports v1/v2/v3 presets; v3 requires a supplied reference image and positive source-video width and height. Starts a background job that costs credits; returns a project id for wait_for_video_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable. For attached ChatGPT files, upload with upload_chatgpt_media and pass its returned file_path. Reuse existing Magic Hour paths only from the connected account. Do not pass a filename, chat-local path or file ID as a file path.",
              "inputSchema": {
                "properties": {
                  "assets": {
                    "description": "Provide the assets for video-to-video. For video, The `video_source` field determines whether `video_file_path` or `youtube_url` field is used",
                    "example": {
                      "video_file_path": "api-assets/id/1234.mp4",
                      "video_source": "file"
                    },
                    "properties": {
                      "initial_image_path": {
                        "description": "Required for v3: an uploaded reference image path, or a completed image output owned by you. The caller supplies this image; the API does not generate it.",
                        "example": "api-assets/id/reference.png",
                        "minLength": 1,
                        "type": "string"
                      },
                      "video_file_path": {
                        "description": "Your video file. Required if `video_source` is `file`. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.mp4",
                        "type": "string"
                      },
                      "video_source": {
                        "description": "Choose your video source.",
                        "enum": [
                          "file",
                          "youtube"
                        ],
                        "example": "file",
                        "type": "string"
                      },
                      "youtube_url": {
                        "description": "YouTube URL (required if `video_source` is `youtube`).",
                        "format": "uri",
                        "type": "string"
                      }
                    },
                    "required": [
                      "video_source"
                    ],
                    "type": "object"
                  },
                  "end_seconds": {
                    "description": "End time of your clip (seconds). Must be greater than start_seconds.",
                    "example": 5,
                    "format": "float",
                    "minimum": 0.1,
                    "type": "number"
                  },
                  "fps": {
                    "default": 30,
                    "description": "Source video FPS for v3 frame limits and estimated credits. Defaults to 30; final charges settle to rendered frames.",
                    "example": 30,
                    "minimum": 1,
                    "type": "number"
                  },
                  "fps_resolution": {
                    "default": "HALF",
                    "description": "Determines whether the resulting video will have the same frame per second as the original video, or half.\n* `FULL` - the result video will have the same FPS as the input video\n* `HALF` - the result video will have half the FPS as the input video",
                    "enum": [
                      "FULL",
                      "HALF"
                    ],
                    "example": "HALF",
                    "type": "string"
                  },
                  "height": {
                    "description": "Source video height in integer pixels. Required and positive for v3; ignored for v1/v2.",
                    "example": 704,
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": {
                    "default": "Video To Video - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Video To Video video",
                    "type": "string"
                  },
                  "start_seconds": {
                    "description": "Start time of your clip (seconds). Must be ≥ 0.",
                    "example": 0,
                    "format": "float",
                    "minimum": 0,
                    "type": "number"
                  },
                  "style": {
                    "description": "Art preset, rendering version, model and prompt controls for restyling the video.",
                    "properties": {
                      "art_style": {
                        "description": "Art-style preset to apply to the source video. The preset determines the default rendering version, model and prompt; check their compatibility before generation.",
                        "enum": [
                          "WWI Soldier",
                          "Minecraft",
                          "Watercolor",
                          "Chalkboard",
                          "Pixel",
                          "Rick \u0026 Morty",
                          "Sketch",
                          "Roblox",
                          "Hitman",
                          "Joker",
                          "Darth Maul",
                          "Jon Snow",
                          "Dexter's Lab",
                          "Darth Vader",
                          "Shadow",
                          "Bronze Statue",
                          "Toy Story",
                          "Puppets",
                          "Yarn",
                          "Obsidian Gods",
                          "Claymation",
                          "James Bond",
                          "Retro Sci-Fi",
                          "Chrome",
                          "Lego",
                          "Origami",
                          "Scorpion",
                          "Ash Ketchum",
                          "Terra Cotta Soldiers",
                          "Obi-Wan",
                          "Venom",
                          "Scream",
                          "Matrix",
                          "Crusader",
                          "Batman",
                          "Superman",
                          "Deadpool",
                          "Ghost",
                          "Iron Man",
                          "Warzone",
                          "Thanos",
                          "Tarzan",
                          "Polish Hussar",
                          "Gladiators",
                          "Grim Reaper",
                          "Hulk",
                          "Candle",
                          "Anime Ninja",
                          "Sand Sculpture",
                          "Spiderman",
                          "Ash Skeleton",
                          "Sub-Zero",
                          "Hades",
                          "Studio Ghibli",
                          "Comic",
                          "Gojo",
                          "Diorama",
                          "Mad Max",
                          "Dragon Rider Knight",
                          "Nightmare",
                          "Pennywise",
                          "One Punch Man",
                          "Anime Aviator",
                          "Slime",
                          "Sandpaper",
                          "Spray Paint",
                          "Flash",
                          "Impressionism",
                          "Master Chief",
                          "Solid Snake",
                          "Street Fighter",
                          "Hologram",
                          "Plague Doctor",
                          "South Park",
                          "GTA",
                          "Chess",
                          "Chalk Dust",
                          "Clay",
                          "Peely",
                          "Pepe the Frog",
                          "Tarot Card",
                          "Ninja Turtle",
                          "Tribal Warrior",
                          "Bubble Wrap",
                          "Glass Sculpture",
                          "Frankenstein",
                          "Napoleon Painting",
                          "Pokémon Trainer",
                          "Invader Zim",
                          "Terminator",
                          "Cuphead Devil",
                          "Cyclops",
                          "Luigi",
                          "Mythra",
                          "Phoenix Wright",
                          "Swamp Creatures",
                          "Vikings",
                          "Fossils",
                          "Cyber Samurai",
                          "Ice and Fire",
                          "Braveheart",
                          "Fire Golems",
                          "Golden Scarabs",
                          "Black Ink",
                          "Lich King",
                          "WWII Paratrooper",
                          "101 Dalmatians",
                          "8-Bit Angel",
                          "Ace (One Piece)",
                          "Aviator",
                          "Bagheera",
                          "Diablo",
                          "C-3PO",
                          "Qilin",
                          "Crusader Zombie",
                          "Daredevil",
                          "Statue of David",
                          "Doctor Doom",
                          "White Walker",
                          "Bioshock",
                          "Jason Voorhees",
                          "Kai’Sa",
                          "Killer Croc",
                          "Mechanical Scorpion",
                          "Metallic Angel",
                          "Spider-Venom",
                          "Mystique",
                          "Nathan Drake",
                          "Wendingo",
                          "Nautilus",
                          "Nosferatu",
                          "Gray NPC",
                          "Orc",
                          "Sans Undertale",
                          "Spiderman 2099",
                          "TF2 Spy",
                          "Sulley",
                          "The Creeper",
                          "X-Ray Soldier",
                          "Zeus (Disney)",
                          "Zombie",
                          "Eclipse",
                          "Nebula",
                          "Polygon",
                          "Raiden",
                          "Celestial",
                          "Wool Beast",
                          "Chibi",
                          "Albert Einstein",
                          "Alucard",
                          "Confederate Soldier",
                          "Fabric",
                          "Avian Aviator",
                          "FNAF",
                          "Mushroom",
                          "Beast",
                          "Blitzcrank",
                          "Captain America",
                          "Crystal Knight",
                          "Darkseid",
                          "Dio Brando",
                          "Doctor Fate",
                          "Green Goblin",
                          "Groot",
                          "Rooster",
                          "Devil",
                          "Kenshiro",
                          "Martian",
                          "Mech Dragon",
                          "Prince",
                          "Pyke",
                          "Robin",
                          "RoboCop",
                          "Samara Morgan",
                          "Shiva",
                          "Singed",
                          "Star Trek",
                          "Steampunk Captain",
                          "Tyrande Whisperwind",
                          "Predator",
                          "Yeti",
                          "Marble Sculpture",
                          "Washi",
                          "Woodcut",
                          "Dark Reaper",
                          "Mech Valkryie",
                          "Renaissance Painting",
                          "Renaissance Sketch",
                          "Comic Batman",
                          "Astronaut",
                          "Dragonball Z",
                          "Watercolor Painting",
                          "Cinematic",
                          "Optimus Prime",
                          "Mario",
                          "Poseidon",
                          "Moss Spirits",
                          "Green Lantern",
                          "Detective Conan",
                          "Prince of Persia",
                          "King Arthur",
                          "Wolverine",
                          "Statue of Liberty",
                          "Black Panther",
                          "Iron Valor",
                          "Legend of Zelda",
                          "Mandalorian",
                          "Aquaman",
                          "Cloud Strife",
                          "Samurai",
                          "John Wick",
                          "Freddy Krueger",
                          "Hercules",
                          "Spartan",
                          "Shrek",
                          "Solar Flare",
                          "Scottish Highlander",
                          "Desert Wraith",
                          "Kung Fu",
                          "Porcelain",
                          "Molten Rock",
                          "Apocalyptic Marble",
                          "Ash",
                          "Popeye",
                          "Simpsons",
                          "Liquid Metal",
                          "Cave Painting",
                          "Crayon",
                          "Scuba Diver",
                          "Vampire",
                          "Miner",
                          "Origami Samurai",
                          "Qing Dynasty",
                          "Wax",
                          "Bastet",
                          "Bellwether",
                          "Hobbits",
                          "Day of the Dead",
                          "Engineer",
                          "Finn",
                          "Huggy Wuggy",
                          "Krillin",
                          "Hugging Bear",
                          "Malfurion Stormrage",
                          "Mickey Mouse",
                          "Might Guy",
                          "Nala",
                          "Naruto Uzumaki",
                          "Oni",
                          "Piccolo",
                          "Raiden (Metal Gear)",
                          "Rocket Raccoon",
                          "Russell (Up)",
                          "Shark Gladiator",
                          "The Mask",
                          "The Mummy",
                          "The Nun",
                          "Indiana Jones",
                          "Aragorn",
                          "Foam",
                          "Jello",
                          "Dune",
                          "Anubis",
                          "Genghis Khan",
                          "Ink Blot",
                          "Ken",
                          "Kratos",
                          "Lara Croft",
                          "Legolas",
                          "Luffy",
                          "Oil Slick",
                          "Mech Angels",
                          "Pencil Sketch",
                          "Gargoyle",
                          "Ink Bottle",
                          "Marble Chesspieces",
                          "Coral",
                          "Solar Eclipse",
                          "Molten Beasts",
                          "Porcelain Nobles",
                          "Calligraphy",
                          "Paper Lantern",
                          "Sandstorm Gladiator",
                          "Insect",
                          "Wool Giant",
                          "Rusted Valor",
                          "Pharaoh",
                          "Paper Cut",
                          "Wax Museum",
                          "Blood Ink",
                          "Ink Samurai",
                          "Demon Hunter",
                          "Spirit Fox",
                          "Baroque",
                          "Clouds",
                          "Goblin Inventor",
                          "HK-47",
                          "Karl Marx",
                          "Da Vinci",
                          "Cracked Marble",
                          "Medieval Painting",
                          "Melted Wax",
                          "Socrates",
                          "Sumo Wrestler",
                          "Postapocalyptic",
                          "William Wallace",
                          "Leatherface",
                          "Regan MacNeil",
                          "Frieza",
                          "Cell",
                          "Sidewalk Chalk",
                          "Altair Ibn-La’Ahad",
                          "American Gothic",
                          "Aztec",
                          "Banzai",
                          "Beowulf",
                          "Boba Fett",
                          "Carl Fredricksen",
                          "Carnage",
                          "Cheetah",
                          "Portal",
                          "Chewbacca",
                          "Thor",
                          "Chucky",
                          "Cinderella",
                          "The Witcher",
                          "Cursed Samurai",
                          "Deathstroke",
                          "Dieselpunk",
                          "Din Djarin",
                          "Donald Duck",
                          "Edward Elric",
                          "Joy vs. Anger",
                          "Gandalf",
                          "Native American",
                          "Ghost Rider",
                          "Gimli",
                          "Girl with Pearl Earring",
                          "GLaDOS",
                          "Hades (Disney)",
                          "Han Solo",
                          "Hellboy",
                          "Japanese Raijin",
                          "Japanese Susanoo",
                          "Jarvan",
                          "Levi Ackerman",
                          "John Darling",
                          "Fury Road",
                          "Maestro Hulk",
                          "Man Bat",
                          "Mike Wazowski",
                          "Minotaur King",
                          "Wukong",
                          "Robin Hood",
                          "Samus",
                          "Sarah Kerrigan",
                          "Shadow Phoenix",
                          "Simón Bolívar",
                          "The Flash",
                          "Leprechaun",
                          "The Thinker",
                          "Thrall",
                          "Tree Ent King",
                          "Alien",
                          "Erron Black",
                          "3D Render",
                          "Airbender",
                          "Android",
                          "Anime Warrior",
                          "Armored Knight",
                          "Assassin's Creed",
                          "Avatar",
                          "Black Spiderman",
                          "Bold Anime",
                          "Celestial Skin",
                          "Chinese Swordsmen",
                          "Cyberpunk",
                          "Cypher",
                          "Dark Fantasy",
                          "Future Bot",
                          "Futuristic Fantasy",
                          "Ghibli Anime",
                          "Gundam",
                          "Illustration",
                          "Ink",
                          "Ink Poster",
                          "Jinx",
                          "Knight",
                          "Link",
                          "Marble",
                          "Mech",
                          "Naruto",
                          "Neon Dream",
                          "No Art Style",
                          "Oil Painting",
                          "On Fire",
                          "Painterly Anime",
                          "Pixar",
                          "Power Armor",
                          "Power Ranger",
                          "Radiant Anime",
                          "Realistic Anime",
                          "Realistic Pixar",
                          "Retro Anime",
                          "Samurai Bot",
                          "Sharp Anime",
                          "Soft Anime",
                          "Starfield",
                          "The Void",
                          "Tomb Raider",
                          "Underwater",
                          "Van Gogh",
                          "Viking",
                          "Western Anime",
                          "Wu Kong",
                          "Wuxia Anime",
                          "Zelda"
                        ],
                        "example": "3D Render",
                        "type": "string"
                      },
                      "model": {
                        "default": "default",
                        "description": "* `Dreamshaper` - a good all-around model that works for both animations as well as realism.\n* `Absolute Reality` - better at realism, but you'll often get similar results with Dreamshaper as well.\n* `Flat 2D Anime` - best for a flat illustration style that's common in most anime.\n* `Default` - the v3 model.\n* `default` - use the default recommended model for the selected art style.",
                        "enum": [
                          "Dreamshaper",
                          "Absolute Reality",
                          "Flat 2D Anime",
                          "Soft Anime",
                          "Kaywaii",
                          "Western Anime",
                          "3D Anime",
                          "Default",
                          "default"
                        ],
                        "example": "default",
                        "type": "string",
                        "x-sideko-enum-names": {
                          "Default": "DefaultV3",
                          "default": "Default"
                        }
                      },
                      "prompt": {
                        "description": "The prompt used for the video. Prompt is required if `prompt_type` is `custom` or `append_default`. If `prompt_type` is `default`, then the `prompt` value passed will be ignored.",
                        "example": "A cinematic scene with warm lighting",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "prompt_type": {
                        "default": "default",
                        "description": "`default` uses the art style's preset prompt and ignores `prompt`. `custom` uses the supplied `prompt`; v1 still adds its LoRA prompt to apply the art style. `append_default` appends the preset prompt to the supplied `prompt`.",
                        "enum": [
                          "default",
                          "custom",
                          "append_default"
                        ],
                        "example": "default",
                        "type": "string"
                      },
                      "version": {
                        "default": "default",
                        "description": "* `v1` - more detail, closer prompt adherence, and frame-by-frame previews.\n* `v2` - faster, more consistent, and less noisy.\n* `v3` - consistent styling guided by a caller-supplied reference image. Requires assets.initial_image_path and positive width/height.\n* `default` - use the selected art style's default version, including v3.",
                        "enum": [
                          "v1",
                          "v2",
                          "v3",
                          "default"
                        ],
                        "example": "default",
                        "type": "string"
                      }
                    },
                    "required": [
                      "art_style"
                    ],
                    "type": "object"
                  },
                  "width": {
                    "description": "Source video width in integer pixels. Required and positive for v3; ignored for v1/v2.",
                    "example": 1024,
                    "type": [
                      "integer",
                      "null"
                    ]
                  }
                },
                "required": [
                  "start_seconds",
                  "end_seconds",
                  "style",
                  "assets"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the video. If the status is not 'complete', this value is an estimate and may be adjusted upon completion based on the actual FPS of the output video. \n\nIf video generation fails, credits will be refunded, and this field will be updated to include the refund.",
                    "example": 450,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the video. Use it with the [Get video Project API](https://docs.magichour.ai/api-reference/video-projects/get-video-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Restyle video"
              }
            },
            {
              "name": "get_image_project",
              "title": "Get image project",
              "description": "Returns an image project's status and, once complete, its download URLs. Use to check progress with the id from an image create tool. Read-only.",
              "inputSchema": {
                "properties": {
                  "id": {
                    "description": "Unique ID of the image project. This value is returned by all of the POST APIs that create an image.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "created_at": {
                    "format": "date-time",
                    "type": "string"
                  },
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the image. We charge credits right when the request is made. \n\nIf an error occurred while generating the image(s), credits will be refunded and this field will be updated to include the refund.",
                    "example": 5,
                    "type": "integer"
                  },
                  "downloads": {
                    "items": {
                      "description": "The download url and expiration date of the image project",
                      "properties": {
                        "expires_at": {
                          "example": "2024-10-19T05:16:19.027Z",
                          "format": "date-time",
                          "type": "string"
                        },
                        "url": {
                          "example": "https://videos.magichour.ai/id/output.png",
                          "format": "uri",
                          "type": "string"
                        }
                      },
                      "required": [
                        "url",
                        "expires_at"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "enabled": {
                    "description": "Whether this resource is active. If false, it is deleted.",
                    "type": "boolean"
                  },
                  "error": {
                    "description": "In the case of an error, this object will contain the error encountered during video render",
                    "properties": {
                      "code": {
                        "description": "An error code to indicate why a failure happened.",
                        "example": "no_source_face",
                        "type": "string"
                      },
                      "message": {
                        "description": "Details on the reason why a failure happened.",
                        "example": "Please use an image with a detectable face",
                        "type": "string"
                      }
                    },
                    "required": [
                      "message",
                      "code"
                    ],
                    "type": [
                      "object",
                      "null"
                    ]
                  },
                  "id": {
                    "description": "Unique ID of the image. Use it with the [Get image Project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  },
                  "image_count": {
                    "description": "Number of images generated",
                    "example": 1,
                    "type": "integer"
                  },
                  "name": {
                    "description": "The name of the image.",
                    "example": "Example Name",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "status": {
                    "description": "The status of the image.\n\n- `draft` - the project was created but has not been submitted for rendering\n- `queued` - the job is waiting for an available server\n- `rendering` - the job is being processed; the `image.started` webhook event fires when rendering begins\n- `complete` - the job finished successfully; fires `image.completed`\n- `error` - the job failed during processing; fires `image.errored`\n- `canceled` - the job was manually canceled (for example from the Magic Hour web app)\n\n**Note:** `rendering`, `complete`, and `error` have matching webhook events; `canceled` does not - a canceled job emits no webhook event, so poll this endpoint to detect cancellation.",
                    "enum": [
                      "draft",
                      "queued",
                      "rendering",
                      "complete",
                      "error",
                      "canceled"
                    ],
                    "example": "complete",
                    "type": "string"
                  },
                  "type": {
                    "description": "The type of the image project. Possible values are FACE_EDITOR, AI_IMAGE_EDITOR, GENERATIVE_FILL, AI_SELFIE, AI_HEADSHOT, AI_INFLUENCER, AI_IMAGE, AI_MEME, CLOTHES_CHANGER, BACKGROUND_REMOVER, FACE_SWAP, IMAGE_UPSCALER, IMAGE_ENHANCER, AI_GIF, QR_CODE, PHOTO_EDITOR, PHOTO_COLORIZER, IMAGE_COLOR_GRADER, HEAD_SWAP, BODY_SWAP, STORYBOARD, IMAGE_EXPANDER",
                    "example": "AI_IMAGE",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "name",
                  "status",
                  "image_count",
                  "type",
                  "created_at",
                  "enabled",
                  "credits_charged",
                  "downloads",
                  "error"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Get image project"
              }
            },
            {
              "name": "delete_image_project",
              "title": "Delete image project",
              "description": "Deletes the image project and attempts to delete its completed output. Cannot be undone; confirm with the user first.",
              "inputSchema": {
                "properties": {
                  "id": {
                    "description": "Unique ID of the image project. This value is returned by all of the POST APIs that create an image.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Delete image project"
              }
            },
            {
              "name": "change_clothes_in_photo",
              "title": "Change clothes in photo",
              "description": "Use only with the user's own likeness or content they are authorized to use. Do not use for impersonation, deception, sexual content, or content involving minors.\n\nChanges clothing in a person photo using a supplied garment reference image. Costs 25 credits. Starts a background job; returns a project id for wait_for_image_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable. For attached ChatGPT files, upload with upload_chatgpt_media and pass its returned file_path. Reuse existing Magic Hour paths only from the connected account. Do not pass a filename, chat-local path or file ID as a file path.",
              "inputSchema": {
                "properties": {
                  "assets": {
                    "description": "Provide the assets for clothes changer",
                    "properties": {
                      "garment_file_path": {
                        "description": "The image of the outfit. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/outfit.png",
                        "minLength": 1,
                        "type": "string"
                      },
                      "garment_type": {
                        "description": "Type of clothing item to swap. If not provided, swaps the entire outfit. \n* `upper_body` - for shirts/jackets \n* `lower_body` - for pants/skirts \n* `dresses` - for entire outfit (deprecated, use `entire_outfit` instead) \n* `entire_outfit` - for entire outfit",
                        "enum": [
                          "entire_outfit",
                          "upper_body",
                          "lower_body",
                          "dresses"
                        ],
                        "example": "entire_outfit",
                        "type": "string"
                      },
                      "person_file_path": {
                        "description": "The image with the person. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/model.png",
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "person_file_path",
                      "garment_file_path"
                    ],
                    "type": "object"
                  },
                  "name": {
                    "default": "Clothes Changer - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Clothes Changer image",
                    "type": "string"
                  }
                },
                "required": [
                  "assets"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the image. We charge credits right when the request is made. \n\nIf an error occurred while generating the image(s), credits will be refunded and this field will be updated to include the refund.",
                    "example": 25,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the image. Use it with the [Get image Project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Change clothes in photo"
              }
            },
            {
              "name": "edit_face_in_photo",
              "title": "Edit face in photo",
              "description": "Adjusts facial expression, pose and gaze in a supplied photo using numeric controls. Costs 1 credit per edit; output size depends on the subscription tier. Starts a background job; returns a project id for wait_for_image_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable. For attached ChatGPT files, upload with upload_chatgpt_media and pass its returned file_path. Reuse existing Magic Hour paths only from the connected account. Do not pass a filename, chat-local path or file ID as a file path.",
              "inputSchema": {
                "properties": {
                  "assets": {
                    "description": "Provide the assets for face editor",
                    "properties": {
                      "image_file_path": {
                        "description": "This is the image whose face will be edited. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.png",
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "image_file_path"
                    ],
                    "type": "object"
                  },
                  "name": {
                    "default": "Face Editor - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Face Editor image",
                    "type": "string"
                  },
                  "style": {
                    "description": "Face editing parameters",
                    "properties": {
                      "enhance_face": {
                        "default": false,
                        "description": "Enhance face features",
                        "example": false,
                        "type": "boolean"
                      },
                      "eye_gaze_horizontal": {
                        "default": 0,
                        "description": "Horizontal eye gaze (-100 to 100), in increments of 5",
                        "example": 0,
                        "maximum": 100,
                        "minimum": -100,
                        "multipleOf": 5,
                        "type": "number"
                      },
                      "eye_gaze_vertical": {
                        "default": 0,
                        "description": "Vertical eye gaze (-100 to 100), in increments of 5",
                        "example": 0,
                        "maximum": 100,
                        "minimum": -100,
                        "multipleOf": 5,
                        "type": "number"
                      },
                      "eye_open_ratio": {
                        "default": 0,
                        "description": "Eye open ratio (-100 to 100), in increments of 5",
                        "example": 0,
                        "maximum": 100,
                        "minimum": -100,
                        "multipleOf": 5,
                        "type": "number"
                      },
                      "eyebrow_direction": {
                        "default": 0,
                        "description": "Eyebrow direction (-100 to 100), in increments of 5",
                        "example": 0,
                        "maximum": 100,
                        "minimum": -100,
                        "multipleOf": 5,
                        "type": "number"
                      },
                      "head_pitch": {
                        "default": 0,
                        "description": "Head pitch (-100 to 100), in increments of 5",
                        "example": 0,
                        "maximum": 100,
                        "minimum": -100,
                        "multipleOf": 5,
                        "type": "number"
                      },
                      "head_roll": {
                        "default": 0,
                        "description": "Head roll (-100 to 100), in increments of 5",
                        "example": 0,
                        "maximum": 100,
                        "minimum": -100,
                        "multipleOf": 5,
                        "type": "number"
                      },
                      "head_yaw": {
                        "default": 0,
                        "description": "Head yaw (-100 to 100), in increments of 5",
                        "example": 0,
                        "maximum": 100,
                        "minimum": -100,
                        "multipleOf": 5,
                        "type": "number"
                      },
                      "lip_open_ratio": {
                        "default": 0,
                        "description": "Lip open ratio (-100 to 100), in increments of 5",
                        "example": 0,
                        "maximum": 100,
                        "minimum": -100,
                        "multipleOf": 5,
                        "type": "number"
                      },
                      "mouth_grim": {
                        "default": 0,
                        "description": "Mouth grim (-100 to 100), in increments of 5",
                        "example": 0,
                        "maximum": 100,
                        "minimum": -100,
                        "multipleOf": 5,
                        "type": "number"
                      },
                      "mouth_position_horizontal": {
                        "default": 0,
                        "description": "Horizontal mouth position (-100 to 100), in increments of 5",
                        "example": 0,
                        "maximum": 100,
                        "minimum": -100,
                        "multipleOf": 5,
                        "type": "number"
                      },
                      "mouth_position_vertical": {
                        "default": 0,
                        "description": "Vertical mouth position (-100 to 100), in increments of 5",
                        "example": 0,
                        "maximum": 100,
                        "minimum": -100,
                        "multipleOf": 5,
                        "type": "number"
                      },
                      "mouth_pout": {
                        "default": 0,
                        "description": "Mouth pout (-100 to 100), in increments of 5",
                        "example": 0,
                        "maximum": 100,
                        "minimum": -100,
                        "multipleOf": 5,
                        "type": "number"
                      },
                      "mouth_purse": {
                        "default": 0,
                        "description": "Mouth purse (-100 to 100), in increments of 5",
                        "example": 0,
                        "maximum": 100,
                        "minimum": -100,
                        "multipleOf": 5,
                        "type": "number"
                      },
                      "mouth_smile": {
                        "default": 0,
                        "description": "Mouth smile (-100 to 100), in increments of 5",
                        "example": 0,
                        "maximum": 100,
                        "minimum": -100,
                        "multipleOf": 5,
                        "type": "number"
                      }
                    },
                    "type": "object"
                  }
                },
                "required": [
                  "assets",
                  "style"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the image. We charge credits right when the request is made. \n\nIf an error occurred while generating the image(s), credits will be refunded and this field will be updated to include the refund.",
                    "example": 1,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the image. Use it with the [Get image Project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Edit face in photo"
              }
            },
            {
              "name": "create_gif_or_short_video",
              "title": "Create GIF or short video",
              "description": "Generates a short animation from a text prompt, with GIF, MP4 or WebM output. Costs 50 credits. Starts a background job; returns a project id for wait_for_image_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable.",
              "inputSchema": {
                "properties": {
                  "name": {
                    "default": "Ai Gif - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Ai Gif gif",
                    "type": "string"
                  },
                  "output_format": {
                    "default": "gif",
                    "description": "The output file format for the generated animation.",
                    "enum": [
                      "gif",
                      "mp4",
                      "webm"
                    ],
                    "example": "gif",
                    "type": "string"
                  },
                  "style": {
                    "description": "Text instructions for the animation's subject, appearance and motion.",
                    "properties": {
                      "prompt": {
                        "description": "The prompt used for the GIF.",
                        "example": "Cute dancing cat, pixel art",
                        "maxLength": 500,
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "prompt"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "style"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the image. We charge credits right when the request is made. \n\nIf an error occurred while generating the image(s), credits will be refunded and this field will be updated to include the refund.",
                    "example": 50,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the image. Use it with the [Get image Project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Create GIF or short video"
              }
            },
            {
              "name": "edit_image",
              "title": "Edit image",
              "description": "Edits one or more supplied images using a text prompt. For prompt-only creation use generate_image. Costs credits; returns a project id for wait_for_image_project. Model eligibility depends on the account plan. Read get_account_info first; do not assume an API default is eligible. For a Free account with no requested model, flux-2-klein at 640px with image_count=1 is an available option when it supports the supplied inputs and requested edit. Check the current model's input limits; never drop references or change an explicit model, resolution or count to fit this option. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable. For attached ChatGPT files, upload with upload_chatgpt_media and pass its returned file_path. Reuse existing Magic Hour paths only from the connected account. Do not pass a filename, chat-local path or file ID as a file path.",
              "inputSchema": {
                "properties": {
                  "aspect_ratio": {
                    "description": "The aspect ratio of the output image(s). If not specified, defaults to `auto`.",
                    "enum": [
                      "auto",
                      "16:9",
                      "9:16",
                      "4:3",
                      "3:2",
                      "1:1",
                      "4:5",
                      "2:3"
                    ],
                    "example": "1:1",
                    "type": "string"
                  },
                  "assets": {
                    "description": "Provide the assets for image edit",
                    "properties": {
                      "image_file_paths": {
                        "description": "The image(s) used in the edit, maximum of 10 images. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": [
                          "api-assets/id/1234.png",
                          "api-assets/id/1235.png"
                        ],
                        "items": {
                          "minLength": 1,
                          "type": "string"
                        },
                        "maxItems": 10,
                        "type": "array"
                      }
                    },
                    "type": "object"
                  },
                  "image_count": {
                    "default": 1,
                    "description": "Number of images to generate. Maximum varies by model. Defaults to 1 if not specified.",
                    "enum": [
                      1,
                      4,
                      9,
                      16
                    ],
                    "example": 1,
                    "type": "number"
                  },
                  "model": {
                    "description": "The AI model to use for image editing. Each model has different capabilities and costs.\n\n**Models:**\n- `default` - Uses the server-selected default model, which may change over time.\n- `flux-2-klein` - from 5 credits/image\n  - Supported resolutions: 640px, 1k, 2k\n  - Available for tiers: free, creator, pro, business\n  - Max additional input images: 5\n- `gpt-image-2` - from 50 credits/image\n  - Supported resolutions: 640px, 1k, 2k, 4k\n  - Available for tiers: creator, pro, business\n  - Max additional input images: 9\n- `gpt-image-2.5-flare` - from 100 credits/image\n  - Supported resolutions: 640px, 1k, 2k, 4k\n  - Available for tiers: creator, pro, business\n  - Max additional input images: 9\n- `krea-2` - from 10 credits/image\n  - Supported resolutions: 640px, 1k\n  - Available for tiers: free, creator, pro, business\n  - Max additional input images: 1\n- `nano-banana` - from 50 credits/image\n  - Supported resolutions: 640px, 1k\n  - Available for tiers: creator, pro, business\n  - Max additional input images: 9\n- `nano-banana-2-lite` - from 50 credits/image\n  - Supported resolutions: 640px, 1k\n  - Available for tiers: creator, pro, business\n  - Max additional input images: 9\n- `nano-banana-2.1` - from 50 credits/image\n  - Supported resolutions: 640px, 1k, 2k, 4k\n  - Available for tiers: creator, pro, business\n  - Max additional input images: 9\n- `nano-banana-pro` - from 150 credits/image\n  - Supported resolutions: 1k, 2k, 4k\n  - Available for tiers: creator, pro, business\n  - Max additional input images: 9\n- `qwen-edit` - from 10 credits/image\n  - Supported resolutions: 640px, 1k, 2k\n  - Available for tiers: free, creator, pro, business\n  - Max additional input images: 2\n- `qwen-image-2.1` - from 10 credits/image\n  - Supported resolutions: 640px, 1k, 2k\n  - Available for tiers: free, creator, pro, business\n  - Max additional input images: 2\n- `seedream-v4` - from 40 credits/image\n  - Supported resolutions: 640px, 1k, 2k, 4k\n  - Available for tiers: creator, pro, business\n  - Max additional input images: 9\n- `seedream-v4.5` - from 50 credits/image\n  - Supported resolutions: 640px, 1k, 2k, 4k\n  - Available for tiers: creator, pro, business\n  - Max additional input images: 9\n- `seedream-v5-pro` - from 75 credits/image\n  - Supported resolutions: 640px, 1k, 2k\n  - Available for tiers: creator, pro, business\n  - Max additional input images: 9\n",
                    "enum": [
                      "default",
                      "qwen-image-2.1",
                      "gpt-image-2",
                      "flux-2-klein",
                      "nano-banana-pro",
                      "seedream-v5-pro",
                      "seedream-v4.5",
                      "nano-banana-2.1",
                      "qwen-edit",
                      "nano-banana-2-lite",
                      "krea-2",
                      "gpt-image-2.5-flare",
                      "seedream-v4",
                      "nano-banana",
                      "nano-banana-2"
                    ],
                    "example": "flux-2-klein",
                    "type": "string"
                  },
                  "name": {
                    "default": "Ai Image Editor - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Ai Image Editor image",
                    "type": "string"
                  },
                  "resolution": {
                    "description": "Maximum resolution (longest edge) for the output image.\n\n**Options:**\n- `640px` — up to 640px\n- `1k` — up to 1024px\n- `2k` — up to 2048px\n- `4k` — up to 4096px\n- `auto` — **Deprecated.** Mapped server-side from your subscription tier to the best matching resolution the model supports\n\n**Per-model support:**\n- `flux-2-klein` - 640px, 1k, 2k\n- `gpt-image-2` - 640px, 1k, 2k, 4k\n- `gpt-image-2.5-flare` - 640px, 1k, 2k, 4k\n- `krea-2` - 640px, 1k\n- `nano-banana` - 640px, 1k\n- `nano-banana-2-lite` - 640px, 1k\n- `nano-banana-2.1` - 640px, 1k, 2k, 4k\n- `nano-banana-pro` - 1k, 2k, 4k\n- `qwen-edit` - 640px, 1k, 2k\n- `qwen-image-2.1` - 640px, 1k, 2k\n- `seedream-v4` - 640px, 1k, 2k, 4k\n- `seedream-v4.5` - 640px, 1k, 2k, 4k\n- `seedream-v5-pro` - 640px, 1k, 2k\n\nNote: Resolution availability depends on the model and your subscription tier.",
                    "enum": [
                      "auto",
                      "640px",
                      "1k",
                      "2k",
                      "4k"
                    ],
                    "example": "640px",
                    "type": "string"
                  },
                  "style": {
                    "description": "Text instructions describing the edits to make to the supplied images.",
                    "properties": {
                      "prompt": {
                        "description": "The prompt used to edit the image.",
                        "example": "Give me sunglasses",
                        "maxLength": 15000,
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "prompt"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "style",
                  "assets"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the image. We charge credits right when the request is made. \n\nIf an error occurred while generating the image(s), credits will be refunded and this field will be updated to include the refund.",
                    "example": 5,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the image. Use it with the [Get image Project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Edit image"
              }
            },
            {
              "name": "generate_headshot",
              "title": "Generate headshot",
              "description": "Creates a headshot from a supplied photo containing one detectable face, with optional appearance instructions. Costs 50 credits. Starts a background job; returns a project id for wait_for_image_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable. For attached ChatGPT files, upload with upload_chatgpt_media and pass its returned file_path. Reuse existing Magic Hour paths only from the connected account. Do not pass a filename, chat-local path or file ID as a file path.",
              "inputSchema": {
                "properties": {
                  "assets": {
                    "description": "Provide the assets for headshot photo",
                    "properties": {
                      "image_file_path": {
                        "description": "The image used to generate the headshot. This image must contain one detectable face. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.png",
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "image_file_path"
                    ],
                    "type": "object"
                  },
                  "name": {
                    "default": "Ai Headshot - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Ai Headshot image",
                    "type": "string"
                  },
                  "style": {
                    "description": "Optional headshot appearance instructions. Omit the prompt for the API's default style.",
                    "properties": {
                      "prompt": {
                        "description": "Prompt used to guide the style of your headshot. We recommend omitting the prompt unless you want to customize your headshot. You can visit [AI headshot generator](https://magichour.ai/create/ai-headshot-generator) to view an example of a good prompt used for our 'Professional' style.",
                        "example": "Professional studio headshot with soft lighting and a neutral background",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  }
                },
                "required": [
                  "assets"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the image. We charge credits right when the request is made. \n\nIf an error occurred while generating the image(s), credits will be refunded and this field will be updated to include the refund.",
                    "example": 50,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the image. Use it with the [Get image Project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Generate headshot"
              }
            },
            {
              "name": "generate_image",
              "title": "Generate image",
              "description": "Generates one or more images from a text prompt, with model, output size and image count options. Costs credits; returns a project id for wait_for_image_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable.",
              "inputSchema": {
                "properties": {
                  "aspect_ratio": {
                    "description": "The aspect ratio of the output image(s). If not specified, defaults to `1:1` (square).",
                    "enum": [
                      "1:1",
                      "16:9",
                      "9:16"
                    ],
                    "example": "1:1",
                    "type": "string"
                  },
                  "image_count": {
                    "description": "Number of images to generate. Maximum varies by model.",
                    "example": 1,
                    "maximum": 16,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "model": {
                    "description": "When the user has not requested a model, use `default` rather than selecting a premium model. Preserve an explicit model. The AI model to use for image generation. Each model has different capabilities and costs.\n\n**Models:**\n- `default` - Uses the server-selected default model, which may change over time.\n- `flux-2-klein` - from 5 credits/image\n  - Supported resolutions: 640px, 1k, 2k\n  - Available for tiers: free, creator, pro, business\n  - Image count allowed: 1\n- `flux-schnell` - from 5 credits/image\n  - Supported resolutions: 640px, 1k, 2k\n  - Available for tiers: free, creator, pro, business\n  - Image count allowed: 1, 2, 3, 4\n- `gpt-image-2` - from 50 credits/image\n  - Supported resolutions: 640px, 1k, 2k, 4k\n  - Available for tiers: creator, pro, business\n  - Image count allowed: 1, 2, 3, 4\n- `gpt-image-2.5-flare` - from 100 credits/image\n  - Supported resolutions: 640px, 1k, 2k, 4k\n  - Available for tiers: creator, pro, business\n  - Image count allowed: 1, 2, 3, 4\n- `krea-2` - from 10 credits/image\n  - Supported resolutions: 640px, 1k\n  - Available for tiers: free, creator, pro, business\n  - Image count allowed: 1\n- `nano-banana` - from 50 credits/image\n  - Supported resolutions: 640px, 1k\n  - Available for tiers: creator, pro, business\n  - Image count allowed: 1, 2, 3, 4\n- `nano-banana-2-lite` - from 50 credits/image\n  - Supported resolutions: 640px, 1k\n  - Available for tiers: creator, pro, business\n  - Image count allowed: 1, 2, 3, 4\n- `nano-banana-2.1` - from 50 credits/image\n  - Supported resolutions: 640px, 1k, 2k, 4k\n  - Available for tiers: creator, pro, business\n  - Image count allowed: 1, 4, 9, 16\n- `nano-banana-pro` - from 150 credits/image\n  - Supported resolutions: 1k, 2k, 4k\n  - Available for tiers: creator, pro, business\n  - Image count allowed: 1, 4, 9, 16\n- `qwen-image-2.1` - from 10 credits/image\n  - Supported resolutions: 640px, 1k, 2k\n  - Available for tiers: free, creator, pro, business\n  - Image count allowed: 1, 2, 3, 4\n- `seedream-v4` - from 40 credits/image\n  - Supported resolutions: 640px, 1k, 2k, 4k\n  - Available for tiers: creator, pro, business\n  - Image count allowed: 1, 2, 3, 4\n- `seedream-v4.5` - from 50 credits/image\n  - Supported resolutions: 640px, 1k, 2k, 4k\n  - Available for tiers: creator, pro, business\n  - Image count allowed: 1, 2, 3, 4\n- `seedream-v5-pro` - from 75 credits/image\n  - Supported resolutions: 640px, 1k, 2k\n  - Available for tiers: creator, pro, business\n  - Image count allowed: 1, 2, 3, 4\n- `z-image-turbo` - from 5 credits/image\n  - Supported resolutions: 640px, 1k, 2k\n  - Available for tiers: free, creator, pro, business\n  - Image count allowed: 1, 2, 3, 4\n\n**Deprecated Enum Values:**\n- `seedream` - Use `seedream-v4` instead.\n",
                    "enum": [
                      "default",
                      "z-image-turbo",
                      "gpt-image-2",
                      "qwen-image-2.1",
                      "flux-2-klein",
                      "nano-banana-2.1",
                      "nano-banana-pro",
                      "krea-2",
                      "seedream-v5-pro",
                      "seedream-v4.5",
                      "nano-banana-2-lite",
                      "gpt-image-2.5-flare",
                      "seedream-v4",
                      "nano-banana",
                      "flux-schnell",
                      "seedream",
                      "nano-banana-2"
                    ],
                    "example": "z-image-turbo",
                    "type": "string"
                  },
                  "name": {
                    "default": "Ai Image - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Ai Image image",
                    "type": "string"
                  },
                  "resolution": {
                    "default": "auto",
                    "description": "Maximum resolution (longest edge) for the output image.\n\n**Options:**\n- `640px` — up to 640px\n- `1k` — up to 1024px\n- `2k` — up to 2048px\n- `4k` — up to 4096px\n- `auto` — **Deprecated.** Mapped server-side from your subscription tier to the best matching resolution the model supports\n\n**Per-model support:**\n- `flux-2-klein` - 640px, 1k, 2k\n- `flux-schnell` - 640px, 1k, 2k\n- `gpt-image-2` - 640px, 1k, 2k, 4k\n- `gpt-image-2.5-flare` - 640px, 1k, 2k, 4k\n- `krea-2` - 640px, 1k\n- `nano-banana` - 640px, 1k\n- `nano-banana-2-lite` - 640px, 1k\n- `nano-banana-2.1` - 640px, 1k, 2k, 4k\n- `nano-banana-pro` - 1k, 2k, 4k\n- `qwen-image-2.1` - 640px, 1k, 2k\n- `seedream-v4` - 640px, 1k, 2k, 4k\n- `seedream-v4.5` - 640px, 1k, 2k, 4k\n- `seedream-v5-pro` - 640px, 1k, 2k\n- `z-image-turbo` - 640px, 1k, 2k\n\nNote: Resolution availability depends on the model and your subscription tier.",
                    "enum": [
                      "auto",
                      "640px",
                      "1k",
                      "2k",
                      "4k"
                    ],
                    "example": "640px",
                    "type": "string"
                  },
                  "style": {
                    "description": "The art style to use for image generation.",
                    "properties": {
                      "prompt": {
                        "description": "The prompt used for the image(s).",
                        "example": "Cool image",
                        "minLength": 1,
                        "type": "string"
                      },
                      "tool": {
                        "default": "general",
                        "description": "The art style to use for image generation. Defaults to 'general' if not provided.",
                        "enum": [
                          "ai-anime-generator",
                          "ai-art-generator",
                          "ai-background-generator",
                          "ai-character-generator",
                          "ai-face-generator",
                          "ai-fashion-generator",
                          "ai-icon-generator",
                          "ai-illustration-generator",
                          "ai-interior-design-generator",
                          "ai-landscape-generator",
                          "ai-logo-generator",
                          "ai-manga-generator",
                          "ai-outfit-generator",
                          "ai-pattern-generator",
                          "ai-photo-generator",
                          "ai-sketch-generator",
                          "ai-tattoo-generator",
                          "album-cover-generator",
                          "animated-characters-generator",
                          "architecture-generator",
                          "book-cover-generator",
                          "comic-book-generator",
                          "dark-fantasy-ai",
                          "disney-ai-generator",
                          "dnd-ai-art-generator",
                          "emoji-generator",
                          "fantasy-map-generator",
                          "graffiti-generator",
                          "movie-poster-generator",
                          "optical-illusion-generator",
                          "pokemon-generator",
                          "south-park-character-generator",
                          "superhero-generator",
                          "thumbnail-maker",
                          "general"
                        ],
                        "example": "ai-anime-generator",
                        "type": "string"
                      }
                    },
                    "required": [
                      "prompt"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "image_count",
                  "style"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the image. We charge credits right when the request is made. \n\nIf an error occurred while generating the image(s), credits will be refunded and this field will be updated to include the refund.",
                    "example": 5,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the image. Use it with the [Get image Project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Generate image"
              }
            },
            {
              "name": "upscale_image",
              "title": "Upscale image",
              "description": "Upscales a supplied image 2x or 4x. Cost depends on scale and mode (25-200 credits); returns a project id for wait_for_image_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable. For attached ChatGPT files, upload with upload_chatgpt_media and pass its returned file_path. Reuse existing Magic Hour paths only from the connected account. Do not pass a filename, chat-local path or file ID as a file path.",
              "inputSchema": {
                "properties": {
                  "assets": {
                    "description": "Provide the assets for upscaling",
                    "properties": {
                      "image_file_path": {
                        "description": "The image to upscale. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n. The maximum input image size is 4096x4096px.",
                        "example": "api-assets/id/1234.png",
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "image_file_path"
                    ],
                    "type": "object"
                  },
                  "name": {
                    "default": "Image Upscaler - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Image Upscaler image",
                    "type": "string"
                  },
                  "scale_factor": {
                    "description": "How much to scale the image. Must be either 2 or 4.\n            \nNote: 4x upscale is only available on Creator, Pro, or Business tier.",
                    "example": 2,
                    "type": "number"
                  },
                  "style": {
                    "default": {},
                    "description": "Style settings for the upscale. Use `mode` (`\"preserve\"`, `\"balanced\"`, or `\"creative\"`). Defaults to `\"balanced\"`.",
                    "example": {
                      "mode": "preserve"
                    },
                    "properties": {
                      "mode": {
                        "description": "The upscaling mode. `\"preserve\"` uses the fast pro pipeline (1× credit multiplier). `\"balanced\"` and `\"creative\"` use the creative pipeline (2× credit multiplier). `\"pro\"` is deprecated and maps to `\"preserve\"`. Defaults to `\"balanced\"`.",
                        "enum": [
                          "pro",
                          "preserve",
                          "balanced",
                          "creative"
                        ],
                        "example": "preserve",
                        "type": "string"
                      },
                      "prompt": {
                        "description": "A prompt to guide the final image. Only used when mode is `creative`.",
                        "example": "Enhance fine details and keep the image natural",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  }
                },
                "required": [
                  "scale_factor",
                  "assets"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the image. We charge credits right when the request is made. \n\nIf an error occurred while generating the image(s), credits will be refunded and this field will be updated to include the refund.",
                    "example": 25,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the image. Use it with the [Get image Project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Upscale image"
              }
            },
            {
              "name": "create_meme",
              "title": "Create meme",
              "description": "Creates a meme from a topic and template selection. Costs 10 credits. Starts a background job; returns a project id for wait_for_image_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable.",
              "inputSchema": {
                "properties": {
                  "name": {
                    "description": "The name of the meme.",
                    "example": "My Funny Meme",
                    "type": "string"
                  },
                  "style": {
                    "description": "Meme topic, template and whether to search the web for content.",
                    "properties": {
                      "searchWeb": {
                        "default": false,
                        "description": "Whether to search the web for meme content.",
                        "example": false,
                        "type": "boolean"
                      },
                      "template": {
                        "description": "To use our templates, pass in one of the enum values.",
                        "enum": [
                          "Random",
                          "Drake Hotline Bling",
                          "Galaxy Brain",
                          "Two Buttons",
                          "Gru's Plan",
                          "Tuxedo Winnie The Pooh",
                          "Is This a Pigeon",
                          "Panik Kalm Panik",
                          "Disappointed Guy",
                          "Waiting Skeleton",
                          "Bike Fall",
                          "Change My Mind",
                          "Side Eyeing Chloe",
                          "Woman Yelling at a Cat",
                          "Success Kid",
                          "One Does Not Simply",
                          "Bad Luck Brian",
                          "Futurama Fry",
                          "Ancient Aliens",
                          "Disaster Girl",
                          "Hide the Pain Harold",
                          "Distracted Boyfriend",
                          "Left Exit 12 Off Ramp",
                          "Running Away Balloon",
                          "Batman Slapping Robin",
                          "UNO Draw 25",
                          "Mocking SpongeBob",
                          "Boardroom Meeting Suggestion",
                          "X, X Everywhere",
                          "Buff Doge vs Cheems",
                          "Bernie Once Again Asking",
                          "Roll Safe Think About It",
                          "Blank Nut Button",
                          "Epic Handshake",
                          "Sad Pablo Escobar",
                          "Inhaling Seagull",
                          "Surprised Pikachu",
                          "Always Has Been",
                          "Scroll of Truth",
                          "Marked Safe From",
                          "Y'all Got Any More of That",
                          "Monkey Puppet",
                          "Oprah You Get A",
                          "They're the Same Picture",
                          "I Bet He's Thinking About Other Women",
                          "Evil Kermit",
                          "This Is Fine",
                          "This Is Where I'd Put My Trophy",
                          "Anakin Padme Four Panel",
                          "Who Killed Hannibal",
                          "Clown Applying Makeup",
                          "Trade Offer",
                          "Laughing Leo",
                          "Sleeping Shaq",
                          "Megamind Peeking",
                          "Grandma Finds the Internet",
                          "Doge",
                          "American Chopper Argument",
                          "First World Problems",
                          "Grumpy Cat",
                          "SpongeBob Ight Imma Head Out",
                          "But That's None of My Business",
                          "Creepy Condescending Wonka",
                          "Captain Picard Facepalm",
                          "Hard to Swallow Pills",
                          "Bell Curve",
                          "Absolute Cinema",
                          "You Guys Are Getting Paid",
                          "Types of Headaches",
                          "Mother Ignoring Kid Drowning in a Pool",
                          "Flex Tape",
                          "Spiderman Pointing at Spiderman",
                          "Charlie Conspiracy",
                          "Pawn Stars Best I Can Do",
                          "0 Days Without",
                          "Squidward Window",
                          "Where Monkey",
                          "Soldier Protecting Sleeping Child",
                          "They Don't Know",
                          "Spiderman Triple",
                          "Two Guys on a Bus",
                          "Imagination SpongeBob",
                          "All My Homies Hate",
                          "You Know I'm Something of a Scientist Myself",
                          "Anime Girl Hiding from Terminator",
                          "A Train Hitting a School Bus",
                          "AJ Styles and Undertaker",
                          "Three-Headed Dragon",
                          "Grant Gustin Over Grave",
                          "Whisper and Goosebumps",
                          "Scooby Doo Mask Reveal",
                          "Domino Effect",
                          "Two Paths",
                          "I'm the Captain Now",
                          "Say the Line Bart",
                          "Star Wars Yoda",
                          "Grim Reaper Knocking Door",
                          "Yo Dawg Heard You",
                          "Gus Fring We Are Not the Same",
                          "C'mon Do Something",
                          "Leonardo DiCaprio Cheers"
                        ],
                        "example": "Drake Hotline Bling",
                        "type": "string"
                      },
                      "topic": {
                        "description": "The topic of the meme.",
                        "example": "When the code finally works",
                        "maxLength": 200,
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "topic",
                      "template"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "style"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the image. We charge credits right when the request is made. \n\nIf an error occurred while generating the image(s), credits will be refunded and this field will be updated to include the refund.",
                    "example": 10,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the image. Use it with the [Get image Project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Create meme"
              }
            },
            {
              "name": "create_qr_code",
              "title": "Create QR code",
              "description": "Creates a stylized QR code from supplied text or a URL and an art-style description. Currently costs 0 credits. Starts a background job; returns a project id for wait_for_image_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable.",
              "inputSchema": {
                "properties": {
                  "content": {
                    "description": "The content of the QR code.",
                    "example": "https://magichour.ai",
                    "type": "string"
                  },
                  "name": {
                    "default": "Qr Code - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Qr Code image",
                    "type": "string"
                  },
                  "style": {
                    "description": "Visual art style for the QR code image.",
                    "properties": {
                      "art_style": {
                        "description": "To use our templates, pass in one of Watercolor, Cyberpunk City, Ink Landscape, Interior Painting, Japanese Street, Mech, Minecraft, Picasso Painting, Game Map, Spaceship, Chinese Painting, Winter Village, or pass any custom art style.",
                        "example": "Watercolor",
                        "type": "string"
                      }
                    },
                    "required": [
                      "art_style"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "content",
                  "style"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the image. We charge credits right when the request is made. \n\nIf an error occurred while generating the image(s), credits will be refunded and this field will be updated to include the refund.",
                    "example": 0,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the image. Use it with the [Get image Project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Create QR code"
              }
            },
            {
              "name": "place_person_in_scene",
              "title": "Place person in scene",
              "description": "Use only with the user's own likeness or content they are authorized to use. Do not use for impersonation, deception, sexual content, or content involving minors.\n\nPlaces a person from one supplied photo into a supplied scene image. Cost depends on resolution (from 50 credits at 640px); returns a project id for wait_for_image_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable. For attached ChatGPT files, upload with upload_chatgpt_media and pass its returned file_path. Reuse existing Magic Hour paths only from the connected account. Do not pass a filename, chat-local path or file ID as a file path.",
              "inputSchema": {
                "properties": {
                  "assets": {
                    "description": "Person image and scene image for body swap",
                    "properties": {
                      "person_file_path": {
                        "description": "Image of the person to place into the scene. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.png",
                        "minLength": 1,
                        "type": "string"
                      },
                      "scene_file_path": {
                        "description": "Original scene image (background). This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/5678.png",
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "person_file_path",
                      "scene_file_path"
                    ],
                    "type": "object"
                  },
                  "name": {
                    "default": "Body Swap - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Body Swap image",
                    "type": "string"
                  },
                  "resolution": {
                    "description": "Output resolution. Determines credits charged for the run.",
                    "enum": [
                      "640px",
                      "1k",
                      "2k",
                      "4k"
                    ],
                    "example": "640px",
                    "type": "string"
                  }
                },
                "required": [
                  "resolution",
                  "assets"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the image. We charge credits right when the request is made. \n\nIf an error occurred while generating the image(s), credits will be refunded and this field will be updated to include the refund.",
                    "example": 50,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the image. Use it with the [Get image Project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Place person in scene"
              }
            },
            {
              "name": "swap_face_in_photo",
              "title": "Swap face in photo",
              "description": "Use only with the user's own likeness or content they are authorized to use. Do not use for impersonation, deception, sexual content, or content involving minors.\n\nSwaps faces in a supplied photo using a source face image or selected face mappings. Costs 10 credits; output size depends on subscription. Returns a project id for wait_for_image_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable. For attached ChatGPT files, upload with upload_chatgpt_media and pass its returned file_path. Reuse existing Magic Hour paths only from the connected account. Do not pass a filename, chat-local path or file ID as a file path.",
              "inputSchema": {
                "properties": {
                  "assets": {
                    "description": "Provide the assets for face swap photo",
                    "example": {
                      "face_swap_mode": "all-faces",
                      "source_file_path": "api-assets/id/1234.png",
                      "target_file_path": "api-assets/id/1234.png"
                    },
                    "properties": {
                      "face_mappings": {
                        "description": "This is the array of face mappings used for multiple face swap. The value is required if `face_swap_mode` is `individual-faces`.",
                        "example": [
                          {
                            "new_face": "api-assets/id/1234.png",
                            "original_face": "api-assets/id/0-0.png"
                          }
                        ],
                        "items": {
                          "properties": {
                            "new_face": {
                              "description": "The face image that will be used to replace the face in the `original_face`. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                              "example": "api-assets/id/1234.png",
                              "type": "string"
                            },
                            "original_face": {
                              "description": "The face detected from the image in `target_file_path`. The file name is in the format of `\u003cface_frame\u003e-\u003cface_index\u003e.png`. This value is corresponds to the response in the [face detection API](https://docs.magichour.ai/api-reference/files/get-face-detection-details).\n\n* The face_frame is the frame number of the face in the target image. For images, the frame number is always 0.\n* The face_index is the index of the face in the target image, starting from 0 going left to right.",
                              "example": "api-assets/id/0-0.png",
                              "type": "string"
                            }
                          },
                          "required": [
                            "original_face",
                            "new_face"
                          ],
                          "type": "object"
                        },
                        "maxItems": 5,
                        "type": "array"
                      },
                      "face_swap_mode": {
                        "default": "all-faces",
                        "description": "Choose which faces to swap. `all-faces` uses one source image for all detected faces (`source_file_path` required). `individual-faces` uses exact `face_mappings`.",
                        "enum": [
                          "all-faces",
                          "individual-faces"
                        ],
                        "example": "all-faces",
                        "type": "string"
                      },
                      "source_file_path": {
                        "description": "This is the image from which the face is extracted. The value is required if `face_swap_mode` is `all-faces`.\n\nThis value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.png",
                        "minLength": 1,
                        "type": "string"
                      },
                      "target_file_path": {
                        "description": "This is the image where the face from the source image will be placed. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.png",
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "target_file_path"
                    ],
                    "type": "object"
                  },
                  "name": {
                    "default": "Face Swap - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Face Swap image",
                    "type": "string"
                  }
                },
                "required": [
                  "assets"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the image. We charge credits right when the request is made. \n\nIf an error occurred while generating the image(s), credits will be refunded and this field will be updated to include the refund.",
                    "example": 10,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the image. Use it with the [Get image Project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Swap face in photo"
              }
            },
            {
              "name": "swap_head_in_photo",
              "title": "Swap head in photo",
              "description": "Use only with the user's own likeness or content they are authorized to use. Do not use for impersonation, deception, sexual content, or content involving minors.\n\nSwaps a head from a supplied image onto a supplied body image. Costs 10 credits; returns a project id for wait_for_image_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable. For attached ChatGPT files, upload with upload_chatgpt_media and pass its returned file_path. Reuse existing Magic Hour paths only from the connected account. Do not pass a filename, chat-local path or file ID as a file path.",
              "inputSchema": {
                "properties": {
                  "assets": {
                    "description": "Provide the body and head images for head swap",
                    "properties": {
                      "body_file_path": {
                        "description": "Image that receives the swapped head. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.png",
                        "minLength": 1,
                        "type": "string"
                      },
                      "head_file_path": {
                        "description": "Image of the head to place on the body. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/5678.png",
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "body_file_path",
                      "head_file_path"
                    ],
                    "type": "object"
                  },
                  "max_resolution": {
                    "description": "Constrains the larger dimension (height or width) of the output. Omit to use the maximum allowed for your plan (capped at 2048px). Values above your plan maximum are clamped down to your plan's maximum.",
                    "example": 512,
                    "type": "integer"
                  },
                  "name": {
                    "default": "Head Swap - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Head Swap image",
                    "type": "string"
                  }
                },
                "required": [
                  "assets"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the image. We charge credits right when the request is made. \n\nIf an error occurred while generating the image(s), credits will be refunded and this field will be updated to include the refund.",
                    "example": 10,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the image. Use it with the [Get image Project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Swap head in photo"
              }
            },
            {
              "name": "remove_image_background",
              "title": "Remove image background",
              "description": "Removes an image's background, optionally replacing it with another supplied image. Costs 5 credits. Starts a background job; returns a project id for wait_for_image_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable. For attached ChatGPT files, upload with upload_chatgpt_media and pass its returned file_path. Reuse existing Magic Hour paths only from the connected account. Do not pass a filename, chat-local path or file ID as a file path.",
              "inputSchema": {
                "properties": {
                  "assets": {
                    "description": "Provide the assets for background removal",
                    "properties": {
                      "background_image_file_path": {
                        "description": "The image used as the new background for the image_file_path. This image will be resized to match the image in image_file_path. Please make sure the resolution between the images are similar.\n\nThis value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.png",
                        "type": "string"
                      },
                      "image_file_path": {
                        "description": "The image to remove the background. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.png",
                        "type": "string"
                      }
                    },
                    "required": [
                      "image_file_path"
                    ],
                    "type": "object"
                  },
                  "name": {
                    "default": "Background Remover - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Background Remover image",
                    "type": "string"
                  }
                },
                "required": [
                  "assets"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the image. We charge credits right when the request is made. \n\nIf an error occurred while generating the image(s), credits will be refunded and this field will be updated to include the refund.",
                    "example": 5,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the image. Use it with the [Get image Project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Remove image background"
              }
            },
            {
              "name": "colorize_photo",
              "title": "Colorize photo",
              "description": "Colorizes a black-and-white or faded photo. Costs 10 credits; returns a project id for wait_for_image_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable. For attached ChatGPT files, upload with upload_chatgpt_media and pass its returned file_path. Reuse existing Magic Hour paths only from the connected account. Do not pass a filename, chat-local path or file ID as a file path.",
              "inputSchema": {
                "properties": {
                  "assets": {
                    "description": "Provide the assets for photo colorization",
                    "properties": {
                      "image_file_path": {
                        "description": "The image used to generate the colorized image. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.png",
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "image_file_path"
                    ],
                    "type": "object"
                  },
                  "name": {
                    "default": "Photo Colorizer - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Photo Colorizer image",
                    "type": "string"
                  }
                },
                "required": [
                  "assets"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the image. We charge credits right when the request is made. \n\nIf an error occurred while generating the image(s), credits will be refunded and this field will be updated to include the refund.",
                    "example": 10,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the image. Use it with the [Get image Project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Colorize photo"
              }
            },
            {
              "name": "get_audio_project",
              "title": "Get audio project",
              "description": "Returns an audio project's status and, once complete, its download URLs. Use to check progress with the id from an audio create tool. Read-only.",
              "inputSchema": {
                "properties": {
                  "id": {
                    "description": "Unique ID of the audio project. This value is returned by all of the POST APIs that create an audio.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "created_at": {
                    "format": "date-time",
                    "type": "string"
                  },
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the audio. We charge credits right when the request is made. \n\nIf an error occurred while generating the audio, credits will be refunded and this field will be updated to include the refund.",
                    "example": 2,
                    "type": "integer"
                  },
                  "downloads": {
                    "items": {
                      "description": "The download url and expiration date of the audio project",
                      "properties": {
                        "expires_at": {
                          "example": "2024-10-19T05:16:19.027Z",
                          "format": "date-time",
                          "type": "string"
                        },
                        "url": {
                          "example": "https://videos.magichour.ai/id/output.wav",
                          "format": "uri",
                          "type": "string"
                        }
                      },
                      "required": [
                        "url",
                        "expires_at"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "enabled": {
                    "description": "Whether this resource is active. If false, it is deleted.",
                    "type": "boolean"
                  },
                  "error": {
                    "description": "In the case of an error, this object will contain the error encountered during video render",
                    "properties": {
                      "code": {
                        "description": "An error code to indicate why a failure happened.",
                        "example": "no_source_face",
                        "type": "string"
                      },
                      "message": {
                        "description": "Details on the reason why a failure happened.",
                        "example": "Please use an image with a detectable face",
                        "type": "string"
                      }
                    },
                    "required": [
                      "message",
                      "code"
                    ],
                    "type": [
                      "object",
                      "null"
                    ]
                  },
                  "id": {
                    "description": "Unique ID of the audio. Use it with the [Get audio Project API](https://docs.magichour.ai/api-reference/audio-projects/get-audio-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  },
                  "name": {
                    "description": "The name of the audio.",
                    "example": "Example Name",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "status": {
                    "description": "The status of the audio.\n\n- `draft` - the project was created but has not been submitted for rendering\n- `queued` - the job is waiting for an available server\n- `rendering` - the job is being processed; the `audio.started` webhook event fires when rendering begins\n- `complete` - the job finished successfully; fires `audio.completed`\n- `error` - the job failed during processing; fires `audio.errored`\n- `canceled` - the job was manually canceled (for example from the Magic Hour web app)\n\n**Note:** `rendering`, `complete`, and `error` have matching webhook events; `canceled` does not - a canceled job emits no webhook event, so poll this endpoint to detect cancellation.",
                    "enum": [
                      "draft",
                      "queued",
                      "rendering",
                      "complete",
                      "error",
                      "canceled"
                    ],
                    "example": "complete",
                    "type": "string"
                  },
                  "type": {
                    "description": "The type of the audio project. Possible values are AUDIO_TRANSLATOR, VOICE_GENERATOR, VOICE_CHANGER, VOICE_CLONER, VIDEO_TO_AUDIO, MUSIC_GENERATOR, SOUND_EFFECT_GENERATOR",
                    "example": "VOICE_GENERATOR",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "name",
                  "status",
                  "type",
                  "created_at",
                  "enabled",
                  "credits_charged",
                  "downloads",
                  "error"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Get audio project"
              }
            },
            {
              "name": "delete_audio_project",
              "title": "Delete audio project",
              "description": "Deletes the audio project and attempts to delete its completed output. Cannot be undone; confirm with the user first.",
              "inputSchema": {
                "properties": {
                  "id": {
                    "description": "Unique ID of the audio project. This value is returned by all of the POST APIs that create an audio.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Delete audio project"
              }
            },
            {
              "name": "generate_music",
              "title": "Generate music",
              "description": "Generates music from a description, with optional custom lyrics or instrumental-only output. Costs 1 credit per requested second; returns a project id for wait_for_audio_project. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable.",
              "inputSchema": {
                "properties": {
                  "duration": {
                    "description": "Requested track duration in seconds, from 15 to 300. Determines credits charged.",
                    "example": 120,
                    "maximum": 300,
                    "minimum": 15,
                    "type": "integer"
                  },
                  "name": {
                    "default": "AI Music Generator",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Music Generator audio",
                    "type": "string"
                  },
                  "style": {
                    "additionalProperties": false,
                    "description": "Song description, vocal or instrumental choice, and optional custom lyrics.",
                    "properties": {
                      "instrumental": {
                        "default": false,
                        "description": "Generate music without vocals. When true, lyrics is ignored.",
                        "example": false,
                        "type": "boolean"
                      },
                      "lyrics": {
                        "description": "Custom lyrics. Omit or leave blank for AI-generated lyrics when instrumental is false.",
                        "example": "City lights are fading...",
                        "type": "string"
                      },
                      "prompt": {
                        "description": "Describe the song, including genre, mood, and instruments.",
                        "example": "Dreamy synthwave with warm bass and soft vocals",
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "prompt"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "duration",
                  "style"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the audio. We charge credits right when the request is made. \n\nIf an error occurred while generating the audio, credits will be refunded and this field will be updated to include the refund.",
                    "example": 120,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the audio. Use it with the [Get audio Project API](https://docs.magichour.ai/api-reference/audio-projects/get-audio-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Generate music"
              }
            },
            {
              "name": "ai_voice_cloner_create_audio",
              "title": "AI Voice Cloner",
              "description": "MCP guidance:\n- Starts an async audio job; returns `id` and `credits_charged`. For finished results, call `wait_for_audio_project` with that id or poll `GET /v1/audio-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata.\n- For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure.\n\nClone a voice from an audio sample and generate speech. \n* Each character costs 0.1 credits. \n* The cost is rounded up to the nearest whole number Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable. Use only a recording of your own voice or a voice you have permission to clone. Do not impersonate or deceive others.",
              "inputSchema": {
                "properties": {
                  "assets": {
                    "description": "Provide the assets for voice cloning.",
                    "properties": {
                      "audio_file_path": {
                        "description": "The audio used to clone the voice. This value is either\n- a direct URL to the file. The URL path must end in a supported file extension.\n- `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).\n\nSee the [file upload guide](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) for details.\n",
                        "example": "api-assets/id/1234.mp3",
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "audio_file_path"
                    ],
                    "type": "object"
                  },
                  "name": {
                    "default": "Voice Cloner - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Voice Cloner audio",
                    "type": "string"
                  },
                  "style": {
                    "description": "Text to speak in the supplied voice, with language and speech-speed options.",
                    "properties": {
                      "language": {
                        "default": "auto",
                        "description": "Spoken language. Use a canonical lowercase language name, or auto to detect the language from the text. Defaults to auto.",
                        "enum": [
                          "auto",
                          "chinese",
                          "english",
                          "japanese",
                          "korean",
                          "german",
                          "french",
                          "spanish",
                          "italian",
                          "russian",
                          "portuguese",
                          "hindi",
                          "polish",
                          "arabic",
                          "dutch",
                          "hebrew",
                          "tagalog",
                          "thai",
                          "urdu",
                          "turkish",
                          "vietnamese",
                          "tamil",
                          "persian",
                          "ukrainian",
                          "bengali",
                          "indonesian",
                          "marathi",
                          "romanian",
                          "swahili",
                          "nepali",
                          "telugu",
                          "punjabi",
                          "gujarati",
                          "javanese",
                          "burmese",
                          "kannada",
                          "cantonese",
                          "uzbek",
                          "afrikaans",
                          "albanian",
                          "amharic",
                          "armenian",
                          "assamese",
                          "azerbaijani",
                          "basque",
                          "belarusian",
                          "bulgarian",
                          "catalan",
                          "cebuano",
                          "croatian",
                          "czech",
                          "danish",
                          "estonian",
                          "finnish",
                          "galician",
                          "georgian",
                          "greek",
                          "haitian creole",
                          "hungarian",
                          "icelandic",
                          "kazakh",
                          "konkani",
                          "lao",
                          "latvian",
                          "lithuanian",
                          "luxembourgish",
                          "macedonian",
                          "maithili",
                          "malagasy",
                          "malay",
                          "malayalam",
                          "mongolian",
                          "norwegian",
                          "odia",
                          "pashto",
                          "serbian",
                          "sindhi",
                          "sinhala",
                          "slovak",
                          "slovenian",
                          "swedish",
                          "welsh"
                        ],
                        "example": "spanish",
                        "type": "string"
                      },
                      "prompt": {
                        "description": "Text used to generate speech from the cloned voice. The character limit is 5000 characters.",
                        "example": "Hello, this is my cloned voice.",
                        "maxLength": 5000,
                        "minLength": 1,
                        "type": "string"
                      },
                      "speed": {
                        "default": 1,
                        "description": "Speech speed multiplier, from 0.75 to 1.30 inclusive. Defaults to 1 (normal speed).",
                        "example": 1.15,
                        "maximum": 1.3,
                        "minimum": 0.75,
                        "type": "number"
                      }
                    },
                    "required": [
                      "prompt"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "assets",
                  "style"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the audio. We charge credits right when the request is made. \n\nIf an error occurred while generating the audio, credits will be refunded and this field will be updated to include the refund.",
                    "example": 1,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the audio. Use it with the [Get audio Project API](https://docs.magichour.ai/api-reference/audio-projects/get-audio-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "AI Voice Cloner"
              }
            },
            {
              "name": "ai_voice_generator_create_audio",
              "title": "AI Voice Generator",
              "description": "MCP guidance:\n- Starts an async audio job; returns `id` and `credits_charged`. For finished results, call `wait_for_audio_project` with that id or poll `GET /v1/audio-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata.\n\nGenerate speech from text. Each character costs 0.1 credits. The cost is rounded up to the nearest whole number. Before choosing settings, read get_account_info and the current parameter constraints. A listed model, resolution, duration or count is not necessarily available together or on this account. Preserve explicit requirements and all supplied inputs; explain a genuine block instead of submitting an incompatible request. Account balance alone does not prove a request is affordable.",
              "inputSchema": {
                "properties": {
                  "name": {
                    "default": "Voice Generator - dateTime",
                    "description": "Optional project name for identifying this output. Omit to use the API's default project name.",
                    "example": "My Voice Generator audio",
                    "type": "string"
                  },
                  "style": {
                    "description": "The content used to generate speech.",
                    "example": {
                      "language": "spanish",
                      "prompt": "Hello, how are you?",
                      "speed": 1.15,
                      "voice_name": "Elon Musk"
                    },
                    "properties": {
                      "language": {
                        "default": "auto",
                        "description": "Spoken language. Use a canonical lowercase language name, or auto to detect the language from the text. Defaults to auto.",
                        "enum": [
                          "auto",
                          "chinese",
                          "english",
                          "japanese",
                          "korean",
                          "german",
                          "french",
                          "spanish",
                          "italian",
                          "russian",
                          "portuguese",
                          "hindi",
                          "polish",
                          "arabic",
                          "dutch",
                          "hebrew",
                          "tagalog",
                          "thai",
                          "urdu",
                          "turkish",
                          "vietnamese",
                          "tamil",
                          "persian",
                          "ukrainian",
                          "bengali",
                          "indonesian",
                          "marathi",
                          "romanian",
                          "swahili",
                          "nepali",
                          "telugu",
                          "punjabi",
                          "gujarati",
                          "javanese",
                          "burmese",
                          "kannada",
                          "cantonese",
                          "uzbek",
                          "afrikaans",
                          "albanian",
                          "amharic",
                          "armenian",
                          "assamese",
                          "azerbaijani",
                          "basque",
                          "belarusian",
                          "bulgarian",
                          "catalan",
                          "cebuano",
                          "croatian",
                          "czech",
                          "danish",
                          "estonian",
                          "finnish",
                          "galician",
                          "georgian",
                          "greek",
                          "haitian creole",
                          "hungarian",
                          "icelandic",
                          "kazakh",
                          "konkani",
                          "lao",
                          "latvian",
                          "lithuanian",
                          "luxembourgish",
                          "macedonian",
                          "maithili",
                          "malagasy",
                          "malay",
                          "malayalam",
                          "mongolian",
                          "norwegian",
                          "odia",
                          "pashto",
                          "serbian",
                          "sindhi",
                          "sinhala",
                          "slovak",
                          "slovenian",
                          "swedish",
                          "welsh"
                        ],
                        "example": "spanish",
                        "type": "string"
                      },
                      "prompt": {
                        "description": "Text used to generate speech. The character limit is 5000 characters.",
                        "example": "Hello, how are you?",
                        "maxLength": 5000,
                        "minLength": 1,
                        "type": "string"
                      },
                      "speed": {
                        "default": 1,
                        "description": "Speech speed multiplier, from 0.75 to 1.30 inclusive. Defaults to 1 (normal speed).",
                        "example": 1.15,
                        "maximum": 1.3,
                        "minimum": 0.75,
                        "type": "number"
                      },
                      "voice_name": {
                        "description": "The voice to use for the speech. Use the `id` of a voice returned by `GET /v1/voices`.",
                        "enum": [
                          "Elon Musk",
                          "Mark Zuckerberg",
                          "Joe Rogan",
                          "Barack Obama",
                          "Morgan Freeman",
                          "Kanye West",
                          "Donald Trump",
                          "Joe Biden",
                          "Kim Kardashian",
                          "Taylor Swift",
                          "James Earl Jones",
                          "Samuel L. Jackson",
                          "Jeff Goldblum",
                          "David Attenborough",
                          "Sean Connery",
                          "Cillian Murphy",
                          "Anne Hathaway",
                          "Julia Roberts",
                          "Natalie Portman",
                          "Steve Carell",
                          "Amy Poehler",
                          "Stephen Colbert",
                          "Jimmy Fallon",
                          "David Letterman",
                          "Alex Trebek",
                          "Katy Perry",
                          "Prince",
                          "Kevin Bacon",
                          "Tom Hiddleston",
                          "Adam Driver",
                          "Alan Rickman",
                          "Alexz Johnson",
                          "Ana Gasteyer",
                          "Andrew Rannells",
                          "Arden Cho",
                          "Bear Grylls",
                          "Ben McKenzie",
                          "Ben Stiller",
                          "Ben Whishaw",
                          "Billie Joe Armstrong",
                          "Bingbing Li",
                          "Booboo Stewart",
                          "Bradley Steven Perry",
                          "Bruno Mars",
                          "Caity Lotz",
                          "Cameron Boyce",
                          "Candice Accola",
                          "Carrie Underwood",
                          "Casey Affleck",
                          "Caterina Scorsone",
                          "Cedric the Entertainer",
                          "Chace Crawford",
                          "Chadwick Boseman",
                          "Charlie Day",
                          "Chris Hemsworth",
                          "Chris Martin",
                          "Christopher Mintz-Plasse",
                          "Dan Fogler",
                          "Dan Stevens",
                          "Daniel Dae Kim",
                          "Danielle Panabaker",
                          "Dave Bautista",
                          "David Schwimmer",
                          "Denis Leary",
                          "Derek Mears",
                          "Diego Luna",
                          "Donald Glover",
                          "Donnie Yen",
                          "Doutzen Kroes",
                          "Dr. Dre",
                          "Drake Bell",
                          "Elle Fanning",
                          "Ernie Hudson",
                          "Fergie",
                          "Forest Whitaker",
                          "Francia Raisa",
                          "Freddie Highmore",
                          "Gillian Jacobs",
                          "Gina Carano",
                          "Ginnifer Goodwin",
                          "Gordon Ramsay",
                          "Guy Pearce",
                          "Gwendoline Christie",
                          "Hailee Steinfeld",
                          "Howie Mandel",
                          "Hugh Jackman",
                          "Hugh Laurie",
                          "J. K. Simmons",
                          "Jack Black",
                          "Jared Leto",
                          "Jennifer Carpenter",
                          "Kesha",
                          "Kris Jenner",
                          "Kristen Bell",
                          "Lorde",
                          "Matt Smith",
                          "Marilyn Monroe",
                          "Charlie Chaplin",
                          "Albert Einstein",
                          "Abraham Lincoln",
                          "John F. Kennedy",
                          "Lucille Ball",
                          "A.R. Rahman",
                          "Aamir Khan",
                          "Ajay Devgn",
                          "Akshay Kumar",
                          "Alain Delon",
                          "Alan Alda",
                          "Alan Cumming",
                          "Amitabh Bachchan",
                          "Ang Lee",
                          "Ansel Elgort",
                          "Anthony Anderson",
                          "Anthony Mackie",
                          "Armie Hammer",
                          "Asa Butterfield",
                          "B.J. Novak",
                          "Barbara Eden",
                          "Betty White",
                          "Bill Nighy",
                          "Bill Pullman",
                          "Blake Shelton",
                          "Bonnie Wright",
                          "Brad Paisley",
                          "Brendan Gleeson",
                          "Brian Cox",
                          "Bruno Ganz",
                          "Burt Reynolds",
                          "Carrie Fisher",
                          "Charles Dance",
                          "Chiwetel Ejiofor",
                          "Chris Pine",
                          "Christina Hendricks",
                          "Christina Ricci",
                          "Dakota Fanning",
                          "Damian Lewis",
                          "Dan Aykroyd",
                          "Daniel Craig",
                          "David Oyelowo",
                          "David Tennant",
                          "Diane Keaton",
                          "Diane Kruger",
                          "Dick Van Dyke",
                          "Domhnall Gleeson",
                          "Dominic Cooper",
                          "Donald Sutherland",
                          "Drew Carey",
                          "Eartha Kitt",
                          "Eddie Izzard",
                          "Edward Asner",
                          "Eli Roth",
                          "Elisabeth Moss",
                          "Ellen Burstyn",
                          "Emile Hirsch",
                          "Ezra Miller",
                          "Felicity Jones",
                          "Fiona Shaw",
                          "Florence Henderson",
                          "Freida Pinto",
                          "Geena Davis",
                          "Gemma Arterton",
                          "Geri Halliwell",
                          "Glenn Close",
                          "Gloria Steinem",
                          "Greta Gerwig",
                          "Gugu Mbatha-Raw",
                          "Hans Zimmer",
                          "Harry Connick Jr.",
                          "Harvey Keitel",
                          "Helena Bonham Carter",
                          "Henry Cavill",
                          "Hilary Swank",
                          "Hugh Bonneville",
                          "Idina Menzel",
                          "Imelda Staunton",
                          "Ingrid Bergman",
                          "Irrfan Khan",
                          "Isla Fisher",
                          "Iwan Rheon",
                          "Jack Lemmon",
                          "Janet Jackson",
                          "Jason Bateman",
                          "Jason Segel",
                          "Jennifer Coolidge",
                          "Johnny Galecki",
                          "Jon Favreau",
                          "Joseph Gordon-Levitt",
                          "Josh Brolin",
                          "Josh Gad",
                          "Josh Groban",
                          "Julia Louis-Dreyfus",
                          "Kristen Stewart",
                          "Kristen Wiig",
                          "Rooney Mara",
                          "Caitriona Balfe",
                          "J.J. Abrams",
                          "Zoe Saldana",
                          "SpongeBob SquarePants",
                          "Patrick Star",
                          "Squidward Tentacles",
                          "Homer Simpson",
                          "Bart Simpson",
                          "Peter Griffin",
                          "Stewie Griffin",
                          "Eric Cartman",
                          "Rick Sanchez",
                          "Bugs Bunny",
                          "Mickey Mouse",
                          "Donald Duck",
                          "Shrek",
                          "Donkey (Shrek)",
                          "Elsa (Frozen)",
                          "Woody (Toy Story)",
                          "Buzz Lightyear",
                          "Scooby-Doo",
                          "Shaggy Rogers",
                          "Bender (Futurama)",
                          "Optimus Prime",
                          "Batman (Animated)",
                          "The Joker (Animated)",
                          "Darth Vader",
                          "Yoda",
                          "Gollum Smeagol",
                          "Gandalf",
                          "Winnie the Pooh",
                          "Kermit the Frog",
                          "Elmo",
                          "SpiderMan (Tom Holland ver.)",
                          "Mario",
                          "Luigi",
                          "Sonic the Hedgehog",
                          "Naruto Uzumaki",
                          "Goku",
                          "Vegeta",
                          "Light Yagami",
                          "Luffy (One Piece)",
                          "Edward Elric",
                          "Eren Jaeger",
                          "Levi Ackerman",
                          "Tanjiro Kamado",
                          "All Might",
                          "GLaDOS",
                          "Master Chief",
                          "Kratos",
                          "Arthur Morgan",
                          "Geralt of Rivia",
                          "Dwayne 'The Rock' Johnson",
                          "LeBron James",
                          "Shaquille O'Neal",
                          "Conor McGregor",
                          "Mike Tyson",
                          "Kobe Bryant",
                          "Floyd Mayweather",
                          "Cristiano Ronaldo",
                          "Lionel Messi",
                          "Serena Williams",
                          "Tom Brady",
                          "Stephen Curry",
                          "John Cena",
                          "Hulk Hogan",
                          "Stone Cold Steve Austin",
                          "The Undertaker",
                          "Nate Diaz",
                          "Charles Barkley",
                          "Shannon Sharpe",
                          "Drake",
                          "Rihanna",
                          "Eminem",
                          "Snoop Dogg",
                          "Jay-Z",
                          "Ed Sheeran",
                          "Billie Eilish",
                          "Ariana Grande",
                          "Post Malone",
                          "Travis Scott",
                          "Nicki Minaj",
                          "Cardi B",
                          "Doja Cat",
                          "Justin Bieber",
                          "Sabrina Carpenter",
                          "Chappell Roan",
                          "Dua Lipa",
                          "The Weeknd",
                          "Miley Cyrus",
                          "Lady Gaga",
                          "Kendrick Lamar",
                          "Ozzy Osbourne",
                          "Freddie Mercury",
                          "Elvis Presley",
                          "Bob Marley",
                          "Frank Sinatra",
                          "MrBeast",
                          "PewDiePie",
                          "Kai Cenat",
                          "IShowSpeed",
                          "Markiplier",
                          "Jacksepticeye",
                          "KSI",
                          "Logan Paul",
                          "Jake Paul",
                          "Dream (Minecraft)",
                          "Corpse Husband",
                          "xQc",
                          "Pokimane",
                          "Valkyrae",
                          "Ninja",
                          "Joe Scott",
                          "Linus (LTT)",
                          "Ryan Reynolds",
                          "Tom Hanks",
                          "Robert Downey Jr.",
                          "Will Smith",
                          "Denzel Washington",
                          "Leonardo DiCaprio",
                          "Brad Pitt",
                          "Keanu Reeves",
                          "Nicolas Cage",
                          "Al Pacino",
                          "Robert De Niro",
                          "Arnold Schwarzenegger",
                          "Sylvester Stallone",
                          "Vin Diesel",
                          "Jason Statham",
                          "Tom Cruise",
                          "Johnny Depp",
                          "Scarlett Johansson",
                          "Angelina Jolie",
                          "Jennifer Aniston",
                          "Emma Watson",
                          "Margot Robbie",
                          "Sydney Sweeney",
                          "Zendaya",
                          "Timothee Chalamet",
                          "Pedro Pascal",
                          "Oscar Isaac",
                          "Benedict Cumberbatch",
                          "Ian McKellen",
                          "Patrick Stewart",
                          "Christopher Walken",
                          "Matthew McConaughey",
                          "Harrison Ford",
                          "Mark Wahlberg",
                          "Owen Wilson",
                          "Seth Rogen",
                          "Kevin Hart",
                          "Adam Sandler",
                          "Jim Carrey",
                          "Eddie Murphy",
                          "Robin Williams",
                          "Will Ferrell",
                          "Melissa McCarthy",
                          "Awkwafina",
                          "Jason Momoa",
                          "Idris Elba",
                          "Tom Hardy",
                          "Michael B. Jordan",
                          "Austin Butler",
                          "Glen Powell",
                          "Paul Giamatti",
                          "Bryan Cranston",
                          "Bob Odenkirk",
                          "Vladimir Putin",
                          "Queen Elizabeth II",
                          "Winston Churchill",
                          "Martin Luther King Jr.",
                          "Kamala Harris",
                          "Bernie Sanders",
                          "Alexandria Ocasio-Cortez",
                          "Narendra Modi",
                          "Oprah Winfrey",
                          "Ellen DeGeneres",
                          "Dr. Phil",
                          "Steve Harvey",
                          "Trevor Noah",
                          "John Oliver",
                          "James Corden",
                          "Ryan Seacrest",
                          "Howard Stern",
                          "Conan O'Brien",
                          "Seth Meyers",
                          "Bill Nye",
                          "Neil deGrasse Tyson",
                          "Guy Fieri",
                          "Dave Chappelle",
                          "Chris Rock",
                          "Jerry Seinfeld",
                          "Ali Wong",
                          "John Mulaney",
                          "Hasan Minhaj",
                          "Nikki Glaser",
                          "Matt Rife",
                          "Gabriel Iglesias",
                          "Bo Burnham",
                          "Jeff Bezos",
                          "Bill Gates",
                          "Steve Jobs",
                          "Tim Cook",
                          "Sam Altman",
                          "Jensen Huang",
                          "Gilbert Gottfried",
                          "James May",
                          "Jeremy Clarkson",
                          "Richard Hammond",
                          "Bob Ross",
                          "Anthony Bourdain",
                          "David Goggins",
                          "Jordan Peterson",
                          "Joe Pesci",
                          "Danny DeVito",
                          "Seth MacFarlane",
                          "Patrick Warburton",
                          "Keith David",
                          "Mark Hamill",
                          "Liam Neeson",
                          "Antonio Banderas",
                          "Sofia Vergara",
                          "Penelope Cruz",
                          "Gal Gadot",
                          "Cate Blanchett",
                          "Viola Davis",
                          "Meryl Streep",
                          "Sandra Bullock",
                          "Reese Witherspoon",
                          "Salma Hayek",
                          "Lupita Nyong'o",
                          "Florence Pugh",
                          "Jenna Ortega",
                          "Ana de Armas",
                          "Jacob Elordi",
                          "Barry White",
                          "Dolly Parton",
                          "Willie Nelson",
                          "Lil Wayne",
                          "50 Cent",
                          "Ice Cube",
                          "Tupac Shakur",
                          "Notorious B.I.G.",
                          "David Bowie",
                          "Michael Jackson",
                          "Whitney Houston",
                          "Amy Winehouse",
                          "SZA",
                          "Tyler, The Creator",
                          "Thanos",
                          "Tony Stark",
                          "Captain Jack Sparrow",
                          "Walter White",
                          "Tommy Shelby",
                          "Michael Scott",
                          "Dwight Schrute",
                          "Bowser",
                          "Usain Bolt",
                          "Tyson Fury",
                          "Dana White",
                          "Pat McAfee",
                          "Giannis Antetokounmpo",
                          "Lex Fridman",
                          "Ben Shapiro",
                          "Tucker Carlson",
                          "Martha Stewart",
                          "Gordon Lightfoot",
                          "Lizzo",
                          "Megan Thee Stallion",
                          "Ice Spice",
                          "21 Savage",
                          "Metro Boomin",
                          "Jack Harlow",
                          "Peso Pluma",
                          "BTS Jungkook",
                          "Quentin Tarantino",
                          "Werner Herzog",
                          "Anderson Cooper",
                          "Rachel Maddow",
                          "Mahatma Gandhi",
                          "Muhammad Ali",
                          "Princess Diana",
                          "Nelson Mandela",
                          "Steve Irwin",
                          "Morty Smith",
                          "Andrew Huberman",
                          "Willem Dafoe",
                          "Mike Rowe",
                          "Terminator",
                          "Deadpool",
                          "Plankton",
                          "Mr. Krabs",
                          "Picard",
                          "Ludwig",
                          "Emma Chamberlain",
                          "Casey Neistat",
                          "Marques Brownlee",
                          "Technoblade",
                          "Shroud",
                          "Charli D'Amelio",
                          "Khaby Lame",
                          "Adin Ross",
                          "Trainwreckstv",
                          "Hasan Piker",
                          "Joey Diaz",
                          "Theo Von",
                          "Andrew Schulz",
                          "Bert Kreischer",
                          "Tom Segura",
                          "Shane Gillis",
                          "Joe List",
                          "Bobby Lee",
                          "Chris Williamson",
                          "Destiny",
                          "Ethan Klein",
                          "Hila Klein",
                          "Olivia Rodrigo",
                          "Gracie Abrams",
                          "Benson Boone",
                          "Noah Kahan",
                          "Zach Bryan",
                          "Morgan Wallen",
                          "Luke Combs",
                          "Chris Stapleton",
                          "Rauw Alejandro",
                          "Karol G",
                          "Feid",
                          "J Balvin",
                          "Central Cee",
                          "Dave (rapper)",
                          "Stormzy",
                          "Gunna",
                          "Future",
                          "Lil Baby",
                          "Playboi Carti",
                          "Don Toliver",
                          "Lana Del Rey",
                          "Halsey",
                          "Charli XCX",
                          "Tate McRae",
                          "Conan Gray",
                          "Troye Sivan",
                          "Harry Styles",
                          "Niall Horan",
                          "Shawn Mendes",
                          "John Legend",
                          "Sam Smith",
                          "Roman Reigns",
                          "Cody Rhodes",
                          "Seth Rollins",
                          "CM Punk",
                          "Randy Orton",
                          "Triple H",
                          "Ric Flair",
                          "Khabib Nurmagomedov",
                          "Jon Jones",
                          "Israel Adesanya",
                          "Alex Pereira",
                          "Jorge Masvidal",
                          "Patrick Mahomes",
                          "Travis Kelce",
                          "Aaron Rodgers",
                          "Kyrie Irving",
                          "Kevin Durant",
                          "Nikola Jokic",
                          "Simone Biles",
                          "Novak Djokovic",
                          "Rafael Nadal",
                          "Roger Federer",
                          "Max Verstappen",
                          "Lewis Hamilton",
                          "Mark Rober",
                          "Naval Ravikant",
                          "Peter Attia",
                          "Gary Vaynerchuk",
                          "Alex Hormozi",
                          "Grant Cardone",
                          "JD Vance",
                          "Nancy Pelosi",
                          "Ron DeSantis",
                          "Volodymyr Zelenskyy",
                          "Xi Jinping",
                          "Justin Trudeau",
                          "Emmanuel Macron",
                          "Boris Johnson",
                          "Rishi Sunak",
                          "Keir Starmer",
                          "Tom Holland",
                          "Anya Taylor-Joy",
                          "Barry Keoghan",
                          "Paul Mescal",
                          "Rachel Zegler",
                          "Millie Bobby Brown",
                          "Finn Wolfhard",
                          "Noah Schnapp",
                          "Ke Huy Quan",
                          "Ayo Edebiri",
                          "Jeremy Allen White",
                          "Cloud Strife",
                          "Sephiroth",
                          "Solid Snake",
                          "Nathan Drake",
                          "Joel Miller",
                          "Ellie Williams",
                          "Duke Nukem",
                          "Lara Croft",
                          "Link (Zelda)",
                          "Samus Aran",
                          "Kirby",
                          "Pikachu",
                          "Ash Ketchum",
                          "Agent 47",
                          "Vergil (DMC)",
                          "Dante (DMC)",
                          "Ryu (Street Fighter)",
                          "Chun-Li",
                          "Scorpion (Mortal Kombat)",
                          "Sub-Zero",
                          "Steve (Minecraft)",
                          "Herobrine",
                          "Cortana",
                          "Aloy",
                          "Ezio Auditore",
                          "Altair",
                          "BJ Blazkowicz",
                          "Doom Slayer",
                          "Handsome Jack",
                          "Tracer (Overwatch)",
                          "Genji (Overwatch)",
                          "Reaper (Overwatch)",
                          "Jinx (Arcane)",
                          "Vi (Arcane)",
                          "Nezuko Kamado",
                          "Zenitsu Agatsuma",
                          "Gojo Satoru",
                          "Itadori Yuji",
                          "Denji (Chainsaw Man)",
                          "Power (Chainsaw Man)",
                          "Zoro (One Piece)",
                          "Nami (One Piece)",
                          "Sasuke Uchiha",
                          "Kakashi Hatake",
                          "Itachi Uchiha",
                          "Spike Spiegel",
                          "L (Death Note)",
                          "Saitama (One Punch Man)",
                          "Deku (My Hero Academia)",
                          "Bakugo Katsuki",
                          "Captain America (MCU)",
                          "Thor (MCU)",
                          "Loki (MCU)",
                          "Wolverine",
                          "Groot",
                          "Rocket Raccoon",
                          "Venom",
                          "The Mandalorian",
                          "Baby Yoda (Grogu)",
                          "Tony Montana (Scarface)",
                          "John Wick",
                          "James Bond (Craig era)",
                          "Ferris Bueller",
                          "Tyler Durden",
                          "The Dude (Big Lebowski)",
                          "Forrest Gump",
                          "Willy Wonka",
                          "Freddy Krueger",
                          "Jason Voorhees",
                          "Michael Myers",
                          "Pennywise",
                          "Hannibal Lecter",
                          "Family Guy Quagmire",
                          "Lois Griffin",
                          "Marge Simpson",
                          "Lisa Simpson",
                          "Ned Flanders",
                          "Krusty the Clown",
                          "Mr. Burns",
                          "Timmy Turner",
                          "Dexter (Dexter's Lab)",
                          "Johnny Bravo",
                          "Courage the Cowardly Dog",
                          "Finn the Human",
                          "Jake the Dog",
                          "Rick Grimes",
                          "Negan (Walking Dead)",
                          "Jesse Pinkman",
                          "Saul Goodman",
                          "Tony Soprano",
                          "Jim Halpert",
                          "Ron Swanson",
                          "Barney Stinson",
                          "Sheldon Cooper",
                          "Jon Snow",
                          "Tyrion Lannister",
                          "Daenerys Targaryen",
                          "Arya Stark",
                          "Homelander",
                          "Billy Butcher",
                          "Airrack",
                          "Zach King",
                          "Dude Perfect Tyler",
                          "Colleen Ballinger",
                          "David Dobrik",
                          "James Charles",
                          "NikkieTutorials",
                          "Jeffree Star",
                          "Danny Duncan",
                          "FaZe Rug",
                          "SSSniperWolf",
                          "Vegetta777",
                          "Rubius",
                          "Ibai Llanos",
                          "Fuerza Regida",
                          "Grupo Frontera",
                          "Bizarrap",
                          "Anitta",
                          "Rosalia",
                          "Maluma",
                          "Ozuna",
                          "Manuel Turizo",
                          "Camilo",
                          "Sam Fender",
                          "Hozier",
                          "Fred again",
                          "GloRilla",
                          "Sexyy Red",
                          "Flo Milli",
                          "Latto",
                          "Coi Leray",
                          "Ja Morant",
                          "Anthony Edwards",
                          "Victor Wembanyama",
                          "Caitlin Clark",
                          "Angel Reese",
                          "Sha'Carri Richardson",
                          "Erling Haaland",
                          "Kylian Mbappe",
                          "Jude Bellingham",
                          "Neymar",
                          "Vinicius Junior",
                          "Shohei Ohtani",
                          "Connor McDavid",
                          "Sidney Crosby",
                          "Steven Crowder",
                          "Candace Owens",
                          "Charlie Kirk",
                          "Matt Walsh",
                          "Tim Dillon",
                          "Whitney Cummings",
                          "Sam Harris",
                          "Malcolm Gladwell",
                          "Simon Sinek",
                          "Mel Robbins",
                          "Jocko Willink",
                          "Emma Stone",
                          "Ryan Gosling",
                          "Bradley Cooper",
                          "Christian Bale",
                          "Joaquin Phoenix",
                          "Mahershala Ali",
                          "Jamie Foxx",
                          "Regina King",
                          "Taraji P. Henson",
                          "Octavia Spencer",
                          "John Boyega",
                          "Daisy Ridley",
                          "Jonathan Majors",
                          "Simu Liu",
                          "Constance Wu",
                          "Henry Golding",
                          "Dev Patel",
                          "Riz Ahmed",
                          "Mindy Kaling",
                          "Aubrey Plaza",
                          "Aziz Ansari",
                          "Randall Park",
                          "Rainbow Dash",
                          "Twilight Sparkle",
                          "Gumball Watterson",
                          "Rigby (Regular Show)",
                          "Mordecai (Regular Show)",
                          "Steven Universe",
                          "Garnet (Steven Universe)",
                          "Aang (Avatar)",
                          "Zuko (Avatar)",
                          "Aretha Franklin",
                          "Stevie Wonder",
                          "Ray Charles",
                          "Johnny Cash",
                          "Janis Joplin",
                          "Kurt Cobain",
                          "Freddie Prinze",
                          "Selena Gomez",
                          "Justin Timberlake",
                          "Usher",
                          "Chris Brown",
                          "A$AP Rocky",
                          "RM (BTS)",
                          "V (BTS)",
                          "Jimin",
                          "Lisa (Blackpink)",
                          "Jennie (Blackpink)",
                          "Rose (Blackpink)",
                          "Calvin Harris",
                          "David Guetta",
                          "Marshmello",
                          "Skrillex",
                          "Diplo",
                          "Zedd",
                          "Jimmy Kimmel",
                          "Graham Norton",
                          "Bill Maher",
                          "Sean Hannity",
                          "Wolf Blitzer",
                          "Lester Holt",
                          "Satya Nadella",
                          "Sundar Pichai",
                          "Warren Buffett",
                          "Sheryl Sandberg",
                          "Marc Andreessen",
                          "Peter Thiel",
                          "Stephen Hawking",
                          "Carl Sagan",
                          "Richard Feynman",
                          "Jane Goodall",
                          "Franklin D. Roosevelt",
                          "Ronald Reagan",
                          "Margaret Thatcher",
                          "King Charles III",
                          "Prince Harry",
                          "Prince William",
                          "Stephen King",
                          "J.K. Rowling",
                          "George R.R. Martin",
                          "Neil Gaiman",
                          "Malcolm X",
                          "Jamie Oliver",
                          "Tiger Woods",
                          "Venus Williams",
                          "David Beckham",
                          "Michael Phelps",
                          "Peyton Manning",
                          "Virat Kohli",
                          "Sachin Tendulkar",
                          "MS Dhoni",
                          "The Rock",
                          "Rey Mysterio",
                          "Bray Wyatt",
                          "Kevin Owens",
                          "H3H3",
                          "Philip DeFranco",
                          "Jenna Marbles",
                          "Shane Dawson",
                          "Liza Koshy",
                          "Lilly Singh",
                          "Rhett and Link",
                          "Danny Gonzalez",
                          "Drew Gooden",
                          "Cody Ko",
                          "Kurtis Conner",
                          "Trisha Paytas",
                          "Tana Mongeau",
                          "Jaclyn Hill",
                          "Bretman Rock",
                          "Safiya Nygaard",
                          "Shah Rukh Khan",
                          "Salman Khan",
                          "Priyanka Chopra",
                          "Deepika Padukone",
                          "Jennifer Lawrence",
                          "Chris Evans",
                          "Daniel Radcliffe",
                          "Rupert Grint",
                          "Anthony Hopkins",
                          "Jack Nicholson",
                          "Clint Eastwood",
                          "Obi-Wan Kenobi",
                          "Luke Skywalker",
                          "Han Solo",
                          "Princess Leia",
                          "Emperor Palpatine",
                          "Kylo Ren",
                          "C-3PO",
                          "Frodo Baggins",
                          "Aragorn",
                          "Legolas",
                          "Samwise Gamgee",
                          "Harry Potter",
                          "Hermione Granger",
                          "Ron Weasley",
                          "Albus Dumbledore",
                          "Severus Snape",
                          "Voldemort",
                          "Hagrid",
                          "Belle (Beauty and the Beast)",
                          "Ariel (Little Mermaid)",
                          "Cinderella",
                          "Snow White",
                          "Mulan",
                          "Rapunzel (Tangled)",
                          "Fiona (Shrek)",
                          "Ross Geller",
                          "Chandler Bing",
                          "Joey Tribbiani",
                          "Monica Geller",
                          "Rachel Green",
                          "Phoebe Buffay",
                          "George Costanza",
                          "Kramer (Seinfeld)",
                          "Elaine Benes",
                          "Carlton Banks",
                          "Hinata Hyuga",
                          "Ichigo Kurosaki",
                          "Yoshi",
                          "Spyro",
                          "Ryu Hayabusa",
                          "Leon Kennedy",
                          "Chris Redfield",
                          "Jill Valentine",
                          "Ada Wong",
                          "Big Boss (MGS)",
                          "Raiden (MGS)",
                          "Commander Shepard",
                          "Garrus Vakarian",
                          "V (Cyberpunk)",
                          "Johnny Silverhand",
                          "Valorant Jett",
                          "League of Legends Ahri",
                          "Yasuo (LoL)",
                          "Superman",
                          "Wonder Woman",
                          "Harley Quinn",
                          "Black Panther",
                          "Doctor Strange",
                          "Hulk",
                          "Black Widow",
                          "Nick Fury",
                          "Ant-Man",
                          "Don Draper",
                          "Walter Bishop (Fringe)",
                          "Frank Underwood",
                          "Dexter Morgan",
                          "Sherlock Holmes",
                          "Dr. House",
                          "Michael Corleone",
                          "Vito Corleone",
                          "Daffy Duck",
                          "Porky Pig",
                          "Tweety Bird",
                          "Sylvester the Cat",
                          "Fred Flintstone",
                          "Barney Rubble",
                          "George Jetson",
                          "Popeye",
                          "Skip Bayless",
                          "Stephen A Smith",
                          "Colin Cowherd",
                          "Ricky Gervais",
                          "Bill Burr",
                          "Sebastian Maniscalco",
                          "Trevor Wallace",
                          "Iliza Shlesinger",
                          "Bruce Springsteen",
                          "Eric Clapton",
                          "Mick Jagger",
                          "Paul McCartney",
                          "John Lennon",
                          "Elton John",
                          "Billy Joel",
                          "Fleetwood Mac Stevie Nicks",
                          "Sia",
                          "Demi Lovato",
                          "Camila Cabello",
                          "Enrique Iglesias",
                          "Ricky Martin",
                          "Faze Clan Banks",
                          "Tfue",
                          "Timthetatman",
                          "DrLupo",
                          "CouRage",
                          "Sykkuno",
                          "Disguised Toast",
                          "Fuslie",
                          "Jerma985",
                          "Vinesauce Vinny",
                          "Northernlion",
                          "Moistcr1tikal",
                          "Asmongold",
                          "Mizkif",
                          "Esfand",
                          "Quin69",
                          "Summit1g",
                          "Sodapoppin",
                          "Forsen",
                          "Pestily",
                          "Joe Budden",
                          "Charlamagne Tha God",
                          "Angela Yee",
                          "Big Boy",
                          "Zane Lowe",
                          "Rich Eisen",
                          "Bill Simmons",
                          "Dan Le Batard",
                          "Slash (musician)",
                          "James Hetfield",
                          "Dave Grohl",
                          "Chris Cornell",
                          "Axl Rose",
                          "Robert Plant",
                          "Jon Bon Jovi",
                          "Chester Bennington",
                          "Corey Taylor",
                          "Fernando Alonso",
                          "Charles Leclerc",
                          "Daniel Ricciardo",
                          "Valentino Rossi",
                          "Marc Marquez",
                          "Travis Pastrana",
                          "Tony Hawk",
                          "Rohit Sharma",
                          "Babar Azam",
                          "Ben Stokes",
                          "Joe Root",
                          "Anthony Joshua",
                          "Canelo Alvarez",
                          "Ronda Rousey",
                          "Amanda Nunes",
                          "Bruce Willis",
                          "Chris Pratt",
                          "Charlize Theron",
                          "Nicole Kidman",
                          "Amy Adams",
                          "Jamie Lee Curtis",
                          "Gary Oldman",
                          "Mark Ruffalo",
                          "Jeremy Renner",
                          "Chris Tucker",
                          "Jonah Hill",
                          "Ranveer Singh",
                          "Alia Bhatt",
                          "Hrithik Roshan",
                          "Lee Min Ho",
                          "Song Joong Ki",
                          "Park Seo Joon",
                          "Kylie Jenner",
                          "Khloe Kardashian",
                          "Paris Hilton",
                          "Neil Armstrong",
                          "Buzz Aldrin",
                          "Yuri Gagarin",
                          "Killua Zoldyck",
                          "Gon Freecss",
                          "Meliodas",
                          "Natsu Dragneel",
                          "Lucy Heartfilia",
                          "Erza Scarlet",
                          "Inuyasha",
                          "Kagome Higurashi",
                          "Yusuke Urameshi",
                          "Vash the Stampede",
                          "Alucard (Hellsing)",
                          "Guts (Berserk)",
                          "Griffith (Berserk)",
                          "Reigen Arataka",
                          "Mob (Mob Psycho 100)",
                          "Anya Forger",
                          "Loid Forger",
                          "Yor Forger",
                          "Pit (Kid Icarus)",
                          "Marth (Fire Emblem)",
                          "Ike (Fire Emblem)",
                          "Sora (Kingdom Hearts)",
                          "Riku (Kingdom Hearts)",
                          "Sam Porter Bridges",
                          "Big Smoke (GTA)",
                          "CJ (GTA San Andreas)",
                          "Niko Bellic",
                          "Trevor Philips",
                          "Michael De Santa",
                          "Franklin Clinton",
                          "Marcus Fenix",
                          "Isaac Clarke",
                          "Ellie (Borderlands)",
                          "Lilith (Borderlands)",
                          "Claptrap",
                          "Widowmaker (Overwatch)",
                          "Mercy (Overwatch)",
                          "Reinhardt (Overwatch)",
                          "Phineas Flynn",
                          "Doofenshmirtz",
                          "Blossom (PPG)",
                          "Bubbles (PPG)",
                          "Buttercup (PPG)",
                          "Mojo Jojo",
                          "Ben Tennyson",
                          "Danny Phantom",
                          "Invader Zim",
                          "GIR (Invader Zim)",
                          "Sandy Cheeks",
                          "Ellen Ripley",
                          "Sarah Connor",
                          "Indiana Jones",
                          "Austin Powers",
                          "Inspector Clouseau",
                          "Gru (Despicable Me)",
                          "Alvin (Chipmunks)",
                          "Megatron",
                          "Chucky",
                          "Ghostface (Scream)",
                          "The Grinch",
                          "Jack Skellington",
                          "Jayson Tatum",
                          "Devin Booker",
                          "Damian Lillard",
                          "James Harden",
                          "Russell Westbrook",
                          "Joel Embiid",
                          "Justin Jefferson",
                          "Josh Allen",
                          "Joe Burrow",
                          "Micah Parsons",
                          "Myles Garrett",
                          "CeeDee Lamb",
                          "Burna Boy",
                          "Wizkid",
                          "Tems",
                          "Magnus Carlsen",
                          "Hikaru Nakamura",
                          "MrBallen",
                          "Ned Fulmer",
                          "Zach Kornfeld",
                          "Eugene Lee Yang",
                          "Alton Brown",
                          "Andrew Rea",
                          "Steve-O",
                          "Johnny Knoxville",
                          "Bam Margera",
                          "Russell Brand",
                          "Piers Morgan",
                          "Douglas Murray",
                          "Dave Rubin",
                          "Michael Knowles",
                          "Vivek Ramaswamy",
                          "Marjorie Taylor Greene",
                          "Mitch McConnell",
                          "Mike Pence",
                          "Hillary Clinton",
                          "Bill Clinton",
                          "George W Bush",
                          "George H W Bush",
                          "Jimmy Carter",
                          "Angela Merkel",
                          "Tara Strong",
                          "Tom Kenny",
                          "Nolan North",
                          "Troy Baker",
                          "Jennifer Hale",
                          "Steve Blum",
                          "Cersei Lannister",
                          "Jaime Lannister",
                          "Sansa Stark",
                          "Bran Stark",
                          "The Hound",
                          "Melisandre",
                          "Varys",
                          "Petyr Baelish",
                          "Ned Stark",
                          "Gus Fring",
                          "Mike Ehrmantraut",
                          "Hank Schrader",
                          "Skyler White",
                          "Joy (Inside Out)",
                          "Sadness (Inside Out)",
                          "Anger (Inside Out)",
                          "Mirabel (Encanto)",
                          "Bruno (Encanto)",
                          "Remy (Ratatouille)",
                          "Lightning McQueen",
                          "Mater (Cars)",
                          "Wreck-It Ralph",
                          "Vanellope von Schweetz",
                          "PointCrow",
                          "Ranboo",
                          "Wilbur Soot",
                          "Tubbo",
                          "GeorgeNotFound",
                          "Sapnap",
                          "Quackity",
                          "Karl Jacobs",
                          "Norman Bates",
                          "Anton Chigurh",
                          "Patrick Bateman",
                          "Travis Bickle",
                          "Rocky Balboa",
                          "Rambo",
                          "Maximus (Gladiator)",
                          "William Wallace",
                          "King Leonidas",
                          "Leslie Knope",
                          "Tom Haverford",
                          "April Ludgate",
                          "Andy Dwyer",
                          "Kevin Malone",
                          "Creed Bratton",
                          "Stanley Hudson",
                          "Toby Flenderson",
                          "Angela Martin",
                          "Summer Smith",
                          "Beth Smith",
                          "Jerry Smith",
                          "BoJack Horseman",
                          "Todd Chavez",
                          "Princess Carolyn",
                          "Diane Nguyen",
                          "Big Mouth Nick",
                          "Maury (Big Mouth)",
                          "Archer (Sterling)",
                          "Lana Kane",
                          "Malory Archer",
                          "Fry (Futurama)",
                          "Leela (Futurama)",
                          "Professor Farnsworth",
                          "Zapp Brannigan",
                          "Beavis",
                          "Butt-Head",
                          "King of the Hill Hank Hill",
                          "Bobby Hill",
                          "Dale Gribble",
                          "Stan Marsh",
                          "Kyle Broflovski",
                          "Randy Marsh",
                          "Towelie",
                          "Butters Stotch",
                          "Mr. Garrison",
                          "Chef (South Park)",
                          "Ike Broflovski",
                          "Wendy Testaburger",
                          "PC Principal",
                          "Jimmy Valmer",
                          "Michelle Obama",
                          "Al Gore",
                          "Desmond Tutu",
                          "Anthony Fauci",
                          "Greta Thunberg",
                          "Malala Yousafzai",
                          "Grimes",
                          "Jafar (Aladdin)",
                          "Ursula (Little Mermaid)",
                          "Iago (Aladdin parrot)",
                          "Zazu (Lion King)",
                          "Yzma (Emperor's New Groove)",
                          "Kronk (Emperor's New Groove)",
                          "Discord (My Little Pony)",
                          "Skeletor (He-Man)",
                          "Captain Hook (Peter Pan)",
                          "Sebastian (Little Mermaid)",
                          "HAL 9000",
                          "Mushu (Mulan)",
                          "Lumiere (Beauty and the Beast)",
                          "Cogsworth (Beauty and the Beast)",
                          "Scuttle (Little Mermaid)",
                          "Rafiki (Lion King)",
                          "Kristoff (Frozen)",
                          "Hans (Frozen)",
                          "Merlin (Sword in the Stone)",
                          "cv-0001",
                          "cv-0002",
                          "cv-0003",
                          "cv-0004",
                          "cv-0005",
                          "cv-0006",
                          "cv-0007",
                          "cv-0008",
                          "cv-0009",
                          "cv-0010",
                          "cv-0011",
                          "cv-0012",
                          "cv-0013",
                          "cv-0014",
                          "cv-0015",
                          "cv-0016",
                          "cv-0017",
                          "cv-0018",
                          "cv-0019",
                          "cv-0020",
                          "cv-0021",
                          "cv-0022",
                          "cv-0023",
                          "cv-0024",
                          "cv-0025",
                          "cv-0026",
                          "cv-0028",
                          "cv-0029",
                          "cv-0030",
                          "cv-0031",
                          "cv-0032",
                          "cv-0033",
                          "cv-0034",
                          "cv-0035",
                          "cv-0036",
                          "cv-0037",
                          "cv-0038",
                          "cv-0039",
                          "cv-0040",
                          "cv-0041",
                          "cv-0042",
                          "cv-0043",
                          "cv-0044",
                          "cv-0045",
                          "cv-0046",
                          "cv-0047",
                          "cv-0048",
                          "cv-0049",
                          "cv-0050",
                          "cv-0051",
                          "cv-0052",
                          "cv-0053",
                          "cv-0054",
                          "cv-0055",
                          "cv-0056",
                          "cv-0057",
                          "cv-0058",
                          "cv-0059",
                          "cv-0060",
                          "cv-0061",
                          "cv-0062",
                          "cv-0063",
                          "cv-0064",
                          "cv-0065",
                          "cv-0066",
                          "cv-0067",
                          "cv-0068",
                          "cv-0069",
                          "cv-0070",
                          "cv-0071",
                          "cv-0072",
                          "cv-0073",
                          "cv-0074",
                          "cv-0075",
                          "cv-0076",
                          "cv-0077",
                          "cv-0078",
                          "cv-0079",
                          "cv-0080",
                          "cv-0081",
                          "cv-0082",
                          "cv-0083",
                          "cv-0084",
                          "cv-0085",
                          "cv-0086",
                          "cv-0087",
                          "cv-0088",
                          "cv-0089",
                          "cv-0090",
                          "cv-0091",
                          "cv-0092",
                          "cv-0093",
                          "cv-0094",
                          "cv-0095",
                          "cv-0096",
                          "cv-0097",
                          "cv-0098",
                          "cv-0099",
                          "cv-0100",
                          "cv-0101",
                          "cv-0102",
                          "cv-0103",
                          "cv-0104",
                          "cv-0105",
                          "cv-0106",
                          "cv-0107",
                          "cv-0108",
                          "cv-0109",
                          "cv-0110",
                          "cv-0111",
                          "cv-0112",
                          "cv-0113",
                          "cv-0114",
                          "cv-0115",
                          "cv-0116",
                          "cv-0117",
                          "cv-0118",
                          "cv-0119",
                          "cv-0120",
                          "cv-0121",
                          "cv-0122",
                          "cv-0123",
                          "cv-0124",
                          "cv-0125",
                          "cv-0126",
                          "cv-0127",
                          "cv-0128",
                          "cv-0129",
                          "cv-0130",
                          "cv-0131",
                          "cv-0132",
                          "cv-0133",
                          "cv-0134",
                          "cv-0135",
                          "cv-0136",
                          "cv-0137",
                          "cv-0138",
                          "cv-0139",
                          "cv-0140",
                          "cv-0141",
                          "cv-0142",
                          "cv-0143",
                          "cv-0144",
                          "cv-0145",
                          "cv-0146",
                          "cv-0147",
                          "cv-0148",
                          "cv-0149",
                          "cv-0150",
                          "cv-0151",
                          "cv-0152",
                          "cv-0153",
                          "cv-0154",
                          "cv-0155",
                          "cv-0156",
                          "cv-0157",
                          "cv-0158",
                          "cv-0159",
                          "cv-0160",
                          "cv-0161",
                          "cv-0162",
                          "cv-0163",
                          "cv-0164",
                          "cv-0165",
                          "cv-0166",
                          "cv-0167",
                          "cv-0168",
                          "cv-0169",
                          "cv-0170",
                          "cv-0171",
                          "cv-0172",
                          "cv-0173",
                          "cv-0174",
                          "cv-0175",
                          "cv-0176",
                          "cv-0177",
                          "cv-0178",
                          "cv-0179",
                          "cv-0180",
                          "cv-0181",
                          "cv-0182",
                          "cv-0183",
                          "cv-0184",
                          "cv-0185",
                          "cv-0186",
                          "cv-0187",
                          "cv-0188",
                          "cv-0189",
                          "cv-0190",
                          "cv-0191",
                          "cv-0192",
                          "cv-0193",
                          "cv-0194",
                          "cv-0195",
                          "cv-0196",
                          "cv-0197",
                          "cv-0198",
                          "cv-0199",
                          "cv-0200",
                          "cv-0201",
                          "cv-0202",
                          "cv-0203",
                          "cv-0205",
                          "cv-0206",
                          "cv-0207",
                          "cv-0208",
                          "cv-0209",
                          "cv-0210",
                          "cv-0211",
                          "cv-0212",
                          "cv-0213",
                          "cv-0214",
                          "cv-0215",
                          "cv-0216",
                          "cv-0217",
                          "cv-0218",
                          "cv-0219",
                          "cv-0220",
                          "cv-0221",
                          "cv-0222",
                          "cv-0223",
                          "cv-0224",
                          "cv-0225",
                          "cv-0226",
                          "cv-0227",
                          "cv-0228",
                          "cv-0229",
                          "cv-0230",
                          "cv-0231",
                          "cv-0232",
                          "cv-0233",
                          "cv-0234",
                          "cv-0235",
                          "cv-0236",
                          "cv-0237",
                          "cv-0238",
                          "cv-0239",
                          "cv-0240",
                          "cv-0241",
                          "cv-0242",
                          "cv-0243",
                          "cv-0244",
                          "cv-0245",
                          "cv-0246",
                          "cv-0247",
                          "cv-0248",
                          "cv-0249",
                          "cv-0250",
                          "cv-0251",
                          "cv-0252",
                          "cv-0253",
                          "cv-0254",
                          "cv-0255",
                          "cv-0256",
                          "cv-0257",
                          "cv-0258",
                          "cv-0259",
                          "cv-0260",
                          "cv-0261",
                          "cv-0262",
                          "cv-0263",
                          "cv-0264",
                          "cv-0265",
                          "cv-0266",
                          "cv-0267",
                          "cv-0268",
                          "cv-0269",
                          "cv-0270",
                          "cv-0271",
                          "cv-0272",
                          "cv-0273",
                          "cv-0274",
                          "cv-0275",
                          "cv-0276",
                          "cv-0277",
                          "cv-0278",
                          "cv-0279",
                          "cv-0280",
                          "cv-0281",
                          "cv-0282",
                          "cv-0283",
                          "cv-0284",
                          "cv-0285",
                          "cv-0286",
                          "cv-0287",
                          "cv-0288",
                          "cv-0289",
                          "cv-0290",
                          "cv-0291",
                          "cv-0292",
                          "cv-0293",
                          "cv-0294",
                          "cv-0295",
                          "cv-0296",
                          "cv-0297",
                          "cv-0298",
                          "cv-0299",
                          "cv-0300",
                          "cv-0301",
                          "cv-0302",
                          "cv-0303",
                          "cv-0304",
                          "cv-0305",
                          "cv-0306",
                          "cv-0307",
                          "cv-0308",
                          "cv-0309",
                          "cv-0310",
                          "cv-0311",
                          "cv-0312",
                          "cv-0313",
                          "cv-0314",
                          "cv-0315",
                          "cv-0316",
                          "cv-0317",
                          "cv-0318",
                          "cv-0319",
                          "cv-0320",
                          "cv-0321",
                          "cv-0322",
                          "cv-0323",
                          "cv-0324",
                          "cv-0325",
                          "cv-0326",
                          "cv-0327",
                          "cv-0328",
                          "cv-0329",
                          "cv-0330",
                          "cv-0331",
                          "cv-0332",
                          "cv-0333",
                          "cv-0334",
                          "cv-0335",
                          "cv-0336",
                          "cv-0337",
                          "cv-0338",
                          "cv-0339",
                          "cv-0340",
                          "cv-0341",
                          "cv-0342",
                          "cv-0343",
                          "cv-0344",
                          "cv-0345",
                          "cv-0346",
                          "cv-0347",
                          "cv-0348",
                          "cv-0349",
                          "cv-0350",
                          "cv-0351",
                          "cv-0352",
                          "cv-0353",
                          "cv-0354",
                          "cv-0355",
                          "cv-0356",
                          "cv-0357",
                          "cv-0358",
                          "cv-0359",
                          "cv-0360",
                          "cv-0361",
                          "cv-0362",
                          "cv-0363",
                          "cv-0364",
                          "cv-0365",
                          "cv-0366",
                          "cv-0367",
                          "cv-0368",
                          "cv-0369",
                          "cv-0370",
                          "cv-0371",
                          "cv-0372",
                          "cv-0373",
                          "cv-0374",
                          "cv-0375",
                          "cv-0376",
                          "cv-0377",
                          "cv-0378",
                          "cv-0379",
                          "cv-0380",
                          "cv-0381",
                          "cv-0382",
                          "cv-0383",
                          "cv-0384",
                          "cv-0385",
                          "cv-0386",
                          "cv-0387",
                          "cv-0388",
                          "cv-0389",
                          "cv-0390",
                          "cv-0391",
                          "cv-0392",
                          "cv-0393",
                          "cv-0394",
                          "cv-0395",
                          "cv-0396",
                          "cv-0397",
                          "cv-0398",
                          "cv-0399",
                          "cv-0400",
                          "cv-0401",
                          "cv-0402",
                          "cv-0403",
                          "cv-0404",
                          "cv-0405",
                          "cv-0406",
                          "cv-0407",
                          "cv-0408",
                          "cv-0409",
                          "cv-0410",
                          "cv-0411",
                          "cv-0412",
                          "cv-0413",
                          "cv-0414",
                          "cv-0415",
                          "cv-0416",
                          "cv-0417",
                          "cv-0418",
                          "cv-0419",
                          "cv-0420",
                          "cv-0421",
                          "cv-0422",
                          "cv-0423",
                          "cv-0424",
                          "cv-0425",
                          "cv-0426",
                          "cv-0427",
                          "cv-0428",
                          "cv-0429",
                          "cv-0430",
                          "cv-0431",
                          "cv-0432",
                          "cv-0433",
                          "cv-0434",
                          "cv-0435",
                          "cv-0436",
                          "cv-0437",
                          "cv-0438",
                          "cv-0439",
                          "cv-0440",
                          "cv-0441",
                          "cv-0442",
                          "cv-0443",
                          "cv-0444",
                          "cv-0445",
                          "cv-0446",
                          "cv-0447",
                          "cv-0448",
                          "cv-0449",
                          "cv-0450",
                          "cv-0451",
                          "cv-0452",
                          "cv-0453",
                          "cv-0454",
                          "cv-0455",
                          "cv-0456",
                          "cv-0457",
                          "cv-0458",
                          "cv-0459",
                          "cv-0460",
                          "cv-0461",
                          "cv-0462",
                          "cv-0463",
                          "cv-0464",
                          "cv-0465",
                          "cv-0466",
                          "cv-0467",
                          "cv-0469",
                          "cv-0470",
                          "cv-0471",
                          "cv-0472",
                          "cv-0473",
                          "cv-0474",
                          "cv-0475",
                          "cv-0476",
                          "cv-0477",
                          "cv-0478",
                          "cv-0479",
                          "cv-0480",
                          "cv-0481",
                          "cv-0482",
                          "cv-0483",
                          "cv-0484",
                          "cv-0485",
                          "cv-0486",
                          "cv-0487",
                          "cv-0488",
                          "cv-0489"
                        ],
                        "example": "Elon Musk",
                        "type": "string"
                      }
                    },
                    "required": [
                      "prompt",
                      "voice_name"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "style"
                ],
                "type": "object"
              },
              "outputSchema": {
                "description": "Success",
                "properties": {
                  "credits_charged": {
                    "description": "The amount of credits deducted from your account to generate the audio. We charge credits right when the request is made. \n\nIf an error occurred while generating the audio, credits will be refunded and this field will be updated to include the refund.",
                    "example": 1,
                    "type": "integer"
                  },
                  "id": {
                    "description": "Unique ID of the audio. Use it with the [Get audio Project API](https://docs.magichour.ai/api-reference/audio-projects/get-audio-details) to fetch status and downloads.",
                    "example": "cuid-example",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "credits_charged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "AI Voice Generator"
              }
            }
          ],
          "schemaTokens": 59056,
          "changedAt": "2026-11-11T02:42:44.83515798Z",
          "check": {
            "checker": "anchor-check/1.0",
            "totalTokens": 59056,
            "counts": {
              "error": 0,
              "note": 1,
              "warn": 51
            },
            "findings": [
              {
                "rule": "TC14",
                "severity": "warn",
                "tool": "create_animation",
                "message": "allowed values are in the description, not an enum: assets.audio_file_path",
                "fix": "Move them into enum."
              },
              {
                "rule": "TC14",
                "severity": "warn",
                "tool": "create_lip_sync_video",
                "message": "allowed values are in the description, not an enum: assets.video_file_path",
                "fix": "Move them into enum."
              },
              {
                "rule": "TC14",
                "severity": "warn",
                "tool": "create_video_from_image",
                "message": "allowed values are in the description, not an enum: assets.end_image_file_path",
                "fix": "Move them into enum."
              },
              {
                "rule": "TC14",
                "severity": "warn",
                "tool": "restyle_video",
                "message": "allowed values are in the description, not an enum: assets.video_file_path",
                "fix": "Move them into enum."
              },
              {
                "rule": "TC14",
                "severity": "warn",
                "tool": "swap_face_in_photo",
                "message": "allowed values are in the description, not an enum: assets.face_mappings[].new_face, assets.source_file_path",
                "fix": "Move them into enum."
              },
              {
                "rule": "TC14",
                "severity": "warn",
                "tool": "swap_face_in_video",
                "message": "allowed values are in the description, not an enum: assets.face_mappings[].new_face, assets.image_file_path, assets.video_file_path",
                "fix": "Move them into enum."
              },
              {
                "rule": "TC18",
                "severity": "warn",
                "tool": "remove_image_background",
                "message": "destructiveHint is false but the name says \"remove\"",
                "fix": "If it deletes, overwrites or moves money, destructiveHint should be true."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "change_clothes_in_photo",
                "message": "described almost the same as place_person_in_scene (82% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "change_clothes_in_photo",
                "message": "described almost the same as swap_face_in_photo (81% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "change_clothes_in_photo",
                "message": "described almost the same as swap_head_in_photo (84% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "create_spoken_ad_video",
                "message": "described almost the same as create_video_from_image (88% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "create_talking_photo",
                "message": "described almost the same as create_lip_sync_video (84% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "create_video_from_audio",
                "message": "described almost the same as remove_image_background (83% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "delete_image_project",
                "message": "described almost the same as delete_audio_project (85% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "delete_video_project",
                "message": "described almost the same as delete_image_project (85% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "delete_video_project",
                "message": "described almost the same as delete_audio_project (85% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "fetch_audio_download",
                "message": "described almost the same as fetch_video_download (82% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "fetch_image_download",
                "message": "described almost the same as fetch_audio_download (94% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "fetch_image_download",
                "message": "described almost the same as fetch_video_download (82% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "generate_headshot",
                "message": "described almost the same as remove_image_background (82% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "get_image_project",
                "message": "described almost the same as get_audio_project (86% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "get_video_project",
                "message": "described almost the same as get_image_project (86% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "get_video_project",
                "message": "described almost the same as get_audio_project (86% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "place_person_in_scene",
                "message": "described almost the same as swap_face_in_photo (80% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "place_person_in_scene",
                "message": "described almost the same as swap_head_in_photo (84% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "remove_image_background",
                "message": "described almost the same as colorize_photo (84% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "replace_character_in_video",
                "message": "described almost the same as swap_face_in_video (87% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "replace_character_in_video",
                "message": "described almost the same as change_clothes_in_photo (86% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "replace_character_in_video",
                "message": "described almost the same as swap_head_in_photo (85% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "swap_face_in_photo",
                "message": "described almost the same as swap_head_in_photo (84% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "swap_face_in_video",
                "message": "described almost the same as change_clothes_in_photo (88% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "swap_face_in_video",
                "message": "described almost the same as swap_face_in_photo (84% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "swap_face_in_video",
                "message": "described almost the same as swap_head_in_photo (85% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "translate_video",
                "message": "described almost the same as upscale_video (84% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "translate_video",
                "message": "described almost the same as create_video_from_audio (80% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "translate_video",
                "message": "described almost the same as add_subtitles_to_video (80% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "translate_video",
                "message": "described almost the same as remove_image_background (83% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "upscale_image",
                "message": "described almost the same as remove_image_background (82% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "upscale_image",
                "message": "described almost the same as colorize_photo (85% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "upscale_video",
                "message": "described almost the same as remove_image_background (82% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "wait_for_image_project",
                "message": "described almost the same as wait_for_audio_project (94% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "ai_voice_generator_create_audio",
                "message": "the definition is about 7,080 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "create_animation",
                "message": "the definition is about 1,932 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "create_video_from_image",
                "message": "the definition is about 2,275 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "create_video_from_text",
                "message": "the definition is about 2,476 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "edit_image",
                "message": "the definition is about 1,848 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "generate_image",
                "message": "the definition is about 1,849 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "replace_character_in_video",
                "message": "the definition is about 1,705 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "restyle_video",
                "message": "the definition is about 3,040 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "swap_face_in_video",
                "message": "the definition is about 1,581 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC23",
                "severity": "warn",
                "message": "53 tools, about 57,239 tokens of definitions",
                "fix": "Split the server by job, or offer a smaller default toolset (a read-only set, or a search-then-call pattern)."
              },
              {
                "rule": "TC24",
                "severity": "note",
                "message": "6 of 53 tools have no outputSchema",
                "fix": "Declare outputSchema for tools that return structured data, and return structuredContent that matches it."
              }
            ]
          }
        },
        "github": {
          "repo": "magichourhq/magic-hour-mcp",
          "checkedAt": "2026-11-09T09:49:47.370926469Z",
          "stars": 9,
          "archived": false,
          "issuesEnabled": true,
          "pushedAt": "2026-11-09T04:12:30Z",
          "openIssues": 2,
          "openPRs": 6,
          "issuesOpened90d": 2,
          "issuesClosed90d": 0,
          "prsMerged90d": 146,
          "replies": {
            "sampled": 2,
            "unanswered": 2
          }
        },
        "updatedAt": "2026-11-14T00:28:00.774497905Z"
      },
      "streak": {
        "days": 7,
        "from": "2026-11-07",
        "sinceWatching": true,
        "best": 7
      }
    },
    "edges": [
      {
        "by": 14,
        "category": "transparency",
        "leads": "gemini-omni-1-2-flash",
        "name": "Transparency \u0026 trust",
        "reasons": {
          "a": "Model reading for gemini-omni-1.2-flash on the Gemini API. Platform facts are the Gemini API listing's (gemini-api, re-read 1 November), carried over as RULES.md allows for a model on an already graded platform. Closed service with clear terms, SDKs Apache-2.0 (15). Paid only, so content isn't used to improve products; video retention isn't stated (20 of 30). Deprecations table and a dated routing notice for Omni 1.1 Flash (15 of 20). Data may be processed anywhere Google has facilities on the Gemini API route; no subprocessor list checked (5 of 20). SynthID watermarking is disclosed, and Google names the cases it still handles poorly. 15 + 20 + 15 + 5 = 55.",
          "b": "Closed service under terms naming Magic Hour AI, Inc., revised 3 October 2026 (15). The privacy policy says prompts, uploads and outputs aren't sold or used to train models, for free and paid accounts, and MCP requests are handled the same way; retention periods aren't given (20 of 30). No deprecation policy found (5 of 20). Subprocessors not read (10 of 20, model providers named in tool docs). 15 + 20 + 5 + 10 = 50."
        },
        "scores": {
          "a": 72,
          "b": 58
        }
      },
      {
        "by": 13,
        "category": "schema",
        "leads": "magic-hour-mcp",
        "name": "Schema \u0026 documentation",
        "reasons": {
          "a": "Model reading for gemini-omni-1.2-flash on the Gemini API. Platform facts are the Gemini API listing's (gemini-api, re-read 1 November), carried over as RULES.md allows for a model on an already graded platform. Called through the Interactions API, which the platform's Discovery document doesn't type; the SDK's generated Interactions types list the model (10 of 25). llms.txt with Markdown twins (10). The Omni guide, read on 11 November, covers Omni 1.1 Flash on the same API and lists what isn't supported (system instructions, temperature, negative prompts, audio references, YouTube sources) and the regional limits; it doesn't name 1.2 (16 of 20). Aspect ratio (16:9 or 9:16), resolution (360p, 720p, 1080p, 4k) and delivery are enumerated; length is set in the prompt, not a field (10 of 15). REST and SDK examples; a failed generation sets the file state to FAILED, and other error codes aren't documented beyond the platform's page (8 of 15). Dated SDK and platform changelogs (15). 10 + 10 + 16 + 10 + 8 + 15 = 69.",
          "b": "All 50 tools read from tools/list with JSON Schema inputs and 29 enums, built from Magic Hour's OpenAPI specification (25). llms.txt (10). Long descriptions with a get_workflow_guide tool for choosing between them (17 of 20). Typed inputs with enums and no free-form objects (15). Worked examples; error responses not documented (5 of 15). Dated changelog with entries on 3 to 5 November 2026 (10 of 15, product changelog rather than MCP versions). 25 + 10 + 17 + 15 + 5 + 10 = 82."
        },
        "scores": {
          "a": 69,
          "b": 82
        }
      },
      {
        "by": 10,
        "category": "reliability",
        "leads": "gemini-omni-1-2-flash",
        "name": "Reliability",
        "reasons": {
          "a": "Model reading for gemini-omni-1.2-flash on the Gemini API. Platform facts are the Gemini API listing's (gemini-api, re-read 1 November), carried over as RULES.md allows for a model on an already graded platform. Status page at aistudio.google.com/status with no readable components or history (10 of 20) and no readable incident record (5 of 30). Platform rate-limit tiers; the public rate-limit page has no Omni 1.2 row (5 of 15). Backoff guidance for 429 and 503 and SDK retries (15). No SLA read for the Gemini API route, and the Omni guide says provisioned throughput isn't supported there; Google's post puts it on Google Cloud (0). Google's post of 5 November says generally available, and the SDK commit marks the model GA (10). 10 + 5 + 5 + 15 + 0 + 10 = 45.",
          "b": "Status page at status.magichour.ai, all services online, with maintenance and previous incidents sections; no MCP component read (15). Incident history not read (5). No API rate limits found (0). No retry guidance found; wait_for_* tools poll long jobs (5 of 15). No SLA found (0). Not labelled beta (10). 15 + 5 + 0 + 5 + 0 + 10 = 35."
        },
        "scores": {
          "a": 45,
          "b": 35
        }
      },
      {
        "by": 8,
        "category": "maintenance",
        "leads": "gemini-omni-1-2-flash",
        "name": "Maintenance \u0026 community",
        "reasons": {
          "a": "Model reading for gemini-omni-1.2-flash on the Gemini API. Platform facts are the Gemini API listing's (gemini-api, re-read 1 November), carried over as RULES.md allows for a model on an already graded platform. Released and generally available on 5 November 2026; the SDKs added it to the Interactions model list on 10 November (30). Deprecations with earliest dates and no stated minimum notice (4 of 12). Churn in Google's video line: every Veo model on the Gemini API shut down by 22 October, and from 3 December 2026 requests to Omni 1.1 Flash are routed to 1.2 Flash and billed at its rates, four weeks after this release (4 of 8). Dated SDK and platform changelogs (15). SDK replies not sampled (5 of 10). Current SDKs in five languages (15). Runtimes stated (10). 30 + 4 + 4 + 15 + 5 + 15 + 10 = 83.",
          "b": "Changelog entries on 3, 4 and 5 November 2026 (30). More than three dated entries in 90 days (20). Changelog and support; issues on the public MCP repository not read (10 of 25). Registry entry io.github.magichourhq/magic-hour (0.1.1, 4 November) (15). No package health read (0). 30 + 20 + 10 + 15 + 0 = 75. Registry presence read from Anchor Terminal's own daily import of the official MCP registry (/api/v1/registry.json, 6 November 2026), not the registry's API."
        },
        "scores": {
          "a": 83,
          "b": 75
        }
      },
      {
        "by": 7,
        "category": "payments",
        "leads": "gemini-omni-1-2-flash",
        "name": "Payments \u0026 pricing",
        "reasons": {
          "a": "Model reading for gemini-omni-1.2-flash on the Gemini API. Platform facts are the Gemini API listing's (gemini-api, re-read 1 November), carried over as RULES.md allows for a model on an already graded platform. No machine payment protocol (0). The pricing page lists $1.50 per million input tokens, $12 per million video output tokens and effective rates of $0.023 a second at 360p, about $0.07 at 720p, $0.104 at 1080p and $0.209 at 4K, without a login (20). No free tier (0). A Google account and AI Studio key, or a Cloud project, come first (0). 0 + 20 + 0 + 0 = 20. Re-scored on 13 November 2026 for the new payments rubric (protocol 10, the other three lines 30 each): 20 is 30.",
          "b": "No machine payment protocol (0). Plan and credit-pack prices public, per-tool credit costs not read (10). 400 sign-up credits with no card, but API access sits on paid plans (5 of 20). A person signs up for a key in a browser (0). Tool discovery is open, but calls need a key (0). 0 + 10 + 5 + 0 = 15. Re-scored on 13 November 2026 for the new payments rubric (protocol 10, the other three lines 30 each): 15 is 23."
        },
        "scores": {
          "a": 30,
          "b": 23
        }
      },
      {
        "by": 5,
        "category": "security",
        "leads": "gemini-omni-1-2-flash",
        "name": "Security \u0026 auth",
        "reasons": {
          "a": "Model reading for gemini-omni-1.2-flash on the Gemini API. Platform facts are the Gemini API listing's (gemini-api, re-read 1 November), carried over as RULES.md allows for a model on an already graded platform. Keys bound to a service account and restricted to the Gemini API, with no scopes and a token accepted in the URL (15 of 30, the platform's deduction). The pricing page, read on 11 November, lists no free tier for Omni 1.2 Flash, and paid-tier content isn't used to improve Google's products (15 of 20). Retention of generated videos isn't stated in the guide (5 of 15). Request logs described for Generate Content, not confirmed for Interactions video calls (10 of 15). security.txt and a reward programme, no certification naming the API (5 of 20). Outputs carry a SynthID watermark, and uploads of minors and some recognisable people are refused in the EEA, Switzerland and the UK. 15 + 15 + 5 + 10 + 5 = 50.",
          "b": "API keys as Bearer tokens or OAuth through the Claude and ChatGPT connectors (20 of 30). Destructive deletes are annotated; no read-only key (8 of 20). Tools return generated media, not third-party text (10). No audit log found (0). No security.txt or certifications found; face and voice tools come with policy limits in the terms (7 of 20). 20 + 8 + 10 + 0 + 7 = 45."
        },
        "scores": {
          "a": 50,
          "b": 45
        }
      }
    ],
    "facts": [
      {
        "a": "Model API",
        "b": "MCP server",
        "name": "Kind"
      },
      {
        "a": "Google",
        "b": "Magic Hour AI, Inc.",
        "name": "Vendor"
      },
      {
        "a": "no (local only)",
        "b": "https://mcp.magichour.ai/",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP",
        "b": "Streamable HTTP",
        "name": "Transports"
      },
      {
        "a": "API key",
        "b": "OAuth or key",
        "name": "Auth"
      },
      {
        "a": "Pay per use",
        "b": "Freemium",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "Closed model, used through the Gemini API and Google Cloud under Google's terms. The google-genai SDKs are Apache-2.0",
        "b": "none",
        "name": "Licence"
      },
      {
        "a": "none",
        "b": "50",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "not listed",
        "b": "io.github.magichourhq/magic-hour",
        "name": "MCP registry"
      },
      {
        "a": "2026-11-05",
        "b": "none",
        "name": "Last release"
      },
      {
        "a": "2026-04-28",
        "b": "not read yet",
        "name": "Terms last updated"
      },
      {
        "a": "2026-10-01",
        "b": "not read yet",
        "name": "Privacy policy last updated"
      },
      {
        "a": "yes",
        "b": "not read yet",
        "name": "Customer content may train models"
      },
      {
        "a": "yes",
        "b": "not read yet",
        "name": "Terms restrict automated access"
      },
      {
        "a": "yes",
        "b": "not read yet",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "not read yet",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "not read yet",
        "name": "Arbitration or class-action waiver"
      }
    ],
    "faq": [
      {
        "answer": "Gemini Omni 1.2 Flash scores 55.1 (C) on agent readiness against Magic Hour MCP's 51.7 (D), and leads in 5 of 7 scored categories. Magic Hour MCP leads on schema \u0026 documentation.",
        "question": "Which is better for AI agents, Gemini Omni 1.2 Flash or Magic Hour MCP?"
      },
      {
        "answer": "Gemini Omni 1.2 Flash needs an API key. Magic Hour MCP takes an API key or an OAuth sign-in.",
        "question": "Do Gemini Omni 1.2 Flash and Magic Hour MCP need an API key?"
      },
      {
        "answer": "No hosted endpoint is listed for Gemini Omni 1.2 Flash. Magic Hour MCP has a hosted endpoint at https://mcp.magichour.ai/.",
        "question": "Can an agent call Gemini Omni 1.2 Flash and Magic Hour MCP without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 45 against 35",
          "Security \u0026 auth, 50 against 45",
          "Payments \u0026 pricing, 30 against 23",
          "Maintenance \u0026 community, 83 against 75",
          "Transparency \u0026 trust, 72 against 58"
        ],
        "also": null,
        "goodFor": "Short product, ad and explainer clips with audio where an agent needs to revise a clip over several turns rather than regenerate it.",
        "slug": "gemini-omni-1-2-flash",
        "watchFor": "No free tier, per the pricing page"
      },
      {
        "aheadOn": [
          "Schema \u0026 documentation, 82 against 69"
        ],
        "also": [
          "A hosted endpoint, with nothing to install"
        ],
        "goodFor": "Agents making short-form video and images, from talking photos and ads to lip-synced translations, on a credit plan.",
        "slug": "magic-hour-mcp",
        "watchFor": "About 160 KB of tool definitions"
      }
    ],
    "history": {
      "gemini-omni-1-2-flash": [
        {
          "causes": [
            "method"
          ],
          "date": "2026-11-13",
          "delta": 1.3,
          "from": 53.8,
          "fromGrade": "D",
          "to": 55.1,
          "toGrade": "C"
        }
      ],
      "magic-hour-mcp": [
        {
          "causes": [
            "method"
          ],
          "date": "2026-11-13",
          "delta": 1,
          "from": 50.7,
          "fromGrade": "D",
          "to": 51.7,
          "toGrade": "D"
        }
      ]
    },
    "job": {
      "capability": "video.generate",
      "name": "Video generation"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/alibaba-wan-vs-gemini-omni-1-2-flash.json",
        "title": "Alibaba Wan (Model Studio) vs Gemini Omni 1.2 Flash",
        "url": "https://www.anchorterminal.com/compare/alibaba-wan-vs-gemini-omni-1-2-flash"
      },
      {
        "json": "https://www.anchorterminal.com/compare/alibaba-wan-vs-magic-hour-mcp.json",
        "title": "Alibaba Wan (Model Studio) vs Magic Hour MCP",
        "url": "https://www.anchorterminal.com/compare/alibaba-wan-vs-magic-hour-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/fal-video-vs-gemini-omni-1-2-flash.json",
        "title": "fal video models vs Gemini Omni 1.2 Flash",
        "url": "https://www.anchorterminal.com/compare/fal-video-vs-gemini-omni-1-2-flash"
      },
      {
        "json": "https://www.anchorterminal.com/compare/fal-video-vs-magic-hour-mcp.json",
        "title": "fal video models vs Magic Hour MCP",
        "url": "https://www.anchorterminal.com/compare/fal-video-vs-magic-hour-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/framefields-vs-gemini-omni-1-2-flash.json",
        "title": "framefields vs Gemini Omni 1.2 Flash",
        "url": "https://www.anchorterminal.com/compare/framefields-vs-gemini-omni-1-2-flash"
      },
      {
        "json": "https://www.anchorterminal.com/compare/framefields-vs-magic-hour-mcp.json",
        "title": "framefields vs Magic Hour MCP",
        "url": "https://www.anchorterminal.com/compare/framefields-vs-magic-hour-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-google-veo.json",
        "title": "Gemini Omni 1.2 Flash vs Google Veo",
        "url": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-google-veo"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-higgsfield.json",
        "title": "Gemini Omni 1.2 Flash vs Higgsfield API",
        "url": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-higgsfield"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-hyperframes.json",
        "title": "Gemini Omni 1.2 Flash vs HyperFrames",
        "url": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-hyperframes"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-kling.json",
        "title": "Gemini Omni 1.2 Flash vs Kling AI API",
        "url": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-kling"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-luma.json",
        "title": "Gemini Omni 1.2 Flash vs Luma AI API",
        "url": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-luma"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-minimax-video.json",
        "title": "Gemini Omni 1.2 Flash vs MiniMax Video API",
        "url": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-minimax-video"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-openai-sora.json",
        "title": "Gemini Omni 1.2 Flash vs OpenAI Sora API",
        "url": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-openai-sora"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-pika.json",
        "title": "Gemini Omni 1.2 Flash vs Pika API",
        "url": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-pika"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-pixverse.json",
        "title": "Gemini Omni 1.2 Flash vs PixVerse API",
        "url": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-pixverse"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-popcraft-mcp.json",
        "title": "Gemini Omni 1.2 Flash vs Popcraft MCP",
        "url": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-popcraft-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-replicate-video.json",
        "title": "Gemini Omni 1.2 Flash vs Replicate video models",
        "url": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-replicate-video"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-runway.json",
        "title": "Gemini Omni 1.2 Flash vs Runway API",
        "url": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-runway"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-seedance-on-byteplus-modelark.json",
        "title": "Gemini Omni 1.2 Flash vs Seedance on BytePlus ModelArk",
        "url": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-seedance-on-byteplus-modelark"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-vidu.json",
        "title": "Gemini Omni 1.2 Flash vs Vidu API",
        "url": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-vidu"
      },
      {
        "json": "https://www.anchorterminal.com/compare/google-veo-vs-magic-hour-mcp.json",
        "title": "Google Veo vs Magic Hour MCP",
        "url": "https://www.anchorterminal.com/compare/google-veo-vs-magic-hour-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/higgsfield-vs-magic-hour-mcp.json",
        "title": "Higgsfield API vs Magic Hour MCP",
        "url": "https://www.anchorterminal.com/compare/higgsfield-vs-magic-hour-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/hyperframes-vs-magic-hour-mcp.json",
        "title": "HyperFrames vs Magic Hour MCP",
        "url": "https://www.anchorterminal.com/compare/hyperframes-vs-magic-hour-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/kling-vs-magic-hour-mcp.json",
        "title": "Kling AI API vs Magic Hour MCP",
        "url": "https://www.anchorterminal.com/compare/kling-vs-magic-hour-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/luma-vs-magic-hour-mcp.json",
        "title": "Luma AI API vs Magic Hour MCP",
        "url": "https://www.anchorterminal.com/compare/luma-vs-magic-hour-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/magic-hour-mcp-vs-minimax-video.json",
        "title": "Magic Hour MCP vs MiniMax Video API",
        "url": "https://www.anchorterminal.com/compare/magic-hour-mcp-vs-minimax-video"
      },
      {
        "json": "https://www.anchorterminal.com/compare/magic-hour-mcp-vs-openai-sora.json",
        "title": "Magic Hour MCP vs OpenAI Sora API",
        "url": "https://www.anchorterminal.com/compare/magic-hour-mcp-vs-openai-sora"
      },
      {
        "json": "https://www.anchorterminal.com/compare/magic-hour-mcp-vs-pika.json",
        "title": "Magic Hour MCP vs Pika API",
        "url": "https://www.anchorterminal.com/compare/magic-hour-mcp-vs-pika"
      },
      {
        "json": "https://www.anchorterminal.com/compare/magic-hour-mcp-vs-pixverse.json",
        "title": "Magic Hour MCP vs PixVerse API",
        "url": "https://www.anchorterminal.com/compare/magic-hour-mcp-vs-pixverse"
      },
      {
        "json": "https://www.anchorterminal.com/compare/magic-hour-mcp-vs-popcraft-mcp.json",
        "title": "Magic Hour MCP vs Popcraft MCP",
        "url": "https://www.anchorterminal.com/compare/magic-hour-mcp-vs-popcraft-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/magic-hour-mcp-vs-replicate-video.json",
        "title": "Magic Hour MCP vs Replicate video models",
        "url": "https://www.anchorterminal.com/compare/magic-hour-mcp-vs-replicate-video"
      },
      {
        "json": "https://www.anchorterminal.com/compare/magic-hour-mcp-vs-runway.json",
        "title": "Magic Hour MCP vs Runway API",
        "url": "https://www.anchorterminal.com/compare/magic-hour-mcp-vs-runway"
      },
      {
        "json": "https://www.anchorterminal.com/compare/magic-hour-mcp-vs-seedance-on-byteplus-modelark.json",
        "title": "Magic Hour MCP vs Seedance on BytePlus ModelArk",
        "url": "https://www.anchorterminal.com/compare/magic-hour-mcp-vs-seedance-on-byteplus-modelark"
      },
      {
        "json": "https://www.anchorterminal.com/compare/magic-hour-mcp-vs-vidu.json",
        "title": "Magic Hour MCP vs Vidu API",
        "url": "https://www.anchorterminal.com/compare/magic-hour-mcp-vs-vidu"
      },
      {
        "json": "https://www.anchorterminal.com/compare/clueso-video-vs-gemini-omni-1-2-flash.json",
        "title": "Clueso vs Gemini Omni 1.2 Flash",
        "url": "https://www.anchorterminal.com/compare/clueso-video-vs-gemini-omni-1-2-flash"
      },
      {
        "json": "https://www.anchorterminal.com/compare/clueso-video-vs-magic-hour-mcp.json",
        "title": "Clueso vs Magic Hour MCP",
        "url": "https://www.anchorterminal.com/compare/clueso-video-vs-magic-hour-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-sync-labs-mcp.json",
        "title": "Gemini Omni 1.2 Flash vs sync. labs MCP server",
        "url": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-sync-labs-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/magic-hour-mcp-vs-sync-labs-mcp.json",
        "title": "Magic Hour MCP vs sync. labs MCP server",
        "url": "https://www.anchorterminal.com/compare/magic-hour-mcp-vs-sync-labs-mcp"
      }
    ],
    "panel": null,
    "scores": [
      {
        "by": 10,
        "edge": "gemini-omni-1-2-flash",
        "gemini-omni-1-2-flash": 45,
        "key": "reliability",
        "magic-hour-mcp": 35,
        "name": "Reliability",
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 13,
        "edge": "magic-hour-mcp",
        "gemini-omni-1-2-flash": 69,
        "key": "schema",
        "magic-hour-mcp": 82,
        "name": "Schema \u0026 documentation",
        "weight": 13
      },
      {
        "by": 1,
        "edge": "magic-hour-mcp",
        "gemini-omni-1-2-flash": 54,
        "key": "ergonomics",
        "magic-hour-mcp": 55,
        "name": "Agent ergonomics",
        "weight": 13
      },
      {
        "by": 5,
        "edge": "gemini-omni-1-2-flash",
        "gemini-omni-1-2-flash": 50,
        "key": "security",
        "magic-hour-mcp": 45,
        "name": "Security \u0026 auth",
        "weight": 14
      },
      {
        "by": 7,
        "edge": "gemini-omni-1-2-flash",
        "gemini-omni-1-2-flash": 30,
        "key": "payments",
        "magic-hour-mcp": 23,
        "name": "Payments \u0026 pricing",
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 8,
        "edge": "gemini-omni-1-2-flash",
        "gemini-omni-1-2-flash": 83,
        "key": "maintenance",
        "magic-hour-mcp": 75,
        "name": "Maintenance \u0026 community",
        "weight": 7
      },
      {
        "by": 14,
        "edge": "gemini-omni-1-2-flash",
        "gemini-omni-1-2-flash": 72,
        "key": "transparency",
        "magic-hour-mcp": 58,
        "name": "Transparency \u0026 trust",
        "weight": 7
      }
    ],
    "summary": "Gemini Omni 1.2 Flash scores 55.1 (C) on agent readiness against Magic Hour MCP's 51.7 (D), and leads in 5 of 7 scored categories. Magic Hour MCP leads on schema \u0026 documentation. Both do video generation.",
    "tasks": null,
    "tutorials": [],
    "verdicts": {
      "gemini-omni-1-2-flash": "Google's generally available video model makes clips of up to 15 seconds with audio, edits them turn by turn and upscales drafts to 1080p or 4K, from $0.023 a second at 360p to $0.209 at 4K. It is paid only, the guide still describes Omni 1.1, and every quality claim is Google's.",
      "magic-hour-mcp": "Magic Hour's MCP server exposes its whole image and video toolkit, lip sync, face swap, upscaling and text-to-video, with typed schemas built from its OpenAPI file and every tool annotated. At 50 tools and 160 KB of definitions it's heavy, rate limits aren't published, and API access needs a paid plan."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-magic-hour-mcp",
    "json": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-magic-hour-mcp.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-magic-hour-mcp.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-magic-hour-mcp.min.md"
  },
  "markdown": "Gemini Omni 1.2 Flash scores 55.1 (C) on agent readiness against Magic Hour MCP's 51.7 (D), and leads in 5 of 7 scored categories. Magic Hour MCP leads on schema \u0026 documentation. Both do video generation.\n\n- Gemini Omni 1.2 Flash: grade C, 55.1/100, rank #972 of 1524. Markdown https://www.anchorterminal.com/tools/gemini-omni-1-2-flash.md · JSON https://www.anchorterminal.com/api/v1/tools/gemini-omni-1-2-flash.json\n- Magic Hour MCP: grade D, 51.7/100, rank #1090 of 1524. Markdown https://www.anchorterminal.com/tools/magic-hour-mcp.md · JSON https://www.anchorterminal.com/api/v1/tools/magic-hour-mcp.json\n- Best video generation for AI agents: https://www.anchorterminal.com/best/video-generation/index.md\n- All 203 video comparisons: https://www.anchorterminal.com/compare/video-generation/index.md\n\n## Which one, for what\n\n### Gemini Omni 1.2 Flash (C)\n\nGood for: Short product, ad and explainer clips with audio where an agent needs to revise a clip over several turns rather than regenerate it.\n\nAhead on:\n- Reliability, 45 against 35\n- Security \u0026 auth, 50 against 45\n- Payments \u0026 pricing, 30 against 23\n- Maintenance \u0026 community, 83 against 75\n- Transparency \u0026 trust, 72 against 58\n\nWatch for: No free tier, per the pricing page\n\n### Magic Hour MCP (D)\n\nGood for: Agents making short-form video and images, from talking photos and ads to lip-synced translations, on a credit plan.\n\nAhead on:\n- Schema \u0026 documentation, 82 against 69\n\nAlso in its favour:\n- A hosted endpoint, with nothing to install\n\nWatch for: About 160 KB of tool definitions\n\n\n## Why the edge\n\n### Transparency \u0026 trust: Gemini Omni 1.2 Flash +14\n\n- Gemini Omni 1.2 Flash (72): Model reading for gemini-omni-1.2-flash on the Gemini API. Platform facts are the Gemini API listing's (gemini-api, re-read 1 November), carried over as RULES.md allows for a model on an already graded platform. Closed service with clear terms, SDKs Apache-2.0 (15). Paid only, so content isn't used to improve products; video retention isn't stated (20 of 30). Deprecations table and a dated routing notice for Omni 1.1 Flash (15 of 20). Data may be processed anywhere Google has facilities on the Gemini API route; no subprocessor list checked (5 of 20). SynthID watermarking is disclosed, and Google names the cases it still handles poorly. 15 + 20 + 15 + 5 = 55.\n- Magic Hour MCP (58): Closed service under terms naming Magic Hour AI, Inc., revised 3 October 2026 (15). The privacy policy says prompts, uploads and outputs aren't sold or used to train models, for free and paid accounts, and MCP requests are handled the same way; retention periods aren't given (20 of 30). No deprecation policy found (5 of 20). Subprocessors not read (10 of 20, model providers named in tool docs). 15 + 20 + 5 + 10 = 50.\n\n### Schema \u0026 documentation: Magic Hour MCP +13\n\n- Gemini Omni 1.2 Flash (69): Model reading for gemini-omni-1.2-flash on the Gemini API. Platform facts are the Gemini API listing's (gemini-api, re-read 1 November), carried over as RULES.md allows for a model on an already graded platform. Called through the Interactions API, which the platform's Discovery document doesn't type; the SDK's generated Interactions types list the model (10 of 25). llms.txt with Markdown twins (10). The Omni guide, read on 11 November, covers Omni 1.1 Flash on the same API and lists what isn't supported (system instructions, temperature, negative prompts, audio references, YouTube sources) and the regional limits; it doesn't name 1.2 (16 of 20). Aspect ratio (16:9 or 9:16), resolution (360p, 720p, 1080p, 4k) and delivery are enumerated; length is set in the prompt, not a field (10 of 15). REST and SDK examples; a failed generation sets the file state to FAILED, and other error codes aren't documented beyond the platform's page (8 of 15). Dated SDK and platform changelogs (15). 10 + 10 + 16 + 10 + 8 + 15 = 69.\n- Magic Hour MCP (82): All 50 tools read from tools/list with JSON Schema inputs and 29 enums, built from Magic Hour's OpenAPI specification (25). llms.txt (10). Long descriptions with a get_workflow_guide tool for choosing between them (17 of 20). Typed inputs with enums and no free-form objects (15). Worked examples; error responses not documented (5 of 15). Dated changelog with entries on 3 to 5 November 2026 (10 of 15, product changelog rather than MCP versions). 25 + 10 + 17 + 15 + 5 + 10 = 82.\n\n### Reliability: Gemini Omni 1.2 Flash +10\n\n- Gemini Omni 1.2 Flash (45): Model reading for gemini-omni-1.2-flash on the Gemini API. Platform facts are the Gemini API listing's (gemini-api, re-read 1 November), carried over as RULES.md allows for a model on an already graded platform. Status page at aistudio.google.com/status with no readable components or history (10 of 20) and no readable incident record (5 of 30). Platform rate-limit tiers; the public rate-limit page has no Omni 1.2 row (5 of 15). Backoff guidance for 429 and 503 and SDK retries (15). No SLA read for the Gemini API route, and the Omni guide says provisioned throughput isn't supported there; Google's post puts it on Google Cloud (0). Google's post of 5 November says generally available, and the SDK commit marks the model GA (10). 10 + 5 + 5 + 15 + 0 + 10 = 45.\n- Magic Hour MCP (35): Status page at status.magichour.ai, all services online, with maintenance and previous incidents sections; no MCP component read (15). Incident history not read (5). No API rate limits found (0). No retry guidance found; wait_for_* tools poll long jobs (5 of 15). No SLA found (0). Not labelled beta (10). 15 + 5 + 0 + 5 + 0 + 10 = 35.\n\n### Maintenance \u0026 community: Gemini Omni 1.2 Flash +8\n\n- Gemini Omni 1.2 Flash (83): Model reading for gemini-omni-1.2-flash on the Gemini API. Platform facts are the Gemini API listing's (gemini-api, re-read 1 November), carried over as RULES.md allows for a model on an already graded platform. Released and generally available on 5 November 2026; the SDKs added it to the Interactions model list on 10 November (30). Deprecations with earliest dates and no stated minimum notice (4 of 12). Churn in Google's video line: every Veo model on the Gemini API shut down by 22 October, and from 3 December 2026 requests to Omni 1.1 Flash are routed to 1.2 Flash and billed at its rates, four weeks after this release (4 of 8). Dated SDK and platform changelogs (15). SDK replies not sampled (5 of 10). Current SDKs in five languages (15). Runtimes stated (10). 30 + 4 + 4 + 15 + 5 + 15 + 10 = 83.\n- Magic Hour MCP (75): Changelog entries on 3, 4 and 5 November 2026 (30). More than three dated entries in 90 days (20). Changelog and support; issues on the public MCP repository not read (10 of 25). Registry entry io.github.magichourhq/magic-hour (0.1.1, 4 November) (15). No package health read (0). 30 + 20 + 10 + 15 + 0 = 75. Registry presence read from Anchor Terminal's own daily import of the official MCP registry (/api/v1/registry.json, 6 November 2026), not the registry's API.\n\n### Payments \u0026 pricing: Gemini Omni 1.2 Flash +7\n\n- Gemini Omni 1.2 Flash (30): Model reading for gemini-omni-1.2-flash on the Gemini API. Platform facts are the Gemini API listing's (gemini-api, re-read 1 November), carried over as RULES.md allows for a model on an already graded platform. No machine payment protocol (0). The pricing page lists $1.50 per million input tokens, $12 per million video output tokens and effective rates of $0.023 a second at 360p, about $0.07 at 720p, $0.104 at 1080p and $0.209 at 4K, without a login (20). No free tier (0). A Google account and AI Studio key, or a Cloud project, come first (0). 0 + 20 + 0 + 0 = 20. Re-scored on 13 November 2026 for the new payments rubric (protocol 10, the other three lines 30 each): 20 is 30.\n- Magic Hour MCP (23): No machine payment protocol (0). Plan and credit-pack prices public, per-tool credit costs not read (10). 400 sign-up credits with no card, but API access sits on paid plans (5 of 20). A person signs up for a key in a browser (0). Tool discovery is open, but calls need a key (0). 0 + 10 + 5 + 0 = 15. Re-scored on 13 November 2026 for the new payments rubric (protocol 10, the other three lines 30 each): 15 is 23.\n\n### Security \u0026 auth: Gemini Omni 1.2 Flash +5\n\n- Gemini Omni 1.2 Flash (50): Model reading for gemini-omni-1.2-flash on the Gemini API. Platform facts are the Gemini API listing's (gemini-api, re-read 1 November), carried over as RULES.md allows for a model on an already graded platform. Keys bound to a service account and restricted to the Gemini API, with no scopes and a token accepted in the URL (15 of 30, the platform's deduction). The pricing page, read on 11 November, lists no free tier for Omni 1.2 Flash, and paid-tier content isn't used to improve Google's products (15 of 20). Retention of generated videos isn't stated in the guide (5 of 15). Request logs described for Generate Content, not confirmed for Interactions video calls (10 of 15). security.txt and a reward programme, no certification naming the API (5 of 20). Outputs carry a SynthID watermark, and uploads of minors and some recognisable people are refused in the EEA, Switzerland and the UK. 15 + 15 + 5 + 10 + 5 = 50.\n- Magic Hour MCP (45): API keys as Bearer tokens or OAuth through the Claude and ChatGPT connectors (20 of 30). Destructive deletes are annotated; no read-only key (8 of 20). Tools return generated media, not third-party text (10). No audit log found (0). No security.txt or certifications found; face and voice tools come with policy limits in the terms (7 of 20). 20 + 8 + 10 + 0 + 7 = 45.\n\n## Score by category\n\n| Category | Weight | Gemini Omni 1.2 Flash | Magic Hour MCP | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 45 | 35 | Gemini Omni 1.2 Flash +10 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 69 | 82 | Magic Hour MCP +13 |\n| Agent ergonomics | 13% (16.2 this run) | 54 | 55 | Magic Hour MCP +1 |\n| Security \u0026 auth | 14% (17.5 this run) | 50 | 45 | Gemini Omni 1.2 Flash +5 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 30 | 23 | Gemini Omni 1.2 Flash +7 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 83 | 75 | Gemini Omni 1.2 Flash +8 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 72 | 58 | Gemini Omni 1.2 Flash +14 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **55.1 · C** | **51.7 · D** | |\n\n## Facts side by side\n\n| Fact | Gemini Omni 1.2 Flash | Magic Hour MCP |\n| --- | --- | --- |\n| Kind | Model API | MCP server |\n| Vendor | Google | Magic Hour AI, Inc. |\n| Hosted endpoint | no (local only) | `https://mcp.magichour.ai/` |\n| Transports | HTTP | Streamable HTTP |\n| Auth | API key | OAuth or key |\n| Pricing | Pay per use | Freemium |\n| x402 | no | no |\n| Licence | Closed model, used through the Gemini API and Google Cloud under Google's terms. The google-genai SDKs are Apache-2.0 | none |\n| Tools exposed | none | 50 |\n| Read-only variant documented | no | no |\n| llms.txt | yes | yes |\n| MCP registry | not listed | `io.github.magichourhq/magic-hour` |\n| Last release | 2026-11-05 | none |\n| Terms last updated | 2026-04-28 | not read yet |\n| Privacy policy last updated | 2026-10-01 | not read yet |\n| Customer content may train models | yes | not read yet |\n| Terms restrict automated access | yes | not read yet |\n| Terms restrict benchmarking | yes | not read yet |\n| Terms or service can change without notice | not found in the text | not read yet |\n| Arbitration or class-action waiver | not found in the text | not read yet |\n\n## How the scores have moved\n\n### Gemini Omni 1.2 Flash\n\n- +1.3 on 13 November 2026 (D to C): checklist\n\n### Magic Hour MCP\n\n- +1.0 on 13 November 2026: checklist\n\n## Verdicts\n\n**Gemini Omni 1.2 Flash.** Google's generally available video model makes clips of up to 15 seconds with audio, edits them turn by turn and upscales drafts to 1080p or 4K, from $0.023 a second at 360p to $0.209 at 4K. It is paid only, the guide still describes Omni 1.1, and every quality claim is Google's.\n\n**Magic Hour MCP.** Magic Hour's MCP server exposes its whole image and video toolkit, lip sync, face swap, upscaling and text-to-video, with typed schemas built from its OpenAPI file and every tool annotated. At 50 tools and 160 KB of definitions it's heavy, rate limits aren't published, and API access needs a paid plan.\n\n## Before you call either\n\n### Gemini Omni 1.2 Flash\n\n1. Call POST /v1beta/interactions with model gemini-omni-1.2-flash and response_format type video; Veo is gone from the Gemini API\n2. Set delivery to uri for clips over 4 MB and poll the file until ACTIVE; a later GET returns base64 only\n3. Edit with previous_interaction_id and leave store on, or the clip can't be edited in a later turn\n4. Set length in the prompt with timecodes such as [0-3s]; there is no duration field\n5. Draft at 360p or 720p and upscale only the keepers: 4K costs about nine times 360p\n\n### Magic Hour MCP\n\n1. Call get_workflow_guide first to pick the right tool\n2. Use the wait_for_* tools instead of polling project status yourself\n3. Check credits with get_account_info before long video jobs\n4. Only swap faces or voices of people who consented\n\n## Questions\n\n### Which is better for AI agents, Gemini Omni 1.2 Flash or Magic Hour MCP?\n\nGemini Omni 1.2 Flash scores 55.1 (C) on agent readiness against Magic Hour MCP's 51.7 (D), and leads in 5 of 7 scored categories. Magic Hour MCP leads on schema \u0026 documentation.\n\n### Do Gemini Omni 1.2 Flash and Magic Hour MCP need an API key?\n\nGemini Omni 1.2 Flash needs an API key. Magic Hour MCP takes an API key or an OAuth sign-in.\n\n### Can an agent call Gemini Omni 1.2 Flash and Magic Hour MCP without installing anything?\n\nNo hosted endpoint is listed for Gemini Omni 1.2 Flash. Magic Hour MCP has a hosted endpoint at https://mcp.magichour.ai/.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-magic-hour-mcp.json, and with the fewest tokens: https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-magic-hour-mcp.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"gemini-omni-1-2-flash\", \"b\": \"magic-hour-mcp\"}`. From a terminal: `anchor compare gemini-omni-1-2-flash magic-hour-mcp`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/gemini-omni-1-2-flash.json and https://www.anchorterminal.com/api/v1/tools/magic-hour-mcp.json\n\n## Other comparisons with Gemini Omni 1.2 Flash or Magic Hour MCP\n\n- [Alibaba Wan (Model Studio) vs Gemini Omni 1.2 Flash](https://www.anchorterminal.com/compare/alibaba-wan-vs-gemini-omni-1-2-flash.md)\n- [Alibaba Wan (Model Studio) vs Magic Hour MCP](https://www.anchorterminal.com/compare/alibaba-wan-vs-magic-hour-mcp.md)\n- [fal video models vs Gemini Omni 1.2 Flash](https://www.anchorterminal.com/compare/fal-video-vs-gemini-omni-1-2-flash.md)\n- [fal video models vs Magic Hour MCP](https://www.anchorterminal.com/compare/fal-video-vs-magic-hour-mcp.md)\n- [framefields vs Gemini Omni 1.2 Flash](https://www.anchorterminal.com/compare/framefields-vs-gemini-omni-1-2-flash.md)\n- [framefields vs Magic Hour MCP](https://www.anchorterminal.com/compare/framefields-vs-magic-hour-mcp.md)\n- [Gemini Omni 1.2 Flash vs Google Veo](https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-google-veo.md)\n- [Gemini Omni 1.2 Flash vs Higgsfield API](https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-higgsfield.md)\n- [Gemini Omni 1.2 Flash vs HyperFrames](https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-hyperframes.md)\n- [Gemini Omni 1.2 Flash vs Kling AI API](https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-kling.md)\n- [Gemini Omni 1.2 Flash vs Luma AI API](https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-luma.md)\n- [Gemini Omni 1.2 Flash vs MiniMax Video API](https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-minimax-video.md)\n- [Gemini Omni 1.2 Flash vs OpenAI Sora API](https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-openai-sora.md)\n- [Gemini Omni 1.2 Flash vs Pika API](https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-pika.md)\n- [Gemini Omni 1.2 Flash vs PixVerse API](https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-pixverse.md)\n- [Gemini Omni 1.2 Flash vs Popcraft MCP](https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-popcraft-mcp.md)\n- [Gemini Omni 1.2 Flash vs Replicate video models](https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-replicate-video.md)\n- [Gemini Omni 1.2 Flash vs Runway API](https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-runway.md)\n- [Gemini Omni 1.2 Flash vs Seedance on BytePlus ModelArk](https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-seedance-on-byteplus-modelark.md)\n- [Gemini Omni 1.2 Flash vs Vidu API](https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-vidu.md)\n- [Google Veo vs Magic Hour MCP](https://www.anchorterminal.com/compare/google-veo-vs-magic-hour-mcp.md)\n- [Higgsfield API vs Magic Hour MCP](https://www.anchorterminal.com/compare/higgsfield-vs-magic-hour-mcp.md)\n- [HyperFrames vs Magic Hour MCP](https://www.anchorterminal.com/compare/hyperframes-vs-magic-hour-mcp.md)\n- [Kling AI API vs Magic Hour MCP](https://www.anchorterminal.com/compare/kling-vs-magic-hour-mcp.md)\n- [Luma AI API vs Magic Hour MCP](https://www.anchorterminal.com/compare/luma-vs-magic-hour-mcp.md)\n- [Magic Hour MCP vs MiniMax Video API](https://www.anchorterminal.com/compare/magic-hour-mcp-vs-minimax-video.md)\n- [Magic Hour MCP vs OpenAI Sora API](https://www.anchorterminal.com/compare/magic-hour-mcp-vs-openai-sora.md)\n- [Magic Hour MCP vs Pika API](https://www.anchorterminal.com/compare/magic-hour-mcp-vs-pika.md)\n- [Magic Hour MCP vs PixVerse API](https://www.anchorterminal.com/compare/magic-hour-mcp-vs-pixverse.md)\n- [Magic Hour MCP vs Popcraft MCP](https://www.anchorterminal.com/compare/magic-hour-mcp-vs-popcraft-mcp.md)\n- [Magic Hour MCP vs Replicate video models](https://www.anchorterminal.com/compare/magic-hour-mcp-vs-replicate-video.md)\n- [Magic Hour MCP vs Runway API](https://www.anchorterminal.com/compare/magic-hour-mcp-vs-runway.md)\n- [Magic Hour MCP vs Seedance on BytePlus ModelArk](https://www.anchorterminal.com/compare/magic-hour-mcp-vs-seedance-on-byteplus-modelark.md)\n- [Magic Hour MCP vs Vidu API](https://www.anchorterminal.com/compare/magic-hour-mcp-vs-vidu.md)\n- [Clueso vs Gemini Omni 1.2 Flash](https://www.anchorterminal.com/compare/clueso-video-vs-gemini-omni-1-2-flash.md)\n- [Clueso vs Magic Hour MCP](https://www.anchorterminal.com/compare/clueso-video-vs-magic-hour-mcp.md)\n- [Gemini Omni 1.2 Flash vs sync. labs MCP server](https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-sync-labs-mcp.md)\n- [Magic Hour MCP vs sync. labs MCP server](https://www.anchorterminal.com/compare/magic-hour-mcp-vs-sync-labs-mcp.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "attributionRequired": true,
    "credit": "CC BY 4.0, credit Anchor Terminal and link the page or API address you took it from (https://www.anchorterminal.com/terms/#data)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-11-14",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.8",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run",
    "terms": "https://www.anchorterminal.com/terms/#data"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Gemini Omni 1.2 Flash vs Magic Hour MCP",
        "url": ""
      }
    ],
    "description": "Gemini Omni 1.2 Flash scores 55.1 (C) to Magic Hour MCP's 51.7 (D) for video generation. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Gemini Omni 1.2 Flash C 55.1",
      "Magic Hour MCP D 51.7",
      "scores"
    ],
    "h1": "Gemini Omni 1.2 Flash vs Magic Hour MCP",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/gemini-omni-1-2-flash-vs-magic-hour-mcp",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Gemini Omni 1.2 Flash vs Magic Hour MCP for AI agents (2026)",
    "toc": null,
    "updated": "2026-11-13",
    "url": "https://www.anchorterminal.com/compare/gemini-omni-1-2-flash-vs-magic-hour-mcp"
  },
  "tokens": {
    "markdown": 4950,
    "slim": 1080
  },
  "version": 1
}
