# Impossible Software — Machine-Readable Overview Impossible Software (impossible.io) is real-time personalized video rendering infrastructure. A dynamic movie template plus per-viewer data (from a CRM, CSV, or API call) produces one unique video per person, rendered on demand at the moment of playback. Typical use: a unique video link per email in campaigns of millions of recipients. This document is written for AI agents and LLMs. Human-facing documentation lives at https://impossible.io/docs. Rendering runs in Impossible Software's managed cloud by default, and can also be deployed into the customer's own cloud account or on-premise. Neither the Rendering API nor the MCP server surface changes with the deployment model. There are two machine-facing surfaces: 1. FX Express MCP server — build and edit video templates 2. Rendering API (HTTPS) — render and deliver videos from those templates ## 1. FX Express MCP Server Model Context Protocol server for authoring video templates. - Endpoint: https://mcp.impossible.io/fxexpress/mcp - Transport: Streamable HTTP - Auth: OAuth 2.1, authorization server https://accounts.impossible.io - Protected-resource metadata: https://mcp.impossible.io/.well-known/oauth-protected-resource - Account signup: https://accounts.impossible.io/signup Templates are .fxt files organized as scenes containing elements (text, image, video, shape, table, list). Positions and sizes are percentages (0–100) of the canvas. Text content supports {variableName} placeholders; values are supplied per render, which is how personalization works. Published templates become renderable projects for the Rendering API. Tools (grouped): - Skills/guidance: get_skill — call this first; topics are template-anatomy, design-principles, personalization, animation, fxhtml-authoring, smart-object-library, example-promo - Projects: list_projects, create_project — a project is the account-level container templates and their media live in, addressed as project:///.fxt; list_projects without a region sweeps every production region to find where an account actually works - Templates: list_templates, get_template, create_template, delete_template, update_settings, publish - FXHTML authoring: compile_html — compile an HTML-authored template (preferred workflow for new templates: get_skill("fxhtml-authoring") → author → compile → publish) - Scenes: list_scenes, get_scene, add_scene, update_scene, delete_scene, duplicate_scene, reorder_scenes - Elements: list_elements, get_element, add_element, update_element, delete_element, duplicate_element - Animation: set_appearance_animation, set_text_animation, set_shape_animation, set_keyframes, set_camera_keyframes - Motion tracking: set_tracking — apply an After Effects / Mocha track export to an element, retune it, or remove it - Audio: list_sounds, add_sound, update_sound, remove_sound, reorder_sounds — a scene's sound list or the template's background sounds, played in sequence - Voiceover: generate_voiceover (ElevenLabs or Google TTS, attached to a scene as narration), list_voices - Media: upload_image, upload_media, create_upload_url, finalize_upload, list_fonts — create_upload_url mints a presigned PUT so large assets skip the tool call, then finalize_upload registers them beside the template - Importing: import_scene and list_imported_scenes (pull a scene from another template as a read-only snapshot, placed with a sceneLayer element), import_idm and import_idm_finish (import an iDooMo .idm After Effects export as a new template; the finish call polls to completion) Most tools take a region parameter (e.g. eu-west-1) and a template path. ## 2. Rendering API Token-based v2 REST API over HTTPS. Supports CORS. - Global endpoint: https://render.impossible.io (routes to the project's region) - Regional endpoints: https://render-{region}.impossible.io - Regions: us-east-1 (Virginia), us-west-2 (Oregon), eu-west-1 (Dublin), eu-central-1 (Frankfurt), ap-southeast-2 (Sydney) - Full reference: https://impossible.io/docs/api-reference Render endpoints: - POST /v2/render/{project-id} — render a movie; blocks until complete, or pass "async": true to return immediately with a token - POST /v2/token/{project-id} — create a render token without starting the render (pre-generate URLs) - GET /v2/progress/{token} — poll async render progress (done/total frames) Retrieval endpoints (choose latency vs. smoothness): - GET /v2/render/{token}.{ext} — deliver when fully rendered - GET /v2/get/{token}.{ext} — progressive download as frames become available - GET /v2/play/{token}.{ext} — streaming, renders on demand during playback - DELETE /v2/token/{token} — delete a token and its rendered data Example request body: POST https://render.impossible.io/v2/render/{project-id} { "movie": "welcome-video", "params": { "name": "Alex" } } Example response: { "token": "v2:us-east-1:abc123-def456-789", "url": "https://render-us-east-1.impossible.io/v2/render/v2:us-east-1:abc123-def456-789.mp4", "expires": 1709740800, "status": 200 } Credentials: API Key + API Secret pairs, created in the Console (https://console.impossible.io) under Account Settings → API Keys. See https://impossible.io/docs/credentials. SDKs: Node.js, Browser JS, Python, Java — https://impossible.io/docs/sdks ## 3. Further documentation - Docs home: https://impossible.io/docs - Quickstart (choose a path): https://impossible.io/docs/quickstart - With an AI agent (FX Express MCP server): https://impossible.io/docs/quickstart/mcp - In the editor (blank template): https://impossible.io/docs/quickstart/editor Both build the same three-scene template, publish it as the dynamic movie `insurance-quote`, and render two variants of it in the console's Dynamic Movies section (Play tab: fill the parameter form, play; change values, play again). - Editor manual (complete browser-editor reference): https://impossible.io/docs/editor Twenty-seven chapters covering scenes, elements (text, image, video, shape, table, list), scene audio and audio layers, the timeline editor, themes, animations and keyframes, variables and personalization, smart objects, track mattes, imported scenes, effects and adjustment layers, 3D layers and the scene camera, motion tracking, conditions and interactivity, voiceover, preview, publishing, importing and exporting, keyboard shortcuts, and where templates live in projects. - Rendering guide (requests, retrieval, regions): https://impossible.io/docs/rendering - Project API (projects, assets, templates): https://impossible.io/docs/project-api - Upload destinations (S3, Azure, YouTube, Facebook, Dropbox, HTTP, FTP): https://impossible.io/docs/upload-destinations - SDL scripting and reference: https://impossible.io/docs/advanced/sdl, https://impossible.io/docs/sdl-reference - Batch rendering: https://impossible.io/docs/advanced/batch - Integrations (CRM, mail, players): https://impossible.io/docs/integrations/crm, https://impossible.io/docs/integrations/others, https://impossible.io/docs/integrations/video-players - Contact: https://impossible.io/contact