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,400 @@
|
|
|
1
|
+
# Images and media references
|
|
2
|
+
|
|
3
|
+
Portable references are `{assetId,versionId,kind}`; a reference is not an absolute
|
|
4
|
+
file path. Current pure image operations require a decoded fixture/preview image:
|
|
5
|
+
`{width,height,data:[R,G,B,A,...]}` with 0–255 integer channels, up to 1 megapixel.
|
|
6
|
+
Large production media must use a host media adapter; this SDK does not pretend
|
|
7
|
+
to transcode an arbitrary asset reference. Line thickening uses a square dilation
|
|
8
|
+
kernel and thresholded luminance; it returns a new RGBA image.
|
|
9
|
+
|
|
10
|
+
Connected Project Type previews include a small, temporary media bridge. If an
|
|
11
|
+
image-producing Block returns pixels and the next input accepts an asset,
|
|
12
|
+
StillMade encodes a real PNG data URL in memory and supplies a preview media
|
|
13
|
+
reference. If a later image input receives that same exact generated reference,
|
|
14
|
+
the bridge supplies copied pixels to image-processing code. Original pixel
|
|
15
|
+
outputs remain visible as pixel previews; direct image-to-image connections do
|
|
16
|
+
not need this conversion.
|
|
17
|
+
|
|
18
|
+
This behavior is shared by the browser's connected preview, CLI `preview`, and
|
|
19
|
+
Project Type admission tests. It does not upload media, fetch external URLs, or
|
|
20
|
+
create project assets. Only references generated by that preview session can be
|
|
21
|
+
hydrated; changing their kind, asset/version identity, URL or semantic role fails.
|
|
22
|
+
Optional dimensions and labels may be omitted or changed; the private pixel copy
|
|
23
|
+
remains authoritative. Other references remain
|
|
24
|
+
inert references for the caller's supported host runner. Encoding and private
|
|
25
|
+
cache costs share the existing 4 MB sample budget and preview deadline, so use
|
|
26
|
+
small fixtures. Production execution uses its normal authorized media storage
|
|
27
|
+
and decoding path instead of these temporary references.
|
|
28
|
+
|
|
29
|
+
## Saved media collections
|
|
30
|
+
Use an `asset[]`, `audio[]` or `video[]` input to collect media files with
|
|
31
|
+
standard controls. Inside a project, these controls upload, select, order and
|
|
32
|
+
remove files without custom host code. Project uploads are saved before the
|
|
33
|
+
input is published, with exact per-file receipts bound to the Block version.
|
|
34
|
+
Compatible direct remixes retain uploaded media. Builder previews use temporary
|
|
35
|
+
local files; upload in a project for durable use. Project controls admit up to
|
|
36
|
+
64 list entries and 50 MiB per original file, subject to the shared format table.
|
|
37
|
+
The sandbox receives typed references, never upload credentials or local paths.
|
|
38
|
+
|
|
39
|
+
[Import media 2.0.0](https://stillmade.shop/block-sdk/examples/import-media.stillmade-block) is a complete
|
|
40
|
+
portable example. Its owned JavaScript preserves metadata and selection order,
|
|
41
|
+
optionally filters media kinds or removes exact duplicate references, and returns
|
|
42
|
+
an `asset[]` output for subsequent Blocks. It does not transcode media or claim
|
|
43
|
+
rights over user files. Its license covers the original Block implementation.
|
|
44
|
+
Empty selections return an empty list. The native legacy upload node remains
|
|
45
|
+
available to old placements; new SDK placements use the standard sandbox.
|
|
46
|
+
|
|
47
|
+
Validate and test the downloaded archive with the same public CLI:
|
|
48
|
+
|
|
49
|
+
```sh
|
|
50
|
+
node packages/block-cli/cli.js validate import-media.stillmade-block
|
|
51
|
+
node packages/block-cli/cli.js test import-media.stillmade-block
|
|
52
|
+
node packages/block-cli/cli.js remix import-media.stillmade-block my-import.stillmade-block
|
|
53
|
+
node packages/block-cli/cli.js test my-import.stillmade-block
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Mandatory host-controlled exports
|
|
57
|
+
|
|
58
|
+
Blocks return typed results or `file-bundle` outputs for StillMade to deliver.
|
|
59
|
+
Do not create download links, invoke save-file pickers, open export destinations,
|
|
60
|
+
or implement a separate export/paywall/referral bypass. The upload admission
|
|
61
|
+
report requires **Host-controlled exports** (`host-export-1`), alongside existing
|
|
62
|
+
sandbox and interface checks. A passing static check is not a delivery receipt.
|
|
63
|
+
StillMade owns the current export policy for all creators; it may add a referral
|
|
64
|
+
step, checkout or other requirement without changing your Block. It can also
|
|
65
|
+
require the StillMade watermark on exports from accounts without a paid plan;
|
|
66
|
+
StillMade draws it while rendering videos and delivering images, so do not add
|
|
67
|
+
your own. Block pricing and export access are separate. Never claim payment or referral completion from
|
|
68
|
+
Block code. Native integrations must declare the host export service and route
|
|
69
|
+
delivery through it; an extracted source folder does not satisfy this boundary.
|
|
70
|
+
|
|
71
|
+
## Image-processing example
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"manifest": {
|
|
75
|
+
"schemaVersion": 1,
|
|
76
|
+
"license": "MIT",
|
|
77
|
+
"provenance": {
|
|
78
|
+
"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"
|
|
79
|
+
},
|
|
80
|
+
"sdkVersion": "0.1.0",
|
|
81
|
+
"id": "example.thicken-lines",
|
|
82
|
+
"action": {
|
|
83
|
+
"label": "Thicken lines",
|
|
84
|
+
"running": "Thickening lines…"
|
|
85
|
+
},
|
|
86
|
+
"version": "1.0.1",
|
|
87
|
+
"name": "Thicken line art",
|
|
88
|
+
"description": "Expands dark outlines in an image while preserving surrounding colors, creating a new image for the next production step.",
|
|
89
|
+
"kind": "task",
|
|
90
|
+
"runtime": "recipe",
|
|
91
|
+
"inputs": {
|
|
92
|
+
"image": {
|
|
93
|
+
"type": "image",
|
|
94
|
+
"primary": true,
|
|
95
|
+
"semantic": "source_image",
|
|
96
|
+
"required": true,
|
|
97
|
+
"description": "Line-art image whose dark outlines should be expanded."
|
|
98
|
+
},
|
|
99
|
+
"thickness": {
|
|
100
|
+
"type": "integer",
|
|
101
|
+
"default": 2,
|
|
102
|
+
"min": 1,
|
|
103
|
+
"max": 8,
|
|
104
|
+
"semantic": "line_thickness",
|
|
105
|
+
"required": false,
|
|
106
|
+
"description": "Number of pixels by which to expand dark outlines."
|
|
107
|
+
},
|
|
108
|
+
"threshold": {
|
|
109
|
+
"type": "number",
|
|
110
|
+
"default": 100,
|
|
111
|
+
"min": 0,
|
|
112
|
+
"max": 255,
|
|
113
|
+
"semantic": "darkness_threshold",
|
|
114
|
+
"required": false,
|
|
115
|
+
"description": "Brightness threshold used to identify dark outline pixels."
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
"outputs": {
|
|
119
|
+
"image": {
|
|
120
|
+
"type": "image",
|
|
121
|
+
"primary": true,
|
|
122
|
+
"semantic": "processed_image",
|
|
123
|
+
"description": "A new image with expanded dark outlines."
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
"permissions": {
|
|
127
|
+
"project": [],
|
|
128
|
+
"network": [],
|
|
129
|
+
"filesystem": [],
|
|
130
|
+
"secrets": []
|
|
131
|
+
},
|
|
132
|
+
"ui": [
|
|
133
|
+
{
|
|
134
|
+
"control": "asset",
|
|
135
|
+
"port": "image"
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"control": "slider",
|
|
139
|
+
"port": "thickness"
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"control": "slider",
|
|
143
|
+
"port": "threshold"
|
|
144
|
+
}
|
|
145
|
+
]
|
|
146
|
+
},
|
|
147
|
+
"recipe": {
|
|
148
|
+
"schemaVersion": 1,
|
|
149
|
+
"steps": [
|
|
150
|
+
{
|
|
151
|
+
"id": "outlines",
|
|
152
|
+
"op": "image.thicken-lines",
|
|
153
|
+
"args": {
|
|
154
|
+
"image": {
|
|
155
|
+
"$input": "image"
|
|
156
|
+
},
|
|
157
|
+
"thickness": {
|
|
158
|
+
"$input": "thickness"
|
|
159
|
+
},
|
|
160
|
+
"threshold": {
|
|
161
|
+
"$input": "threshold"
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
],
|
|
166
|
+
"outputs": {
|
|
167
|
+
"image": {
|
|
168
|
+
"$step": "outlines"
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
"tests": [
|
|
173
|
+
{
|
|
174
|
+
"name": "One dark point expands to a 3×3 square",
|
|
175
|
+
"input": {
|
|
176
|
+
"image": {
|
|
177
|
+
"width": 5,
|
|
178
|
+
"height": 5,
|
|
179
|
+
"data": [
|
|
180
|
+
255,
|
|
181
|
+
255,
|
|
182
|
+
255,
|
|
183
|
+
255,
|
|
184
|
+
255,
|
|
185
|
+
255,
|
|
186
|
+
255,
|
|
187
|
+
255,
|
|
188
|
+
255,
|
|
189
|
+
255,
|
|
190
|
+
255,
|
|
191
|
+
255,
|
|
192
|
+
255,
|
|
193
|
+
255,
|
|
194
|
+
255,
|
|
195
|
+
255,
|
|
196
|
+
255,
|
|
197
|
+
255,
|
|
198
|
+
255,
|
|
199
|
+
255,
|
|
200
|
+
255,
|
|
201
|
+
255,
|
|
202
|
+
255,
|
|
203
|
+
255,
|
|
204
|
+
255,
|
|
205
|
+
255,
|
|
206
|
+
255,
|
|
207
|
+
255,
|
|
208
|
+
255,
|
|
209
|
+
255,
|
|
210
|
+
255,
|
|
211
|
+
255,
|
|
212
|
+
255,
|
|
213
|
+
255,
|
|
214
|
+
255,
|
|
215
|
+
255,
|
|
216
|
+
255,
|
|
217
|
+
255,
|
|
218
|
+
255,
|
|
219
|
+
255,
|
|
220
|
+
255,
|
|
221
|
+
255,
|
|
222
|
+
255,
|
|
223
|
+
255,
|
|
224
|
+
255,
|
|
225
|
+
255,
|
|
226
|
+
255,
|
|
227
|
+
255,
|
|
228
|
+
0,
|
|
229
|
+
0,
|
|
230
|
+
0,
|
|
231
|
+
255,
|
|
232
|
+
255,
|
|
233
|
+
255,
|
|
234
|
+
255,
|
|
235
|
+
255,
|
|
236
|
+
255,
|
|
237
|
+
255,
|
|
238
|
+
255,
|
|
239
|
+
255,
|
|
240
|
+
255,
|
|
241
|
+
255,
|
|
242
|
+
255,
|
|
243
|
+
255,
|
|
244
|
+
255,
|
|
245
|
+
255,
|
|
246
|
+
255,
|
|
247
|
+
255,
|
|
248
|
+
255,
|
|
249
|
+
255,
|
|
250
|
+
255,
|
|
251
|
+
255,
|
|
252
|
+
255,
|
|
253
|
+
255,
|
|
254
|
+
255,
|
|
255
|
+
255,
|
|
256
|
+
255,
|
|
257
|
+
255,
|
|
258
|
+
255,
|
|
259
|
+
255,
|
|
260
|
+
255,
|
|
261
|
+
255,
|
|
262
|
+
255,
|
|
263
|
+
255,
|
|
264
|
+
255,
|
|
265
|
+
255,
|
|
266
|
+
255,
|
|
267
|
+
255,
|
|
268
|
+
255,
|
|
269
|
+
255,
|
|
270
|
+
255,
|
|
271
|
+
255,
|
|
272
|
+
255,
|
|
273
|
+
255,
|
|
274
|
+
255,
|
|
275
|
+
255,
|
|
276
|
+
255,
|
|
277
|
+
255,
|
|
278
|
+
255,
|
|
279
|
+
255
|
|
280
|
+
]
|
|
281
|
+
},
|
|
282
|
+
"thickness": 1
|
|
283
|
+
},
|
|
284
|
+
"expected": {
|
|
285
|
+
"image": {
|
|
286
|
+
"width": 5,
|
|
287
|
+
"height": 5,
|
|
288
|
+
"data": [
|
|
289
|
+
255,
|
|
290
|
+
255,
|
|
291
|
+
255,
|
|
292
|
+
255,
|
|
293
|
+
255,
|
|
294
|
+
255,
|
|
295
|
+
255,
|
|
296
|
+
255,
|
|
297
|
+
255,
|
|
298
|
+
255,
|
|
299
|
+
255,
|
|
300
|
+
255,
|
|
301
|
+
255,
|
|
302
|
+
255,
|
|
303
|
+
255,
|
|
304
|
+
255,
|
|
305
|
+
255,
|
|
306
|
+
255,
|
|
307
|
+
255,
|
|
308
|
+
255,
|
|
309
|
+
255,
|
|
310
|
+
255,
|
|
311
|
+
255,
|
|
312
|
+
255,
|
|
313
|
+
0,
|
|
314
|
+
0,
|
|
315
|
+
0,
|
|
316
|
+
255,
|
|
317
|
+
0,
|
|
318
|
+
0,
|
|
319
|
+
0,
|
|
320
|
+
255,
|
|
321
|
+
0,
|
|
322
|
+
0,
|
|
323
|
+
0,
|
|
324
|
+
255,
|
|
325
|
+
255,
|
|
326
|
+
255,
|
|
327
|
+
255,
|
|
328
|
+
255,
|
|
329
|
+
255,
|
|
330
|
+
255,
|
|
331
|
+
255,
|
|
332
|
+
255,
|
|
333
|
+
0,
|
|
334
|
+
0,
|
|
335
|
+
0,
|
|
336
|
+
255,
|
|
337
|
+
0,
|
|
338
|
+
0,
|
|
339
|
+
0,
|
|
340
|
+
255,
|
|
341
|
+
0,
|
|
342
|
+
0,
|
|
343
|
+
0,
|
|
344
|
+
255,
|
|
345
|
+
255,
|
|
346
|
+
255,
|
|
347
|
+
255,
|
|
348
|
+
255,
|
|
349
|
+
255,
|
|
350
|
+
255,
|
|
351
|
+
255,
|
|
352
|
+
255,
|
|
353
|
+
0,
|
|
354
|
+
0,
|
|
355
|
+
0,
|
|
356
|
+
255,
|
|
357
|
+
0,
|
|
358
|
+
0,
|
|
359
|
+
0,
|
|
360
|
+
255,
|
|
361
|
+
0,
|
|
362
|
+
0,
|
|
363
|
+
0,
|
|
364
|
+
255,
|
|
365
|
+
255,
|
|
366
|
+
255,
|
|
367
|
+
255,
|
|
368
|
+
255,
|
|
369
|
+
255,
|
|
370
|
+
255,
|
|
371
|
+
255,
|
|
372
|
+
255,
|
|
373
|
+
255,
|
|
374
|
+
255,
|
|
375
|
+
255,
|
|
376
|
+
255,
|
|
377
|
+
255,
|
|
378
|
+
255,
|
|
379
|
+
255,
|
|
380
|
+
255,
|
|
381
|
+
255,
|
|
382
|
+
255,
|
|
383
|
+
255,
|
|
384
|
+
255,
|
|
385
|
+
255,
|
|
386
|
+
255,
|
|
387
|
+
255,
|
|
388
|
+
255
|
|
389
|
+
]
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
]
|
|
394
|
+
}
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
## Host boundary
|
|
398
|
+
The host resolves a selected image into RGBA before execution and stores accepted output as a new media version. A guest receives no filesystem path or network access. Large files require an explicit host-side conversion or resized copy.
|
|
399
|
+
|
|
400
|
+
See [batch execution](../project-types/batches.md) for whole-scene and project-wide processing.
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Mobile-compatible Block UI
|
|
2
|
+
|
|
3
|
+
# Mobile-compatible Block UI
|
|
4
|
+
|
|
5
|
+
Build one Block contract for every size. Inputs, outputs, state, actions,
|
|
6
|
+
permissions, and runtime do not change when the interface becomes compact.
|
|
7
|
+
StillMade reorganizes standard controls automatically and keeps custom views in
|
|
8
|
+
the existing opaque sandbox.
|
|
9
|
+
|
|
10
|
+
## Standard UI
|
|
11
|
+
|
|
12
|
+
Prefer `manifest.ui` and `manifest.uiLayout`. The host owns field sizing, focus,
|
|
13
|
+
touch targets, stacked preview/results, tab overflow, safe-area spacing, and
|
|
14
|
+
software-keyboard behavior. Use `uiLayout` only to group complete inputs and
|
|
15
|
+
outputs; do not create a second mobile manifest or split an editor into tiny
|
|
16
|
+
Blocks.
|
|
17
|
+
|
|
18
|
+
Tabs and sections must retain every essential input and output. A compact layout
|
|
19
|
+
may put secondary tools behind a labelled section or sheet, but the primary
|
|
20
|
+
action and focused field must remain reachable. Resizing the preview does not run
|
|
21
|
+
the Block and must not reset its values, selection, state, progress, or result.
|
|
22
|
+
|
|
23
|
+
## Custom UI
|
|
24
|
+
|
|
25
|
+
Custom HTML, CSS, and JavaScript continue to use `view` and `StillMade.run`.
|
|
26
|
+
Design from the view container rather than a device name:
|
|
27
|
+
|
|
28
|
+
```css
|
|
29
|
+
.workspace { container: block-workspace / inline-size; min-width: 0; }
|
|
30
|
+
.layout { display: grid; grid-template-columns: minmax(0, 2fr) minmax(240px, 1fr); }
|
|
31
|
+
@container block-workspace (max-width: 600px) {
|
|
32
|
+
.layout { grid-template-columns: minmax(0, 1fr); }
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
The sandbox supplies viewport-fit, safe-area padding, readable form defaults,
|
|
37
|
+
44-pixel ordinary controls, media containment, and focus styling. Authored CSS
|
|
38
|
+
still owns specialized workspace layout. A 320 CSS-pixel phone viewport leaves
|
|
39
|
+
less than 320 pixels inside the host's preview gutters. Size from the embedded
|
|
40
|
+
view's actual container, avoid a 320-pixel minimum width, wrap long labels, and
|
|
41
|
+
isolate intentional canvas/timeline panning from
|
|
42
|
+
the surrounding toolbar. A `<video controls>` gets StillMade's player, whose
|
|
43
|
+
44-pixel controls a tap shows for 3 seconds (a first tap never starts playback),
|
|
44
|
+
and a result picture's full-screen button shows for 3 seconds after a tap on it. Provide visible buttons or menus for actions otherwise
|
|
45
|
+
available by hover, drag, right-click, or keyboard shortcut. Label fields and
|
|
46
|
+
announce loading, errors, and completed output with `role="status"`,
|
|
47
|
+
`role="alert"`, or `aria-live` as appropriate. For deterministic custom-view
|
|
48
|
+
checks, set `data-stillmade-state="loading"`, `"error"`, or `"success"` on the
|
|
49
|
+
visible result area as each state occurs. The browser profile runs the local
|
|
50
|
+
success fixture, then injects a local executor failure to exercise the same
|
|
51
|
+
view's error path without calling a provider. Standard controls receive the
|
|
52
|
+
same failure and must show their error result. A permanently mounted live region
|
|
53
|
+
does not demonstrate that an error was actually shown. If the test never
|
|
54
|
+
reaches a state, phone support remains unverified rather than inferred.
|
|
55
|
+
|
|
56
|
+
The maintained `examples/custom-interface.stillmade.json` demonstrates one
|
|
57
|
+
custom workspace whose settings and result stack from the same state and action
|
|
58
|
+
contract.
|
|
59
|
+
|
|
60
|
+
For deterministic browser checks, mark a custom form control with
|
|
61
|
+
`data-stillmade-input="portName"` so the phone profile can enter the package's
|
|
62
|
+
test fixture through the real UI before pressing its run action. This marker
|
|
63
|
+
does not change the Block's input contract or grant access to host services.
|
|
64
|
+
For a text-bearing object fixture such as `{brief:{text:"…"}}`, the profile
|
|
65
|
+
enters its `text` into the marked text field, then presses the button marked
|
|
66
|
+
`data-stillmade-action="run"` (or the view's only button). Every button carries
|
|
67
|
+
`data-stillmade-action` so Chat can press it: `run` on the button that runs the
|
|
68
|
+
Block, and what it does on every other button (`data-stillmade-action="play sample"`).
|
|
69
|
+
The existing `data-stillmade-share` marker is also recognized for shared text
|
|
70
|
+
fields. A custom view without a reachable mapped control must not be counted
|
|
71
|
+
as having passed its fixture's success interaction.
|
|
72
|
+
|
|
73
|
+
## Preview and authoritative validation
|
|
74
|
+
|
|
75
|
+
The Create preview includes Compact (320), Phone (390), Tablet (768), phone
|
|
76
|
+
landscape (844 × 390), and Desktop (1280) container presets. Changing a preset
|
|
77
|
+
only changes available space. Its quick check helps find immediate host overflow
|
|
78
|
+
and small touch targets; imported and published packages still run the
|
|
79
|
+
authoritative profile in the real Block/Project Type host.
|
|
80
|
+
|
|
81
|
+
The SDK `testPlatforms` gate records the exact package digest plus SDK, renderer,
|
|
82
|
+
and check versions. A trusted browser adapter covers Light, Dark, and White at
|
|
83
|
+
320, 390, 768, 1280, and phone landscape. It checks the main touch task, empty,
|
|
84
|
+
populated, loading, error, success, long-label and enlarged-text states, and
|
|
85
|
+
continuity through resize/rotation and panel toggles. Custom views must visibly
|
|
86
|
+
enter each claimed state during the check; source markup alone is not evidence
|
|
87
|
+
of a working error path. Fixture execution is local
|
|
88
|
+
or mocked; the mobile UI profile never authorizes a provider call or spends
|
|
89
|
+
credits.
|
|
90
|
+
|
|
91
|
+
Reports supplied inside a package are ignored. A changed package or changed
|
|
92
|
+
renderer/check version needs a new report. Failures name the affected view,
|
|
93
|
+
control, and CSS size and remain repairable in draft preview. Passing the profile
|
|
94
|
+
does not make an unavailable desktop binary, local GPU, provider, or credential
|
|
95
|
+
available on a phone; runtime capability checks remain separate.
|
|
96
|
+
|
|
97
|
+
For a local preview build, `node scripts/platform-tests/run.mjs --engine=chromium --require-complete` uses that same trusted embedded profile
|
|
98
|
+
and saves per-size captures and a digest-bound report. Firefox and WebKit runs
|
|
99
|
+
are exploratory layout checks; they cannot supply the profile's state and
|
|
100
|
+
continuity evidence. A report from any local command does not grant a
|
|
101
|
+
Marketplace support claim or replace StillMade's server-owned import review.
|
|
102
|
+
|
|
103
|
+
Before public release, StillMade also smoke-tests representative shared UI in
|
|
104
|
+
real iOS Safari and Android Chrome. Gesture-heavy custom editors require a
|
|
105
|
+
focused real-device check. Those operational checks complement the deterministic
|
|
106
|
+
gate; they are not inferred from an author claim.
|