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.
- package/.stillmade/sdk-baseline.json +6 -8
- package/AGENTS.md +15 -10
- package/FRAME_VIEWS.md +113 -0
- package/INTERFACE_DESIGN.md +62 -22
- package/MOBILE_UI.md +4 -2
- package/MODULES.md +152 -6
- package/PASTE_TO_LLM.md +35 -25
- package/README.md +3 -2
- package/SDK.md +994 -550
- package/UI_AESTHETIC.md +22 -2
- package/blocks/generate/package.js +1 -0
- package/blocks/generate/versions/1.0.0/package.js +463 -0
- package/docs/build/audio-to-editor.md +36 -0
- package/docs/build/block-builder-contract.md +150 -0
- package/docs/build/comfyui.md +227 -0
- package/docs/build/concepts.md +40 -0
- package/docs/build/context.md +159 -0
- package/docs/build/cookbook.md +57 -0
- package/docs/build/custom-interface.md +617 -0
- package/docs/build/data-types.md +83 -0
- package/docs/build/frame-views.md +259 -0
- package/docs/build/generate-media.md +59 -0
- package/docs/build/github-applications.md +314 -0
- package/docs/build/hosted-images.md +214 -0
- package/docs/build/hosted-music.md +39 -0
- package/docs/build/hosted-speech.md +157 -0
- package/docs/build/hosted-text.md +246 -0
- package/docs/build/image-description.md +49 -0
- package/docs/build/interface-design.md +343 -0
- package/docs/build/javascript.md +63 -0
- package/docs/build/local-preview.md +61 -0
- package/docs/build/media-analysis.md +27 -0
- package/docs/build/media.md +400 -0
- package/docs/build/mobile-ui.md +106 -0
- package/docs/build/modules.md +487 -0
- package/docs/build/original-blocks.md +70 -0
- package/docs/build/outside-apis.md +128 -0
- package/docs/build/production-context-templates.md +12 -0
- package/docs/build/project-storage.md +94 -0
- package/docs/build/quickstart.md +48 -0
- package/docs/build/recipes.md +103 -0
- package/docs/build/script-handoff.md +45 -0
- package/docs/build/script-writer.md +34 -0
- package/docs/build/state.md +223 -0
- package/docs/build/testing.md +112 -0
- package/docs/build/timeline-edits.md +116 -0
- package/docs/build/timeline-proposals.md +76 -0
- package/docs/build/transcription.md +59 -0
- package/docs/build/triggers.md +59 -0
- package/docs/build/tutorial.md +52 -0
- package/docs/build/typescript.md +34 -0
- package/docs/build/video-generation.md +61 -0
- package/docs/build/web-reading.md +37 -0
- package/docs/build/with-your-ai.md +27 -0
- package/docs/changelog.md +9 -0
- package/docs/creators.md +21 -0
- package/docs/distribute/discovery.md +43 -0
- package/docs/distribute/imports.md +58 -0
- package/docs/distribute/publishing.md +29 -0
- package/docs/distribute/sdk-versions.md +36 -0
- package/docs/distribute/selling.md +14 -0
- package/docs/distribute/teams.md +60 -0
- package/docs/distribute/versioning.md +28 -0
- package/docs/examples.md +23 -0
- package/docs/gallery.md +26 -0
- package/docs/index.md +50 -0
- package/docs/native-mcp.md +307 -0
- package/docs/project-types/automation.md +43 -0
- package/docs/project-types/batches.md +50 -0
- package/docs/project-types/build.md +42 -0
- package/docs/project-types/completion.md +15 -0
- package/docs/project-types/conditions.md +21 -0
- package/docs/project-types/hosted-review.md +115 -0
- package/docs/project-types/onboarding.md +75 -0
- package/docs/project-types/running.md +309 -0
- package/docs/project-types/testing.md +72 -0
- package/docs/reference/application-artifacts.md +87 -0
- package/docs/reference/authoring-guide.md +134 -0
- package/docs/reference/browser-applications.md +267 -0
- package/docs/reference/capabilities.md +45 -0
- package/docs/reference/cli.md +71 -0
- package/docs/reference/connection-api.md +59 -0
- package/docs/reference/cooperative-jobs.md +13 -0
- package/docs/reference/desktop-capabilities.md +172 -0
- package/docs/reference/desktop-execution.md +77 -0
- package/docs/reference/errors.md +233 -0
- package/docs/reference/execution.md +800 -0
- package/docs/reference/first-party-blocks.md +40 -0
- package/docs/reference/generation-models.md +59 -0
- package/docs/reference/limits.md +306 -0
- package/docs/reference/manifest-kinds-controls.md +36 -0
- package/docs/reference/manifest.md +181 -0
- package/docs/reference/operations.md +36 -0
- package/docs/reference/package-jobs.md +35 -0
- package/docs/reference/parity.md +55 -0
- package/docs/reference/permissions.md +86 -0
- package/docs/reference/ports.md +26 -0
- package/docs/reference/types.md +268 -0
- package/docs/reference/universal-resolver.md +303 -0
- package/docs/reference/view-bridge.md +60 -0
- package/docs/reference/view-rules.md +15 -0
- package/docs/reference/workspace-sync.md +25 -0
- package/docs/sdk.md +34 -0
- package/docs/tools/block-remix.md +211 -0
- package/docs/tools/llm.md +2213 -0
- package/docs/tools/repository-adaptation.md +613 -0
- package/examples/check-clip.stillmade.json +4 -1
- package/examples/generate-video.stillmade.json +6 -2
- package/examples/research-topic.stillmade.json +5 -1
- package/examples/text-workflow.stillmade.json +3 -32
- package/examples/timeline-polish.stillmade.json +11 -3
- package/examples/transcribe-audio.stillmade.json +11 -3
- package/package.json +1 -1
- package/packages/block-cli/cli.js +13 -6
- package/packages/block-cli/dev-host/assets/host.js +76 -38
- package/packages/block-cli/dev-host/assets/index.css +1 -1
- package/packages/block-cli/format.js +1 -1
- package/packages/block-cli/templates.js +31 -13
- package/packages/block-cli/type-packages.js +119 -0
- package/packages/block-platform/block-readiness.js +5 -0
- package/packages/block-platform/canvas.js +2 -1
- package/packages/block-platform/catalog.js +27 -48
- package/packages/block-platform/native-host-inventory.js +0 -226
- package/packages/block-platform/plain-descriptions.js +1 -25
- package/packages/block-platform/project-type-starters.js +13 -53
- package/packages/block-platform/script-handoff.js +2 -4
- package/packages/block-platform/type-workspace.js +2 -0
- package/packages/block-sdk/appearance.js +3 -1
- package/packages/block-sdk/block-tier.js +1 -1
- package/packages/block-sdk/builder-contract.js +10 -8
- package/packages/block-sdk/capabilities.js +1 -1
- package/packages/block-sdk/contracts.js +6 -2
- package/packages/block-sdk/first-party-identities.js +1 -84
- package/packages/block-sdk/first-party-packages.js +3 -85
- package/packages/block-sdk/generation-catalog.js +15 -3
- package/packages/block-sdk/index.d.ts +2 -1
- package/packages/block-sdk/media-analysis-example.js +1 -1
- package/packages/block-sdk/mock-host.js +7 -1
- package/packages/block-sdk/module-host-calls.js +35 -10
- package/packages/block-sdk/module-hosted.js +15 -2
- package/packages/block-sdk/module-media-access.js +71 -0
- package/packages/block-sdk/module-node.js +1 -1
- package/packages/block-sdk/portable-media-actions.js +1 -1
- package/packages/block-sdk/runtime.js +1 -1
- package/packages/block-sdk/timeline-proposal-example.js +1 -1
- package/packages/block-sdk/transcription-example.js +1 -1
- package/packages/block-sdk/video-generation-example.js +1 -1
- package/packages/block-sdk/view-bridge.js +4 -1
- package/packages/block-sdk/view-design.js +17 -14
- package/packages/block-sdk/web-example.js +1 -1
- package/packages/design-system/block-kit.css +48 -12
- package/packages/design-system/block-kit.html +3 -2
- package/blocks/mcp-motion-planner/versions/1.1.0/package.js +0 -97
- package/blocks/motion-designer/versions/1.0.1/package.js +0 -173318
- package/blocks/motion-designer/versions/1.0.2/package.js +0 -173318
- package/blocks/motion-frame-review/versions/1.1.1/package.js +0 -465
- package/blocks/motion-frame-review/versions/1.1.2/package.snapshot.js +0 -572
- package/blocks/narration/package.js +0 -1
- package/blocks/narration/versions/1.0.0/package.js +0 -221
- package/blocks/narration/versions/1.0.1/package.js +0 -221
- package/blocks/native/sm.animated-scene/versions/2.0.0/package.js +0 -475
- package/blocks/native/sm.animated-scene/versions/2.1.0/package.js +0 -498
- package/blocks/native/sm.animated-scene/versions/2.2.0/package.js +0 -524
- package/blocks/native/sm.animated-scene/versions/2.3.0/package.js +0 -618
- package/blocks/native/sm.animated-scene/versions/2.3.1/package.js +0 -618
- package/blocks/native/sm.animated-scene/versions/2.3.2/package.js +0 -723
- package/blocks/native/sm.animated-scene/versions/2.3.3/package.js +0 -723
- package/blocks/native/sm.animated-scene/versions/2.3.4/package.js +0 -676
- package/blocks/native/sm.animated-scene/versions/2.3.5/package.js +0 -693
- package/blocks/native/sm.animated-scene/versions/2.3.6/package.js +0 -700
- package/blocks/native/sm.animated-scene/versions/2.3.7/package.js +0 -747
- package/blocks/native/sm.animated-scene/versions/2.3.8/package.js +0 -769
- package/blocks/native/sm.animated-scene/versions/2.3.9/package.js +0 -769
- package/blocks/native/sm.animated-scene-assistant/versions/1.0.0/package.js +0 -183
- package/blocks/native/sm.blueprint/versions/2.0.0/package.js +0 -358
- package/blocks/native/sm.blueprint/versions/2.1.0/package.js +0 -358
- package/blocks/native/sm.blueprint/versions/2.1.1/package.js +0 -358
- package/blocks/native/sm.blueprint/versions/2.1.2/package.js +0 -358
- package/blocks/native/sm.blueprint/versions/2.1.3/package.js +0 -381
- package/blocks/native/sm.blueprint/versions/2.1.4/package.js +0 -381
- package/blocks/native/sm.blueprint/versions/2.1.5/package.js +0 -339
- package/blocks/native/sm.blueprint/versions/2.1.6/package.js +0 -356
- package/blocks/native/sm.blueprint/versions/2.1.7/package.js +0 -363
- package/blocks/native/sm.blueprint/versions/2.1.8/package.js +0 -410
- package/blocks/native/sm.blueprint/versions/2.1.9/package.js +0 -422
- package/blocks/native/sm.blueprint-assistant/versions/1.0.0/package.js +0 -172
- package/blocks/native/sm.chat/versions/2.0.0/package.js +0 -144
- package/blocks/native/sm.chat/versions/2.0.1/package.js +0 -97
- package/blocks/native/sm.chat/versions/2.0.2/package.js +0 -100
- package/blocks/native/sm.chat/versions/2.0.3/package.js +0 -100
- package/blocks/native/sm.continue-if/versions/1.0.0/package.js +0 -168
- package/blocks/native/sm.describe-media/versions/2.0.0/package.js +0 -153
- package/blocks/native/sm.describe-media/versions/2.0.1/package.js +0 -156
- package/blocks/native/sm.describe-media/versions/2.1.0/package.js +0 -140
- package/blocks/native/sm.image-editor/versions/2.0.0/package.js +0 -183
- package/blocks/native/sm.image-editor/versions/2.0.1/package.js +0 -190
- package/blocks/native/sm.new-items/versions/1.0.0/package.js +0 -191
- package/blocks/native/sm.pick-photos/versions/1.0.0/package.js +0 -334
- package/blocks/native/sm.quality-audit/versions/1.0.0/package.js +0 -192
- package/blocks/native/sm.quality-audit/versions/1.0.1/package.js +0 -192
- package/blocks/native/sm.quality-audit/versions/1.0.2/package.js +0 -195
- package/blocks/native/sm.research/versions/2.0.0/package.js +0 -175
- package/blocks/native/sm.research/versions/2.0.1/package.js +0 -184
- package/blocks/native/sm.research/versions/2.0.2/package.js +0 -187
- package/blocks/native/sm.script/versions/2.0.0/package.js +0 -144
- package/blocks/native/sm.script/versions/2.1.0/package.js +0 -144
- package/blocks/native/sm.script/versions/2.1.1/package.js +0 -144
- package/blocks/native/sm.script/versions/2.1.2/package.js +0 -105
- package/blocks/native/sm.script/versions/2.1.3/package.js +0 -152
- package/blocks/native/sm.script/versions/2.1.4/package.js +0 -156
- package/blocks/native/sm.script/versions/2.1.5/package.js +0 -156
- package/blocks/native/sm.shot-plan/versions/2.0.0/package.js +0 -301
- package/blocks/native/sm.shot-plan/versions/2.1.0/package.js +0 -528
- package/blocks/native/sm.shot-plan/versions/2.1.1/package.js +0 -528
- package/blocks/native/sm.shot-plan/versions/2.1.2/package.js +0 -528
- package/blocks/native/sm.shot-plan/versions/2.1.3/package.js +0 -536
- package/blocks/native/sm.shot-plan/versions/2.2.0/package.js +0 -800
- package/blocks/native/sm.shot-plan/versions/2.2.1/package.js +0 -920
- package/blocks/native/sm.shot-plan-assistant/versions/1.0.0/package.js +0 -173
- package/blocks/native/sm.stock-search/versions/2.0.0/package.js +0 -174
- package/blocks/native/sm.thumbnail/versions/2.0.0/package.js +0 -137
- package/blocks/native/sm.thumbnail/versions/2.0.1/package.js +0 -140
- package/blocks/native/sm.transcribe/versions/2.0.0/package.js +0 -163
- package/blocks/native/sm.transcribe/versions/2.0.1/package.js +0 -168
- package/blocks/native/sm.whiteboard-assistant/versions/1.0.0/package.js +0 -175
- package/blocks/native/sm.youtube/versions/2.0.0/package.js +0 -217
- package/blocks/occasion-story/package.js +0 -1
- package/blocks/occasion-story/versions/1.0.0/package.js +0 -1658
- package/blocks/occasion-story/versions/1.0.1/package.js +0 -1699
- package/blocks/occasion-story/versions/1.0.2/package.js +0 -1682
- package/blocks/photo-reel-composer/versions/1.0.0/package.js +0 -3043
- package/blocks/photo-reel-composer/versions/1.0.1/package.js +0 -3026
- package/blocks/photo-reel-composer/versions/1.0.2/package.js +0 -4149
- package/blocks/product-ad-variants/versions/1.0.0/package.js +0 -2911
- package/blocks/product-launch-director/versions/1.0.0/package.js +0 -103
- package/blocks/release-visuals/package.js +0 -1
- package/blocks/release-visuals/versions/1.0.0/package.js +0 -1492
- package/blocks/release-visuals/versions/1.0.1/package.js +0 -1517
- package/blocks/release-visuals/versions/1.0.2/package.js +0 -1500
- package/blocks/screen-recorder/package.js +0 -1
- package/blocks/screen-recorder/versions/1.0.0/package.js +0 -223
- package/blocks/screen-recorder/versions/1.0.1/package.js +0 -223
- package/blocks/short-form-finish/package.js +0 -1
- package/blocks/short-form-finish/versions/1.0.0/package.js +0 -1043
- package/blocks/short-form-finish/versions/1.0.1/package.js +0 -1043
- package/blocks/short-form-finish/versions/1.0.2/package.js +0 -1043
- package/blocks/short-form-finish/versions/1.0.3/package.js +0 -1026
- package/examples/saas-product-launch-reviewed-source.stillmade.json +0 -383
- package/examples/saas-product-launch.stillmade.json +0 -304
- package/packages/block-platform/dealer-inventory-video-project-type.js +0 -38
- package/packages/block-platform/first-revenue-project-types.js +0 -46
- package/packages/block-platform/fixture-starters.js +0 -13
- package/packages/block-platform/launch-project-source.js +0 -10
- package/packages/block-platform/launch-project.js +0 -30
- package/packages/block-platform/motion-project-types.js +0 -55
- package/packages/block-platform/motion-starters.js +0 -14
- package/packages/block-platform/product-ad-variants-project-type.js +0 -30
- package/packages/block-platform/product-launch-updated.js +0 -90
- package/packages/block-platform/revenue-review-project-types.js +0 -36
- package/packages/block-platform/revenue-review-starters.js +0 -13
- package/packages/block-platform/script-writer.js +0 -29
- 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.
|
package/docs/creators.md
ADDED
|
@@ -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.
|
package/docs/examples.md
ADDED
|
@@ -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.
|
package/docs/gallery.md
ADDED
|
@@ -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).
|