stillmade-sdk 0.1.42 → 0.1.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. package/.stillmade/sdk-baseline.json +6 -8
  2. package/AGENTS.md +15 -10
  3. package/FRAME_VIEWS.md +113 -0
  4. package/INTERFACE_DESIGN.md +62 -22
  5. package/MOBILE_UI.md +4 -2
  6. package/MODULES.md +152 -6
  7. package/PASTE_TO_LLM.md +35 -25
  8. package/README.md +3 -2
  9. package/SDK.md +994 -550
  10. package/UI_AESTHETIC.md +22 -2
  11. package/blocks/generate/package.js +1 -0
  12. package/blocks/generate/versions/1.0.0/package.js +463 -0
  13. package/docs/build/audio-to-editor.md +36 -0
  14. package/docs/build/block-builder-contract.md +150 -0
  15. package/docs/build/comfyui.md +227 -0
  16. package/docs/build/concepts.md +40 -0
  17. package/docs/build/context.md +159 -0
  18. package/docs/build/cookbook.md +57 -0
  19. package/docs/build/custom-interface.md +617 -0
  20. package/docs/build/data-types.md +83 -0
  21. package/docs/build/frame-views.md +259 -0
  22. package/docs/build/generate-media.md +59 -0
  23. package/docs/build/github-applications.md +314 -0
  24. package/docs/build/hosted-images.md +214 -0
  25. package/docs/build/hosted-music.md +39 -0
  26. package/docs/build/hosted-speech.md +157 -0
  27. package/docs/build/hosted-text.md +246 -0
  28. package/docs/build/image-description.md +49 -0
  29. package/docs/build/interface-design.md +343 -0
  30. package/docs/build/javascript.md +63 -0
  31. package/docs/build/local-preview.md +61 -0
  32. package/docs/build/media-analysis.md +27 -0
  33. package/docs/build/media.md +400 -0
  34. package/docs/build/mobile-ui.md +106 -0
  35. package/docs/build/modules.md +487 -0
  36. package/docs/build/original-blocks.md +70 -0
  37. package/docs/build/outside-apis.md +128 -0
  38. package/docs/build/production-context-templates.md +12 -0
  39. package/docs/build/project-storage.md +94 -0
  40. package/docs/build/quickstart.md +48 -0
  41. package/docs/build/recipes.md +103 -0
  42. package/docs/build/script-handoff.md +45 -0
  43. package/docs/build/script-writer.md +34 -0
  44. package/docs/build/state.md +223 -0
  45. package/docs/build/testing.md +112 -0
  46. package/docs/build/timeline-edits.md +116 -0
  47. package/docs/build/timeline-proposals.md +76 -0
  48. package/docs/build/transcription.md +59 -0
  49. package/docs/build/triggers.md +59 -0
  50. package/docs/build/tutorial.md +52 -0
  51. package/docs/build/typescript.md +34 -0
  52. package/docs/build/video-generation.md +61 -0
  53. package/docs/build/web-reading.md +37 -0
  54. package/docs/build/with-your-ai.md +27 -0
  55. package/docs/changelog.md +9 -0
  56. package/docs/creators.md +21 -0
  57. package/docs/distribute/discovery.md +43 -0
  58. package/docs/distribute/imports.md +58 -0
  59. package/docs/distribute/publishing.md +29 -0
  60. package/docs/distribute/sdk-versions.md +36 -0
  61. package/docs/distribute/selling.md +14 -0
  62. package/docs/distribute/teams.md +60 -0
  63. package/docs/distribute/versioning.md +28 -0
  64. package/docs/examples.md +23 -0
  65. package/docs/gallery.md +26 -0
  66. package/docs/index.md +50 -0
  67. package/docs/native-mcp.md +307 -0
  68. package/docs/project-types/automation.md +43 -0
  69. package/docs/project-types/batches.md +50 -0
  70. package/docs/project-types/build.md +42 -0
  71. package/docs/project-types/completion.md +15 -0
  72. package/docs/project-types/conditions.md +21 -0
  73. package/docs/project-types/hosted-review.md +115 -0
  74. package/docs/project-types/onboarding.md +75 -0
  75. package/docs/project-types/running.md +309 -0
  76. package/docs/project-types/testing.md +72 -0
  77. package/docs/reference/application-artifacts.md +87 -0
  78. package/docs/reference/authoring-guide.md +134 -0
  79. package/docs/reference/browser-applications.md +267 -0
  80. package/docs/reference/capabilities.md +45 -0
  81. package/docs/reference/cli.md +71 -0
  82. package/docs/reference/connection-api.md +59 -0
  83. package/docs/reference/cooperative-jobs.md +13 -0
  84. package/docs/reference/desktop-capabilities.md +172 -0
  85. package/docs/reference/desktop-execution.md +77 -0
  86. package/docs/reference/errors.md +233 -0
  87. package/docs/reference/execution.md +800 -0
  88. package/docs/reference/first-party-blocks.md +40 -0
  89. package/docs/reference/generation-models.md +59 -0
  90. package/docs/reference/limits.md +306 -0
  91. package/docs/reference/manifest-kinds-controls.md +36 -0
  92. package/docs/reference/manifest.md +181 -0
  93. package/docs/reference/operations.md +36 -0
  94. package/docs/reference/package-jobs.md +35 -0
  95. package/docs/reference/parity.md +55 -0
  96. package/docs/reference/permissions.md +86 -0
  97. package/docs/reference/ports.md +26 -0
  98. package/docs/reference/types.md +268 -0
  99. package/docs/reference/universal-resolver.md +303 -0
  100. package/docs/reference/view-bridge.md +60 -0
  101. package/docs/reference/view-rules.md +15 -0
  102. package/docs/reference/workspace-sync.md +25 -0
  103. package/docs/sdk.md +34 -0
  104. package/docs/tools/block-remix.md +211 -0
  105. package/docs/tools/llm.md +2213 -0
  106. package/docs/tools/repository-adaptation.md +613 -0
  107. package/examples/check-clip.stillmade.json +4 -1
  108. package/examples/generate-video.stillmade.json +6 -2
  109. package/examples/research-topic.stillmade.json +5 -1
  110. package/examples/text-workflow.stillmade.json +3 -32
  111. package/examples/timeline-polish.stillmade.json +11 -3
  112. package/examples/transcribe-audio.stillmade.json +11 -3
  113. package/package.json +1 -1
  114. package/packages/block-cli/cli.js +13 -6
  115. package/packages/block-cli/dev-host/assets/host.js +76 -38
  116. package/packages/block-cli/dev-host/assets/index.css +1 -1
  117. package/packages/block-cli/format.js +1 -1
  118. package/packages/block-cli/templates.js +31 -13
  119. package/packages/block-cli/type-packages.js +119 -0
  120. package/packages/block-platform/block-readiness.js +5 -0
  121. package/packages/block-platform/canvas.js +2 -1
  122. package/packages/block-platform/catalog.js +27 -48
  123. package/packages/block-platform/native-host-inventory.js +0 -226
  124. package/packages/block-platform/plain-descriptions.js +1 -25
  125. package/packages/block-platform/project-type-starters.js +13 -53
  126. package/packages/block-platform/script-handoff.js +2 -4
  127. package/packages/block-platform/type-workspace.js +2 -0
  128. package/packages/block-sdk/appearance.js +3 -1
  129. package/packages/block-sdk/block-tier.js +1 -1
  130. package/packages/block-sdk/builder-contract.js +10 -8
  131. package/packages/block-sdk/capabilities.js +1 -1
  132. package/packages/block-sdk/contracts.js +6 -2
  133. package/packages/block-sdk/first-party-identities.js +1 -84
  134. package/packages/block-sdk/first-party-packages.js +3 -85
  135. package/packages/block-sdk/generation-catalog.js +15 -3
  136. package/packages/block-sdk/index.d.ts +2 -1
  137. package/packages/block-sdk/media-analysis-example.js +1 -1
  138. package/packages/block-sdk/mock-host.js +7 -1
  139. package/packages/block-sdk/module-host-calls.js +35 -10
  140. package/packages/block-sdk/module-hosted.js +15 -2
  141. package/packages/block-sdk/module-media-access.js +71 -0
  142. package/packages/block-sdk/module-node.js +1 -1
  143. package/packages/block-sdk/portable-media-actions.js +1 -1
  144. package/packages/block-sdk/runtime.js +1 -1
  145. package/packages/block-sdk/timeline-proposal-example.js +1 -1
  146. package/packages/block-sdk/transcription-example.js +1 -1
  147. package/packages/block-sdk/video-generation-example.js +1 -1
  148. package/packages/block-sdk/view-bridge.js +4 -1
  149. package/packages/block-sdk/view-design.js +17 -14
  150. package/packages/block-sdk/web-example.js +1 -1
  151. package/packages/design-system/block-kit.css +48 -12
  152. package/packages/design-system/block-kit.html +3 -2
  153. package/blocks/mcp-motion-planner/versions/1.1.0/package.js +0 -97
  154. package/blocks/motion-designer/versions/1.0.1/package.js +0 -173318
  155. package/blocks/motion-designer/versions/1.0.2/package.js +0 -173318
  156. package/blocks/motion-frame-review/versions/1.1.1/package.js +0 -465
  157. package/blocks/motion-frame-review/versions/1.1.2/package.snapshot.js +0 -572
  158. package/blocks/narration/package.js +0 -1
  159. package/blocks/narration/versions/1.0.0/package.js +0 -221
  160. package/blocks/narration/versions/1.0.1/package.js +0 -221
  161. package/blocks/native/sm.animated-scene/versions/2.0.0/package.js +0 -475
  162. package/blocks/native/sm.animated-scene/versions/2.1.0/package.js +0 -498
  163. package/blocks/native/sm.animated-scene/versions/2.2.0/package.js +0 -524
  164. package/blocks/native/sm.animated-scene/versions/2.3.0/package.js +0 -618
  165. package/blocks/native/sm.animated-scene/versions/2.3.1/package.js +0 -618
  166. package/blocks/native/sm.animated-scene/versions/2.3.2/package.js +0 -723
  167. package/blocks/native/sm.animated-scene/versions/2.3.3/package.js +0 -723
  168. package/blocks/native/sm.animated-scene/versions/2.3.4/package.js +0 -676
  169. package/blocks/native/sm.animated-scene/versions/2.3.5/package.js +0 -693
  170. package/blocks/native/sm.animated-scene/versions/2.3.6/package.js +0 -700
  171. package/blocks/native/sm.animated-scene/versions/2.3.7/package.js +0 -747
  172. package/blocks/native/sm.animated-scene/versions/2.3.8/package.js +0 -769
  173. package/blocks/native/sm.animated-scene/versions/2.3.9/package.js +0 -769
  174. package/blocks/native/sm.animated-scene-assistant/versions/1.0.0/package.js +0 -183
  175. package/blocks/native/sm.blueprint/versions/2.0.0/package.js +0 -358
  176. package/blocks/native/sm.blueprint/versions/2.1.0/package.js +0 -358
  177. package/blocks/native/sm.blueprint/versions/2.1.1/package.js +0 -358
  178. package/blocks/native/sm.blueprint/versions/2.1.2/package.js +0 -358
  179. package/blocks/native/sm.blueprint/versions/2.1.3/package.js +0 -381
  180. package/blocks/native/sm.blueprint/versions/2.1.4/package.js +0 -381
  181. package/blocks/native/sm.blueprint/versions/2.1.5/package.js +0 -339
  182. package/blocks/native/sm.blueprint/versions/2.1.6/package.js +0 -356
  183. package/blocks/native/sm.blueprint/versions/2.1.7/package.js +0 -363
  184. package/blocks/native/sm.blueprint/versions/2.1.8/package.js +0 -410
  185. package/blocks/native/sm.blueprint/versions/2.1.9/package.js +0 -422
  186. package/blocks/native/sm.blueprint-assistant/versions/1.0.0/package.js +0 -172
  187. package/blocks/native/sm.chat/versions/2.0.0/package.js +0 -144
  188. package/blocks/native/sm.chat/versions/2.0.1/package.js +0 -97
  189. package/blocks/native/sm.chat/versions/2.0.2/package.js +0 -100
  190. package/blocks/native/sm.chat/versions/2.0.3/package.js +0 -100
  191. package/blocks/native/sm.continue-if/versions/1.0.0/package.js +0 -168
  192. package/blocks/native/sm.describe-media/versions/2.0.0/package.js +0 -153
  193. package/blocks/native/sm.describe-media/versions/2.0.1/package.js +0 -156
  194. package/blocks/native/sm.describe-media/versions/2.1.0/package.js +0 -140
  195. package/blocks/native/sm.image-editor/versions/2.0.0/package.js +0 -183
  196. package/blocks/native/sm.image-editor/versions/2.0.1/package.js +0 -190
  197. package/blocks/native/sm.new-items/versions/1.0.0/package.js +0 -191
  198. package/blocks/native/sm.pick-photos/versions/1.0.0/package.js +0 -334
  199. package/blocks/native/sm.quality-audit/versions/1.0.0/package.js +0 -192
  200. package/blocks/native/sm.quality-audit/versions/1.0.1/package.js +0 -192
  201. package/blocks/native/sm.quality-audit/versions/1.0.2/package.js +0 -195
  202. package/blocks/native/sm.research/versions/2.0.0/package.js +0 -175
  203. package/blocks/native/sm.research/versions/2.0.1/package.js +0 -184
  204. package/blocks/native/sm.research/versions/2.0.2/package.js +0 -187
  205. package/blocks/native/sm.script/versions/2.0.0/package.js +0 -144
  206. package/blocks/native/sm.script/versions/2.1.0/package.js +0 -144
  207. package/blocks/native/sm.script/versions/2.1.1/package.js +0 -144
  208. package/blocks/native/sm.script/versions/2.1.2/package.js +0 -105
  209. package/blocks/native/sm.script/versions/2.1.3/package.js +0 -152
  210. package/blocks/native/sm.script/versions/2.1.4/package.js +0 -156
  211. package/blocks/native/sm.script/versions/2.1.5/package.js +0 -156
  212. package/blocks/native/sm.shot-plan/versions/2.0.0/package.js +0 -301
  213. package/blocks/native/sm.shot-plan/versions/2.1.0/package.js +0 -528
  214. package/blocks/native/sm.shot-plan/versions/2.1.1/package.js +0 -528
  215. package/blocks/native/sm.shot-plan/versions/2.1.2/package.js +0 -528
  216. package/blocks/native/sm.shot-plan/versions/2.1.3/package.js +0 -536
  217. package/blocks/native/sm.shot-plan/versions/2.2.0/package.js +0 -800
  218. package/blocks/native/sm.shot-plan/versions/2.2.1/package.js +0 -920
  219. package/blocks/native/sm.shot-plan-assistant/versions/1.0.0/package.js +0 -173
  220. package/blocks/native/sm.stock-search/versions/2.0.0/package.js +0 -174
  221. package/blocks/native/sm.thumbnail/versions/2.0.0/package.js +0 -137
  222. package/blocks/native/sm.thumbnail/versions/2.0.1/package.js +0 -140
  223. package/blocks/native/sm.transcribe/versions/2.0.0/package.js +0 -163
  224. package/blocks/native/sm.transcribe/versions/2.0.1/package.js +0 -168
  225. package/blocks/native/sm.whiteboard-assistant/versions/1.0.0/package.js +0 -175
  226. package/blocks/native/sm.youtube/versions/2.0.0/package.js +0 -217
  227. package/blocks/occasion-story/package.js +0 -1
  228. package/blocks/occasion-story/versions/1.0.0/package.js +0 -1658
  229. package/blocks/occasion-story/versions/1.0.1/package.js +0 -1699
  230. package/blocks/occasion-story/versions/1.0.2/package.js +0 -1682
  231. package/blocks/photo-reel-composer/versions/1.0.0/package.js +0 -3043
  232. package/blocks/photo-reel-composer/versions/1.0.1/package.js +0 -3026
  233. package/blocks/photo-reel-composer/versions/1.0.2/package.js +0 -4149
  234. package/blocks/product-ad-variants/versions/1.0.0/package.js +0 -2911
  235. package/blocks/product-launch-director/versions/1.0.0/package.js +0 -103
  236. package/blocks/release-visuals/package.js +0 -1
  237. package/blocks/release-visuals/versions/1.0.0/package.js +0 -1492
  238. package/blocks/release-visuals/versions/1.0.1/package.js +0 -1517
  239. package/blocks/release-visuals/versions/1.0.2/package.js +0 -1500
  240. package/blocks/screen-recorder/package.js +0 -1
  241. package/blocks/screen-recorder/versions/1.0.0/package.js +0 -223
  242. package/blocks/screen-recorder/versions/1.0.1/package.js +0 -223
  243. package/blocks/short-form-finish/package.js +0 -1
  244. package/blocks/short-form-finish/versions/1.0.0/package.js +0 -1043
  245. package/blocks/short-form-finish/versions/1.0.1/package.js +0 -1043
  246. package/blocks/short-form-finish/versions/1.0.2/package.js +0 -1043
  247. package/blocks/short-form-finish/versions/1.0.3/package.js +0 -1026
  248. package/examples/saas-product-launch-reviewed-source.stillmade.json +0 -383
  249. package/examples/saas-product-launch.stillmade.json +0 -304
  250. package/packages/block-platform/dealer-inventory-video-project-type.js +0 -38
  251. package/packages/block-platform/first-revenue-project-types.js +0 -46
  252. package/packages/block-platform/fixture-starters.js +0 -13
  253. package/packages/block-platform/launch-project-source.js +0 -10
  254. package/packages/block-platform/launch-project.js +0 -30
  255. package/packages/block-platform/motion-project-types.js +0 -55
  256. package/packages/block-platform/motion-starters.js +0 -14
  257. package/packages/block-platform/product-ad-variants-project-type.js +0 -30
  258. package/packages/block-platform/product-launch-updated.js +0 -90
  259. package/packages/block-platform/revenue-review-project-types.js +0 -36
  260. package/packages/block-platform/revenue-review-starters.js +0 -13
  261. package/packages/block-platform/script-writer.js +0 -29
  262. package/packages/block-platform/website-source-block.js +0 -14
@@ -0,0 +1,40 @@
1
+ # First-party Blocks
2
+
3
+ ## First-party Blocks
4
+ The latest version of each Block bundled with the SDK, generated from the packages themselves. Connect to a port by matching its type and meaning. A port marked "project context only" reads the project and cannot receive a connection from another Step; a `workspace` Block is never connected automatically.
5
+
6
+ | Block | Name | Kind | Inputs | Outputs |
7
+ | --- | --- | --- | --- | --- |
8
+ | `sm.ai-decide` 1.0.0 | AI decide | task | `data` text (external_data) · primary; `rules` text (decision_rules) | `decision` object (ai_decision) · primary |
9
+ | `sm.ai-write` 1.0.0 | AI write | task | `data` text (external_data) · primary; `instructions` text (writing_instructions) | `text` text (written_message) · primary |
10
+ | `sm.board-editor` 2.2.11 | Whiteboard | workspace | `board` board-document (whiteboard_document) · project context only · primary; `updatedBoard` board-document (whiteboard_document); `commit` boolean (apply_changes); `action` text (whiteboard_action); `presenterPrompt` text (presenter_prompt); `generatedImage` image (image); `versions` metadata[] (revision_history) · project context only; `presence` metadata[] (collaborator_presence); `assets` asset[] (project_media) · project context only | `board` board-document (whiteboard_document) · primary; `edit` workspace-edit (workspace_edit); `presenterAction` approval (portable_media_action); `qualityAction` approval (portable_media_action); `renderAction` approval (portable_media_action); `actionEdit` workspace-edit (workspace_edit); `qualityReport` metadata (quality_report); `editorTimeline` timeline (editor_handoff); `revision` metadata (revision_event) |
11
+ | `sm.captions` 2.0.0 | Captions | editor-extension | `transcript` transcript · primary; `projectTranscript` transcript · project context only; `timeline` timeline · project context only; `text` text; `start` number; `duration` number; `highlightColor` text; `animation` text | `edit` timeline-edit · primary |
12
+ | `sm.character` 2.0.1 | Character reference | workspace | `input` text (character_description) · primary; `name` text (character_name); `role` text (character_role); `appearance` text (character_appearance); `personality` text (character_personality) | `output` character (character_reference) · primary |
13
+ | `sm.compare` 2.0.2 | Compare assets | workspace | `imageA` image (comparison_image_a) · primary; `imageB` image (comparison_image_b); `selection` text (comparison_selected_image); `position` integer (comparison_split_position) | `output` image (selected_comparison_image) · primary |
14
+ | `sm.connect-app` 1.0.0 | Connect an app | task | `app` text (connected_app) · primary | `result` object (external_data) · primary |
15
+ | `sm.contact-fields` 1.0.0 | Contact fields | task | `record` object (external_data) · primary | `email` text (contact_email) · primary; `first_name` text (contact_first_name); `last_name` text (contact_last_name); `full_name` text (contact_full_name); `phone` text (contact_phone); `company` text (contact_company); `city` text (contact_city); `other_answers` text (contact_other_answers) |
16
+ | `sm.edit-assistant` 2.0.2 | Edit Assistant | task | `timeline` timeline (timeline) · project context only · primary; `selection` timeline-range (timeline_range); `request` text (edit_request) | `edit` timeline-edit (timeline_edit_proposal) · primary |
17
+ | `sm.editor` 2.2.12 | Editor | workspace | `editor` timeline (editor_timeline) · project context only · primary; `assets` asset[] (legacy.asset-list.assets) · project context only; `updatedEditor` timeline (legacy.timeline.updatededitor); `commit` boolean (legacy.boolean.commit); `action` text (legacy.text.action); `renderFps` integer (legacy.integer.renderfps); `renderResolution` integer (legacy.integer.renderresolution); `renderQuality` text (legacy.text.renderquality) | `editor` timeline (editor_timeline) · primary; `edit` workspace-edit (legacy.workspace-edit.edit); `mediaAction` approval (portable_media_action) |
18
+ | `sm.export-audio` 2.0.0 | Export audio | task | `input` timeline (timeline) · primary; `renderFps` text (render_fps); `renderResolution` text (render_resolution); `renderQuality` text (render_quality); `projectTimeline` timeline (timeline) · project context only | `mediaAction` approval (portable_media_action); `output` audio (rendered_audio) |
19
+ | `sm.export-timeline` 2.0.0 | Export timeline | editor-extension | `timeline` timeline · project context only · primary; `assets` asset[] · project context only; `blueprint` bible · project context only; `shotPlan` shot-plan · project context only; `metadata` metadata · project context only; `title` text; `format` text | `download` file-bundle · primary |
20
+ | `sm.export-video` 2.1.0 | Export video | task | `input` timeline (timeline) · primary; `media` asset[] (project_media); `narration` audio (narration_audio); `renderAspect` text (render_aspect); `renderFps` text (render_fps); `renderResolution` text (render_resolution); `renderQuality` text (render_quality); `projectTimeline` timeline (timeline) · project context only; `projectShotPlan` shot-plan (production_shot_plan) · project context only | `mediaAction` approval (portable_media_action); `output` video (rendered_video) |
21
+ | `sm.final-edit` 2.0.2 | AI Final Edit | task | `timeline` timeline (timeline) · project context only · primary; `direction` text (edit_direction) | `edit` timeline-edit (timeline_edit_proposal) · primary |
22
+ | `sm.generate-image` 2.1.0 | Generate image | task | `input` text · primary; `photos` image[] (reference_image) | `output` image · primary |
23
+ | `sm.generate-video` 2.0.1 | Generate video | task | `prompt` brief (video_generation_brief) · primary | `video` video (generated_video) · primary |
24
+ | `sm.grade` 2.0.2 | Color grade | editor-extension | `timeline` timeline (editor_timeline) · project context only · primary; `clipIds` text[] (timeline_clip_ids); `look` text (color_grade_look); `adjustments` json (color_grade_adjustments) | `edit` timeline-edit (timeline_edit) · primary |
25
+ | `sm.import-media` 2.0.2 | Import media | task | `files` asset[] (legacy.asset-list.files) · primary; `include` text (legacy.text.include); `duplicates` text (legacy.text.duplicates) | `assets` asset[] (legacy.asset-list.assets) · primary |
26
+ | `sm.location` 2.0.1 | Location reference | workspace | `input` text (location_description) · primary; `name` text (location_name); `visualDetails` text (location_visual_details); `timeOfDay` text (location_time); `atmosphere` text (location_atmosphere) | `output` location (location_reference) · primary |
27
+ | `sm.meta-creative` 1.0.0 | Meta ad creative | task | `upload` object (external_data) · primary; `message` text (ad_primary_text); `website_url` text (ad_destination_url); `page_id` text (facebook_page_id); `call_to_action` text (ad_call_to_action) | `creative` object (meta_ad_creative) · primary |
28
+ | `sm.motion-graphics` 2.0.0 | Motion graphics | editor-extension | `timeline` timeline (timeline) · primary; `projectTimeline` timeline (timeline) · project context only; `plan` json (motion_graphics_plan) | `timeline` timeline (timeline) · primary; `edit` workspace-edit (editor_workspace_edit) |
29
+ | `sm.panel-strip` 2.4.2 | Image Panels | workspace | `panels` panel-document (image_panel_document) · project context only · primary; `transcript` transcript (timed_transcript) · project context only; `script` script (narration_script) · project context only; `narrationScript` script (narration_script); `narrationTiming` transcript (timed_transcript); `blueprint` bible (production_blueprint) · project context only; `updatedPanels` panel-document (image_panel_document); `commit` boolean (apply_changes); `generatedImage` image (image); `targetPanelId` text (panel_id); `attachGeneratedImage` boolean (boolean); `action` text (host_action); `stockQuery` text (stock_query); `generatedImages` image[] (image_list) | `panels` panel-document (image_panel_document) · primary; `edit` workspace-edit (workspace_edit); `stockAction` approval (portable_media_action); `qualityAction` approval (portable_media_action); `renderAction` approval (portable_media_action); `stockAsset` asset (licensed_asset); `stockImage` image (licensed_stock_image); `qualityReport` metadata (quality_report); `generationPlan` metadata (generation_plan); `generateAction` approval (portable_media_action); `generatedImage` image (generated_image); `batchGenerateAction` approval (portable_media_action); `generatedImages` image[] (generated_image_list) |
30
+ | `sm.photo-notes` 1.1.0 | Photo notes | task | `photos` image[] (photo_set) · primary | `notes` text (photo_notes) · primary |
31
+ | `sm.pipeline` 2.2.6 | Canvas | workspace | `canvas` pipeline (canvas_document) · project context only · primary; `assets` asset[] (project_assets) · project context only; `versions` metadata[] (asset_versions) · project context only; `updatedCanvas` pipeline (canvas_document); `commit` boolean (canvas_commit_intent); `generatedImage` image (generated_image_version); `addGeneratedImage` boolean (attach_generated_image); `generatedImageTitle` text (generated_image_title); `generatedVideo` video (generated_video_version); `addGeneratedVideo` boolean (attach_generated_video); `generatedVideoTitle` text (generated_video_title); `generatedAudio` audio (generated_audio_version); `addGeneratedAudio` boolean (attach_generated_audio); `generatedAudioTitle` text (generated_audio_title); `connectionProposal` json (context_connection_proposal); `applyContextConnections` boolean (context_connection_intent) | `canvas` pipeline (canvas_document) · primary; `edit` workspace-edit (canvas_edit_proposal) |
32
+ | `sm.rough-cut` 2.0.2 | Rough Cut | task | `timeline` timeline (timeline) · project context only · primary; `clipIds` text (timeline_clip_selection); `startAt` number (timeline_start_seconds); `gap` number (timeline_clip_gap_seconds) | `edit` timeline-edit (timeline_edit_proposal) · primary |
33
+ | `sm.score` 2.0.0 | Audio scoring | workspace | `timeline` timeline (timeline) · primary; `projectTimeline` timeline (timeline) · project context only; `audio` audio; `stockAsset` asset (licensed_asset); `audios` audio[]; `plan` json (audio_score_plan) | `timeline` timeline (timeline) · primary; `edit` workspace-edit (editor_workspace_edit) |
34
+ | `sm.style` 2.0.1 | Style reference | workspace | `input` text (visual_style_direction) · primary; `name` text (style_name); `palette` text (color_palette); `lighting` text (lighting_direction); `camera` text (camera_direction) | `output` style (visual_style_reference) · primary |
35
+ | `sm.transition` 2.0.2 | Transition | editor-extension | `timeline` timeline (editor_timeline) · project context only · primary; `clipIds` text[] (timeline_clip_ids); `transition` text (timeline_transition_type); `duration` number (timeline_transition_duration); `soundOn` boolean (timeline_transition_sound_enabled); `soundId` text (timeline_transition_sound_id) | `edit` timeline-edit (timeline_edit) · primary |
36
+ | `sm.video-assets` 2.1.4 | Video Assets | workspace | `assets` asset[] (media_collection) · project context only · primary; `versions` metadata[] (media_version_history) · project context only; `incoming` asset[] (media_collection); `kind` text (media_filter); `selectedIds` text (media_selection); `selectedVersions` text (media_version_selection) | `output` asset[] (production_media) · primary |
37
+ | `sm.voiceover` 2.1.6 | Voiceover | workspace | `input` script (narration_script) · primary; `take` audio (narration_audio); `library` asset[] (project_media) · project context only; `timing` transcript (timed_transcript) · project context only | `output` audio (narration_audio) · primary |
38
+ | `sm.when` 1.1.0 | Automation | task | `event` object (workflow_event); `start` object (automation_start); `only_if` text (automation_condition) | `item` object (external_data) · primary; `trigger` object (automation_trigger); `check` object (ai_decision) |
39
+ | `sm.write-summary` 1.0.0 | Write summary | task | `data` text (external_data) · primary | `summary` text (summary_report) · primary |
40
+ | `stillmade.generate` 1.0.0 | Generate | task | `prompt` text (generation_prompt) · primary; `mode` text (generation_mode); `model` text (generation_model); `aspectRatio` text (aspect_ratio); `size` text (render_resolution); `quality` text (render_quality); `duration` integer (duration_seconds); `sound` boolean (generate_audio); `count` integer (generation_count); `avoid` text (negative_prompt); `seed` integer (generation_seed); `references` image[] (reference_image); `startFrame` image (first_frame); `endFrame` image (last_frame) | `media` asset[] (generated_media) · primary; `notMade` text (generation_failures) |
@@ -0,0 +1,59 @@
1
+ # Generation models
2
+
3
+ ## How models are used
4
+ Capability Blocks (`image.generate`, `video.generate`, `audio.music`, `audio.sfx`, `audio.speech`) and JavaScript Blocks (the `media.generate` action) can use every model below, the same catalog the app's own Blocks use. Users pay with StillMade credits at StillMade's price; a Block declares default settings and the user can change them before running. A setting a model has no knob for is `"default"`.
5
+
6
+ ## Image models
7
+ | Model | Name | Aspect ratios | Resolutions | Qualities | Reference images | Seed |
8
+ | --- | --- | --- | --- | --- | --- | --- |
9
+ | `nano-banana-2` | Nano Banana 2 | auto, 21:9, 16:9, 3:2, 4:3, 1:1, 4:5, 3:4, 2:3, 9:16 | 1K, 2K, 4K | model default | up to 8 | yes |
10
+ | `nano-banana-2-lite` | Nano Banana 2 Lite | auto, 21:9, 16:9, 3:2, 4:3, 1:1, 4:5, 3:4, 2:3, 9:16 | 1K, 2K, 4K | model default | up to 8 | yes |
11
+ | `nano-banana-pro` | Nano Banana Pro | auto, 21:9, 16:9, 3:2, 4:3, 1:1, 4:5, 3:4, 2:3, 9:16 | 1K, 2K, 4K | model default | up to 8 | yes |
12
+ | `gpt-image-2` | GPT Image 2 | auto, 16:9, 9:16, 1:1, 4:3, 3:4 | 1K, 2K, 4K | low, medium, high | up to 8 | no |
13
+ | `gpt-image-1.5` | GPT-Image 1.5 | 16:9, 9:16, 1:1 | model default | low, medium, high | no | no |
14
+ | `kling-image-v3` | Kling Image V3 | 21:9, 16:9, 9:16, 1:1, 4:3, 3:4, 3:2, 2:3 | 1K, 2K | model default | no | no |
15
+ | `seedream-v4.5` | Seedream 4.5 | 16:9, 9:16, 1:1, 4:3, 3:4 | 2K, 4K | model default | no | yes |
16
+
17
+ ## Video models
18
+ | Model | Name | Seconds | Resolutions | Aspect ratios | First frame | Last frame | Native sound |
19
+ | --- | --- | --- | --- | --- | --- | --- | --- |
20
+ | `seedance-2.0` | Seedance 2.0 | 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 | 480p, 720p, 1080p, 4k | auto, 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 | yes | yes | yes |
21
+ | `seedance-2.0-fast` | Seedance 2.0 Fast | 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 | 480p, 720p | auto, 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 | yes | yes | yes |
22
+ | `seedance-2.0-mini` | Seedance 2.0 Mini | 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 | 480p, 720p | auto, 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 | yes | yes | yes |
23
+ | `kling-v3-turbo` | Kling 3.0 Turbo | 5, 10 | model default | 16:9, 9:16, 1:1 | yes | no | no |
24
+ | `wan-2.6-flash` | Wan 2.6 Flash | 3, 4, 5 | model default | 16:9, 9:16, 1:1 | required | no | no |
25
+ | `veo-3.1-lite` | Veo 3.1 Lite | 4, 6, 8 | 720p, 1080p | 16:9, 9:16 | yes | yes | yes |
26
+ | `vidu-q3-turbo` | Vidu Q3 Turbo | 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 | model default | model default | yes | yes | yes |
27
+ | `wan-2.7` | Wan 2.7 | 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 | 720p, 1080p | model default | required | yes | no |
28
+
29
+ Veo 3.1 Lite at 1080p is always 8 seconds. With no model named, a video uses `vidu-q3-turbo`; when its `aspectRatio` is one that model cannot make (`9:16` for a vertical clip), it uses the first of `wan-2.6-flash`, `veo-3.1-lite`, `seedance-2.0-mini`, `kling-v3-turbo`, `seedance-2.0-fast`, `seedance-2.0` (cheapest first) that makes that shape with the frames and `duration` given. A model the Block names is kept, and refused if it cannot make the shape. Generated images are stored as measured PNGs (up to 8192 pixels a side); videos are stored as the provider's MP4.
30
+
31
+ ## Music and sound effects
32
+ | Operation | Model | Length | Price |
33
+ | --- | --- | --- | --- |
34
+ | `audio.music` | `ace-step` | 5 to 240 whole seconds (suggested default 30) | The app's music price per started minute |
35
+ | `audio.sfx` | `sound-effects` | 0.5 to 22 seconds in tenths (suggested default 4) | The app's sound-effect price per clip |
36
+
37
+ ## Voices
38
+ `audio.speech` Blocks can suggest any of these voice ids in `settings.voice`. A server offers the voices whose provider it has configured. Price follows the app's Voiceover rate for the text's length.
39
+
40
+ | Voice id | Name | Provider |
41
+ | --- | --- | --- |
42
+ | `asteria` | Asteria · Clear, confident female | deepgram |
43
+ | `adam` | Adam · Dominant, firm male | elevenlabs |
44
+ | `liam-social` | Liam · Social · Energetic — reels & shorts | elevenlabs |
45
+ | `onyx` | Onyx · Deep, steady male narrator | openai |
46
+ | `nova` | Nova · Bright, clear female narrator | openai |
47
+ | `luna` | Luna · Friendly, youthful female | deepgram |
48
+ | `odysseus` | Odysseus · Calm, smooth, professional male | deepgram |
49
+ | `aurora` | Aurora · Cheerful, expressive female | deepgram |
50
+ | `apollo` | Apollo · Confident, comfortable male | deepgram |
51
+ | `thalia` | Thalia · Confident, energetic female | deepgram |
52
+ | `atlas` | Atlas · Enthusiastic, confident male | deepgram |
53
+ | `hera` | Hera · Warm, professional female | deepgram |
54
+ | `arcas` | Arcas · Natural, smooth male | deepgram |
55
+ | `cora` | Cora · Smooth, melodic female | deepgram |
56
+ | `zeus` | Zeus · Deep, trustworthy male | deepgram |
57
+ | `orion` | Orion · Approachable, calm male | deepgram |
58
+
59
+ Music, sound effects and catalog voices are stored as the provider's measured MP3 or WAV.
@@ -0,0 +1,306 @@
1
+ # Limits
2
+
3
+ Every number below is read from the SDK constant named under its heading, the same value the runtime and StillMade enforce. Exceeding one fails with the error code in the [error reference](errors.md).
4
+
5
+ ## JavaScript Blocks (src/run.js)
6
+
7
+ `JAVASCRIPT_LIMITS`
8
+
9
+ | Limit | Value |
10
+ | --- | --- |
11
+ | Source size | 256 KiB |
12
+ | Input and output JSON | 4 MiB |
13
+ | CPU time per run | 500 ms |
14
+ | Memory | 16 MiB |
15
+ | Sandbox memory reserve | 32 MiB |
16
+
17
+ ## Module Blocks
18
+
19
+ `MODULE_LIMITS`
20
+
21
+ | Limit | Value |
22
+ | --- | --- |
23
+ | Files in module/ | 64 |
24
+ | One file | 64 MiB |
25
+ | All files | 128 MiB |
26
+ | File path length | 160 |
27
+ | Run time without progress (host calls do not count) | 2 min |
28
+ | Longest run in real time | 30 min |
29
+ | Extra time after each progress report | 1 min |
30
+ | One message to or from the host | 16 MiB |
31
+ | Log lines kept per run | 500 |
32
+
33
+ ## Standard views
34
+
35
+ `VIEW_LIMITS`
36
+
37
+ | Limit | Value |
38
+ | --- | --- |
39
+ | Markup | 64 KiB |
40
+ | Styles | 32 KiB |
41
+ | Script | 64 KiB |
42
+ | One message to the host | 4 MiB |
43
+ | StillMade.run calls per minute | 30 |
44
+ | Image previews per minute | 60 |
45
+ | One image preview | 15 s |
46
+ | Preview image side (pixels) | 512 |
47
+
48
+ ## Frame views
49
+
50
+ `FRAME_VIEW_LIMITS`
51
+
52
+ | Limit | Value |
53
+ | --- | --- |
54
+ | Markup | 256 KiB |
55
+ | Each stylesheet | 256 KiB |
56
+ | Script bundle (view.js) | 4 MiB |
57
+ | Asset files | 32 |
58
+ | All asset files | 8 MiB |
59
+ | One task before it is stopped | 250 ms |
60
+ | A blocking native operation before the view is closed | 1 s |
61
+
62
+ ## Shared view state
63
+
64
+ `SHARED_VIEW_LIMITS`
65
+
66
+ | Limit | Value |
67
+ | --- | --- |
68
+ | All shared fields | 384 KiB |
69
+ | One updateShared request | 800,000 bytes |
70
+ | Unsent edits | 2 MiB |
71
+
72
+ ## Hosted operations
73
+
74
+ `CAPABILITY_LIMITS`
75
+
76
+ | Limit | Value |
77
+ | --- | --- |
78
+ | Prompt characters | 32,000 |
79
+ | Project context sent with a prompt | 24,000 bytes |
80
+ | System instruction characters | 8,000 |
81
+ | Text output characters | 32,768 |
82
+ | Tokens a reply may use | 4,096 |
83
+ | Fixtures in a capability Block | 3 |
84
+ | Literal phrases one fixture checks | 8 |
85
+ | One literal phrase | 256 |
86
+ | Capability package | 256 KiB |
87
+ | Host metadata | 8 KiB |
88
+
89
+ ## Image generation
90
+
91
+ `IMAGE_CAPABILITY_LIMITS`
92
+
93
+ | Limit | Value |
94
+ | --- | --- |
95
+ | Prompt characters | 32,000 |
96
+ | Legacy fixed-size image | 12,000,000 bytes |
97
+ | Legacy fixed width | 1,024 |
98
+ | Legacy fixed height | 1,024 |
99
+ | Longest side (pixels) | 8,192 |
100
+ | Pixels | 40,000,000 |
101
+ | Image file | 64 MiB |
102
+
103
+ ## Video generation
104
+
105
+ `VIDEO_CAPABILITY_LIMITS`
106
+
107
+ | Limit | Value |
108
+ | --- | --- |
109
+ | Prompt characters | 32,000 |
110
+ | Video file | 256 MiB |
111
+ | Seconds | 60 |
112
+ | Width (pixels) | 3,840 |
113
+ | Height (pixels) | 3,840 |
114
+ | Pixels per frame | 8,294,400 |
115
+
116
+ ## Speech
117
+
118
+ `SPEECH_CAPABILITY_LIMITS`
119
+
120
+ | Limit | Value |
121
+ | --- | --- |
122
+ | Characters per call | 3,800 |
123
+ | Seconds | 1,400 |
124
+ | Audio file | 64 MiB |
125
+ | Canonical WAV sample rate | 24,000 |
126
+ | Canonical WAV channels | 1 |
127
+
128
+ ## Music, sound effects and transcription
129
+
130
+ `AUDIO_CAPABILITY_LIMITS`
131
+
132
+ | Limit | Value |
133
+ | --- | --- |
134
+ | Audio file | 128 MiB |
135
+ | Seconds | 1,800 |
136
+ | Music seconds (min, max, default) | min 5; max 240; default 30 |
137
+ | Sound effect seconds (min, max, default) | min 0.5; max 22; default 4 |
138
+
139
+ ## Conversation history (text.generate)
140
+
141
+ `TEXT_HISTORY_LIMITS`
142
+
143
+ | Limit | Value |
144
+ | --- | --- |
145
+ | Turns | 20 |
146
+ | Characters per turn | 8,000 |
147
+ | Characters in all turns | 24,000 |
148
+
149
+ ## Web reading
150
+
151
+ `WEB_CAPABILITY_LIMITS`
152
+
153
+ | Limit | Value |
154
+ | --- | --- |
155
+ | URL length | 2,048 |
156
+ | Instruction characters | 4,000 |
157
+ | Research topic characters | 500 |
158
+ | Sources returned | 12 |
159
+ | Answer characters | 32,768 |
160
+
161
+ ## Media analysis
162
+
163
+ `MEDIA_ANALYZE_LIMITS`
164
+
165
+ | Limit | Value |
166
+ | --- | --- |
167
+ | Images per call | 4 |
168
+ | Question characters | 2,000 |
169
+ | Seconds of one closer-inspected video range | 12 |
170
+
171
+ ## Image description
172
+
173
+ `IMAGE_DESCRIBE_LIMITS`
174
+
175
+ | Limit | Value |
176
+ | --- | --- |
177
+ | Images per call | 4 |
178
+
179
+ ## Generation from code (media.generate)
180
+
181
+ `MEDIA_GENERATE_LIMITS`
182
+
183
+ | Limit | Value |
184
+ | --- | --- |
185
+ | Items per batch | 50 |
186
+ | Prompt characters | 4,000 |
187
+
188
+ ## Generation settings
189
+
190
+ `GENERATION_LIMITS`
191
+
192
+ | Limit | Value |
193
+ | --- | --- |
194
+ | Reference images | 8 |
195
+ | Negative prompt characters | 2,000 |
196
+ | Largest seed | 2,147,483,647 |
197
+
198
+ ## Outside APIs (net.fetch)
199
+
200
+ `NETWORK_LIMITS`
201
+
202
+ | Limit | Value |
203
+ | --- | --- |
204
+ | Declared origins | 8 |
205
+ | Request body | 4 MiB |
206
+ | Response body after decompression | 8 MiB |
207
+ | One request | 30 s |
208
+ | Redirects followed | 3 |
209
+ | Request headers | 32 |
210
+ | All request headers | 16 KiB |
211
+ | URL length | 8,192 |
212
+ | Requests per minute (person and Block) | 120 |
213
+ | Requests per minute to one origin (everyone) | 3,000 |
214
+ | Saved key length | 4,096 |
215
+
216
+ ## Live connections (net.connect)
217
+
218
+ `SOCKET_LIMITS`
219
+
220
+ | Limit | Value |
221
+ | --- | --- |
222
+ | Open connections per run | 4 |
223
+ | One message, either way | 1 MiB |
224
+ | All messages in one run | 256 MiB |
225
+ | Subprotocol names | 8 |
226
+
227
+ ## Cloud storage
228
+
229
+ `CLOUD_STORAGE_LIMITS`
230
+
231
+ | Limit | Value |
232
+ | --- | --- |
233
+ | Key length | 200 |
234
+ | One JSON value | 1 MiB |
235
+ | One file | 64 MiB |
236
+ | Everything one Block keeps in a project | 256 MiB |
237
+ | Keys per Block per project | 2,000 |
238
+ | Items per list page | 500 |
239
+ | Media type length | 100 |
240
+
241
+ ## Triggers
242
+
243
+ `BLOCK_TRIGGER_LIMITS`
244
+
245
+ | Limit | Value |
246
+ | --- | --- |
247
+ | Triggers per Block | 4 |
248
+ | Label characters | 120 |
249
+ | Shortest schedule interval (seconds) | 60 |
250
+ | Longest schedule interval (seconds) | 31,536,000 |
251
+
252
+ ## Media transforms
253
+
254
+ `MEDIA_TRANSFORM_LIMITS`
255
+
256
+ | Limit | Value |
257
+ | --- | --- |
258
+ | Ranges kept by one cut | 500 |
259
+ | Videos joined at once | 50 |
260
+ | Media length (seconds) | 21,600 |
261
+ | Decoded samples | 201,326,592 |
262
+ | Decode sample rates | 8,000, 16,000, 22,050, 24,000, 32,000, 44,100, 48,000 |
263
+ | Thumbnail width (pixels) | 4,096 |
264
+ | Joined image side (pixels) | 4,096 |
265
+ | Images in one joined image | 64 |
266
+ | Text pieces in one joined image | 64 |
267
+ | Document pages read | 500 |
268
+ | Document text (characters) | 4,000,000 |
269
+
270
+ ## Files, documents and tables
271
+
272
+ `DATA_VALUE_LIMITS`
273
+
274
+ | Limit | Value |
275
+ | --- | --- |
276
+ | File name length | 255 |
277
+ | Document characters | 1,000,000 |
278
+ | Document title characters | 300 |
279
+ | Table columns | 500 |
280
+ | Table rows | 100,000 |
281
+ | Table cells | 500,000 |
282
+ | Column name length | 160 |
283
+ | Characters in one cell | 100,000 |
284
+ | Link length | 8,192 |
285
+
286
+ ## File bundles
287
+
288
+ `FILE_BUNDLE_LIMITS`
289
+
290
+ | Limit | Value |
291
+ | --- | --- |
292
+ | Files | 256 |
293
+ | Text in all files | 3,000,000 bytes |
294
+ | Path length | 180 |
295
+
296
+ ## JSON schemas (text.generate)
297
+
298
+ `JSON_SCHEMA_LIMITS`
299
+
300
+ | Limit | Value |
301
+ | --- | --- |
302
+ | Schema size | 8 KiB |
303
+ | Nesting depth | 8 |
304
+ | Properties per object | 64 |
305
+ | Values per enum | 64 |
306
+ | Characters in a schema string | 4,000 |
@@ -0,0 +1,36 @@
1
+ # Kinds and generated controls
2
+
3
+ ## Kinds
4
+ | Kind | Behaviour |
5
+ | --- | --- |
6
+ | `task` | A Project Type Step. Its primary input and output connect automatically to neighbouring Steps. Use this for almost every Block. |
7
+ | `workspace` | A complete project workspace that owns a project document (like Shots or the Editor). Never connected automatically: neighbours only reach it through project context or explicit connections. |
8
+ | `editor-extension` | Accepted by the validator; no host behaviour depends on it today. Use `task`. |
9
+
10
+ ## Generated controls
11
+ `manifest.ui` binds generated controls to inputs. A custom view replaces them in the interface, but keep them as the fallback schema.
12
+
13
+ | Control | Use |
14
+ | --- | --- |
15
+ | `text` | Single- or multi-line text for a `text`-like input. |
16
+ | `number` | A number field for `number`/`integer` inputs. |
17
+ | `slider` | A range slider for a bounded number input. |
18
+ | `checkbox` | A toggle for a `boolean` input. |
19
+ | `asset` | A media picker for `image`, `video`, `audio` or `asset` inputs. |
20
+ | `select` | One choice from a list. |
21
+ | `multiselect` | Several choices from a list. |
22
+ | `file` | An upload for a `file` or `file[]` input: PDF, TXT, CSV, Markdown, JSON or ZIP, checked by type and bytes before the Block sees a saved reference. |
23
+ | `date` | A date picker for a `date` input; add `time: true` for a date and time. |
24
+ | `color` | A color picker with a hex field for a `color` input. |
25
+ | `url` | A web address field for a `url` input (http or https). |
26
+ | `richtext` | A Markdown editor with a preview for a `document` input, or a `text` input written in Markdown. |
27
+ | `list` | An item-by-item editor for `text[]`, `number[]`, `integer[]`, `url[]`, `date[]` or `color[]` inputs. |
28
+ | `grid` | A grid editor for a `table` input, with add and remove rows and columns and CSV paste. |
29
+ | `gallery` | Presents an `image[]` output as a gallery. |
30
+ | `before-after` | Compares an `image` output with a declared `image` input. |
31
+ | `table` | Presents a `table` output as a paged table with a CSV download. |
32
+ | `document` | Presents a `document` or Markdown `text` output as formatted text. |
33
+ | `chart` | Draws a `table` (optional `x` and `y` column names) or `number[]` output as a `bar` or `line` chart (`chart`). |
34
+ | `code` | Presents a `text`, `json` or `object` output as code with a copy button (optional `language`). |
35
+ | `player` | Plays an `audio` or `video` output (or a list of them); a video plays in StillMade's player, with full screen. |
36
+ | `download` | Offers a `file`, `file[]` or `file-bundle` output as a download through the host export policy. |
@@ -0,0 +1,181 @@
1
+ # Block manifest
2
+
3
+ ## Package envelope
4
+ Recipe packages contain `manifest`, `recipe`, and `tests`. JavaScript packages contain `manifest`, `code`, and `tests`. Unknown envelope and manifest fields are rejected.
5
+
6
+ ## Manifest example
7
+ ```json
8
+ {
9
+ "schemaVersion": 1,
10
+ "license": "MIT",
11
+ "provenance": {
12
+ "notice": "MIT License\n\nCopyright (c) 2026 StillMade SDK contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and \nassociated documentation files (the \"Software\"), to deal in the Software without restriction, including \nwithout limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell \ncopies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the \nfollowing conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial \nportions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT \nLIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO \nEVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER \nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE \nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n"
13
+ },
14
+ "sdkVersion": "0.1.0",
15
+ "id": "example.word-count",
16
+ "action": {
17
+ "label": "Count words",
18
+ "running": "Counting words…"
19
+ },
20
+ "version": "1.0.0",
21
+ "name": "Word count",
22
+ "description": "Counts words and returns trimmed text using isolated JavaScript.",
23
+ "kind": "task",
24
+ "runtime": "javascript",
25
+ "inputs": {
26
+ "text": {
27
+ "type": "text",
28
+ "semantic": "plain_text",
29
+ "required": true,
30
+ "description": "Text whose surrounding whitespace should be removed."
31
+ }
32
+ },
33
+ "outputs": {
34
+ "text": {
35
+ "type": "text",
36
+ "semantic": "plain_text",
37
+ "description": "The trimmed source text."
38
+ },
39
+ "words": {
40
+ "type": "integer",
41
+ "semantic": "word_count",
42
+ "description": "The number of whitespace-separated words."
43
+ }
44
+ },
45
+ "permissions": {
46
+ "project": [],
47
+ "network": [],
48
+ "filesystem": [],
49
+ "secrets": []
50
+ },
51
+ "ui": [
52
+ {
53
+ "control": "text",
54
+ "port": "text"
55
+ }
56
+ ]
57
+ }
58
+ ```
59
+
60
+ ## Required fields
61
+ | Field | Contract |
62
+ | --- | --- |
63
+ | schemaVersion | Integer 1 |
64
+ | sdkVersion | Exact stable version 0.1.0, caret, tilde, or comparator intersection satisfied by this host |
65
+ | id | Lowercase namespace.name; sm. is reserved |
66
+ | version | Three-part SemVer, such as 1.0.0 |
67
+ | name | 1–120 characters |
68
+ | description | 1–1000 characters describing behavior |
69
+ | kind | task, workspace, editor-extension, or composite |
70
+ | runtime | recipe, javascript, reviewed capability, or reviewed comfyui adapter |
71
+ | inputs / outputs | Named port objects; at most 64 in each direction |
72
+ | permissions | Explicit supported permission families |
73
+
74
+ ## SDK compatibility
75
+ The runtime remains SDK `0.1.0`; exact declarations remain valid. A Block may also declare a bounded stable range such as `^0.1.0`, `~0.1.0`, or `>=0.1.0 <0.2.0`. `sdkCompatibility(declared)` reports `supported`, `unsupported` or `invalid` against that actual runtime version. `validateManifest` enforces the same result. A supported range never bypasses permissions, runtime availability, source admission or fixtures.
76
+
77
+ Supported grammar is an exact stable three-part version, caret, tilde, or up to four space-separated comparator intersections (`=`, `>`, `>=`, `<`, `<=`). Numeric components are bounded to 999999. Tags, prereleases, wildcards, alternatives and hyphen ranges are unsupported. Major-zero caret rules apply: `^0.1.0` excludes `0.2.0`; `^0.0.3` excludes `0.0.4`. A declaration is preserved verbatim in its package identity; changing it requires a new immutable release. Do not widen it merely to silence an incompatibility.
78
+
79
+ This is compatibility checking, not automatic code adaptation or a promise of future SDK support. Explicit reviewed Step-state migration routes are documented separately; changing an SDK range never runs a migration or changes project pins.
80
+
81
+ ## Port fields
82
+ | Field | Meaning |
83
+ | --- | --- |
84
+ | type | A supported type, optionally followed by [] |
85
+ | required | Defaults to required; set false for omission |
86
+ | default | Used when no value is supplied; must match the type |
87
+ | min / max | Inclusive numeric bounds |
88
+ | primary | At most one true per direction |
89
+ | role | Lowercase semantic identifier such as source_image |
90
+ | context | A supported input-only context field with matching type and permission |
91
+ | description | Help text explaining the port |
92
+
93
+ ## Optional metadata
94
+ `ui` binds controls to inputs. `license` records source licensing. `provenance` records remix or adaptation origin. `summary` records the source-linked description. `category` groups related capabilities. `entry` is descriptive metadata; execution uses the packed source.
95
+
96
+ ## Platform compatibility
97
+ Block cards and listing pages show Phone, Browser, and Desktop SVG indicators.
98
+ Phone means a phone browser; Browser means a desktop web browser; Desktop means
99
+ the downloaded StillMade app. Add optional `manifest.platforms` to declare all
100
+ three environments. Each entry has `supported` (boolean) and an optional `reason`
101
+ (up to 240 characters); unsupported environments require a reason. At least one
102
+ environment must be supported. For example, a Block with a desktop-only interface:
103
+
104
+ ```json
105
+ {
106
+ "platforms": {
107
+ "phone": {"supported": false, "reason": "This interface requires the StillMade desktop app."},
108
+ "browser": {"supported": false, "reason": "This interface requires the StillMade desktop app."},
109
+ "desktop": {"supported": true}
110
+ }
111
+ }
112
+ ```
113
+
114
+ A declaration is a request to support a platform, **not verification**. An
115
+ unsupported declaration keeps that platform unavailable. `supported:true` or an
116
+ omitted declaration never lights an icon on its own. Runtime portability does not
117
+ prove usable UI. Unknown, stale, or missing checks display **Not verified**.
118
+
119
+ StillMade's server-owned import and release review runs `testPlatforms` against
120
+ the actual working preview, using the same isolated runtime and UI frame as the
121
+ app. Reports are stored with the existing import/release report and bound to the
122
+ exact source digest. Package-supplied reports are rejected. Changing code, UI,
123
+ fixtures, or compatibility metadata invalidates the previous source report.
124
+ Built-in audits also track the production UI source fingerprint.
125
+
126
+ The current `mobile-ui-1` gate checks 320 × 720, 390 × 844, 768 × 1024,
127
+ 844 × 390 phone landscape, and 1280 × 800 desktop containers in Light, Dark,
128
+ and White. It uses the real embedded Block/Project Type host and custom sandbox,
129
+ then checks the main touch task, empty/populated/loading/error/success states,
130
+ long labels, enlarged text, and continuity through resize, rotation and panel
131
+ toggles. Ordinary touch controls target 44 × 44 CSS pixels. Fields require
132
+ accessible labels; draggable actions require a visible tap or menu alternative.
133
+ Intentional canvas/timeline panning remains distinct from page-wide overflow.
134
+ See [Mobile-compatible Block UI](../build/mobile-ui.md) for authoring patterns.
135
+
136
+ For a custom interface with multiple buttons, put
137
+ `data-stillmade-action="run"` on the button that runs the included sample through
138
+ `StillMade.run`. The test clicks that control inside the disposable sandbox;
139
+ no generation provider, account API, or device permission can be invoked there.
140
+ A single-button interface can use its sole button. Interfaces requiring more
141
+ complex interaction remain unverified until their host adapter covers it.
142
+
143
+ The SDK exports `testPlatforms`, `measurePlatformLayout`,
144
+ `assessPlatformCapture`, and `checkedPlatformTargets`. A trusted browser adapter
145
+ renders the real interface, calls `measurePlatformLayout` in every frame, tries
146
+ its interaction, and returns frames plus interaction, embedding, state, and
147
+ continuity evidence. Use the checker in
148
+ an external test harness as follows:
149
+
150
+ ```js
151
+ const fixtures = await testPackage(pkg);
152
+ const devices = await testPlatforms(pkg, {
153
+ runtimePassed: fixtures.passed,
154
+ probe: trustedBrowserAdapter,
155
+ });
156
+ ```
157
+
158
+ `admitPackage` accepts the same adapter as `platformProbe` and includes
159
+ `platformChecks` in its result. Without a browser adapter it reports unverified
160
+ platforms; CLI `validate --mobile` exposes the exact required profile but remains
161
+ pending until a trusted embedded browser run, and code-only fixture tests never claim device support.
162
+ In StillMade, use **Run mobile UI profile** in import review to inspect the
163
+ server's result. Import confirmation repeats the server-owned checks.
164
+
165
+ Cloud-side checks cover Phone and Browser. They do not masquerade as an Electron
166
+ check: Desktop stays unverified without an actual desktop-runner report. The
167
+ built-in audit runner tests the Electron renderer separately. Browser emulation
168
+ is not a physical iOS-device test, and macOS Electron does not certify a Windows
169
+ installer or native recording capability. Cloud/ComfyUI operations still require
170
+ their normal configured connection; checks never make a paid sample call.
171
+
172
+ Project Types combine enabled, version-pinned Blocks. An unavailable dependency
173
+ makes that platform unavailable; an unverified dependency keeps it unverified.
174
+ These indicators do not grant filesystem, process, system recording, or other
175
+ native permissions. Unsupported native APIs still fail admission/runtime checks.
176
+
177
+ ## UI schema
178
+ Use an array of `{control, port}` objects. Controls are `text`, `number`, `slider`, `checkbox`, `asset`, `select`, `multiselect`, `file`, `date`, `color`, `url`, `richtext`, `list`, `grid` (the list StillMade validates). Every control binds to a declared input. A `text` control is a box that grows with its lines; add `"multiline": true` for anything typed one item per line or as a list (`{"control":"text","port":"listingFacts","multiline":true}`), so no host draws it as one line. Image, video, audio and file inputs, and their lists, take `asset`; a picture list shows photo tiles. The host renders these fallback controls in StillMade’s style. A separate package-level `view` may supply a [sandboxed custom interface](../build/custom-interface.md); it never loads into the parent app DOM.
179
+
180
+ ## Permissions
181
+ Supported families are `project`, `network`, `filesystem`, `secrets`, and `capabilities`. Network, filesystem, and secrets arrays must be empty. A capability runtime declares exactly one supported operation: `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`; reviewed ComfyUI declares `comfyui.execute`. These permissions do not grant JavaScript or a custom interface direct host access. Supported context read permissions are listed in [project context](../build/context.md).
@@ -0,0 +1,36 @@
1
+ # Recipe operation reference
2
+
3
+ ## value.copy
4
+ Copy a JSON value without changing it.
5
+
6
+ Arguments: `value`.
7
+
8
+ Values are resolved from input bindings or completed earlier recipe operations.
9
+
10
+ ## text.trim
11
+ Remove leading and trailing whitespace.
12
+
13
+ Arguments: `text`.
14
+
15
+ Values are resolved from input bindings or completed earlier recipe operations.
16
+
17
+ ## text.replace
18
+ Replace literal text; no regular expressions.
19
+
20
+ Arguments: `text`, `find`, `replacement`.
21
+
22
+ The find value is literal text, not a regular expression.
23
+
24
+ ## text.join
25
+ Join an array of text values.
26
+
27
+ Arguments: `items`, `separator`.
28
+
29
+ items must be an array of strings. separator controls the text between items.
30
+
31
+ ## image.thicken-lines
32
+ Expand dark outlines while preserving other colors.
33
+
34
+ Arguments: `image`, `thickness`, `threshold`.
35
+
36
+ Accepts decoded RGBA. Thickness is an integer from 1 to 8; threshold is from 0 to 255. Defaults are 2 and 100. Dark outlines expand with a square neighborhood; unrelated colors remain unchanged.