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,314 @@
|
|
|
1
|
+
# GitHub application imports
|
|
2
|
+
|
|
3
|
+
# Import an application from GitHub
|
|
4
|
+
|
|
5
|
+
This guide describes the current SDK boundaries and the integration procedure.
|
|
6
|
+
It does **not** claim that every repository can already run inside StillMade.
|
|
7
|
+
The source contract, import inspector, restricted UI and reviewed native adapter
|
|
8
|
+
are implemented. An isolated application build worker and bundled React/Vue/Svelte
|
|
9
|
+
runtime are still required for arbitrary web applications.
|
|
10
|
+
|
|
11
|
+
## Preserve the requested scope
|
|
12
|
+
|
|
13
|
+
The default GitHub import intent is the complete application with its existing
|
|
14
|
+
interface. Record the immutable commit, application root and important actions
|
|
15
|
+
before adapting code. The importer must not replace that intent with one utility.
|
|
16
|
+
The separate **Extract one capability** mode explicitly authorizes narrower scope.
|
|
17
|
+
|
|
18
|
+
The in-app full-application inspection pins source and retains an inventory of
|
|
19
|
+
code, binary assets, dependency manifests, lockfiles, symlinks and submodules.
|
|
20
|
+
It returns `not-built`, including unfinished feature and runtime checks. A complete
|
|
21
|
+
file inventory is neither a complete dependency checkout nor a successful build.
|
|
22
|
+
Inspection first uses public unauthenticated GitHub APIs; it does not authorize private
|
|
23
|
+
repository access, install dependencies, execute scripts or charge model credits.
|
|
24
|
+
An exact commit's complete, verified public tree and Git-blob-checked source
|
|
25
|
+
bytes may be reused from a 15-minute, 24 MiB process-local cache across the
|
|
26
|
+
inspection, build and source-recheck phases. Branch/HEAD resolution, partial
|
|
27
|
+
trees, failed reads and unverified bytes are not cached. Source review reports
|
|
28
|
+
`pinned-cache` when it uses that evidence instead of claiming a fresh API read.
|
|
29
|
+
The cache avoids repeated anonymous requests for one pin; a cold repository
|
|
30
|
+
still depends on GitHub availability and its rate limit, and another server
|
|
31
|
+
process has its own cache. It is not a substitute for an authenticated or
|
|
32
|
+
archive-backed source acquisition route at larger scale.
|
|
33
|
+
When the public REST API is rate-limited, the application import can instead
|
|
34
|
+
resolve the public branch or tag through bounded Git protocol v2 HTTP and inspect a
|
|
35
|
+
GitHub codeload archive at the resulting commit. The host checks the archive's
|
|
36
|
+
commit marker, tar structure and paths, computes Git blob identities from
|
|
37
|
+
actual bytes, rejects sensitive or oversized selected files, and labels this
|
|
38
|
+
evidence `pinned-github-archive`. A named ref uses two bounded Git HTTP requests
|
|
39
|
+
before the archive request; an exact commit needs only the archive request.
|
|
40
|
+
This fallback is capped at 12 MB compressed and 40 MB expanded, requires no
|
|
41
|
+
Git executable on the server, and refuses repositories with
|
|
42
|
+
submodules because the archive omits their Git identities. Larger archives
|
|
43
|
+
must use the Git tree route or a future bounded acquisition worker. Archive
|
|
44
|
+
inspection is source evidence only; it does not approve execution or install.
|
|
45
|
+
The REST and fallback phases use the same caller-owned HTTP transport when one
|
|
46
|
+
is provided. Reported request use includes both phases. Reported byte use
|
|
47
|
+
includes REST and archive bodies; the two Git-ref responses have separate
|
|
48
|
+
64 KiB limits and are not included in that aggregate byte figure.
|
|
49
|
+
For a complete Git tree containing submodules, inspection reads the pinned
|
|
50
|
+
`.gitmodules` blob, accepts only canonical or relative GitHub repositories,
|
|
51
|
+
and follows each exact Gitlink commit (including nested modules) within one
|
|
52
|
+
48-request, 32 MB metadata and 24-placement bound. It reports each dependency
|
|
53
|
+
commit separately. This verifies dependency identities and file inventories;
|
|
54
|
+
the isolated builder must still acquire and hash the actual dependency bytes
|
|
55
|
+
before running their code. Missing mappings, outside hosts, incomplete trees
|
|
56
|
+
and exhausted bounds fail with a specific source-graph reason.
|
|
57
|
+
The larger isolated-build acquisition profile can verify a complete archive
|
|
58
|
+
against that Git tree, including ordinary files and symlink identities. GitHub
|
|
59
|
+
codeload can omit files under `export-ignore` or transform exported text; those
|
|
60
|
+
paths must be restored from exact-commit raw transport and independently
|
|
61
|
+
rehashed to their pinned Git blobs. The raw route is limited to 64 files and
|
|
62
|
+
8 MB, denies sensitive paths, uses no credentials or redirects, and cannot
|
|
63
|
+
grant execution. All archive and recovered bytes are checked before a trusted
|
|
64
|
+
staging callback receives any file. This profile has not yet been connected
|
|
65
|
+
to a complete native build or installation workflow.
|
|
66
|
+
The inspection `readable` flag controls what the LLM can request as source
|
|
67
|
+
text. It is not a build-file filter. A separately checked `stageable` flag
|
|
68
|
+
allows oversized but bounded files and inert symlink-target blobs into the
|
|
69
|
+
private build-source quarantine; sensitive paths remain excluded. Symlink
|
|
70
|
+
targets are stored as bytes, not followed or created as active filesystem
|
|
71
|
+
links. A later materializer must validate every link target before use.
|
|
72
|
+
The isolated-worker source-closure orchestrator groups identical pinned
|
|
73
|
+
repositories across submodule placements, rechecks each exact commit, and
|
|
74
|
+
hands verified bytes to a trusted quarantined staging callback under one
|
|
75
|
+
request, network-byte, file, staged-byte and deadline budget. Its receipt is
|
|
76
|
+
`execution:not-run` and `installable:false`; a partial stage has no activation
|
|
77
|
+
authority. The connected private staging writer uses content-addressed inert
|
|
78
|
+
blobs and rereads each file before sealing it. A complete closure produces a
|
|
79
|
+
read-only manifest bound to a host-retained digest; reopening the quarantine
|
|
80
|
+
audits every blob against its Git identity. Partial stages cannot be sealed.
|
|
81
|
+
The inert tree planner checks file/directory namespace collisions and resolves
|
|
82
|
+
symlink targets only within the exact staged closure, without expanding source
|
|
83
|
+
paths on the host filesystem. A bounded transfer format then packs each
|
|
84
|
+
audited Git blob once and binds its canonical namespace, modes, link targets,
|
|
85
|
+
source digest and sealed-manifest digest into a SHA-256 bundle. The Linux
|
|
86
|
+
materializer independently verifies the bundle and Git hashes, creates files
|
|
87
|
+
through private directory descriptors, creates links only after file writes,
|
|
88
|
+
and audits the final tree. A synthetic tree with an executable and links ran
|
|
89
|
+
in the isolated VM; a changed bundle was rejected before staging. Natron's
|
|
90
|
+
allowed exact closure also materialized there: 6,445 files and 654 directories.
|
|
91
|
+
This development path is not yet a trusted install or execution admission:
|
|
92
|
+
the stage owner can still change its read-only modes, and build recipes,
|
|
93
|
+
dependencies, GUI sessions and result contracts need separate host control.
|
|
94
|
+
For an npm browser candidate, inspection also reads the pinned `package.json` and
|
|
95
|
+
`package-lock.json` through the same bounded source verifier. It checks that root
|
|
96
|
+
dependency declarations agree and distinguishes integrity-pinned npm tarballs,
|
|
97
|
+
exact-commit GitHub dependencies and unresolved sources. This is a build plan,
|
|
98
|
+
not dependency acquisition or build admission. The pinned miniPaint case has
|
|
99
|
+
517 npm tarballs and one exact-commit GitHub dependency; an isolated builder
|
|
100
|
+
must acquire and verify both kinds before executing its Webpack build.
|
|
101
|
+
Before rebuilding, the importer checks whether the pinned repository already
|
|
102
|
+
contains an HTML entry referencing a checked-in local browser bundle. It selects
|
|
103
|
+
the referenced scripts/styles and bounded local media resources, then verifies
|
|
104
|
+
every selected byte against the Git tree. This can preserve a real original UI
|
|
105
|
+
without executing a package script. It is still only a candidate: dynamic
|
|
106
|
+
resource requests, operations, state and output must pass isolated review.
|
|
107
|
+
miniPaint's checked-in bundle passed a separate local browser probe with a real
|
|
108
|
+
brush stroke, changed PNG bytes and exact document restore in a second page.
|
|
109
|
+
That probe is not an installed Block or a host-enforced multiplayer result.
|
|
110
|
+
The local acquisition module also re-read miniPaint's exact pinned lockfile and
|
|
111
|
+
verified all 518 dependencies (about 18.2 MB) against registry SHA-512 or Git
|
|
112
|
+
blob identities. Those bytes were discarded after the probe. A managed stage,
|
|
113
|
+
isolated framework rebuild and reviewed execution admission are still missing.
|
|
114
|
+
|
|
115
|
+
Use the exported `defineRepositoryApplication` contract to record the requested
|
|
116
|
+
scope, interface, versioned route and source-backed feature ledger. Use
|
|
117
|
+
`assessRepositoryApplication` to identify missing evidence. Its highest status is
|
|
118
|
+
`evidence-complete`: supplied receipt declarations are not independent execution
|
|
119
|
+
verification. The assessor always reports `executionPerformed:false` and
|
|
120
|
+
`independentlyVerified:false`. A model cannot certify its own integration by
|
|
121
|
+
filling in that object.
|
|
122
|
+
|
|
123
|
+
For a generated browser application, put the exact GitHub repository URL,
|
|
124
|
+
40-character commit and application folder in
|
|
125
|
+
`manifest.provenance.githubSource`. The SDK checks its shape and the source
|
|
126
|
+
reviewer independently matches it to the pinned Git tree and every bundled
|
|
127
|
+
original asset. This field travels with the versioned package; it is source
|
|
128
|
+
identity, not permission, a license decision or evidence that the adapter ran.
|
|
129
|
+
Older uninstalled candidates without the embedded pin can still undergo
|
|
130
|
+
source review, but must not be promoted to production solely from that legacy
|
|
131
|
+
shape.
|
|
132
|
+
|
|
133
|
+
For a framework application built from pinned source, the unreviewed candidate
|
|
134
|
+
also carries `manifest.provenance.browserBuild`: the verified source-closure
|
|
135
|
+
digest, build-script digest, output directory and digest of every original
|
|
136
|
+
compiled file. A model may author the lifecycle adapter, but cannot supply the
|
|
137
|
+
build result or certify it. A trusted host must independently rederive the
|
|
138
|
+
Git source closure, verify the exact isolated build and reconstruct the full
|
|
139
|
+
application bundle before running the ordinary interface, state and output
|
|
140
|
+
review. The current SDK handoff and internal verifier implement these checks;
|
|
141
|
+
the production build supervisor and review issuer are not yet connected to the
|
|
142
|
+
GitHub button. A build or source receipt alone does not make a Block installable.
|
|
143
|
+
An internal npm job now composes the sealed source bundle, Linux materializer,
|
|
144
|
+
integrity-pinned registry and exact-commit GitHub package stages, and the
|
|
145
|
+
network-denied build runner. It checks each identity again between stages and
|
|
146
|
+
returns compiled bytes with no installation authority. The Linux npm profile
|
|
147
|
+
now caps selected packages at 768, verified expanded package bytes at 256 MiB,
|
|
148
|
+
and package files at 18,000. It caps compiled files at 16 MiB total, each
|
|
149
|
+
file at 8 MiB, and the encoded build report at 24 MiB, with a root `dist`,
|
|
150
|
+
`build` or `out` entry. It
|
|
151
|
+
omits a lockfile package only when that package is explicitly optional and
|
|
152
|
+
incompatible with the worker's OS, CPU or libc; the root launcher rechecks
|
|
153
|
+
that selection against the pinned lock before execution. It has not run
|
|
154
|
+
miniPaint's build, and still needs the durable supervisor lease and cleanup
|
|
155
|
+
needed for a production
|
|
156
|
+
button. The stage-order tests are offline; no real framework repository has
|
|
157
|
+
passed this composed job. The worker also exposes a trusted rebuild callback
|
|
158
|
+
for the compiled-candidate source verifier; the caller must run it under the
|
|
159
|
+
same host-owned supervisor rather than accepting a browser-supplied report.
|
|
160
|
+
|
|
161
|
+
A successful framework build does not prove that all runtime assets are local.
|
|
162
|
+
For example, CanvasCode compiled from its pinned source but loaded Monaco from
|
|
163
|
+
a CDN; the isolated network-denied browser showed its preview while the editor
|
|
164
|
+
remained unavailable. Manually bundling the already pinned Monaco dependency
|
|
165
|
+
restored the editor and real ZIP export in an offline development VM. The
|
|
166
|
+
internal compiled-authoring path can now ask a model for complete replacements
|
|
167
|
+
or unique exact-text edits of inspected source files, each bound to its
|
|
168
|
+
original Git SHA-256. The host derives full replacement bytes for an edit. A root-owned
|
|
169
|
+
stage checks and seals replacement bytes separately from the immutable Git
|
|
170
|
+
source; the network-denied build applies them in scratch space. Patch identity
|
|
171
|
+
must match in the compiled candidate and an independent rebuild. Package
|
|
172
|
+
manifests and lockfiles cannot be patched in this profile. The root-owned patch
|
|
173
|
+
stage, service connection, automatic runtime-failure repair and full behavior
|
|
174
|
+
review remain unverified. A model-suggested CDN exception is not equivalent to
|
|
175
|
+
localizing and verifying those assets.
|
|
176
|
+
CanvasCode also requires a `srcDoc` preview frame and local Monaco language
|
|
177
|
+
workers. The original browser-application profile declares only single-thread
|
|
178
|
+
WASM; its CSP and target guard deny frames and workers. A successful ordinary
|
|
179
|
+
Chromium smoke therefore cannot establish host-runtime compatibility.
|
|
180
|
+
|
|
181
|
+
The new browser-application v2 source profile now supports a declared, bounded
|
|
182
|
+
direct `srcdoc` frame. The compiled authorer can request that feature, and
|
|
183
|
+
independent source verification reconstructs the exact profile from the pinned
|
|
184
|
+
build. A local Chromium probe confirmed that the v2 CSP runs an inline preview
|
|
185
|
+
script, reports the expected direct child frame, and keeps the top-only trusted
|
|
186
|
+
bootstrap out of the child. The existing v1 CSP and frame guard remain closed.
|
|
187
|
+
This is development-browser evidence, not a provisioned StillMade worker run.
|
|
188
|
+
CanvasCode also needs local Monaco language workers. Browser application v3
|
|
189
|
+
now declares exact bundled dedicated worker scripts, and the trusted target
|
|
190
|
+
policy admits them only when paused under the original page and context. A
|
|
191
|
+
local Chrome probe ran a worker through that policy and the hashed asset
|
|
192
|
+
server, while CSP denied a second loopback origin. The original v1 and v2
|
|
193
|
+
profiles still deny workers. This is not a provisioned StillMade worker test,
|
|
194
|
+
CanvasCode's own worker behavior has not passed runtime review, and its full
|
|
195
|
+
application import remains uninstalled.
|
|
196
|
+
|
|
197
|
+
## Choose an actual runtime
|
|
198
|
+
|
|
199
|
+
| Source | Current boundary |
|
|
200
|
+
| --- | --- |
|
|
201
|
+
| Existing SDK source folder/package | Import its pinned source and run normal admission. |
|
|
202
|
+
| Bounded JS or recipe capability | Adapt the real computation to the existing sandbox and provide typed contracts. This is capability scope. |
|
|
203
|
+
| Restricted HTML/JS custom view | Supported within the documented DOM and bridge restrictions. Original styling may be preserved. |
|
|
204
|
+
| React, Vue, Svelte, workers, arbitrary WASM or full frontend bundle | No general application runtime yet. Do not paste a bundle into `view.javascript`, remove security checks, or claim a static mount as acceptance. |
|
|
205
|
+
| Natron native application | An approved desktop adapter retains the original application in a separate native window and performs bounded rendering. It is not embedded web UI or a source build. See [Desktop execution](DESKTOP_EXECUTION.md). |
|
|
206
|
+
| Arbitrary native executable, Python/Node backend or full stack service | Requires an implemented, reviewed isolated runtime and capability contract. A README, wrapper or external command is insufficient. |
|
|
207
|
+
|
|
208
|
+
The separate experimental [browser application contract](BROWSER_APPLICATIONS.md)
|
|
209
|
+
preserves compiled assets and original UI code with a Block-owned lifecycle
|
|
210
|
+
adapter. The exact reviewed Method Draw source has a private desktop install,
|
|
211
|
+
editing and SVG export path. Other applications require separate source,
|
|
212
|
+
runtime and result review; package validation alone is insufficient.
|
|
213
|
+
|
|
214
|
+
The separate Natron ARM64 development build (repository evidence `artifacts/repository-acceptance/natron-native-gui-dev-build-2026-09-29.json`)
|
|
215
|
+
shows that a Qt5/PySide2 native GUI can compile and open in a local VM after
|
|
216
|
+
architecture and Python-home adaptation. Its source tree is not yet the
|
|
217
|
+
complete sealed Git closure, and its OCIO configs and OpenFX plugins are
|
|
218
|
+
missing. This is runtime feasibility evidence, not approval to install a
|
|
219
|
+
GitHub-authored Block or a replacement for the full application.
|
|
220
|
+
The later exact-source-to-GUI check (repository evidence `artifacts/repository-acceptance/natron-exact-tree-to-gui-2026-09-29.json`)
|
|
221
|
+
replaced that archive input with the verified allowed Git closure and compiled
|
|
222
|
+
a separate copy carrying only the recorded ARM64 patch. The GUI opened; the
|
|
223
|
+
same binary also saved and reopened a native `.ntp` project. The missing
|
|
224
|
+
plugins, color config and host-enforced Block contracts remain.
|
|
225
|
+
|
|
226
|
+
## Keep the original appearance
|
|
227
|
+
|
|
228
|
+
For an eligible restricted view, place this option in `src/view.json`:
|
|
229
|
+
|
|
230
|
+
```json
|
|
231
|
+
{"appearance":"original"}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
Keep the application's permitted CSS in `src/view.css`. StillMade still supplies
|
|
235
|
+
the outer workspace, focus and permission controls. Original appearance does not
|
|
236
|
+
grant extra scripting, networking, storage or navigation permissions.
|
|
237
|
+
|
|
238
|
+
To offer optional StillMade styling, include `src/view.themed.css` using the
|
|
239
|
+
documented theme tokens. The themed preview is offered only when that stylesheet
|
|
240
|
+
passes appearance checks. Omitted appearance preserves the existing package
|
|
241
|
+
behavior; published packages are not rewritten to change this preference.
|
|
242
|
+
|
|
243
|
+
## Connect meaningful inputs and outputs
|
|
244
|
+
|
|
245
|
+
Every required input needs a physical type, a precise semantic meaning, allowed
|
|
246
|
+
sources, and an explicit way to supply missing data. Do the same for output
|
|
247
|
+
meaning and representation. A video output is the actual new saved video, with
|
|
248
|
+
its own exact asset/version identity; returning the source video is not evidence
|
|
249
|
+
that an editor transformed it.
|
|
250
|
+
|
|
251
|
+
The existing `image` type also accepts bounded inline RGBA pixels as
|
|
252
|
+
`{width, height, data}`. A small editor can import those pixels and return its
|
|
253
|
+
actual composited pixels without inventing an asset ID. Respect both the image
|
|
254
|
+
contract and the complete runtime message limits. Large or referenced media
|
|
255
|
+
still needs the host's authenticated asset resolution and materialization path;
|
|
256
|
+
a guest-local data/blob URL is not a durable shared asset.
|
|
257
|
+
|
|
258
|
+
For browser applications with several export actions, declare which output
|
|
259
|
+
ports each action produces. An SVG export can map to `svg` and a PNG export to
|
|
260
|
+
`png`; mark each shared-manifest port `required:false` when another action
|
|
261
|
+
does not return it. The host checks the exact action-to-port mapping before
|
|
262
|
+
publishing output or storing media. A generated adapter's declaration alone
|
|
263
|
+
does not prove either export works.
|
|
264
|
+
|
|
265
|
+
Map existing app behavior to SDK input, shared-document and output interfaces.
|
|
266
|
+
Do not recreate the application's logic in the shared host or add a special
|
|
267
|
+
Block-ID branch. Persist editable state through declared host services and keep
|
|
268
|
+
two placements separate. Input changes, revoked permission, cancellation and
|
|
269
|
+
closed workspaces must reject late completion.
|
|
270
|
+
|
|
271
|
+
Native output-producing actions use `src/desktop.json`: declarative mappings from
|
|
272
|
+
typed input ports into an approved adapter and from its actual result into output
|
|
273
|
+
ports. The trusted host produces a receipt bound to the package, invocation,
|
|
274
|
+
inputs and outputs. Neither a Block's view nor its JavaScript can supply the host
|
|
275
|
+
executor or mint accepted native evidence. Legacy native packages without this
|
|
276
|
+
mapping cannot pass a generic workflow by returning their input unchanged.
|
|
277
|
+
|
|
278
|
+
## Prove the integration
|
|
279
|
+
|
|
280
|
+
1. Establish an upstream baseline with a representative input and inspect the
|
|
281
|
+
exported bytes. Retain the original app's important behavior and interface.
|
|
282
|
+
2. Build only in a disposable isolated worker without application credentials,
|
|
283
|
+
customer mounts or unrestricted network access. Preserve licenses and exact
|
|
284
|
+
dependency/asset identities. If no suitable worker exists, report that gap.
|
|
285
|
+
3. Execute a real producer → imported application → consumer through the
|
|
286
|
+
production resolver. Fixtures, screenshots, schemas and successful process
|
|
287
|
+
exit codes alone cannot prove transformed output.
|
|
288
|
+
4. Decode exports; compare with the baseline; verify the consumer receives those
|
|
289
|
+
exact bytes. Check real playback separately from codec decoding.
|
|
290
|
+
5. Save/reopen, edit while running, cancel, revoke access, retry failures, use two
|
|
291
|
+
placements and verify stale output behavior. Exercise permission and resource
|
|
292
|
+
limits with hostile inputs.
|
|
293
|
+
6. Retain the tested package digest, source commit, runtime version, commands,
|
|
294
|
+
bounded logs, artifacts and pass/fail evidence. Install the exact artifact
|
|
295
|
+
tested. Edits require new checks and published contract changes need a new
|
|
296
|
+
version.
|
|
297
|
+
|
|
298
|
+
Keep inspection, source admission, runtime tests and production verification as
|
|
299
|
+
separate states. Native bindings validate host-issued evidence; they are not a
|
|
300
|
+
cryptographic attestation from an arbitrary caller. The trusted host is responsible
|
|
301
|
+
for process isolation and actual artifact verification.
|
|
302
|
+
|
|
303
|
+
The first local Natron acceptance rendered 24 frames of an inverted synthetic
|
|
304
|
+
video, passed the real result through a three-Step workflow, matched its decoded
|
|
305
|
+
pixels exactly to an independent native baseline, and reopened saved workflow and
|
|
306
|
+
media. The same H.264/YUV420 output also played all 24 frames in a sandboxed
|
|
307
|
+
Electron video element. ProRes decoded successfully in the native probe but did
|
|
308
|
+
not play in Chromium; choose a browser-compatible Writer codec or explicitly
|
|
309
|
+
produce a separate playback proxy. This establishes that specific macOS
|
|
310
|
+
software-rendering path. It does not
|
|
311
|
+
establish all Natron features, third-party plugins, original GUI containment,
|
|
312
|
+
product UI media routing, other operating systems, source build reproducibility,
|
|
313
|
+
or arbitrary-repository support. The repository acceptance harness and evidence
|
|
314
|
+
remain distinct from the SDK's offline tests.
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
# Hosted image generation
|
|
2
|
+
|
|
3
|
+
Use `runtime: "capability"` with `operation: "image.generate"` for one visual
|
|
4
|
+
prompt (and optional reference images) to one generated PNG. Every image model
|
|
5
|
+
the app's own Canvas and Image Panels use is available: Nano Banana 2, 2 Lite and
|
|
6
|
+
Pro, GPT Image 2 and 1.5, Kling Image V3 and Seedream 4.5, with their aspect
|
|
7
|
+
ratios, resolutions and qualities (see
|
|
8
|
+
[generation models](../reference/generation-models.md)). Users pay with their
|
|
9
|
+
StillMade credits at StillMade's own price, or with their OpenAI key for the
|
|
10
|
+
direct GPT Image 2 option. The host shows model, settings and the exact price
|
|
11
|
+
before any provider call. Imported packages never receive API keys or choose an
|
|
12
|
+
endpoint or a price.
|
|
13
|
+
|
|
14
|
+
### Complete package
|
|
15
|
+
|
|
16
|
+
The downloaded SDK includes `examples/generate-image.stillmade.json` and
|
|
17
|
+
`packages/block-sdk/image-generation-example.js` (export `imageGenerate`).
|
|
18
|
+
|
|
19
|
+
```json
|
|
20
|
+
{
|
|
21
|
+
"manifest": {
|
|
22
|
+
"schemaVersion": 1,
|
|
23
|
+
"sdkVersion": "0.1.0",
|
|
24
|
+
"id": "example.generate-image",
|
|
25
|
+
"version": "1.0.0",
|
|
26
|
+
"name": "Generate an image",
|
|
27
|
+
"description": "Generate a square PNG from a short visual prompt using an approved host request.",
|
|
28
|
+
"kind": "task",
|
|
29
|
+
"runtime": "capability",
|
|
30
|
+
"entry": "src/capability.json",
|
|
31
|
+
"license": "MIT",
|
|
32
|
+
"inputs": {
|
|
33
|
+
"prompt": {
|
|
34
|
+
"type": "text",
|
|
35
|
+
"primary": true
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"outputs": {
|
|
39
|
+
"image": {
|
|
40
|
+
"type": "image",
|
|
41
|
+
"primary": true
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"permissions": {
|
|
45
|
+
"project": [],
|
|
46
|
+
"capabilities": [
|
|
47
|
+
"image.generate"
|
|
48
|
+
],
|
|
49
|
+
"network": [],
|
|
50
|
+
"filesystem": [],
|
|
51
|
+
"secrets": []
|
|
52
|
+
},
|
|
53
|
+
"ui": [
|
|
54
|
+
{
|
|
55
|
+
"control": "text",
|
|
56
|
+
"port": "prompt"
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
"capability": {
|
|
61
|
+
"schemaVersion": 1,
|
|
62
|
+
"operation": "image.generate",
|
|
63
|
+
"prompt": {
|
|
64
|
+
"$input": "prompt"
|
|
65
|
+
},
|
|
66
|
+
"output": "image"
|
|
67
|
+
},
|
|
68
|
+
"tests": [
|
|
69
|
+
{
|
|
70
|
+
"name": "A simple forest illustration",
|
|
71
|
+
"input": {
|
|
72
|
+
"prompt": "A simple illustration of a quiet forest with clear dark outlines and soft green colors."
|
|
73
|
+
},
|
|
74
|
+
"expectations": {
|
|
75
|
+
"image": {
|
|
76
|
+
"kind": "image",
|
|
77
|
+
"format": "png",
|
|
78
|
+
"width": 1024,
|
|
79
|
+
"height": 1024,
|
|
80
|
+
"minBytes": 67,
|
|
81
|
+
"maxBytes": 12000000
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
]
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Inputs and controls
|
|
90
|
+
|
|
91
|
+
Declare exactly one primary input of type `text`, `script`, or `brief`, optionally
|
|
92
|
+
one `image` or `image[]` input of reference images, and one primary output of
|
|
93
|
+
type `image`. Script and brief values contain `schemaVersion:1`
|
|
94
|
+
and `text`; text ports receive a string. The resolved prompt must contain
|
|
95
|
+
1–32,000 characters and cannot be blank. Existing declared project context read
|
|
96
|
+
scopes can supply that input through the normal host resolver.
|
|
97
|
+
|
|
98
|
+
The descriptor contains `schemaVersion`, `operation`, `prompt` and `output`, and
|
|
99
|
+
optionally:
|
|
100
|
+
|
|
101
|
+
- `settings`: the Block's default `{model, aspectRatio, resolution, quality}`.
|
|
102
|
+
Each value must be one the model accepts; axes a model has no knob for are
|
|
103
|
+
`"default"`.
|
|
104
|
+
- `references`: `{"$input":"refs"}`, binding the declared `image`/`image[]`
|
|
105
|
+
input. Up to 8 saved images; the model must edit from references (the Nano
|
|
106
|
+
Banana family and GPT Image 2).
|
|
107
|
+
- `negativePrompt` (up to 2,000 characters) and `seed` (0–2147483647).
|
|
108
|
+
|
|
109
|
+
Declare exactly `capabilities:["image.generate"]`; network, filesystem and
|
|
110
|
+
secrets permissions stay empty. Payment, credentials and price are never
|
|
111
|
+
descriptor fields.
|
|
112
|
+
|
|
113
|
+
```json
|
|
114
|
+
"capability": {
|
|
115
|
+
"schemaVersion": 1, "operation": "image.generate",
|
|
116
|
+
"prompt": {"$input": "prompt"}, "references": {"$input": "refs"},
|
|
117
|
+
"settings": {"model": "nano-banana-pro", "aspectRatio": "16:9", "resolution": "2K"},
|
|
118
|
+
"negativePrompt": "text, watermark", "output": "image"
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
In StillMade, the run dialog preselects the Block's default model and settings;
|
|
123
|
+
the user can change them before running and sees the exact credit price. Every
|
|
124
|
+
review fixture and the separate sample is included in the displayed total. The
|
|
125
|
+
direct OpenAI option (fixed 1024 × 1024, your own key) takes text prompts only.
|
|
126
|
+
Reference images must be saved in the user's own library; anything else is
|
|
127
|
+
refused before any credit is spent.
|
|
128
|
+
|
|
129
|
+
### Output and tests
|
|
130
|
+
|
|
131
|
+
The output is an exact reference to a retained PNG:
|
|
132
|
+
|
|
133
|
+
```js
|
|
134
|
+
{
|
|
135
|
+
kind: "image", assetId, versionId, url,
|
|
136
|
+
mimeType: "image/png", width, height, bytes
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
The host bounds the provider response, decodes the actual PNG, JPEG or WebP,
|
|
141
|
+
stores one sRGB PNG under an immutable hash and measures its `width`, `height`
|
|
142
|
+
(up to 8192 a side and 40 megapixels) and `bytes` (up to 64 MiB); package code
|
|
143
|
+
cannot assert those measurements on its own. `assetId` identifies the execution's
|
|
144
|
+
image, `versionId` is its saved SHA-256, and `url` is a StillMade media URL.
|
|
145
|
+
|
|
146
|
+
Each fixture requires `expectations` for the declared output: `kind:"image"`,
|
|
147
|
+
`format:"png"`, `minWidth`, `maxWidth`, `minHeight`, `maxHeight`, `minBytes` and
|
|
148
|
+
`maxBytes` (ordered integers within the limits). Older fixtures that name the
|
|
149
|
+
fixed `width:1024, height:1024` square remain valid.
|
|
150
|
+
These checks verify a usable image contract. They cannot prove the picture
|
|
151
|
+
matches the meaning of the prompt; inspect the actual image before acceptance.
|
|
152
|
+
|
|
153
|
+
### Review, preview and project use
|
|
154
|
+
|
|
155
|
+
Upload the package to run schema, dependency, permissions and static checks.
|
|
156
|
+
Offline CLI validation and packaging can pass those checks but report that live
|
|
157
|
+
review is required; offline test/preview cannot call the provider or produce a
|
|
158
|
+
placeholder. In StillMade, review the cost, confirm generation, inspect every
|
|
159
|
+
fixture and sample, finish the review, then **Confirm Import**.
|
|
160
|
+
|
|
161
|
+
A project run has its own current prompt and quote. **Use this image** accepts
|
|
162
|
+
its reviewed output. Compatible image inputs can consume that result through
|
|
163
|
+
the host's existing image resolver; sandboxed pixel processing receives actual
|
|
164
|
+
decoded pixels rather than a guessed URL. Accepted current project results also
|
|
165
|
+
appear in the Editor's visual media inventory. Earlier placed images keep their
|
|
166
|
+
original source when the generating Block runs again.
|
|
167
|
+
|
|
168
|
+
A custom interface can use the existing `StillMade.run` flow. Host image
|
|
169
|
+
previews remain outside the isolated iframe, and guest code cannot supply
|
|
170
|
+
execution receipts or access the provider. No `generateImage`, provider-key or
|
|
171
|
+
arbitrary fetch API is added to the guest interface.
|
|
172
|
+
|
|
173
|
+
### Host integration and recovery
|
|
174
|
+
|
|
175
|
+
`prepareCapabilityInvocation` returns `{operation:"image.generate",prompt}` plus
|
|
176
|
+
`references`, `negativePrompt` and `seed` when declared. A credit selection is
|
|
177
|
+
`{payment:"credits",provider:"stillmade",model,aspectRatio,resolution,quality}`;
|
|
178
|
+
the direct key option stays `{provider:"openai",model:"gpt-image-2",size:"1024x1024",quality,payment}`.
|
|
179
|
+
`capabilityOutputs(package, imageReference)` maps the generated reference to the
|
|
180
|
+
named output. `validateGeneratedImageReference` and
|
|
181
|
+
`defaultCapabilityExpectations` enforce the declared shape and bounds.
|
|
182
|
+
|
|
183
|
+
A trusted executor may return `{outputs, metadata, mediaReceipts}`. The receipt
|
|
184
|
+
map is keyed by the output port; each receipt contains its `schemaVersion` (3 for catalog images), all
|
|
185
|
+
canonical image fields, plus `ownerId`, `runId`, `index`, `storageKey` and
|
|
186
|
+
`sha256`. SDK validation checks shape and equality to the output. The
|
|
187
|
+
authenticated host additionally binds owner/run/index and reads the saved bytes
|
|
188
|
+
again during review acceptance and completed-result recovery. The receipt is
|
|
189
|
+
host evidence, not a credential or a guest-authored permission grant.
|
|
190
|
+
|
|
191
|
+
Execution uses one exact provider request per invocation, without automatic
|
|
192
|
+
provider, payment or model fallback. An uncertain submission is not retried
|
|
193
|
+
automatically. Cancelling stops further work and acceptance; it cannot promise
|
|
194
|
+
that a remote provider stopped or that already-generated output was free.
|
|
195
|
+
Received output that fails storage or contract checks remains a charged request;
|
|
196
|
+
a definite provider rejection follows the existing refund path.
|
|
197
|
+
|
|
198
|
+
Automated checks use local image fixtures and mocked providers. They do not
|
|
199
|
+
claim a successful live provider image test. Each account must complete its
|
|
200
|
+
actual hosted review before importing a generated-image Block.
|
|
201
|
+
|
|
202
|
+
### Connected production runs with hosted Blocks
|
|
203
|
+
|
|
204
|
+
Inside a project, **Run connected steps** passes the actual previous result to
|
|
205
|
+
each next Block. Hosted text, speech and image Blocks use StillMade's existing
|
|
206
|
+
model and payment dialog for each call. Confirm its cost before execution; a
|
|
207
|
+
Block cannot choose approval or payment. Waiting for this choice does not consume
|
|
208
|
+
the local sandbox timeout. Cancelling stops downstream work and preserves already
|
|
209
|
+
completed results. Use **Use completed results** to adopt them into the project.
|
|
210
|
+
|
|
211
|
+
Saved hosted results are rechecked against the signed-in account's server run,
|
|
212
|
+
including the exact project, source, input, selection, quote and retained media.
|
|
213
|
+
This verification does not generate again. Standalone import reviews are not
|
|
214
|
+
production outputs. Unattended hosted automation is not enabled by this control.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Hosted music and sound effects
|
|
2
|
+
|
|
3
|
+
Use `runtime: "capability"` with `operation: "audio.music"` or
|
|
4
|
+
`operation: "audio.sfx"` to create music or a sound effect with the app's own
|
|
5
|
+
generators: ACE-Step music and StillMade sound effects, the same ones the
|
|
6
|
+
Editor uses. The person running the Block pays with StillMade credits at the
|
|
7
|
+
app's prices (music by the minute, one flat price per sound effect). Block code
|
|
8
|
+
never sees keys, endpoints or payment.
|
|
9
|
+
|
|
10
|
+
The manifest declares one `text`, `script` or `brief` input, one `audio`
|
|
11
|
+
output, and `permissions.capabilities: ["audio.music"]` (or `["audio.sfx"]`):
|
|
12
|
+
|
|
13
|
+
```json
|
|
14
|
+
{"schemaVersion":1,"operation":"audio.music","prompt":{"$input":"brief"},"output":"music","settings":{"durationSec":30}}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
`settings.durationSec` is optional and only suggests a length. Music runs 5 to
|
|
18
|
+
240 whole seconds; sound effects run 0.5 to 22 seconds in tenths. The person
|
|
19
|
+
running the Block can change the length in the dialog, and the quote shows the
|
|
20
|
+
price for that length before anything is generated.
|
|
21
|
+
|
|
22
|
+
The output is a measured MP3 or WAV reference:
|
|
23
|
+
|
|
24
|
+
```json
|
|
25
|
+
{"kind":"audio","assetId":"audio:run:0","versionId":"<sha256>","url":"/api/media/owner/capaud3-....mp3","mimeType":"audio/mpeg","duration":30.02,"bytes":481254,"sampleRate":44100,"channels":2}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Fixture expectations use `format` `any`, `mp3` or `wav` with duration and byte
|
|
29
|
+
bounds (up to 1,800 seconds and 128 MiB):
|
|
30
|
+
|
|
31
|
+
```json
|
|
32
|
+
{"music":{"kind":"audio","format":"any","minDuration":1,"maxDuration":241,"minBytes":45,"maxBytes":134217728}}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The offline SDK includes `packages/block-sdk/audio-generation-example.js`,
|
|
36
|
+
exporting `audioMusic` and `audioSfx`. Review, listening and acceptance follow
|
|
37
|
+
the same flow as [hosted speech](hosted-speech.md#review-listen-and-accept): **Review cost**
|
|
38
|
+
never generates, each fixture and the sample is quoted and charged once, and a
|
|
39
|
+
provider refusal before generation is refunded.
|