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