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,52 @@
1
+ # Tutorial: a React Block in 30 minutes
2
+
3
+ You need Node.js 22 or newer and npm. Every step runs on your machine without
4
+ an account until you import the Block.
5
+
6
+ 1. **Create the Block (3 minutes).** The SDK is one npm package on StillMade's
7
+ site; nothing else to download.
8
+
9
+ ```sh
10
+ npx --yes --package=https://stillmade.shop/block-sdk/stillmade-sdk-0.1.0.tgz stillmade-block create title-cards view-react
11
+ cd title-cards
12
+ npm install --save-dev https://stillmade.shop/block-sdk/stillmade-sdk-0.1.0.tgz # the stillmade-block command
13
+ npm install # React and esbuild
14
+ ```
15
+
16
+ 2. **Look around (1 minute).** The folder has the manifest
17
+ (`stillmade.block.json`), the logic (`module/main.js`, a module Block), the
18
+ interface (`src/view.jsx`, `src/view.css`, `src/view.html`, and
19
+ `src/view.config.json`, which makes it a frame view), fixtures and
20
+ TypeScript types.
21
+ 3. **Preview it (3 minutes).** `npm run build`, then `npm run dev`, and open
22
+ `http://127.0.0.1:4800`. Type two titles and choose **Make cards**: the cards
23
+ appear, and the console on the right shows the run.
24
+ 4. **Change it (8 minutes).** Add a prefix for every card.
25
+ - In `stillmade.block.json`, add an input:
26
+ `"prefix": {"type": "text", "required": false, "default": "", "semantic": "card_prefix", "description": "Text before each title."}`.
27
+ - In `module/main.js`, use it: `title: (input.prefix + title).slice(0, 120)`.
28
+ - In `src/view.jsx`, add a text field for the prefix (its own `useState`) and
29
+ send it: `StillMade.run({lines, prefix})`.
30
+ - Run `npx stillmade-block types .` so your editor knows the new input.
31
+
32
+ Each save rebuilds and reloads the preview.
33
+ 5. **Use a hosted operation and test it offline (5 minutes).** Ask a model for a
34
+ tagline.
35
+ - In `stillmade.block.json`, add `"capabilities": ["text.generate"]` to
36
+ `permissions` and an output:
37
+ `"tagline": {"type": "text", "semantic": "tagline", "description": "A short tagline."}`.
38
+ - In `module/main.js`:
39
+ `const tagline = await stillmade.hosted.run('text.generate', {prompt: 'Write a six-word tagline for: ' + titles.join(', '), maxTokens: 40});`
40
+ and return `tagline` with the cards.
41
+ - Record a reply in `tests/mocks.json`:
42
+ `{"hosted": {"text.generate": "Three scenes, one long road"}}`, and add
43
+ `"tagline": "Three scenes, one long road"` to each fixture's expected outputs.
44
+ - `npm test` passes offline and lists the stand-in that answered; the preview
45
+ uses it too. In StillMade, each call is priced and approved first.
46
+ 6. **Package and import (5 minutes).** Change the `id` in the manifest to your
47
+ own, then `npm run pack`, which writes
48
+ `<id>-1.0.0.stillmade-module.json`. In StillMade, open **Create**, choose
49
+ **Import**, select the file, review the checks and the preview, and confirm.
50
+ 7. **Publish (5 minutes).** Open the Block in Create, choose **Publish**, pick
51
+ who can use it, confirm you have the rights to its content and publish. See
52
+ [publishing](../distribute/publishing.md).
@@ -0,0 +1,34 @@
1
+ # TypeScript
2
+
3
+ `stillmade-block types <folder>` writes `stillmade-env.d.ts` beside the
4
+ manifest (`create` writes it too, with a `jsconfig.json`, and running `types`
5
+ again replaces it after you change ports). It is self-contained and declares:
6
+
7
+ - `BlockInputs` and `BlockOutputs`, one property per port, typed by port type:
8
+ `text`, `url`, `date` and `color` are strings, `number` and `integer` are
9
+ numbers, media ports are saved references, `file`, `document`, `table` and
10
+ `transcript` have their value shapes, a `json` or `object` port with a compact
11
+ schema (`{"points": "number[]"}`) gets that shape, and lists are arrays.
12
+ Optional inputs (`required: false` or a default) are optional properties.
13
+ - The global `StillMade` in your interface, typed from the
14
+ [view bridge reference](../reference/view-bridge.md):
15
+ `StillMade.run(values: BlockInputs): Promise<BlockOutputs>`,
16
+ `StillMade.onInput(callback)` and the rest.
17
+ - The global `input` in `src/run.js` (JavaScript Blocks).
18
+ - `StillMadeModule` and `BlockRun` for a module entry:
19
+
20
+ ```ts
21
+ import type {BlockRun} from '../stillmade-env';
22
+ const run: BlockRun = async (input, stillmade) => {
23
+ stillmade.progress(0.5, 'Working');
24
+ return {summary: input.text.toUpperCase()};
25
+ };
26
+ export default run;
27
+ ```
28
+
29
+ Bundle TypeScript with your bundler as usual (esbuild handles `.ts` and
30
+ `.tsx`); StillMade runs the bundled JavaScript. The SDK's own declarations are
31
+ in `packages/block-sdk/*.d.ts`; `blockTypeDeclarations(manifest)`,
32
+ `portValueType(port)`, `schemaType(schema)` and `PORT_VALUE_TYPES` generate the
33
+ file, and `VIEW_BRIDGE` (with `VIEW_BRIDGE_MEMBERS` and
34
+ `viewBridgeReference()`) is the list of interface bridge members it types.
@@ -0,0 +1,61 @@
1
+ # Hosted video generation
2
+
3
+ Use `runtime: "capability"` and `permissions.capabilities: ["video.generate"]`. Declare one text, script or brief prompt input, up to two `image` inputs for the first and last frame, and one video output. Every video model the app's own Blocks use is available — Seedance 2.0 (and Fast, Mini), Kling 3.0 Turbo, Wan 2.6 Flash, Veo 3.1 Lite, Vidu Q3 Turbo and Wan 2.7 — with their durations, resolutions, aspect ratios, image-to-video and first-and-last-frame modes (see [generation models](../reference/generation-models.md)). Users pay with StillMade credits at StillMade's per-second price. The capability file is:
4
+
5
+ ```json
6
+ {"schemaVersion":1,"operation":"video.generate","prompt":{"$input":"prompt"},
7
+ "firstFrame":{"$input":"start"},"lastFrame":{"$input":"end"},
8
+ "settings":{"model":"veo-3.1-lite","duration":6,"resolution":"720p","aspectRatio":"16:9","generateAudio":true},
9
+ "negativePrompt":"blur","seed":7,"output":"video"}
10
+ ```
11
+
12
+ `settings`, `firstFrame`, `lastFrame`, `negativePrompt` and `seed` are optional; each setting must be one the model accepts (Veo locks 1080p to 8 seconds; Wan 2.7 needs a first frame). Never include provider endpoints, keys, prices or payment. The run dialog preselects the Block's defaults and the user may change them before seeing the exact price. The invocation is `{operation:"video.generate",prompt}` plus `firstFrame`, `lastFrame`, `negativePrompt` and `seed` when declared; frames must be the user's own saved images. Public trials use their separately reviewed acquisition policy and never account BYOK.
13
+
14
+ The canonical output has `kind:"video"`, bounded `assetId`/`versionId`, a stored HTTPS or host media `url`, `mimeType:"video/mp4"`, measured `width`, `height`, `duration` in seconds and `bytes`. The host keeps the provider's MP4 byte-for-byte after measuring its container. SDK limits are 60 seconds, 256 MiB, at most 3,840 pixels on either axis and 8,294,400 pixels per frame. Validating this shape does not verify ownership or real video bytes; the host must inspect, store and verify them.
15
+
16
+ Fixtures use `kind:"video"`, `format:"mp4"` and explicit `minDuration`, `maxDuration`, `minBytes`, `maxBytes`, `minWidth`, `maxWidth`, `minHeight`, `maxHeight` bounds. See `packages/block-sdk/video-generation-example.js`. Provider fixtures require approval; they are not deterministic equality tests. `validateGeneratedVideoReference`, `defaultCapabilityExpectations` and `validateCapabilityResult` are available through the SDK. Media receipts bind the owner, run, invocation, storage key and SHA-256 digest to the complete output reference. Guest code cannot issue those receipts.
17
+
18
+ A host advertises only enabled operations. A valid package does not imply every deployment has video generation configured; unavailable hosts must reject it before billing or dispatch. Public video results use the same private media/claim lifecycle as other trial outputs and are retained when continuing in an account.
19
+
20
+
21
+ ### Authored state migration routes
22
+
23
+ A new JavaScript Block release can optionally declare `manifest.state.migrations`
24
+ for explicit upgrades of its Step memory. A route's `fromVersion` is an older
25
+ positive state schema version; its destination is the enclosing `state.version`.
26
+ For example, a declaration for state version 2 can contain:
27
+
28
+ ```json
29
+ "migrations": [{
30
+ "fromVersion": 1,
31
+ "operations": [
32
+ { "op": "rename", "from": "count", "to": "completed" },
33
+ { "op": "default", "key": "labels", "value": [] },
34
+ { "op": "remove", "key": "temporary" }
35
+ ]
36
+ }]
37
+ ```
38
+
39
+ Operations run in order on safe ASCII top-level field names. Rename requires an
40
+ existing source and absent destination; default writes only if absent; remove
41
+ requires the field to exist. Nested values remain intact. There are at most 16
42
+ distinct older-version routes and 64 operations per route. Combined declarations
43
+ and every intermediate state each fit within 64 KiB. An empty operation list
44
+ explicitly advances only the schema version. There is no implicit chaining,
45
+ downgrade, deep-path transformation, expression evaluation or code execution.
46
+
47
+ The portable SDK exports `validateStateMigrations(stateDeclaration)`,
48
+ `stateMigrationRoute(manifest, fromVersion)`, and
49
+ `migrateBlockState(previousManifest, nextManifest, savedState)`. The last returns
50
+ `{state, operations, fromVersion, toVersion}` without modifying its inputs. Both
51
+ manifests must describe the same JavaScript Block identity, with valid state
52
+ contracts. Matching state versions use an identity transfer; changed versions
53
+ require an exact direct route. Runtime execution does not invoke migrations.
54
+
55
+ Migration declarations change package source: publish a new immutable Block
56
+ release and keep its fixtures on the target schema. Do not guess existing state
57
+ fields or reset user memory. In StillMade, owners review exact archived/current
58
+ source pins, operations and before/after memory, then explicitly apply. The host
59
+ rechecks account/project/source/state, retains rollback history and invalidates
60
+ downstream results. External hosts must provide equivalent ownership, source
61
+ verification, approval and rollback boundaries before accepting the result.
@@ -0,0 +1,37 @@
1
+ # Hosted web reading
2
+
3
+ Two operations let a Block use the web without network permissions, cookies or
4
+ keys. StillMade does the reading; the person running the Block pays with
5
+ StillMade credits at the app's research prices, shown in the quote first.
6
+
7
+ **`web.fetch`** reads one public page and answers the Block's instruction from
8
+ it with StillMade's fast model. Declare one `text` input holding the URL, one
9
+ `text` output and `permissions.capabilities: ["web.fetch"]`:
10
+
11
+ ```json
12
+ {"schemaVersion":1,"operation":"web.fetch","url":{"$input":"url"},"instruction":"Summarize the page in five bullet points.","output":"summary"}
13
+ ```
14
+
15
+ The URL must be a public `http` or `https` address of at most 2,048
16
+ characters. StillMade refuses private, local and credentialed addresses,
17
+ follows at most three redirects, reads HTML or plain text up to 5 MB, removes
18
+ scripts and markup, and treats the page as untrusted data, never as
19
+ instructions. A page that cannot be read is refunded. The instruction is 1 to
20
+ 4,000 characters.
21
+
22
+ **`web.research`** searches the web for a topic and returns a cited summary.
23
+ Declare one `text` or `brief` topic input (1 to 500 characters) and one `text`
24
+ or `json` output with `permissions.capabilities: ["web.research"]`:
25
+
26
+ ```json
27
+ {"schemaVersion":1,"operation":"web.research","topic":{"$input":"topic"},"output":"findings"}
28
+ ```
29
+
30
+ A `json` output receives `{"schemaVersion":1,"summary":"...","sources":[{"url":"https://...","title":"..."}]}`
31
+ (up to 12 sources); a `text` output receives the summary followed by a
32
+ numbered source list. Fixture expectations are the usual text bounds, or
33
+ `{"kind":"json"}` with optional `includes`.
34
+
35
+ The offline SDK includes `packages/block-sdk/web-example.js`, exporting
36
+ `webFetch` and `webResearch`. Pair either with `text.generate` (as a `context`
37
+ input) to write from what was read.
@@ -0,0 +1,27 @@
1
+ # Build a Block with your AI
2
+
3
+ ## For you
4
+ Give your coding agent (Claude Code, Cursor, Codex, Gemini CLI or similar) a link to this page and say what the Block should do, for example: “Build a StillMade Block that turns a script into a shot list. Follow https://stillmade.shop/docs/build/with-your-ai.md”. It sets up the SDK, builds the Block and checks it on its own; you only answer questions about what the Block should do. A chat assistant without a terminal cannot download or run anything, so use a coding agent, or connect StillMade's [MCP server](/docs/native-mcp.md). Either way, StillMade refuses to install a Block that fails its readiness check.
5
+
6
+ ## For the coding agent
7
+ Do every step yourself. Do not ask the person to download, unzip, open a folder or run a command; only ask about what the Block should do.
8
+
9
+ 1. **Get the SDK.** With Node.js 22 or later and npm, install it in your working folder:
10
+ ```sh
11
+ npm install --save-dev stillmade-sdk
12
+ ```
13
+ Then read `node_modules/stillmade-sdk/AGENTS.md` in full and run every command below as `npx stillmade-block`. Without npm, download the SDK archive instead. It is `/block-sdk/stillmade-sdk-0.1.0.zip` on the same site as this page: replace this page's path with that one (for example `https://stillmade.shop/block-sdk/stillmade-sdk-0.1.0.zip`, or `http://localhost:3000/block-sdk/stillmade-sdk-0.1.0.zip` when this page came from localhost). If `stillmade-blocks/AGENTS.md` already exists in your working folder, reuse that folder. Otherwise download and extract it into `stillmade-blocks`:
14
+ ```sh
15
+ curl -fsSL "<SDK URL>" -o stillmade-sdk.zip && unzip -q stillmade-sdk.zip -d stillmade-blocks && rm stillmade-sdk.zip
16
+ ```
17
+ On Windows PowerShell:
18
+ ```powershell
19
+ Invoke-WebRequest "<SDK URL>" -OutFile stillmade-sdk.zip; Expand-Archive stillmade-sdk.zip stillmade-blocks; Remove-Item stillmade-sdk.zip
20
+ ```
21
+ The archive needs Node.js 22 or later and nothing else; its runtime is bundled, so never run `npm install` in it. From the archive, run commands from `stillmade-blocks` as `node packages/block-cli/cli.js` where the steps below say `npx stillmade-block`.
22
+ 2. **Read `AGENTS.md` in full** before writing code (`node_modules/stillmade-sdk/AGENTS.md` from npm, `stillmade-blocks/AGENTS.md` from the archive). It is the contract StillMade checks every Block against.
23
+ 3. **Build the Block.** Scaffold with `npx stillmade-block create <name> javascript` (`npx stillmade-block create --list` shows every template, including `text`, `image-generate` and `speech` for hosted generation), then iterate with `npx stillmade-block validate <name>` and `npx stillmade-block test <name>`. Hosted operations need `test <name> --mock`, which uses recorded stand-ins and spends no credits.
24
+ 4. **Run the readiness gate before you call anything ready:** `npx stillmade-block gate <name>` on the Block's own folder (`gate .` in a folder that also holds the extracted SDK checks the SDK's examples too). Report the exact status it prints. If it fails, fix the listed checks and run it again. If you cannot fix them, tell the person plainly that the Block is not ready and list the failing checks. A browser application reports NEEDS STILLMADE REVIEW: tell the person to import it so StillMade can run its isolated review.
25
+ 5. **Hand it over.** Give the person the full path of the `<name>` folder. In StillMade they choose **Import folder** and select that folder.
26
+
27
+ `stillmade-blocks` contains hooks that run the gate automatically when a Claude Code or Cursor session started in that folder finishes a turn. In the session that downloaded the SDK those hooks are not active yet, so run the gate yourself as in step 4.
@@ -0,0 +1,9 @@
1
+ # SDK changelog
2
+
3
+ ## 0.1.0
4
+ The current SDK provides typed recipe and isolated JavaScript Blocks, semantic roles, schema controls, fixtures, admission scans, immutable release digests, context snapshots, conditional Steps, ordered workflow construction, connected rehearsal, and the documented host batch behavior.
5
+
6
+ ## Documentation updates
7
+ The developer site separates tutorials, conceptual guides, reference, examples, and SDK downloads. The runtime contract remains 0.1.0; documentation and navigation changes do not silently advance the SDK or package release version.
8
+
9
+ See the [capability matrix](reference/capabilities.md) for the exact implementation boundary.
@@ -0,0 +1,21 @@
1
+ # Creator Program
2
+
3
+ Everything needed to build for StillMade is free and works offline: the SDK,
4
+ the CLI with its templates, preview and stand-ins, these docs and the
5
+ examples. An account is needed only to import, publish and run with real
6
+ hosted operations.
7
+
8
+ - **Request a primitive.** When a Block cannot do something you need, tell us
9
+ from **Create → Creator tools → Request a primitive**, or
10
+ [open the form](/create?request=primitive). Name the missing capability and
11
+ what you are building. Requests are ranked together with the gaps StillMade
12
+ AI records when it cannot build a Block, and the most requested primitives
13
+ are built first.
14
+ - **Publish.** Community releases are free to install, use and remix (see
15
+ [pricing and access](distribute/selling.md)); curated releases go through
16
+ [marketplace review](distribute/publishing.md).
17
+ - **Track your work.** The Creator dashboard in Create → Creator tools shows how
18
+ your Blocks and Project Types are used.
19
+ - **Build what StillMade builds.** [StillMade Blocks and the SDK](reference/parity.md)
20
+ lists every service StillMade's own Blocks use and the public SDK features that
21
+ do the same, with any remaining gap.
@@ -0,0 +1,43 @@
1
+ # Make your listing useful and discoverable
2
+
3
+ ## Start with the result
4
+ A useful listing lets someone decide whether the capability fits their work before installing it. Name the actual task. Explain what they start with, what they can change, and what they get. Keep requirements and limits next to the relevant claim.
5
+
6
+ A Block is a reusable capability or workspace. Inside a Project Type, its placement is a Step. A Project Type describes the ordered production workflow. Do not describe a full workspace as a single file converter just because its contract declares an input and an output.
7
+
8
+ ## Write a description someone can use
9
+ Use a short summary for the listing card and a fuller explanation for the listing page. Base both on the released source and behavior you have tested. An AI-generated explanation needs the same review as one you write yourself.
10
+
11
+ For an image-processing Block, a useful description might explain that it takes an image, changes line thickness, and returns an image, then identify which controls and limitations the implementation actually supports. Only use that description if the released code performs those operations. Avoid untested claims about quality, speed, model support, or guaranteed results.
12
+
13
+ For a Project Type, explain the order of work and what the user will still need to provide or review. Include its real Blocks and a representative finished result. A long list of keywords does not help someone choose a workflow.
14
+
15
+ ## Show a representative demonstration
16
+ Creators can edit the presentation of their own published Block or Project Type. In the listing presentation controls, upload an image or a short MP4 you have permission to publish. Current limits are 8 MB for images and 12 MB for MP4 previews. The upload belongs to the selected release; check the preview again after releasing a new version.
17
+
18
+ Show the starting material, the relevant controls, and the result from that release. For a Project Type, show how the workflow reaches the finished output. A demo should make the capability easier to assess. Do not publish private project material or include credentials in a recording.
19
+
20
+ The interactive preview and an uploaded demonstration serve different purposes: the preview lets someone try the capability with sample content; the recording can explain how you used it. Hosted actions and runtime constraints still apply. Read [Test and preview a Block](../build/testing.md) before describing what a preview proves.
21
+
22
+ ## Give it useful context
23
+ - Add or choose a recommended workflow for a Block so people can see where it fits.
24
+ - Keep the released inputs, outputs, semantic roles, and requested permissions accurate.
25
+ - Use the version history when the behavior changes, and preserve source attribution and licensing when remixing.
26
+ - Link a tutorial to the specific Block or Project Type it actually uses.
27
+ - Use your public creator username. Keep email addresses and private customer feedback out of public package metadata.
28
+
29
+ Read [Versions, checkpoints, and remixes](versioning.md) and [Publish and share](publishing.md).
30
+
31
+ ## Share the public listing
32
+ Open the listing and use its normal page URL when sharing a tutorial or demonstration. The main listing follows the current public release. A version URL is appropriate when a tutorial depends on that exact version. Private drafts are not public listing pages.
33
+
34
+ Public Community visibility and curated Marketplace approval are separate. Publishing a Community release does not imply that StillMade has selected or endorsed it for the curated Marketplace.
35
+
36
+ Reviews currently contain one rating and one comment and are visible to the listing creator and administrators. They do not appear in public search snippets or public rating totals. Do not claim a public star rating on the strength of private feedback.
37
+
38
+ ## Search visibility has limits
39
+ Public pages include readable descriptions, creator attribution, related links, and search metadata. Search engines choose which pages to index and show. Uploading a video or adding markup does not guarantee higher rankings or stars in search results.
40
+
41
+ Google and AI search need accessible, useful content. There is no special phrase to repeat or hidden instruction to put in a package. The downloadable [documentation for an LLM](/docs/llms-full.txt) is an authoring resource, not a ranking switch.
42
+
43
+ If you sponsor a tutorial or provide compensation for coverage, disclose it and ask the publisher to qualify paid links appropriately. Do not buy links intended to pass ranking credit. See [Google's link spam policies](https://developers.google.com/search/docs/essentials/spam-policies#link-spam), [AI search guidance](https://developers.google.com/search/docs/fundamentals/ai-optimization-guide), and [video guidance](https://developers.google.com/search/docs/appearance/video).
@@ -0,0 +1,58 @@
1
+ # Import and adapt source
2
+
3
+ JSON and ZIP packages enter a review screen before account installation. ZIP
4
+ imports accept one build, prefer `stillmade.block.json` plus edited `src/run.js`
5
+ or `src/recipe.json` or `src/comfyui.json`, and `tests/fixtures.json`, and reject unsafe/duplicate paths,
6
+ ambiguous builds and excessive expanded source. Included development dependencies
7
+ are not installed or executed by the app.
8
+
9
+ `scanPackage(package)` parses standalone JavaScript and screens unsupported ambient
10
+ APIs/modules and dynamic constructor access. `admitPackage(package, {test, run})`
11
+ adds fixture tests and a sample through supplied sandbox runners. A passing scan
12
+ is not proof of safety; the sandbox remains mandatory. Import confirmation repeats
13
+ admission on the server and creates an owner-scoped account copy. It does not create
14
+ a public release. The original license and provenance remain intact.
15
+
16
+ Raw-code adaptation accepts a purpose description, source name, source code and
17
+ license/permission terms. AI creates a new SDK package; it never executes the
18
+ original code. `manifest.provenance.adaptedFrom` records its digest, name and
19
+ license and the original source text (retaining its attribution). Unsupported capabilities return an explanation or a failed editable
20
+ draft, not a working-runtime claim. GitHub JSON imports retain the selected
21
+ branch/tag/commit and verified Git blob identity.
22
+
23
+ ## GitHub repositories
24
+ **Adapt a GitHub repository** resolves a public branch/tag/ref to a full commit
25
+ SHA. The in-app adapter selects up to six implementation, README, test, or
26
+ dependency-metadata files and then retains every applicable ancestor
27
+ LICENSE/COPYING/NOTICE file, up to sixteen regular UTF-8 files and 45 KB combined.
28
+ Inspectable source includes JavaScript/TypeScript, Svelte/Vue, HTML/CSS, SVG,
29
+ GLSL/WGSL, Python, Rust, Go, shell, and common C/C++/Qt text files. These files
30
+ remain untrusted evidence: StillMade does not install dependencies or execute the
31
+ repository. A recognized native application may instead produce an independently
32
+ authored desktop-only Block using a versioned, allowlisted host adapter. The Block
33
+ still has no shell, arbitrary executable, unrestricted filesystem, Qt/OpenFX
34
+ plugin, or dependency-install authority. Unrecognized native repositories remain
35
+ source evidence only and do not become Blocks merely because they are public.
36
+ The app reads a complete bounded Git tree, excludes symlinks, submodules and
37
+ unsupported/secret paths, and verifies each blob against its Git SHA-1 identity.
38
+ Review the original code and applicable license before requesting adaptation.
39
+ No repository dependencies, hooks, scripts, or original source are executed.
40
+
41
+ The adaptation request refetches the same commit and selected blobs. An LLM rewrites
42
+ the relevant behavior into supported SDK recipes/isolated JavaScript; unavailable
43
+ capabilities remain unsupported. `manifest.provenance.adaptedFrom` retains the
44
+ original selected source, license, source digest, and `origin` with repository,
45
+ commit and per-file blob digests. This metadata records origin, not verification
46
+ of legal rights or authorship. The final package still requires normal import
47
+ admission and user confirmation. Importing does not publish third-party source.
48
+
49
+ The approved Natron route pins the requested GitHub commit without copying or
50
+ executing its GPL application source, generates an MIT SDK integration Block,
51
+ and declares one `video` input and output for Project Type composition. Its
52
+ desktop adapter can import/open a `.ntp` project and render an authorized local
53
+ video through fixed Reader/Writer node names and a bounded frame range. It does
54
+ not expose Natron's Python/interpreter flags. Private repositories, arbitrary
55
+ large native codebases, dependency installation and Python/ComfyUI execution
56
+ remain outside this adaptation runtime. Public GitHub API
57
+ rate limits apply; downloaded SDK packages and pasted-source adaptation remain
58
+ available alternatives.
@@ -0,0 +1,29 @@
1
+ # Publish and share
2
+
3
+ Use **Publish version** from the existing builder. One review dialog covers Community, Marketplace review, or private access where the account permits it, plus runtime, license, preview and redistribution consent. Marketplace selection publishes a Community release and requests review; it does not grant curated status. If review submission fails, the successful Community release is kept and can be submitted again.
4
+
5
+ The same publishing panel controls public cover media, full description, category, tags, use cases and version notes. These change presentation only. The released title, short description, typed contracts, source and license remain tied to the immutable package version.
6
+
7
+ My builds includes original and forked drafts, imports, installed versions, every own release and private releases. A version can be marked deprecated or delisted, with a public notice and an optional replacement version. It stops appearing in discovery and becomes ineligible for indexing; direct version URLs, source downloads and existing pinned projects remain available unless a separate security revocation applies.
8
+
9
+ A Block published publicly from StillMade is listed in the Marketplace as soon as
10
+ its automatic checks pass: tests for its exact source, a supported license, its
11
+ runtime, and no exact duplicate. No one reviews it by hand. A Project Type waits
12
+ for an admin review. Set the source license in `manifest.license` (or top-level
13
+ `license` for a project type), save/test/sync, and publish an immutable Community
14
+ version; track the result in My builds. Supported SPDX
15
+ identifiers for the initial review flow are exported as `MARKETPLACE_LICENSES` and
16
+ listed in `api-index.json`; custom/unknown licensing needs a later review workflow.
17
+ Changing a published version's license requires a new immutable version.
18
+
19
+ The existing protected admin console inspects exact package source, permissions,
20
+ licensing and attribution, then reruns fixtures before approval. Type approval also
21
+ requires available host adapters. Review decisions use revision preconditions and
22
+ an audit journal. Approved listings may be featured; publisher withdrawal and
23
+ admin rejection remove promotion without deleting the Community release or
24
+ installed project pins. Marketplace listings are free and creators cannot charge
25
+ for them. Reputation scoring and package signing are separate future work.
26
+
27
+
28
+ ## Public pages
29
+ Blocks, Project Types, and creators have their own page URLs. Public pages link to related workflows, versions, and source ancestry. Project references remain filtered by project access. Never place an email address, credential, or private fixture in public package metadata.
@@ -0,0 +1,36 @@
1
+ # SDK versions and deprecation
2
+
3
+ What is versioned:
4
+
5
+ - **The SDK**, named by `sdkVersion` in each manifest (now `0.1.0`), with its
6
+ packages, CLI and documentation.
7
+ - **Contracts inside a package**, each with its own `schemaVersion`: the
8
+ manifest, capability descriptors, module descriptors, portable packages and
9
+ conversions.
10
+ - **Each Block release**, with its own semantic version. A published release is
11
+ immutable: StillMade keeps its exact source and the contract it was built for.
12
+
13
+ What stays true:
14
+
15
+ - A published release keeps working. Installed pins never move to a newer
16
+ version on their own, and saved projects reopen with the pinned version.
17
+ - New capabilities are additive: new optional manifest fields, port types,
18
+ hosted operations, host API methods and templates do not change how existing
19
+ packages behave.
20
+ - A change that would alter existing behavior ships under a new name or a new
21
+ `schemaVersion`, and the old one keeps working for releases that use it.
22
+
23
+ Before 1.0 (`0.x`), the SDK may still change between minor versions; every
24
+ change is listed in the [changelog](../changelog.md), and published releases
25
+ keep working regardless. From 1.0 the SDK follows semantic versioning: a major
26
+ version only for removals, and a deprecated API keeps working for at least 12
27
+ months after its replacement ships. Deprecations are marked in these docs, in
28
+ `stillmade-block validate` warnings and in the changelog, and removing an API
29
+ never changes a release that was already published with it.
30
+
31
+ **Licence.** The SDK (its packages, CLI, guides and examples) is licensed under
32
+ the [PolyForm Shield License 1.0.0](https://stillmade.shop/block-sdk/LICENSE.txt). You may use and change
33
+ it, and build, publish and sell Blocks with it; you may not use it to provide a
34
+ product that competes with StillMade. Your Blocks are yours: each Block carries
35
+ the licence its creator names in its manifest, and StillMade's own Blocks use
36
+ MIT.
@@ -0,0 +1,14 @@
1
+ # Pricing and access
2
+
3
+ Every Block and Project Type in the Marketplace is free to install, use and
4
+ remix. Creators cannot set a price, sell a license or charge for access, and
5
+ listings never show a license price.
6
+
7
+ Running a Block can still use StillMade credits when it makes a paid AI request,
8
+ such as hosted text, speech, image or video generation. Those requests keep their
9
+ normal model and payment confirmation, and the credits go to StillMade, not to
10
+ the Block's creator. BYOK connections bill the connected provider account.
11
+
12
+ Source remains downloadable and previews remain sandboxed. Free access does not
13
+ grant permission to relicense third-party code; each Block keeps its own license
14
+ and attribution.
@@ -0,0 +1,60 @@
1
+ # Share private versions with teams
2
+
3
+ An owner can share an existing **private released version** of a Block or Project
4
+ Type with active teammates. This is a host library permission, not a manifest
5
+ permission. Do not put team IDs, credentials or sharing grants in a portable
6
+ package. The sandbox and typed input/output contract are unchanged.
7
+
8
+ ### Share a version
9
+
10
+ 1. Open the released version from **My builds → Installed versions → Open source**.
11
+ 2. Choose **Share with teams**, select your teams, and confirm that you have
12
+ permission to share the source. Save team access.
13
+ 3. Teammates find the version under **Shared with your teams** in the Block library
14
+ or Project Types library. **Preview and install** opens the real import review
15
+ dialog, including the sandbox, tests, permissions and sample execution.
16
+ 4. After review, choose **Install this version**. The account keeps an installation
17
+ and this device keeps a source checkpoint. Installed Blocks also appear when
18
+ adding a Block to a project's workflow.
19
+
20
+ Sharing covers one exact entity, version and source digest. Editing a draft,
21
+ releasing a later version or changing a Project Type does not extend the grant.
22
+ The release stays private: it receives no public listing, public source link,
23
+ search entry or sitemap entry. Existing private work stays private after Max ends.
24
+ Sharing an existing private release does not require buying Max again. Shared
25
+ draft editing and automatic updates of installed copies are separate features.
26
+
27
+ Both the source owner and recipient must be active members of a granted team
28
+ when fetching source or confirming a new installation. StillMade rechecks access
29
+ after the package review. Removing a grant or leaving/suspending team membership
30
+ removes future cloud library access and downloads. Previously downloaded source,
31
+ local checkpoints and embedded project copies remain with their recipients;
32
+ revocation cannot retract source already delivered. Team access does not grant
33
+ access to the creator's other projects, media, secrets, or payment account.
34
+
35
+ Imported third-party source keeps its original license and attribution. A private
36
+ grant is still source distribution: share only where your license permits it.
37
+ Hosted capabilities retain the recipient's normal model, payment, cost and review
38
+ confirmations. A team grant never authorizes a provider call or bypasses runtime
39
+ tests. Project Type imports remain subject to the current whole-workflow admission
40
+ rules; sharing does not enable an unsupported runtime combination.
41
+
42
+ ### Authenticated host API
43
+
44
+ These are account APIs for StillMade's UI. They are unavailable inside guest code.
45
+ All paths below are relative to `/api/blocks` and require the current account's
46
+ bearer token. Use the cloud entity UUID, not the manifest's `namespace.name` ID.
47
+
48
+ | Request | Behavior |
49
+ | --- | --- |
50
+ | `GET /releases/:entityId/:version/team-access` | Owner reads `{entityId, version, digest, teams:[{id,name,shared,canShare}]}` for a private version. Previously granted inactive teams remain available for removal; `canShare:false` prevents adding them. |
51
+ | `PUT /releases/:entityId/:version/team-access` | Owner sends `{teamId, shared, sourceDigest, rightsConfirmed:true}` to grant access; `rightsConfirmed` is unnecessary when `shared:false`. |
52
+ | `GET /library?collection=teams` | Returns authorized private releases as `{items,nextCursor}`; pass the returned opaque `cursor` for the next page. |
53
+ | `GET /library?collection=installs` | Lists installed releases the account can currently retrieve from the cloud. |
54
+ | `GET /releases/:entityId/:version` | Fetches authorized source and its digest through authenticated storage. |
55
+ | `POST /install` | Confirms `{entityId,version,sourceDigest,confirmed:true}` after review; include the existing `comfyuiReview` or `capabilityReview` receipt when the runtime requires one. |
56
+
57
+ A denied or removed release returns `404`; a changed digest returns `409`.
58
+ When team sharing is not set up on a StillMade server, team-sharing endpoints return `503`
59
+ with `TEAM_ACCESS_SETUP_REQUIRED`. Existing owner/public source access continues;
60
+ unavailable team storage never grants access to a private release.
@@ -0,0 +1,28 @@
1
+ # Versions, checkpoints, and remixes
2
+
3
+ Fixtures are `{name,input,expected}` for recipe and JavaScript Blocks, `{name,input,expected,mocks}`
4
+ (`mocks` optional) for module Blocks and `{name,input,expectations}` for capability and
5
+ ComfyUI Blocks; expected equals the full output object.
6
+ Include 1–50 tests. `testPackage()` returns a SHA-256 content digest, pass/fail and
7
+ structured results. Changing source, manifest or fixtures invalidates that report.
8
+ CLI `pack` requires passing tests. Releases are immutable and require tests against
9
+ the exact digest. Restoring a checkpoint creates a new history entry.
10
+
11
+ Use **Remix as new build** for an independent identity and initial `0.1.0`
12
+ version. `provenance.remixedFrom` records the source identity, version, and SHA-256
13
+ digest. **Next patch version** increments the release version; checkpoints remain
14
+ independent of release numbers. The digest identifies content, not a verified
15
+ publisher signature.
16
+
17
+ **Download source + history + SDK** exports a ZIP with `my-block/stillmade.block.json`,
18
+ `my-block/src/recipe.json`, `my-block/tests/fixtures.json`, `history.json`, a working
19
+ package snapshot, the SDK implementation, CLI, documentation, and instructions for
20
+ your own LLM. Run `node packages/block-cli/cli.js pack my-block rebuilt.stillmade.json`
21
+ from the extracted folder (Node.js 22+; no dependency installation required).
22
+ Open the original build in StillMade and import the rebuilt file to append an
23
+ external-revision checkpoint. A different package identity opens as a new draft.
24
+
25
+ Built-in catalog blocks have **Download source + SDK** too. These archives contain
26
+ their client implementation and local source dependencies. They are host source
27
+ snapshots for external editing/review, not independently installable recipe
28
+ packages. Server implementation, credentials, and project data are not included.
@@ -0,0 +1,23 @@
1
+ # Working examples
2
+
3
+ ## Choose an example
4
+ | Example | Runtime | Demonstrates |
5
+ | --- | --- | --- |
6
+ | [Clean text](https://stillmade.shop/block-sdk/examples/clean-text.stillmade.json) | Recipe | Literal text operations and typed output |
7
+ | [Thicken lines](https://stillmade.shop/block-sdk/examples/thicken-lines.stillmade.json) | Recipe | RGBA input, controls, and deterministic pixel output |
8
+ | [Word count](https://stillmade.shop/block-sdk/examples/word-count.stillmade.json) | JavaScript | Isolated source and multiple outputs |
9
+ | [Grayscale](https://stillmade.shop/block-sdk/examples/grayscale.stillmade.json) | JavaScript | Independent LLM authoring, current resolver contract, and alpha preservation |
10
+ | [Screen recorder](https://stillmade.shop/block-sdk/examples/screen-recorder.stillmade.json) | Desktop UI + JavaScript | Permission-gated screen capture; typed video output |
11
+ | [Camera recorder](https://stillmade.shop/block-sdk/examples/camera-recorder.stillmade.json) | Desktop UI + JavaScript | Camera capture with explicit start, stop, and cancel |
12
+ | [Microphone recorder](https://stillmade.shop/block-sdk/examples/microphone-recorder.stillmade.json) | Desktop UI + JavaScript | Microphone capture; typed audio output |
13
+ | [Text workflow](https://stillmade.shop/block-sdk/examples/text-workflow.stillmade.json) | Project Type | Embedded Blocks and connected fixture rehearsal |
14
+ | [Script draft](https://stillmade.shop/block-sdk/examples/script-draft.stillmade.json) | Hosted capability | Typed script output; live review with account BYOK or credits |
15
+ | [Generate an image](https://stillmade.shop/block-sdk/examples/generate-image.stillmade.json) | Hosted capability | Typed PNG output with host-selected quality/payment; actual image review required |
16
+ | [Narrate a script](https://stillmade.shop/block-sdk/examples/narrate-script.stillmade.json) | Hosted capability | Bounded script-to-audio declaration and WAV expectations; reviewed project recordings can be added to Editor audio |
17
+
18
+ ## Run an offline Block example
19
+ ```sh
20
+ node packages/block-cli/cli.js test examples/word-count.stillmade.json
21
+ node packages/block-cli/cli.js preview examples/word-count.stillmade.json
22
+ ```
23
+ Hosted text and speech require their separate [text review](build/hosted-text.md) or [speech review](build/hosted-speech.md) in StillMade. The speech example has no completed live provider test; schema and mock tests are not proof of generated audio. Deterministic examples run offline. Examples are complete packages. Use them as a starting point, choose your own namespace, and update the fixtures when behavior changes.
@@ -0,0 +1,26 @@
1
+ # What you can build
2
+
3
+ Start from a template (`stillmade-block create my-block <template>`) or a
4
+ complete example in the SDK download's `examples/` folder.
5
+
6
+ | Area | Start from | What it does |
7
+ | --- | --- | --- |
8
+ | Video | `examples/module-silence-trimmer` | Cuts the pauses out of a recording on the device |
9
+ | Video | `trigger-media` | Captions each new upload automatically, inside an approved budget |
10
+ | Video | `timeline-proposal`, `video-generate` | Proposes Editor edits people review; generates clips |
11
+ | Images | `examples/module-opencv`, `image-generate`, `describe-image` | Computer vision with OpenCV; generation; description |
12
+ | Images | `examples/module-brand-kit` | Keeps a brand kit in project storage and makes brand cards |
13
+ | Audio and music | `examples/module-tempo`, `music`, `sfx`, `speech`, `transcribe` | Tempo detection; music, sound effects, voices and transcripts |
14
+ | Audio and music | `examples/module-audio-extract` | Extracts and normalises a video's audio |
15
+ | Data and spreadsheets | `examples/module-csv-summary` | Summarizes every column of a CSV file |
16
+ | Data and spreadsheets | `examples/view-react-chart` | A shared, draggable chart in React |
17
+ | Documents | `examples/module-pdf-shot-list`, `examples/module-action-items` | PDF to shot list; meeting notes to action items |
18
+ | Integrations | `examples/module-notion-to-airtable`, `outside-api`, `connection` | Outside APIs with each person's own keys and sign-ins |
19
+ | Integrations | `trigger-webhook` | Runs when another service sends an event |
20
+ | Education | `examples/javascript-cloze-quiz` | Fill-in-the-blank quizzes with an answer key |
21
+ | E-commerce | `examples/javascript-invoice` | Invoices from order lines, with tax and totals |
22
+ | Research | `web-fetch`, `web-research` | Answers from a page; research with sources |
23
+ | Anything else | `module`, `module-wasm` | Modern JavaScript, npm packages and WebAssembly |
24
+
25
+ If something you want to build is missing a capability,
26
+ [request a primitive](/create?request=primitive).