{
  "portable": {
    "format": "stillmade-block/1",
    "limits": {
      "archive": 20000000,
      "expanded": 4000000,
      "files": 256
    },
    "guide": "/block-sdk/PORTABLE.md",
    "schema": "/block-sdk/portable.schema.json"
  },
  "sdkVersion": "0.1.0",
  "types": [
    "text",
    "number",
    "integer",
    "boolean",
    "json",
    "object",
    "image",
    "video",
    "audio",
    "asset",
    "script",
    "transcript",
    "brief",
    "bible",
    "shot-plan",
    "panel-document",
    "board-document",
    "scene-document",
    "timeline",
    "timeline-edit",
    "file-bundle",
    "workspace-edit",
    "timeline-range",
    "research",
    "character",
    "location",
    "style",
    "pipeline",
    "approval",
    "scene",
    "shot",
    "mask",
    "depth",
    "pose",
    "metadata",
    "project-context",
    "file",
    "document",
    "table",
    "url",
    "date",
    "color"
  ],
  "operations": {
    "value.copy": {
      "description": "Copy a JSON value without changing it.",
      "args": [
        "value"
      ]
    },
    "text.trim": {
      "description": "Remove leading and trailing whitespace.",
      "args": [
        "text"
      ]
    },
    "text.replace": {
      "description": "Replace literal text; no regular expressions.",
      "args": [
        "text",
        "find",
        "replacement"
      ]
    },
    "text.join": {
      "description": "Join an array of text values.",
      "args": [
        "items",
        "separator"
      ]
    },
    "image.thicken-lines": {
      "description": "Expand dark outlines while preserving other colors.",
      "args": [
        "image",
        "thickness",
        "threshold"
      ]
    }
  },
  "connectionAdapters": [
    {
      "id": "integer-to-number",
      "version": 1,
      "output": "integer",
      "input": "number",
      "contextFields": [],
      "requiresValue": true
    },
    {
      "id": "text-file-to-text",
      "version": 1,
      "output": "file-bundle",
      "input": "text",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": "string"
    },
    {
      "id": "csv-to-table",
      "version": 1,
      "output": "text",
      "input": "object",
      "contextFields": [],
      "requiresValue": true,
      "sourceSemantic": "csv",
      "targetSemantic": "table",
      "resultSchema": {
        "columns": "string[]",
        "rows": "object[]"
      }
    },
    {
      "id": "csv-file-to-table",
      "version": 1,
      "output": "file-bundle",
      "input": "object",
      "contextFields": [],
      "requiresValue": true,
      "sourceSemantic": "csv",
      "targetSemantic": "table",
      "resultSchema": {
        "columns": "string[]",
        "rows": "object[]"
      }
    },
    {
      "id": "text-to-script",
      "version": 1,
      "output": "text",
      "input": "script",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": {
        "schemaVersion": "integer",
        "text": "string"
      }
    },
    {
      "id": "script-to-text",
      "version": 1,
      "output": "script",
      "input": "text",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": "string"
    },
    {
      "id": "image-to-asset",
      "version": 1,
      "output": "image",
      "input": "asset",
      "contextFields": [],
      "requiresValue": true
    },
    {
      "id": "asset-to-image",
      "version": 1,
      "output": "asset",
      "input": "image",
      "contextFields": [],
      "requiresValue": true
    },
    {
      "id": "video-to-asset",
      "version": 1,
      "output": "video",
      "input": "asset",
      "contextFields": [],
      "requiresValue": true
    },
    {
      "id": "asset-to-video",
      "version": 1,
      "output": "asset",
      "input": "video",
      "contextFields": [],
      "requiresValue": true
    },
    {
      "id": "audio-to-asset",
      "version": 1,
      "output": "audio",
      "input": "asset",
      "contextFields": [],
      "requiresValue": true
    },
    {
      "id": "asset-to-audio",
      "version": 1,
      "output": "asset",
      "input": "audio",
      "contextFields": [],
      "requiresValue": true
    },
    {
      "id": "scene-to-shots",
      "version": 1,
      "output": "scene",
      "input": "shot[]",
      "contextFields": [
        "scenes",
        "shots"
      ],
      "requiresValue": true
    },
    {
      "id": "shot-to-selected-image",
      "version": 1,
      "output": "shot",
      "input": "image",
      "contextFields": [
        "shots",
        "assets"
      ],
      "requiresValue": true
    },
    {
      "id": "text-to-url",
      "version": 1,
      "output": "text",
      "input": "url",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": "string"
    },
    {
      "id": "url-to-text",
      "version": 1,
      "output": "url",
      "input": "text",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": "string"
    },
    {
      "id": "text-to-table",
      "version": 1,
      "output": "text",
      "input": "table",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": {
        "columns": "string[]",
        "rows": "object[]"
      }
    },
    {
      "id": "table-to-text",
      "version": 1,
      "output": "table",
      "input": "text",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": "string"
    },
    {
      "id": "object-to-table",
      "version": 1,
      "output": "object",
      "input": "table",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": {
        "columns": "string[]",
        "rows": "object[]"
      }
    },
    {
      "id": "table-to-object",
      "version": 1,
      "output": "table",
      "input": "object",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": {
        "columns": "string[]",
        "rows": "object[]"
      }
    },
    {
      "id": "text-to-document",
      "version": 1,
      "output": "text",
      "input": "document",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": {
        "schemaVersion": "integer",
        "format": "string",
        "text": "string"
      }
    },
    {
      "id": "document-to-text",
      "version": 1,
      "output": "document",
      "input": "text",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": "string"
    },
    {
      "id": "shots-to-shot-plan",
      "version": 1,
      "output": "shot[]",
      "input": "shot-plan",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": {
        "schemaVersion": "integer",
        "shots": "object[]"
      }
    },
    {
      "id": "text-file-to-text-v1--text-to-script-v1",
      "version": 1,
      "output": "file-bundle",
      "input": "script",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": {
        "schemaVersion": "integer",
        "text": "string"
      },
      "steps": [
        {
          "id": "text-file-to-text",
          "version": 1
        },
        {
          "id": "text-to-script",
          "version": 1
        }
      ]
    },
    {
      "id": "shot-to-selected-image-v1--image-to-asset-v1",
      "version": 1,
      "output": "shot",
      "input": "asset",
      "contextFields": [
        "shots",
        "assets"
      ],
      "requiresValue": true,
      "steps": [
        {
          "id": "shot-to-selected-image",
          "version": 1
        },
        {
          "id": "image-to-asset",
          "version": 1
        }
      ]
    },
    {
      "id": "list-integer-to-number-v1",
      "version": 1,
      "output": "integer[]",
      "input": "number[]",
      "contextFields": [],
      "requiresValue": true,
      "element": {
        "id": "integer-to-number",
        "version": 1
      }
    },
    {
      "id": "list-text-file-to-text-v1",
      "version": 1,
      "output": "file-bundle[]",
      "input": "text[]",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": "string[]",
      "element": {
        "id": "text-file-to-text",
        "version": 1
      }
    },
    {
      "id": "list-csv-to-table-v1",
      "version": 1,
      "output": "text[]",
      "input": "object[]",
      "contextFields": [],
      "requiresValue": true,
      "sourceSemantic": "csv",
      "targetSemantic": "table",
      "resultSchema": [
        {
          "columns": "string[]",
          "rows": "object[]"
        }
      ],
      "element": {
        "id": "csv-to-table",
        "version": 1
      }
    },
    {
      "id": "list-csv-file-to-table-v1",
      "version": 1,
      "output": "file-bundle[]",
      "input": "object[]",
      "contextFields": [],
      "requiresValue": true,
      "sourceSemantic": "csv",
      "targetSemantic": "table",
      "resultSchema": [
        {
          "columns": "string[]",
          "rows": "object[]"
        }
      ],
      "element": {
        "id": "csv-file-to-table",
        "version": 1
      }
    },
    {
      "id": "list-text-to-script-v1",
      "version": 1,
      "output": "text[]",
      "input": "script[]",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": [
        {
          "schemaVersion": "integer",
          "text": "string"
        }
      ],
      "element": {
        "id": "text-to-script",
        "version": 1
      }
    },
    {
      "id": "list-script-to-text-v1",
      "version": 1,
      "output": "script[]",
      "input": "text[]",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": "string[]",
      "element": {
        "id": "script-to-text",
        "version": 1
      }
    },
    {
      "id": "list-image-to-asset-v1",
      "version": 1,
      "output": "image[]",
      "input": "asset[]",
      "contextFields": [],
      "requiresValue": true,
      "element": {
        "id": "image-to-asset",
        "version": 1
      }
    },
    {
      "id": "list-asset-to-image-v1",
      "version": 1,
      "output": "asset[]",
      "input": "image[]",
      "contextFields": [],
      "requiresValue": true,
      "element": {
        "id": "asset-to-image",
        "version": 1
      }
    },
    {
      "id": "list-video-to-asset-v1",
      "version": 1,
      "output": "video[]",
      "input": "asset[]",
      "contextFields": [],
      "requiresValue": true,
      "element": {
        "id": "video-to-asset",
        "version": 1
      }
    },
    {
      "id": "list-asset-to-video-v1",
      "version": 1,
      "output": "asset[]",
      "input": "video[]",
      "contextFields": [],
      "requiresValue": true,
      "element": {
        "id": "asset-to-video",
        "version": 1
      }
    },
    {
      "id": "list-audio-to-asset-v1",
      "version": 1,
      "output": "audio[]",
      "input": "asset[]",
      "contextFields": [],
      "requiresValue": true,
      "element": {
        "id": "audio-to-asset",
        "version": 1
      }
    },
    {
      "id": "list-asset-to-audio-v1",
      "version": 1,
      "output": "asset[]",
      "input": "audio[]",
      "contextFields": [],
      "requiresValue": true,
      "element": {
        "id": "asset-to-audio",
        "version": 1
      }
    },
    {
      "id": "list-shot-to-selected-image-v1",
      "version": 1,
      "output": "shot[]",
      "input": "image[]",
      "contextFields": [
        "shots",
        "assets"
      ],
      "requiresValue": true,
      "element": {
        "id": "shot-to-selected-image",
        "version": 1
      }
    },
    {
      "id": "list-text-to-url-v1",
      "version": 1,
      "output": "text[]",
      "input": "url[]",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": "string[]",
      "element": {
        "id": "text-to-url",
        "version": 1
      }
    },
    {
      "id": "list-url-to-text-v1",
      "version": 1,
      "output": "url[]",
      "input": "text[]",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": "string[]",
      "element": {
        "id": "url-to-text",
        "version": 1
      }
    },
    {
      "id": "list-text-to-table-v1",
      "version": 1,
      "output": "text[]",
      "input": "table[]",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": [
        {
          "columns": "string[]",
          "rows": "object[]"
        }
      ],
      "element": {
        "id": "text-to-table",
        "version": 1
      }
    },
    {
      "id": "list-table-to-text-v1",
      "version": 1,
      "output": "table[]",
      "input": "text[]",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": "string[]",
      "element": {
        "id": "table-to-text",
        "version": 1
      }
    },
    {
      "id": "list-object-to-table-v1",
      "version": 1,
      "output": "object[]",
      "input": "table[]",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": [
        {
          "columns": "string[]",
          "rows": "object[]"
        }
      ],
      "element": {
        "id": "object-to-table",
        "version": 1
      }
    },
    {
      "id": "list-table-to-object-v1",
      "version": 1,
      "output": "table[]",
      "input": "object[]",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": [
        {
          "columns": "string[]",
          "rows": "object[]"
        }
      ],
      "element": {
        "id": "table-to-object",
        "version": 1
      }
    },
    {
      "id": "list-text-to-document-v1",
      "version": 1,
      "output": "text[]",
      "input": "document[]",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": [
        {
          "schemaVersion": "integer",
          "format": "string",
          "text": "string"
        }
      ],
      "element": {
        "id": "text-to-document",
        "version": 1
      }
    },
    {
      "id": "list-document-to-text-v1",
      "version": 1,
      "output": "document[]",
      "input": "text[]",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": "string[]",
      "element": {
        "id": "document-to-text",
        "version": 1
      }
    },
    {
      "id": "list-text-file-to-text-v1--text-to-script-v1-v1",
      "version": 1,
      "output": "file-bundle[]",
      "input": "script[]",
      "contextFields": [],
      "requiresValue": true,
      "resultSchema": [
        {
          "schemaVersion": "integer",
          "text": "string"
        }
      ],
      "element": {
        "id": "text-file-to-text-v1--text-to-script-v1",
        "version": 1
      }
    },
    {
      "id": "list-shot-to-selected-image-v1--image-to-asset-v1-v1",
      "version": 1,
      "output": "shot[]",
      "input": "asset[]",
      "contextFields": [
        "shots",
        "assets"
      ],
      "requiresValue": true,
      "element": {
        "id": "shot-to-selected-image-v1--image-to-asset-v1",
        "version": 1
      }
    }
  ],
  "exportPolicy": {
    "contract": "host-export-1",
    "kinds": [
      "file",
      "image",
      "audio",
      "video",
      "bundle"
    ],
    "deliveryOwner": "host",
    "admissionCheck": "Host-controlled exports",
    "completedExport": {
      "schemaVersion": 1,
      "storage": [
        "cloud",
        "device"
      ]
    }
  },
  "hostedCapabilities": {
    "operations": [
      "text.generate",
      "audio.speech",
      "audio.transcribe",
      "audio.music",
      "audio.sfx",
      "image.generate",
      "video.generate",
      "image.describe",
      "media.analyze",
      "web.fetch",
      "web.research",
      "timeline.propose",
      "workspace.propose",
      "connection.execute"
    ],
    "operationDetails": {
      "text.generate": {
        "executor": "capability-run",
        "mode": "sync",
        "byok": true,
        "summary": "Exact model, account BYOK or credits, and explicit run review"
      },
      "audio.speech": {
        "executor": "capability-run",
        "mode": "sync",
        "byok": true,
        "summary": "One short text/script input to measured audio in any StillMade catalog voice (Deepgram, ElevenLabs, OpenAI, Kokoro) with credits, or OpenAI with your key; playback review; accepted project recordings can be explicitly added to Editor audio"
      },
      "audio.transcribe": {
        "executor": "capability-run",
        "mode": "sync",
        "byok": true,
        "summary": "One owner-scoped stored audio asset to reviewed text and ordered word timings with StillMade transcription on credits, or OpenAI Whisper with your key"
      },
      "audio.music": {
        "executor": "capability-run",
        "mode": "sync",
        "byok": false,
        "summary": "One prompt to generated music (5–240 seconds) with StillMade credits and playback review"
      },
      "audio.sfx": {
        "executor": "capability-run",
        "mode": "sync",
        "byok": false,
        "summary": "One prompt to a generated sound effect (0.5–22 seconds) with StillMade credits and playback review"
      },
      "image.generate": {
        "executor": "capability-run",
        "mode": "sync",
        "byok": true,
        "summary": "One prompt and optional reference images to a stored PNG with any catalog image model and its settings; StillMade credits or account key, and actual image review"
      },
      "video.generate": {
        "executor": "capability-run",
        "mode": "async",
        "byok": true,
        "summary": "One prompt and optional first/last frames to a measured stored video clip with any catalog video model and its settings; StillMade credits and actual video review"
      },
      "image.describe": {
        "executor": "capability-run",
        "mode": "sync",
        "byok": true,
        "summary": "One to four owned images to bounded production notes; host-selected model/payment and actual description review"
      },
      "media.analyze": {
        "executor": "capability-run",
        "mode": "sync",
        "byok": false,
        "summary": "One owned video (optionally one time range), image or up to four images to structured visual evidence: summary, timeline, observations, on-screen text and issues, with StillMade credits"
      },
      "web.fetch": {
        "executor": "capability-run",
        "mode": "sync",
        "byok": false,
        "summary": "One public web page read by the host and answered against the Block's instruction, with StillMade credits; no cookies, keys or private addresses"
      },
      "web.research": {
        "executor": "capability-run",
        "mode": "sync",
        "byok": false,
        "summary": "One topic searched on the web and summarized with cited sources, with StillMade credits"
      },
      "timeline.propose": {
        "executor": "capability-run",
        "mode": "sync",
        "byok": true,
        "summary": "Bounded typed context to strict timeline-edit JSON; host-selected model/payment, stale-before checks, preview and Apply"
      },
      "workspace.propose": {
        "executor": "capability-run",
        "mode": "sync",
        "byok": true,
        "summary": "Bounded typed context to a strict workspace-edit proposal for one permitted workspace; preview and explicit Apply"
      },
      "connection.execute": {
        "executor": "connection",
        "mode": "sync",
        "byok": false,
        "summary": "One reviewed action on a connected third-party app account through the host connection service; the Block never receives account credentials"
      }
    },
    "limits": {
      "prompt": 32000,
      "contextBytes": 24000,
      "system": 8000,
      "output": 32768,
      "maxTokens": 4096,
      "fixtures": 3,
      "includes": 8,
      "includeLength": 256,
      "packageBytes": 262144,
      "metadataBytes": 8192
    },
    "speechLimits": {
      "text": 3800,
      "duration": 1400,
      "bytes": 67108864,
      "sampleRate": 24000,
      "channels": 1
    },
    "imageLimits": {
      "prompt": 32000,
      "bytes": 12000000,
      "width": 1024,
      "height": 1024,
      "maxSide": 8192,
      "maxPixels": 40000000,
      "maxBytes": 67108864
    },
    "videoLimits": {
      "prompt": 32000,
      "bytes": 268435456,
      "duration": 60,
      "width": 3840,
      "height": 3840,
      "pixels": 8294400
    }
  },
  "marketplaceLicenses": [
    "MIT",
    "Apache-2.0",
    "BSD-2-Clause",
    "BSD-3-Clause",
    "ISC",
    "MPL-2.0",
    "GPL-3.0-only",
    "GPL-3.0-or-later",
    "LGPL-3.0-only",
    "LGPL-3.0-or-later",
    "CC0-1.0"
  ]
}