create_carousel

Create a carousel

Render 2–20 pictures, in order, into one carousel: an image set in the library, one picture per page, each with at most one line of text and one inset (a real screenshot in a phone frame). Every source is a ready image generation or an image upload. Text sits at top, middle or bottom inside the canvas's reading zone, in one style for the whole set; a line too long for its band shrinks until it fits, down to 24px, so keep lines short enough to read on a phone. Rendering costs no credits and returns immediately with the set's generation id; get_generation waits until it is ready, then get_download_url on it returns one ordered ZIP, and with as: "image" the pictures themselves (the first ten pages, in order).

Scope

Behaviour

Writes
Creates or changes items in the caller's own account.
Adds or updates
Adds or updates; nothing the caller already has is deleted or overwritten.
Stays in the account
Stays inside the caller's private Kuro account: any media provider it calls acts on Kuro's account, and the result is visible to no one else.

Credits

What the tool's description says about credits, verbatim.

Inputs

Example call

A tools/call request with the required arguments only, each a placeholder read off the schema. Replace them before sending.

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "create_carousel",
    "arguments": {
      "canvas": "9:16",
      "pages": [
        {
          "source": {
            "type": "upload",
            "upload_id": "00000000-0000-4000-8000-000000000000"
          }
        },
        {
          "source": {
            "type": "upload",
            "upload_id": "00000000-0000-4000-8000-000000000000"
          }
        }
      ]
    }
  }
}

Input schema

As the server sends it in tools/list.

{
  "type": "object",
  "properties": {
    "canvas": {
      "type": "string",
      "enum": [
        "9:16",
        "4:5",
        "3:4",
        "1:1"
      ],
      "description": "The page shape: 9:16 for a TikTok photo post, 4:5 for an Instagram feed carousel."
    },
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120,
      "description": "The set's name in the library; pages are named after it."
    },
    "style": {
      "type": "object",
      "properties": {
        "align": {
          "type": "string",
          "enum": [
            "left",
            "center",
            "right"
          ]
        },
        "font_id": {
          "type": "string",
          "enum": [
            "inter",
            "montserrat",
            "oswald",
            "archivo-black",
            "noto-sans",
            "tiktok-sans"
          ]
        },
        "font_weight": {
          "type": "integer",
          "minimum": 100,
          "maximum": 900,
          "multipleOf": 100
        },
        "font_size": {
          "type": "integer",
          "minimum": 24,
          "maximum": 160
        },
        "color": {
          "type": "string",
          "pattern": "^#[0-9a-fA-F]{6}$"
        },
        "outline": {
          "type": "boolean"
        },
        "box": {
          "type": "boolean"
        }
      },
      "required": [
        "align",
        "font_id",
        "font_weight",
        "font_size",
        "color",
        "outline",
        "box"
      ],
      "additionalProperties": false,
      "description": "How every line is set: { align, font_id, font_weight, font_size, color, outline, box }. Omitted, the photo-slideshow look: tiktok-sans at 600, 64px, white with outline, no box. box puts a solid band behind each line."
    },
    "pages": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "source": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "upload"
                  },
                  "upload_id": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "required": [
                  "type",
                  "upload_id"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "generation"
                  },
                  "generation_id": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "required": [
                  "type",
                  "generation_id"
                ],
                "additionalProperties": false
              }
            ]
          },
          "focus": {
            "type": "object",
            "properties": {
              "x": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "y": {
                "$ref": "#/properties/pages/items/properties/focus/properties/x"
              }
            },
            "required": [
              "x",
              "y"
            ],
            "additionalProperties": false,
            "default": {
              "x": 0.5,
              "y": 0.5
            }
          },
          "text": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 500
                  },
                  "position": {
                    "type": "string",
                    "enum": [
                      "top",
                      "middle",
                      "bottom"
                    ]
                  }
                },
                "required": [
                  "content",
                  "position"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ],
            "default": null
          },
          "inset": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "source": {
                    "$ref": "#/properties/pages/items/properties/source"
                  },
                  "frame": {
                    "type": "string",
                    "enum": [
                      "phone",
                      "none"
                    ]
                  }
                },
                "required": [
                  "source",
                  "frame"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ],
            "default": null
          }
        },
        "required": [
          "source"
        ],
        "additionalProperties": false
      },
      "minItems": 2,
      "maxItems": 20,
      "description": "In page order. source is { type: \"generation\", generation_id } or { type: \"upload\", upload_id }. text is null or { content, position: \"top\" | \"middle\" | \"bottom\" }. inset is null or { source, frame: \"phone\" | \"none\" }. focus { x, y } anchors the crop, 0.5/0.5 by default."
    }
  },
  "required": [
    "canvas",
    "pages"
  ],
  "additionalProperties": false
}

Related tools

Every tool· This page as Markdown