Orshot
Render on-brand images, PDFs and videos from templates.
От сообщества: Добавлен пользователем или импортирован; проверьте владельца перед подключениемРаботаетБез входаГлобальныйБесплатноТолько чтение
Что умеет
- Orshot Auth Status: Check if authenticated and list available workspaces.
- Orshot List Workspaces: List all workspaces you have access to via OAuth.
- Orshot Set Active Workspace: Set which workspace to use for subsequent operations.
Какие данные видит
Нужен ли аккаунт
Не нужен: сервер работает без входа
Render on-brand images, PDFs and videos from templates. 60+ tools: brand kit, folders, workflows.
Orshot is a creative automation platform. Design a template once, then generate on-brand images, PDFs and videos from it at scale.
This server gives an agent the whole loop: design a template from a brief, render any format from your data, keep assets on brand and organised in folders, mint signed URLs for OG images and embeds, and build workflows that keep running on a schedule.
Auth is OAuth, scoped to one workspace. No API key to wire up.
Learn more: https://orshot.com/agents
Список инструментов сервера (60)
Технические названия из tools/list. Нужны только разработчикам.
| orshot_auth_status | Check if authenticated and list available workspaces. |
| orshot_list_workspaces | List all workspaces you have access to via OAuth. |
| orshot_set_active_workspace | Set which workspace to use for subsequent operations. |
| orshot_list_studio_templates | List studio templates in the active workspace. Supports server-side search by name and filtering by tags. |
| orshot_get_studio_template | Get full details of a studio template including design structure. |
| orshot_get_studio_template_modifications | Get the available modification parameters for a studio template. Returns the list of dynamic fields (text, image, etc.) that can be customized when rendering via orshot_generate_image. The response contains a "modifications" array where each entry has: - id: The key to use in the modifications object when rendering. For single-page templates this is just the parameterId (e.g. "headline"). For multi-page templates it is prefixed with the page number (e.g. "page1@headline", "page2@cta_text"). - type: The parameter type — "text", "imageUrl", "videoUrl", "backgroundColor", "fill", "color" - description: Human-readable label Beyond these listed keys, EVERY parameterizable element also accepts implicit dot-notation render props (not listed in the response): - Style: "paramId.fontSize": "64px", "paramId.color": "#FF0000", etc. - Animation timing (video renders): "paramId.showAt", "paramId.hideAt", "paramId.enterType"/"enterDuration"/"enterEasing"/"enterReverse", "paramId.exitType"/"exitDuration"/"exitEasing"/"exitReverse" - Video elements: "paramId.trimStart", "paramId.trimEnd", "paramId.muted", "paramId.loop" Audio is NOT a modification — swap a template's soundtrack via videoOptions.audioSource on orshot_generate_image. - element: The element details (type, current default content, parameterId) Also returns "modifications_json" — a flat key→defaultValue map you can use as a starting point and override specific keys. |
| orshot_create_template_design | Create a new studio template with an initial design structure. 📖 Read the **orshot://template-design-spec** resource first — it has the element structure, text rules, the verified animation schema, canvas sizes, and the common render gotchas (this tool also returns ⚠️ "Design checks" warnings for those gotchas so you can fix them in the polish update). 🎨 For design quality, read the **orshot://design-spec/general** resource (the craft layer: hierarchy, 2-font typography, 60-30-10 color, brand-first, variety, anti-slop) — then the matching vertical pack, e.g. **orshot://design-pack/social-media** (formats, safe areas, archetypes, a concrete recipe). For recognised verticals this tool returns a "🎨 Design check" (layout-repetition, font/contrast, plus an informational brand-kit note) to resolve in your polish update. Brand assets are CONTEXTUAL — apply them only when the design should be on-brand (the prompt references the user's brand/product); a generic/standalone look needs no brand assets. IMPORTANT: Keep the initial design simple — create the template with basic layout and core elements (canvas, background, key text/image placeholders). Then use orshot_update_template_design in follow-up calls to refine styling, add decorative elements, and polish the design. This incremental approach produces much better results than trying to build a perfect template in a single call. Thumbnails are generated automatically in the background after creation — you do NOT need to render the template manually to preview it. They appear on the template (visible via orshot_get_studio_template) within a few seconds per page. Recommended workflow: 1. orshot_get_brand_kit — fetch brand assets first (images, colors, fonts) filtered by relevant tags 2. orshot_create_template_design — create template using brand assets: - Use brand colors for backgrounds, text colors, accents - Use brand fonts (font name without extension) for fontFamily in text elements - Use brand images (direct_url) for logos, backgrounds, product shots - Use brand videos (direct_url) for video elements 3. orshot_update_template_design — refine and add more elements, styling, decorative SVGs, etc. 4. orshot_update_template_design — further polish if needed ### Brand Asset Tag Matching When building templates, match brand assets by their tags to use the most relevant ones: - Tags like "logo", "icon" → use for logo placements - Tags like "background", "hero" → use for background images - Tags like "primary", "accent" → use for key color choices - Tags like "heading", "display" → use for title fonts - Tags like "body", "regular" → use for body text fonts IMPORTANT Element Format: - Position: use nested object { x: number, y: number } - Dimensions: use nested object { width: number, height: number } - Style values: use STRINGS with units, e.g. fontSize: "40px", fontWeight: "700" Common canvas sizes: - Square: 1080×1080 (Instagram post) - Story: 1080×1920 (Instagram/TikTok story) - Slide: 1920×1080 (Presentations) - YouTube Thumbnail: 1280×720 - OG Image: 1200×630 - Twitter Header: 1500×500 ## Design Guidelines ### Canvas Properties Each page has a canvas object: { width, height, backgroundColor, backgroundImage, borderWidth, borderColor, borderStyle } - backgroundColor: Hex color or gradient, e.g. "#ffffff", "linear-gradient(180deg, #000 0%, #333 100%)" - backgroundImage: URL for a background image - borderWidth: Number in pixels (0 for no border) - borderColor: Color string, e.g. "rgba(0, 0, 0, 1)" - borderStyle: "solid" | "dashed" | "dotted" ### Element Structure Each element in pages_data[].elements[] needs: - id: Unique string identifier (use UUID) - type: "text" | "image" | "shape" | "element" | "video" - position: { x: number, y: number } — position from top-left in pixels - dimensions: { width: number, height: number } — size in pixels - style: Object with CSS-like properties (values as STRINGS with units) - zIndex: Number for layer ordering (higher = on top) - For dynamic elements: parameterizable: true, parameterId: "snake_case_id", parameterType: "text" | "imageUrl" | "videoUrl" ### Common Element Properties (all types) - rotation: Number in degrees (0-360) - opacity: 0-1 (element-level opacity) - name: Optional display name for the layer - aspectRatioLocked: boolean (lock aspect ratio on resize) - clipPath: CSS clip-path value for masking, e.g. "polygon(...)", "circle(...)", "inset(...)" - style.opacity: 0-1 - style.mixBlendMode: "normal" | "multiply" | "screen" | "overlay" | "darken" | "lighten" | "color-dodge" | "color-burn" | "hard-light" | "soft-light" | "difference" | "exclusion" | "hue" | "saturation" | "color" | "luminosity" | "plus-lighter" - style.filter: CSS filter string, e.g. "blur(5px)", "grayscale(100%)", "brightness(1.2)" - style.dropShadowX: "0px" — drop shadow horizontal offset (separate from box shadow; applies as CSS filter) - style.dropShadowY: "0px" — drop shadow vertical offset - style.dropShadowBlur: "0px" — drop shadow blur radius - style.dropShadowColor: "rgba(0,0,0,0.2)" — drop shadow color ### Text Elements (type: "text") - content: Plain text string OR styled HTML for mixed formatting - Plain: "Hello World" - Styled (rich text): '<p><span style="color: red; font-weight: bold;">Bold Red</span> Normal</p>' - Multi-font styled text: '<p><span style="font-family: Playfair Display; font-size: 48px;">Elegant</span> <span style="font-family: Inter; font-size: 24px;">meets modern</span></p>' - Allowed tags: <b>, <strong>, <i>, <em>, <u>, <s>, <span>, <p>, <br> - Allowed CSS in style attr: color, font-family, font-size, font-weight, font-style, text-decoration, background-color, background-image, background-clip, letter-spacing, line-height, text-transform, padding - font-family in spans: Use any Google Font name. The renderer auto-loads fonts from Google Fonts CDN. - Use styled HTML when different words in the same text need different colors, sizes, fonts, or weights - style.textMode: "overflow" | "truncate" | "fit" — controls text overflow behavior: - "overflow" (default): text overflows the element boundaries - "truncate": text is cut off with ellipsis when it exceeds the element box - "fit": text auto-shrinks font size to fit within the element box (respects minFontSize) - style.minFontSize: String like "8" — minimum font size when textMode is "fit" - style.fontFamily: Google Font name — e.g. "Inter", "Prata", "DM Sans", "Playfair Display", "Sora", "Space Grotesk" - style.fontSize: "48px", "72px" (string with px) - style.fontWeight: "400", "700", "900" - style.fontStyle: "normal" | "italic" - style.color: Hex like "#FFFFFF" or gradient - style.textAlign: "left" | "center" | "right" | "justify" - style.verticalAlign: "flex-start" | "center" | "flex-end" — vertical text alignment (flex-start=top, center=middle, flex-end=bottom) - style.lineHeight: Number like 1.2, 1.4 - style.letterSpacing: "0px", "2px" - style.textTransform: "none" | "uppercase" | "lowercase" | "capitalize" - style.textDecoration: "none" | "underline" | "line-through" - style.paddingX: "6px", "10px" — horizontal padding inside the text box - style.paddingY: "6px", "10px" — vertical padding inside the text box - style.textStrokeWidth: "0px", "2px" — text outline/stroke width - style.textStrokeColor: "#000000" — text outline/stroke color - style.textBackgroundColor: Color value — background highlight behind text - style.textBackgroundRadius: "0px", "4px" — border radius of text background highlight - style.textBorderWidth: "0px", "2px" — border around the text element - style.textBorderColor: Color value — border color for text element - style.boxShadowX/Y/Blur/Color: Shadow properties Text sizing rules: - width: ~0.55 × fontSize × characterCount (tight fit, not full canvas) - height: fontSize × 1.3 for single line, multiply by lines × lineHeight for multi-line ### Shape Elements (type: "shape") - shapeType: "rectangle" | "circle" | "line" | "arrow" - style.fill: Color or gradient (rectangle/circle) - style.stroke: Stroke color (rectangle/circle) - style.strokeWidth: "0px", "2px" (all shapes) - style.borderRadius: "0px", "12px", "50%" (rectangle only) - style.color: Color for line/arrow shapes - style.lineStyle: "solid" | "dashed" | "dotted" (line only) - style.opacity: 0-1 - style.boxShadowX/Y/Blur/Color: Shadow properties ### Image Elements (type: "image") - content: Publicly accessible image URL - style.objectFit: "contain" | "cover" | "fill" - style.objectPosition: "left top" | "center top" | "right top" | "left center" | "center" | "right center" | "left bottom" | "center bottom" | "right bottom" - style.borderRadius, borderWidth, borderColor: Border properties - style.boxShadowX/Y/Blur/Color: Shadow properties - style.clipPath: CSS clip-path for masking ### SVG Elements (type: "element") - content: Inline data URI — "data:image/svg+xml,%3Csvg ..." - isSvg: true - style.svgColor: Hex color to tint - style.objectFit, objectPosition, borderRadius, borderWidth, borderColor, boxShadow*: Same as image ### Video Elements (type: "video") - content: Public mp4 URL - style.objectFit, objectPosition, borderRadius, borderWidth, borderColor, boxShadow*: Same as image - videoOptions: { loop: boolean, muted: boolean, duration: number, trim_start_time: number, trim_end_time: number } ### Animations (transitions) - transitions.enter: { type, duration, easing, reverse, customValues } - transitions.exit: { type, duration, easing, reverse, customValues } - transitions.showAt: seconds when element appears - transitions.hideAt: seconds when exit starts (null = end). showAt+hideAt = per-layer visibility windows (the slideshow mechanism) Enter types: "none", "fadeIn", "slideInLeft", "slideInRight", "slideInUp", "slideInDown", "scaleIn", "scaleInUp", "scaleInDown", "rotateIn", "flipInX", "flipInY", "textReveal" (text only), "typewriter" (text only) Exit types: "none", "fadeOut", "slideOutLeft", "slideOutRight", "slideOutUp", "slideOutDown", "scaleOut", "scaleOutUp", "scaleOutDown", "rotateOut", "flipOutX", "flipOutY", "textRevealOut" Easing: "linear", "ease", "ease-in", "ease-out", "ease-in-out", "cubic-bezier(0.175, 0.885, 0.32, 1.275)" (bounce), "spring(stiffness, damping, velocity)" e.g. "spring(180, 12, 0)" (physics) customValues (intensity): opacity 0-1, offset ±500 (%), scale 0-5, angle (deg), granularity "word"|"char", overlap 10-90 ### Page audio + subtitles (video templates) - page.audioTracks: bundled soundtrack, max 10 tracks — [{ url, trimStart, trimEnd, fadeIn, fadeOut, volume, offset, loop, duration }]. Trim to the song's best part; render-time videoOptions.audioSource swaps the URL but keeps trim/fades. - page.subtitle: { source: "auto-audio" (Whisper-transcribe first audio track) | "upload" (url), mode: "phrase"|"word-by-word", styling keys }. - page.videoDuration: default render duration (s) for this page. |
| orshot_update_template_design | Update an existing studio template's design structure. Use this after orshot_create_template_design to add elements and build the design. You can also use this to update an existing template's design by fetching its current state with orshot_get_studio_template first, then sending modified pages_data. Thumbnails are regenerated automatically in the background whenever pages_data, canvas_width, or canvas_height change. Pure metadata updates (name, description, tags) do not trigger re-rendering. You do NOT need to render the template manually to refresh the preview. ## Using Brand Assets Before updating, fetch relevant brand assets with orshot_get_brand_kit (filtered by tags matching your design purpose): - Brand colors → use their `value` field for style.color, style.fill, canvas.backgroundColor - Brand fonts → use the font `name` (without .ttf/.otf extension) as style.fontFamily. Custom workspace fonts take priority over Google Fonts. - Brand images → use their `direct_url` as element content for image elements - Brand videos → use their `direct_url` as element content for video elements ## Design Guidelines ### Canvas Properties Each page has a canvas object: { width, height, backgroundColor, backgroundImage, borderWidth, borderColor, borderStyle } - backgroundColor: Hex color or gradient, e.g. "#ffffff", "linear-gradient(180deg, #000 0%, #333 100%)" - backgroundImage: URL for a background image - borderWidth: Number in pixels (0 for no border) - borderColor: Color string, e.g. "rgba(0, 0, 0, 1)" - borderStyle: "solid" | "dashed" | "dotted" ### Element Structure Each element in pages_data[].elements[] needs: - id: Unique string identifier (use UUID) - type: "text" | "image" | "shape" | "element" | "video" - position: { x: number, y: number } — position from top-left in pixels - dimensions: { width: number, height: number } — size in pixels - style: Object with CSS-like properties (values as STRINGS with units) - zIndex: Number for layer ordering (higher = on top) - For dynamic elements: parameterizable: true, parameterId: "snake_case_id", parameterType: "text" | "imageUrl" | "videoUrl" ### Common Element Properties (all types) - rotation: Number in degrees (0-360) - opacity: 0-1 (element-level opacity) - name: Optional display name for the layer - aspectRatioLocked: boolean (lock aspect ratio on resize) - clipPath: CSS clip-path value for masking, e.g. "polygon(...)", "circle(...)", "inset(...)" - style.opacity: 0-1 - style.mixBlendMode: "normal" | "multiply" | "screen" | "overlay" | "darken" | "lighten" | "color-dodge" | "color-burn" | "hard-light" | "soft-light" | "difference" | "exclusion" | "hue" | "saturation" | "color" | "luminosity" | "plus-lighter" - style.filter: CSS filter string, e.g. "blur(5px)", "grayscale(100%)", "brightness(1.2)" - style.dropShadowX: "0px" — drop shadow horizontal offset (separate from box shadow; applies as CSS filter) - style.dropShadowY: "0px" — drop shadow vertical offset - style.dropShadowBlur: "0px" — drop shadow blur radius - style.dropShadowColor: "rgba(0,0,0,0.2)" — drop shadow color ### Text Elements (type: "text") - content: Plain text string OR styled HTML for mixed formatting - Plain: "Hello World" - Styled (rich text): '<p><span style="color: red; font-weight: bold;">Bold Red</span> Normal</p>' - Multi-font styled text: '<p><span style="font-family: Playfair Display; font-size: 48px;">Elegant</span> <span style="font-family: Inter; font-size: 24px;">meets modern</span></p>' - Allowed tags: <b>, <strong>, <i>, <em>, <u>, <s>, <span>, <p>, <br> - Allowed CSS in style attr: color, font-family, font-size, font-weight, font-style, text-decoration, background-color, background-image, background-clip, letter-spacing, line-height, text-transform, padding - font-family in spans: Use any Google Font name (e.g. "Inter", "Prata", "DM Sans", "Playfair Display", "Montserrat", "Roboto"). The renderer auto-loads fonts from Google Fonts CDN. - Use styled HTML when different words in the same text need different colors, sizes, fonts, or weights - style.textMode: "overflow" | "truncate" | "fit" — controls text overflow behavior: - "overflow" (default): text overflows the element boundaries - "truncate": text is cut off with ellipsis when it exceeds the element box - "fit": text auto-shrinks font size to fit within the element box (respects minFontSize) - style.minFontSize: String like "8" — minimum font size when textMode is "fit" - style.fontFamily: Default Google Font for the whole element — e.g. "Inter", "Prata", "DM Sans", "Playfair Display", "Sora", "Space Grotesk". Per-span font-family in styled HTML overrides this. - style.fontSize: "48px", "72px" (string with px) - style.fontWeight: "400", "700", "900" - style.fontStyle: "normal" | "italic" - style.color: Hex like "#FFFFFF" or gradient - style.textAlign: "left" | "center" | "right" | "justify" - style.verticalAlign: "flex-start" | "center" | "flex-end" — vertical text alignment (flex-start=top, center=middle, flex-end=bottom) - style.lineHeight: Number like 1.2, 1.4 - style.letterSpacing: "0px", "2px" - style.textTransform: "none" | "uppercase" | "lowercase" | "capitalize" - style.textDecoration: "none" | "underline" | "line-through" - style.paddingX: "6px", "10px" — horizontal padding inside the text box - style.paddingY: "6px", "10px" — vertical padding inside the text box - style.textStrokeWidth: "0px", "2px" — text outline/stroke width - style.textStrokeColor: "#000000" — text outline/stroke color - style.textBackgroundColor: Color value — background highlight behind text - style.textBackgroundRadius: "0px", "4px" — border radius of text background highlight - style.textBorderWidth: "0px", "2px" — border around the text element - style.textBorderColor: Color value — border color for text element - style.boxShadowX: "0px" — horizontal shadow offset - style.boxShadowY: "0px" — vertical shadow offset - style.boxShadowBlur: "0px" — shadow blur radius - style.boxShadowColor: "rgba(0,0,0,0.25)" — shadow color Text sizing rules: - width: ~0.55 × fontSize × characterCount (tight fit, not full canvas) - height: fontSize × 1.3 for single line, multiply by lines × lineHeight for multi-line - Short labels like "INTRODUCING" at 16px → width ~140px, height ~22px ### Shape Elements (type: "shape") - shapeType: "rectangle" | "circle" | "line" | "arrow" - style.fill: Color or gradient like "linear-gradient(180deg, ...)" (rectangle/circle) - style.stroke: Stroke color (rectangle/circle) - style.strokeWidth: "0px", "2px" (all shapes) - style.borderRadius: "0px", "12px", "50%" (rectangle only) - style.color: Color for line/arrow shapes - style.lineStyle: "solid" | "dashed" | "dotted" (line only) - style.opacity: 0-1 - style.boxShadowX/Y/Blur/Color: Shadow properties ### Image Elements (type: "image") - content: Publicly accessible image URL (Unsplash, CDN, etc.) - style.objectFit: "contain" | "cover" | "fill" - style.objectPosition: "left top" | "center top" | "right top" | "left center" | "center" | "right center" | "left bottom" | "center bottom" | "right bottom" - style.borderRadius: "0px", "12px", "50%" - style.borderWidth: "0px", "2px" - style.borderColor: "rgba(221, 221, 221, 1)" - style.boxShadowX: "0px" — horizontal shadow offset - style.boxShadowY: "0px" — vertical shadow offset - style.boxShadowBlur: "0px" — shadow blur radius - style.boxShadowColor: "rgba(0,0,0,0.25)" — shadow color - style.clipPath: CSS clip-path for masking ### SVG Elements (type: "element") For icons, illustrations, decorative effects, patterns: - content: Inline data URI — "data:image/svg+xml,%3Csvg ..." - isSvg: true - style.svgColor: Hex color to tint - style.objectFit: "contain" | "cover" | "fill" - style.objectPosition: "left top" | "center top" | "right top" | "left center" | "center" | "right center" | "left bottom" | "center bottom" | "right bottom" - style.borderRadius, borderWidth, borderColor, boxShadow*: Same as image elements - ALWAYS use inline SVG data URIs, never external URLs ### Video Elements (type: "video") - content: Public mp4 URL - style.objectFit: "contain" | "cover" | "fill" - style.objectPosition: "left top" | "center top" | "right top" | "left center" | "center" | "right center" | "left bottom" | "center bottom" | "right bottom" - style.borderRadius, borderWidth, borderColor, boxShadow*: Same as image elements - videoOptions: { loop: boolean, muted: boolean, duration: number, trim_start_time: number, trim_end_time: number } ## Design Best Practices ### Typography - Use 2-3 fonts max, headings 1.5-2x larger than body - Popular pairings: Prata + Inter, Instrument Serif + DM Sans, Playfair Display + Lato, Sora + DM Sans - Headings: fontWeight 600-900, Body: 400-500 - Minimum 24px for social media readability ### Layout - Edge padding: 40-60px from canvas edges - Element spacing: 20-40px between elements - zIndex: backgrounds (1-2) < overlays (3-4) < text (5+) ### Animations (transitions) Add animations for video/GIF export. Each element can have enter/exit transitions: - transitions.enter: { type, duration, easing, reverse, customValues } - transitions.exit: { type, duration, easing, reverse, customValues } - transitions.showAt: seconds when element appears (stagger elements for sequence) - transitions.hideAt: seconds when exit starts (null = end). showAt+hideAt = per-layer visibility windows (the slideshow/photo-dump mechanism) Enter types: "none", "fadeIn", "slideInLeft", "slideInRight", "slideInUp", "slideInDown", "scaleIn", "scaleInUp", "scaleInDown", "rotateIn", "flipInX", "flipInY", "textReveal" (text only), "typewriter" (text only) Exit types: "none", "fadeOut", "slideOutLeft", "slideOutRight", "slideOutUp", "slideOutDown", "scaleOut", "scaleOutUp", "scaleOutDown", "rotateOut", "flipOutX", "flipOutY", "textRevealOut" Easing: "linear", "ease", "ease-in", "ease-out", "ease-in-out", "cubic-bezier(0.175, 0.885, 0.32, 1.275)" (bounce), "spring(stiffness, damping, velocity)" e.g. "spring(180, 12, 0)" (physics) customValues (intensity): opacity 0-1, offset ±500 (%), scale 0-5 (scaleIn + { scale: 1.15 } = subtle zoom-punch), angle (deg), granularity "word"|"char", overlap 10-90 Example: transitions: { enter: { type: "fadeIn", duration: 0.5, easing: "ease-out" }, showAt: 0.2 } Visibility window: transitions: { enter: {...}, showAt: 1.2, exit: { type: "fadeOut", duration: 0.3 }, hideAt: 3.6 } Animations play in mp4/webm/gif renders but are not required for those formats. ### Page audio + subtitles (video templates) - page.audioTracks (page-level, sibling of elements): bundled soundtrack mixed into every video render — [{ url, trimStart, trimEnd, fadeIn, fadeOut, volume, offset, loop, duration }]. Trim to the song's best part; videoOptions.audioSource swaps URLs at render keeping trim/fades. - page.subtitle: { source: "auto-audio" (Whisper-transcribes the first audio track) | "upload" (url = .srt/.vtt or media), mode: "phrase"|"word-by-word", fontSize/fontFamily/color/background/position/... styling }. - page.videoDuration: default render duration (s) for this page. ### Parameterization (for API/dynamic usage) - Every dynamic element MUST have parameterizable: true - parameterId: descriptive snake_case like "product_title", "hero_image" - parameterType: "text" | "imageUrl" | "videoUrl" |
| orshot_patch_template_elements | Update individual element values in a saved template without re-sending the entire pages_data. Use this to change text content, swap images, update colors, or modify style properties on specific elements by their parameterId. Much faster and safer than orshot_update_template_design for targeted changes. Supports dot notation: "headline.fontSize" (style), "headline.x" / "headline.width" (position and size), "photo.crop" (object), "photo.alt". Use orshot_get_studio_template_modifications first to see available parameter keys. Examples: Single element: { data: [{ page: 1, modifications: { "headline": "New Title" } }] } Multiple: { data: [{ page: 1, modifications: { "headline": "Title", "hero_image": "https://..." } }] } Style update: { data: [{ page: 1, modifications: { "headline.fontSize": "64px", "headline.color": "#FF0000" } }] } Move/resize: { data: [{ page: 1, modifications: { "headline.x": 64, "headline.y": 120, "headline.width": 800 } }] } Crop an image: { data: [{ page: 1, modifications: { "photo.crop": { "x": 10, "y": 10, "width": 60, "height": 60 } } }] } Multi-page: { data: [{ page: 1, modifications: { "title": "Page 1" } }, { page: 2, modifications: { "title": "Page 2" } }] } WHAT LANDS (max 50 mods/request): content (text, image/video URLs incl. data: URIs), style props, position (x, y) and size (width, height), crop objects, and .alt. A "pageN@key" prefix inside an item retargets that key to page N. ⚠️ NOT patchable — these are render-time only and come back in the response's "skipped" array, so nothing is stored: - Animation/transition keys ("photo6.showAt", hideAt/enterType/...) and video dynamics (.trimStart/.muted/.loop). For SAVED timing use orshot_update_template_design (full pages_data); for ONE render pass them as modifications on orshot_generate_image ("photo6.showAt": 2.1 works there). - AI prompt keys (.prompt/.promptMode/.promptReferences), .href and .contentType. - Page-level props (canvas, audioTracks, subtitle). The response separates outcomes: "applied" landed, "failed" needs you to change something (each entry says why), "skipped" is informational. |
| orshot_delete_template | Permanently delete a studio template. This action cannot be undone. |
| orshot_duplicate_template | Create a copy of an existing studio template. |
| orshot_get_template_sharing | Get a studio template's public sharing state — whether it's shared, the public link, the embed page + ready-to-paste iframe code, whether visitors can duplicate it, and view/copy stats. Use orshot_update_template_sharing to change any of it. |
| orshot_update_template_sharing | Turn public sharing of a studio template on or off, and control whether visitors can duplicate it. Returns the public link, embed page and iframe embed code. Fields you omit keep their current value. The link is minted once and stays stable — turning sharing off and on again revives the same link. allowDuplication needs a paid plan. |
| orshot_generate_image | Generate an image, PDF, or video from a studio template. Supports rendering to multiple formats with optional quality, scale, page selection, and video options. For multi-page templates, use includePages to select specific pages (e.g. [1, 3]). For PDF output, use pdfDpi to control print quality (default 72, use 300 for print). For video/GIF output, use videoOptions to control duration, fps, and trimming — plus soundtrack (audioSource swaps/adds page audio tracks; use brand audio URLs), burned-in subtitles (subtitleSource auto-transcribes any voiceover URL via Whisper, or takes .srt/.vtt; style with the subtitle* keys, karaoke via subtitleMode "word-by-word"), global muting, and multi-page stitching (combinePages + pageTransition). LONG RENDERS: video/subtitle renders can take 60-90s. This server streams progress to keep the request alive; if your client times out anyway, the render still completes server-side (credits are used) — recover the output URL via orshot_list_workspace_logs instead of re-rendering. For guaranteed-no-timeout operation (or several long renders in a row), pass background: true — the tool returns immediately and you collect the output from the logs. SMART RESIZE (one design → any size): the design is deterministically re-laid-out to fit a new canvas. - Use `size` to render the design at a DIFFERENT size (e.g. size: "instagram-story" or "1080x1080" or { width, height }). - Use `extraSizes` to ADD extra sized copies in the SAME call (e.g. extraSizes: ["instagram-story","1080x1080","1200x630"]) — the response nests an "extraSizes" array of { name, size, width, height, url } beside each page. Perfect when a user asks for one design across multiple social formats. RESPONSE SHAPE (so you surface the right links to the user): - Single-page: `data.data` is one object → `data.data.content` is the main output URL; `data.data.extraSizes` (if requested) is an array of variants, each `{ name, size, width, height, content }` where `content` is that variant's URL. - Multi-page: `data.data` is an array (one per page); each page has its own `content` and `extraSizes`. This tool also prepends a ready-to-share summary of every output + variant URL, so present those links to the user; a per-variant `error` means that one size failed (the others still succeeded). Optionally publish the rendered output to connected social accounts by including the "publish" parameter. IMPORTANT: Only include the "publish" parameter when the user explicitly asks to publish or post to social media. Never auto-publish. Use orshot_list_social_accounts first to get the account IDs needed for publish.accounts. |
| orshot_batch_render | Render the same studio template multiple times with different modifications in a single call. Use this for bulk image generation — e.g. personalized certificates, product cards, social posts for a list of items. Each item in the `renders` array is a set of modifications (same format as orshot_generate_image). All renders share the same template, format, and options. Smart Resize works here too: `size` (render every item at a different canvas size) and `extraSizes` (add sized copies beside each item) apply to ALL renders in the batch. Use orshot_get_studio_template_modifications first to see available parameter keys. Example: Generate 3 personalized certificates: templateId: "12345" renders: [ { "name": "Alice", "course": "Design 101" }, { "name": "Bob", "course": "Design 101" }, { "name": "Charlie", "course": "Design 201" } ] |
| orshot_generate_image_from_library | Generate an image from a pre-built Orshot library template. Use orshot_list_library_templates to see available templates and orshot_get_library_template_modifications to see what parameters each accepts. Common templates: - website-screenshot: Capture a webpage (modifications: { websiteUrl, fullCapture?, delay?, width?, height? }) - tweet-image: Screenshot a tweet (modifications: { tweetUrl }) - beautify-screenshot: Add padding/shadow to a screenshot (modifications: { screenshotImage }) - open-graph-image-1: OG image for blog posts (modifications: { title, description }) - image-background-removal-api: Remove image background (modifications: { inputImage }) - dynamic-image-resizer: Resize/crop an image (modifications: { imageUrl, width?, height?, resizeType? }) |
| orshot_list_library_templates | List all available pre-built library templates (website-screenshot, tweet-image, OG images, mockups, etc.). |
| orshot_get_library_template_modifications | Get the available modification parameters for a specific library template. Use this to discover what fields you can customize (e.g. websiteUrl for website-screenshot, tweetUrl for tweet-image). |
| orshot_get_brand_images | List brand asset images in the workspace. Use tag filtering to find assets for specific purposes (e.g. "logo", "background", "product"). Tags use AND logic — all specified tags must match. Returns up to 100 images, newest first. |
| orshot_upload_brand_image | Upload an image to brand assets. Accepts a public URL, base64 string, or binary. Supported: PNG, JPEG, WebP, SVG, GIF. Max 8MB, auto-resized to 2000×2000 max (SVGs kept as-is). Use tags to categorize for easy retrieval when building templates (e.g. ["logo", "brand"], ["background", "dark"]). |
| orshot_update_brand_image_tags | Replace tags on a brand asset image. Pass empty array to clear all tags. |
| orshot_delete_brand_image | Permanently delete a brand asset image. |
| orshot_get_brand_colors | List saved brand colors in the workspace. Supports hex, rgb, hsl, and gradient types. Use tag filtering to find colors for specific purposes (e.g. "primary", "background", "accent"). Tags use AND logic. Returns up to 200 colors. |
| orshot_add_brand_color | Save a brand color. Supports hex (#FF5733, #RRGGBBAA), rgb, hsl, and CSS gradients. Use tags to categorize (e.g. ["primary", "brand"], ["background", "dark"]). Max 200 colors per workspace. |
| orshot_update_brand_color_tags | Replace tags on a saved brand color. Pass empty array to clear all tags. |
| orshot_delete_brand_color | Permanently delete a saved brand color. |
| orshot_get_brand_fonts | List custom fonts uploaded to the workspace. Use tag filtering to find fonts for specific purposes (e.g. "heading", "body", "brand"). Tags use AND logic. Returns up to 100 fonts. When creating templates, use the font's `name` field (without extension) as the fontFamily in element styles. Custom fonts take priority over Google Fonts. |
| orshot_upload_brand_font | Upload a custom font to the workspace. Accepts URL, base64, or binary. Supported: TTF, OTF, WOFF, WOFF2. Max 10MB. Use tags to categorize (e.g. ["heading", "brand"], ["body", "regular"]). |
| orshot_update_brand_font_tags | Replace tags on a custom font. Pass empty array to clear all tags. |
| orshot_delete_brand_font | Permanently delete a custom font. Templates using this font will fall back to the default font. |
| orshot_get_brand_videos | List brand videos in the workspace. Use tag filtering to find videos for specific purposes (e.g. "intro", "background", "product"). Tags use AND logic. Returns up to 100 videos with metadata (width, height, duration, format). |
| orshot_upload_brand_video | Upload a video to brand assets. Accepts URL, base64, or binary. Supported: MP4, WebM, MOV, AVI, MKV, FLV, WMV, M4V, GIF. Max 60MB. Use tags to categorize (e.g. ["intro", "brand"], ["background", "loop"]). |
| orshot_update_brand_video_tags | Replace tags on a brand video. Pass empty array to clear all tags. |
| orshot_delete_brand_video | Permanently delete a brand video. |
| orshot_get_brand_audio | List audio files in the workspace's brand library. Use tag filtering to find tracks for specific purposes (e.g. "music", "voiceover", "sfx"). Tags use AND logic. Returns up to 100 audio files with metadata (duration, format, file size). Use a track's direct_url as the audio source on video template pages. |
| orshot_upload_brand_audio | Upload an audio file to the brand library. Accepts URL or base64. Supported: MP3, WAV, M4A, AAC, OGG, Opus, FLAC, WebM, AIFF, WMA. Max 50MB. Use tags to categorize (e.g. ["music", "upbeat"], ["voiceover"]). Pass metadata.duration (seconds) when known — URL/base64 uploads cannot probe it automatically. |
| orshot_update_brand_audio_tags | Replace tags on a brand audio file. Pass empty array to clear all tags. |
| orshot_delete_brand_audio | Permanently delete a brand audio file. |
| orshot_get_brand_kit | Fetch all brand assets at once — images, colors, fonts, videos, and audio. Optionally filter each type by tags. This is the recommended starting point when creating branded templates. Use tag filtering to get only relevant assets for your design task. Example workflow: 1. orshot_get_brand_kit with tags matching your design purpose (e.g. "social-media") 2. Use returned brand colors for backgrounds, text colors 3. Use returned brand fonts for text elements (set fontFamily to the font name without extension) 4. Use returned brand images for logos, backgrounds, product shots 5. Use returned brand videos for video elements 6. Use returned brand audio for background music / voiceover on video templates |
| orshot_list_social_accounts | List all connected social media accounts in the active workspace. Returns each account's id (numeric), platform, account_name, account_username, and account_avatar. Use the numeric id values in the "publish.accounts" array of orshot_generate_image to post renders directly to social media. Supported platforms: Twitter/X, Instagram, LinkedIn, Pinterest, Facebook, TikTok, YouTube, Threads, Bluesky, Reddit, Telegram, Snapchat, Google Business. |
| orshot_list_workspace_logs | List render/API logs for the active workspace, newest first. Each entry is a trimmed summary: status, source, template, output format, render time, credits used, and the OUTPUT URL (main render; extra-size variants noted). Results are paginated with an opaque cursor — pass the returned next_cursor as "cursor" to fetch the next (older) page. Also the RECOVERY path for renders whose tool call timed out client-side: a completed render's output URL is here even when the render response never made it back — filter by template_id and/or format: "mp4" and take the newest entry instead of re-rendering (which would double-spend credits). Useful for reviewing recent render activity, debugging failed renders (filter status: "error"), or auditing credit usage over a date range. |
| orshot_suggest_workflows | Given a studio template, returns the 2-3 ready-made automations that fit it best (matched on the template's content, shape, and which integrations the workspace already has connected). Each suggestion comes back DRAFT-READY: its `steps` already have this template wired into the render step — pass them straight to orshot_create_workflow (status 'draft') and share the returned edit link. Call this right after rendering or designing a template to pitch a specific automation instead of a generic one. |
| orshot_list_workflow_nodes | Discover the building blocks for workflow automations — every trigger, source, render, and destination node, with its config schema and whether the current plan can use it. Call this before building a workflow. Pass `key` to get one node's full config schema. |
| orshot_list_connected_integrations | List the third-party integrations (Google Sheets, Drive, Airtable, Shopify, HubSpot, Slack, Dropbox, S3, WordPress) this workspace has connected, with the account each is connected as. Use before building a workflow to know which sources/destinations are wired (never returns tokens). |
| orshot_get_workflow_connection_data | Resolve the concrete IDs a workflow source needs from a connected integration, and preview its columns. This is how you turn 'use my ABC spreadsheet' into a real { spreadsheetId, sheetTab }: list the workspace's spreadsheets/Drive folders/Airtable bases+tables, then sample a source's fields. Call with no args for the provider/resource catalog. Always confirm the resolved name back to the user before creating a workflow. |
| orshot_validate_workflow | Dry-run a set of workflow steps WITHOUT saving — returns whether it's valid, runnable, plus any errors (blocking) and warnings (incomplete: missing config, no destination, no trigger). Use this to iterate on steps before orshot_create_workflow. |
| orshot_list_workflows | List the workspace's workflow automations, newest first. Optionally filter by status. |
| orshot_get_workflow | Get a workflow's full definition — status, trigger, and its ordered steps (with config). |
| orshot_create_workflow | Create a workflow automation. Provide ordered steps (trigger → render → destination) built from orshot_list_workflow_nodes; validate first with orshot_validate_workflow. Defaults to 'draft'. Set status:'active' only when it's complete and runnable — an incomplete workflow can't be activated. Returns the created workflow plus any warnings. |
| orshot_update_workflow | Update a workflow — rename, edit its steps, or change status (draft/active/paused/archived). Send only the fields you want to change. Activating requires the workflow to be complete and runnable. |
| orshot_run_workflow | Manually trigger a workflow run now (in addition to its normal trigger). Returns the queued run id; use orshot_get_workflow_run to watch it. The workflow must be complete/runnable. |
| orshot_list_workflow_runs | List a workflow's recent runs with their status and timing. |
| orshot_get_workflow_run | Get one run's detail including per-node results — which step ran, its status, output, and any error. Use this to debug why a workflow run failed. |
| orshot_get_workflow_webhook | Get (or create) the inbound webhook URL for a webhook-triggered workflow — the URL to POST events to from your own app or a tool like Zapier/Make, plus its signing secret. Only relevant for workflows whose trigger is a webhook. |
| orshot_get_workflow_sharing | Get a workflow's public sharing state — whether it's shared, the public link and embed page, and whether its template is included when someone copies it. Use orshot_update_workflow_sharing to change any of it. |
| orshot_update_workflow_sharing | Turn public sharing of a workflow on or off. Sharing publishes it to a public page anyone can view and copy into their own workspace. Fields you omit keep their current value. The link is minted once and stays stable — turning sharing off and on again revives the same link. |
| orshot_delete_workflow | Delete a workflow. This stops any future runs. Ask the user to confirm before deleting. |
| orshot_create_dynamic_url | Mint (or update) a public, signed render URL for a studio template and return it ready to use. Use this when you need a STABLE, reusable, cacheable image link — OG/social images, email images, docs/dashboard embeds — rather than a one-off render (orshot_generate_image). The returned URL renders the template on the fly; pass modification values as query params to produce variants from the same URL. Control access with `active`, `maxRenders`, `validTill`, and `cacheForSeconds`. Calling again for the same template updates only the fields you pass (partial update) and keeps the signature. |
| orshot_get_dynamic_url | Return the dynamic URL configuration (signed URL, active state, limits, expiry, view count) for a template, or a not-found error if none is configured. |
| orshot_reset_dynamic_url_signature | Rotate the signature for a template's dynamic URL. Every previously shared URL for this template stops working immediately — use it to revoke access. Returns the new signed URL. |