@hraness/slopcamera 3.2.8 → 3.3.1
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/README.md +29 -9
- package/apps/desktop/application/context.ts +6 -0
- package/apps/desktop/application/default-registry.ts +26 -0
- package/apps/desktop/application/operation.ts +14 -1
- package/apps/desktop/application/operations/index.ts +4 -0
- package/apps/desktop/application/operations/spatial-behavior.ts +151 -0
- package/apps/desktop/application/operations/spatial-direction.ts +222 -0
- package/apps/desktop/application/operations/spatial-rendered-audit.ts +174 -0
- package/apps/desktop/application/operations/spatial-review.ts +194 -0
- package/apps/desktop/application/operations/spatial-scene.ts +25 -1
- package/apps/desktop/application/registry.ts +2 -2
- package/apps/desktop/application/spatial-asset-admission.ts +201 -0
- package/apps/desktop/application/spatial-assets.ts +160 -31
- package/apps/desktop/application/spatial-render.ts +217 -20
- package/apps/desktop/application/spatial-rendered-audit.ts +273 -0
- package/apps/desktop/application/spatial-review.ts +361 -0
- package/apps/desktop/application/spatial-spz.ts +48 -3
- package/apps/desktop/application/spatial-world-import.ts +26 -5
- package/apps/desktop/application/spatial-world-metadata.ts +105 -0
- package/apps/desktop/cli/args.ts +514 -11
- package/apps/desktop/cli/capability-manifest.ts +374 -0
- package/apps/desktop/cli/cinema-renderer.ts +608 -0
- package/apps/desktop/cli/command-host-resources.ts +29 -1
- package/apps/desktop/cli/commands.ts +1188 -4
- package/apps/desktop/cli/gateway-review-provider.ts +334 -0
- package/apps/desktop/cli/help.ts +172 -6
- package/apps/desktop/cli/main.ts +3 -3
- package/apps/desktop/cli/portable-surface.ts +6 -1
- package/apps/desktop/cli/spatial-asset-service.ts +124 -0
- package/apps/desktop/cli/spatial-design-service.ts +237 -0
- package/apps/desktop/cli/spatial-generate-service.ts +370 -0
- package/apps/desktop/cli/spatial-scene-service.ts +268 -4
- package/apps/desktop/cli/workflow-code.ts +1 -1
- package/apps/desktop/code/semantic-builder.ts +24 -0
- package/apps/desktop/contracts/cinema.ts +736 -0
- package/apps/desktop/contracts/index.ts +1 -0
- package/apps/desktop/contracts/spatial-asset.ts +16 -0
- package/apps/desktop/contracts/spatial-world.ts +26 -3
- package/apps/desktop/core/cinema-plan.ts +1320 -0
- package/apps/desktop/core/index.ts +1 -0
- package/apps/desktop/core/storage.ts +75 -0
- package/apps/desktop/dist/cli/main.js +725 -273
- package/apps/desktop/html-overlay/spatial.ts +619 -57
- package/apps/desktop/workflows/cinematic-world.ts +127 -0
- package/apps/desktop/workflows/index.ts +6 -0
- package/dist/cli.js +25 -429
- package/dist/code/advanced.js +1 -269
- package/dist/code/index.js +16 -2239
- package/dist/generate.js +1 -23
- package/dist/host-resources.js +1 -25
- package/dist/index-0bbesn4m.js +35 -0
- package/dist/index-296qhpf2.js +3 -0
- package/dist/index-3cxf2c58.js +3 -0
- package/dist/index-77fjfg9f.js +3 -0
- package/dist/index-80a36bc0.js +3 -0
- package/dist/index-a3vvs3rf.js +3 -0
- package/dist/index-b3geqczn.js +5 -0
- package/dist/index-cgpkyjqa.js +3 -0
- package/dist/index-f0ptv8dm.js +7 -0
- package/dist/index-grk47tgs.js +3 -0
- package/dist/index-qry58nj2.js +10 -0
- package/dist/index.js +1 -226
- package/dist/operations.js +1 -28
- package/dist/skill-install-gx7afxsd.js +2 -0
- package/dist/vectorize/worker.js +1 -141
- package/dist/workflow.js +1 -15
- package/docs/README.md +5 -1
- package/package.json +7 -5
- package/skills/slopcamera/SKILL.md +6 -1
- package/skills/slopcamera/references/directed-scenes.md +22 -2
- package/skills/slopcamera/references/gateway-media.md +15 -1
- package/skills/slopcamera/references/image-galleries.md +166 -0
- package/skills/slopcamera/references/install.md +1 -1
- package/skills/slopcamera/references/parametric-design.md +14 -0
- package/skills/slopcamera/references/scene-building.md +32 -0
- package/skills/slopcamera/references/social-collage-banners.md +204 -0
- package/skills/slopcamera/references/workflows-sdk.md +3 -3
- package/skills/slopcamera/scripts/compose-social-collage-banner.ts +728 -0
- package/src/capability-manifest.ts +361 -0
- package/src/cli.ts +222 -4
- package/src/code/canonical-json.ts +9 -0
- package/src/generate.ts +2 -2
- package/src/icon.ts +1111 -0
- package/src/image-gallery.ts +1049 -0
- package/src/index.ts +11 -0
- package/src/mcp/boundary.ts +11 -11
- package/src/mcp/index.ts +3 -0
- package/src/mcp/server.ts +2 -1
- package/src/mcp/tools.ts +1642 -130
- package/src/mcp/types.ts +19 -0
- package/src/operations.ts +412 -0
- package/src/portable-capability-manifest.ts +67 -0
- package/src/scene-gallery.ts +184 -0
- package/src/spatial-scene/asset-admission.ts +183 -0
- package/src/spatial-scene/audit-rendered.ts +692 -0
- package/src/spatial-scene/audit.ts +617 -0
- package/src/spatial-scene/behavior-audit.ts +252 -0
- package/src/spatial-scene/behavior-bake.ts +233 -0
- package/src/spatial-scene/behavior-fns.ts +585 -0
- package/src/spatial-scene/behavior-gallery.ts +109 -0
- package/src/spatial-scene/behavior-stdlib.ts +323 -0
- package/src/spatial-scene/behavior-trace.ts +325 -0
- package/src/spatial-scene/behavior.ts +618 -0
- package/src/spatial-scene/build.ts +632 -0
- package/src/spatial-scene/camera-rig.ts +125 -0
- package/src/spatial-scene/camera-track.ts +4 -2
- package/src/spatial-scene/character.ts +124 -0
- package/src/spatial-scene/contracts.ts +75 -7
- package/src/spatial-scene/design-templates.ts +351 -0
- package/src/spatial-scene/design.ts +327 -0
- package/src/spatial-scene/direction-compile.ts +584 -0
- package/src/spatial-scene/direction.ts +122 -0
- package/src/spatial-scene/effects.ts +149 -0
- package/src/spatial-scene/evaluate.ts +109 -29
- package/src/spatial-scene/gallery.ts +277 -0
- package/src/spatial-scene/generate.ts +239 -0
- package/src/spatial-scene/geometry-native.ts +165 -0
- package/src/spatial-scene/geometry.ts +1216 -0
- package/src/spatial-scene/gltf.ts +600 -77
- package/src/spatial-scene/identity.ts +55 -2
- package/src/spatial-scene/index.ts +36 -0
- package/src/spatial-scene/inspect.ts +35 -6
- package/src/spatial-scene/material-lighting.ts +609 -0
- package/src/spatial-scene/math.ts +21 -4
- package/src/spatial-scene/motion-evidence.ts +88 -0
- package/src/spatial-scene/parametric.ts +765 -0
- package/src/spatial-scene/particle-preparation.ts +183 -0
- package/src/spatial-scene/particle.ts +195 -0
- package/src/spatial-scene/patch.ts +109 -15
- package/src/spatial-scene/performance.ts +1613 -0
- package/src/spatial-scene/probe.ts +137 -0
- package/src/spatial-scene/recipe-pack.ts +86 -0
- package/src/spatial-scene/render-effects.ts +240 -0
- package/src/spatial-scene/review.ts +639 -0
- package/src/spatial-scene/simulation-bake.ts +206 -0
- package/src/spatial-scene/simulation.ts +187 -0
- package/src/spatial-scene/solve.ts +366 -0
- package/src/spatial-scene/temporal-audit.ts +354 -0
- package/src/version.ts +1 -1
- package/dist/index-42zsesc1.js +0 -2257
- package/dist/index-7131pg1c.js +0 -1820
- package/dist/index-7308egqr.js +0 -48
- package/dist/index-8txs6fkn.js +0 -712
- package/dist/index-fava6pge.js +0 -192
- package/dist/index-h1k0fnjq.js +0 -2363
- package/dist/index-r7gdhmsp.js +0 -424
- package/dist/index-sh6xbav6.js +0 -1219
- package/dist/index-z1w83f81.js +0 -4
- package/dist/index-zfnddgay.js +0 -2029
- package/dist/skill-install-dh0ntqba.js +0 -10
package/dist/index.js
CHANGED
|
@@ -1,227 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import
|
|
3
|
-
SLOPCAMERA_VERSION,
|
|
4
|
-
STUDIO_LIMITS,
|
|
5
|
-
SlopcameraMcpToolRuntime,
|
|
6
|
-
StudioCapabilityNameSchema,
|
|
7
|
-
StudioDigestSchema,
|
|
8
|
-
StudioEngineOptionsSchema,
|
|
9
|
-
StudioEngineSchema,
|
|
10
|
-
StudioExecutionProfileSchema,
|
|
11
|
-
StudioJobSchema,
|
|
12
|
-
StudioOutputArtifactSchema,
|
|
13
|
-
StudioOutputFormatSchema,
|
|
14
|
-
StudioOutputInterpretationSchema,
|
|
15
|
-
StudioOutputRoleSchema,
|
|
16
|
-
StudioOutputSpecSchema,
|
|
17
|
-
StudioPathSchema,
|
|
18
|
-
StudioPlanSchema,
|
|
19
|
-
StudioReceiptSchema,
|
|
20
|
-
StudioRenderSchema,
|
|
21
|
-
StudioRuntimeIdentitySchema,
|
|
22
|
-
StudioSourceBundleSchema,
|
|
23
|
-
StudioSourceSpaceSchema,
|
|
24
|
-
WorkspaceBoundary,
|
|
25
|
-
WorkspaceBoundaryError,
|
|
26
|
-
artifactSummary,
|
|
27
|
-
checkDiagramFile,
|
|
28
|
-
diagramApi,
|
|
29
|
-
inspectStudioBundle,
|
|
30
|
-
inspectStudioPlan,
|
|
31
|
-
mcpMaximumRenderedPixels,
|
|
32
|
-
mcpMaximumScale,
|
|
33
|
-
mcpSourceByteLimit,
|
|
34
|
-
parseStudioJob,
|
|
35
|
-
parseStudioPlan,
|
|
36
|
-
parseStudioReceipt,
|
|
37
|
-
parseStudioRuntimeIdentity,
|
|
38
|
-
parseStudioSourceBundle,
|
|
39
|
-
planStudioJob,
|
|
40
|
-
readDiagramFile,
|
|
41
|
-
renderDiagramFile,
|
|
42
|
-
runMcpServer,
|
|
43
|
-
slopcameraApi,
|
|
44
|
-
slopcameraMcpProtocolVersion,
|
|
45
|
-
slopcameraMcpServerName,
|
|
46
|
-
slopcameraMcpTools,
|
|
47
|
-
studioJobSha256,
|
|
48
|
-
studioOutputPath,
|
|
49
|
-
studioRuntimeSha256,
|
|
50
|
-
studioSourceBundleSha256,
|
|
51
|
-
validateStudioReceipt
|
|
52
|
-
} from "./index-7131pg1c.js";
|
|
53
|
-
import {
|
|
54
|
-
bundledSkillPath,
|
|
55
|
-
installSkill
|
|
56
|
-
} from "./index-7308egqr.js";
|
|
57
|
-
import"./index-8txs6fkn.js";
|
|
58
|
-
import {
|
|
59
|
-
SlopcameraWorkflowError,
|
|
60
|
-
defineSlopcameraWorkflow,
|
|
61
|
-
runSlopcameraWorkflow
|
|
62
|
-
} from "./index-fava6pge.js";
|
|
63
|
-
import {
|
|
64
|
-
DiagramValidationError,
|
|
65
|
-
SlopcameraOperationError,
|
|
66
|
-
StackLayoutError,
|
|
67
|
-
builtInIcons,
|
|
68
|
-
executeSlopcameraOperation,
|
|
69
|
-
executeSlopcameraOperationWithLease,
|
|
70
|
-
isSlopcameraOperationCode,
|
|
71
|
-
lintDiagram,
|
|
72
|
-
parseDiagramSource,
|
|
73
|
-
parseDiagramSpec,
|
|
74
|
-
parseSlopcameraOperationInput,
|
|
75
|
-
renderPng,
|
|
76
|
-
renderSvg,
|
|
77
|
-
resolveDiagramSource,
|
|
78
|
-
resolveEdge,
|
|
79
|
-
resolveStackLayout,
|
|
80
|
-
searchSlopcameraOperations,
|
|
81
|
-
serializeTldr,
|
|
82
|
-
slopcameraOperationCodes,
|
|
83
|
-
slopcameraOperationHostResourceClaims,
|
|
84
|
-
slopcameraOperationRegistry,
|
|
85
|
-
stackLayoutDefaults,
|
|
86
|
-
withSlopcameraOperationHostAdmission
|
|
87
|
-
} from "./index-h1k0fnjq.js";
|
|
88
|
-
import {
|
|
89
|
-
VTRACER_VERSION,
|
|
90
|
-
VectorizeError,
|
|
91
|
-
vectorizeDefaultLimits,
|
|
92
|
-
vectorizeHardLimits,
|
|
93
|
-
vectorizeImage,
|
|
94
|
-
vectorizeProfileNames,
|
|
95
|
-
vtracerReleases
|
|
96
|
-
} from "./index-zfnddgay.js";
|
|
97
|
-
import {
|
|
98
|
-
SlopcameraCloudError,
|
|
99
|
-
createFixedGatewayFetch,
|
|
100
|
-
generateSlopcameraImage,
|
|
101
|
-
generateSlopcameraImageFile,
|
|
102
|
-
slopcameraGatewayApiBaseUrl,
|
|
103
|
-
slopcameraGatewayCredentialStatus,
|
|
104
|
-
slopcameraImageModels,
|
|
105
|
-
slopcameraMaximumPromptBytes,
|
|
106
|
-
slopcameraMaximumRawImageBytes,
|
|
107
|
-
slopcameraResponseMediaTypes
|
|
108
|
-
} from "./index-r7gdhmsp.js";
|
|
109
|
-
import {
|
|
110
|
-
HOST_RESOURCE_MAX_WAIT_MILLISECONDS,
|
|
111
|
-
HostResourceError,
|
|
112
|
-
createDefaultHostResourceCoordinator,
|
|
113
|
-
createHostResourceCoordinator,
|
|
114
|
-
createProcessLocalHostResourceCoordinator,
|
|
115
|
-
defaultSlopcameraHostResourceProfile,
|
|
116
|
-
defaultSlopcameraHostResourceStateRoot,
|
|
117
|
-
normalizeHostResourceClaims,
|
|
118
|
-
normalizeHostResourceProfile,
|
|
119
|
-
slopcameraHostResourceNames
|
|
120
|
-
} from "./index-sh6xbav6.js";
|
|
121
|
-
import"./index-z1w83f81.js";
|
|
122
|
-
export {
|
|
123
|
-
withSlopcameraOperationHostAdmission,
|
|
124
|
-
vtracerReleases,
|
|
125
|
-
vectorizeProfileNames,
|
|
126
|
-
vectorizeImage,
|
|
127
|
-
vectorizeHardLimits,
|
|
128
|
-
vectorizeDefaultLimits,
|
|
129
|
-
validateStudioReceipt,
|
|
130
|
-
studioSourceBundleSha256,
|
|
131
|
-
studioRuntimeSha256,
|
|
132
|
-
studioOutputPath,
|
|
133
|
-
studioJobSha256,
|
|
134
|
-
stackLayoutDefaults,
|
|
135
|
-
slopcameraResponseMediaTypes,
|
|
136
|
-
slopcameraOperationRegistry,
|
|
137
|
-
slopcameraOperationHostResourceClaims,
|
|
138
|
-
slopcameraOperationCodes,
|
|
139
|
-
slopcameraMcpTools,
|
|
140
|
-
slopcameraMcpServerName,
|
|
141
|
-
slopcameraMcpProtocolVersion,
|
|
142
|
-
slopcameraMaximumRawImageBytes,
|
|
143
|
-
slopcameraMaximumPromptBytes,
|
|
144
|
-
slopcameraImageModels,
|
|
145
|
-
slopcameraHostResourceNames,
|
|
146
|
-
slopcameraGatewayCredentialStatus,
|
|
147
|
-
slopcameraGatewayApiBaseUrl,
|
|
148
|
-
slopcameraApi,
|
|
149
|
-
serializeTldr,
|
|
150
|
-
searchSlopcameraOperations,
|
|
151
|
-
runSlopcameraWorkflow,
|
|
152
|
-
runMcpServer,
|
|
153
|
-
resolveStackLayout,
|
|
154
|
-
resolveEdge,
|
|
155
|
-
resolveDiagramSource,
|
|
156
|
-
renderSvg,
|
|
157
|
-
renderPng,
|
|
158
|
-
renderDiagramFile,
|
|
159
|
-
readDiagramFile,
|
|
160
|
-
planStudioJob,
|
|
161
|
-
parseStudioSourceBundle,
|
|
162
|
-
parseStudioRuntimeIdentity,
|
|
163
|
-
parseStudioReceipt,
|
|
164
|
-
parseStudioPlan,
|
|
165
|
-
parseStudioJob,
|
|
166
|
-
parseSlopcameraOperationInput,
|
|
167
|
-
parseDiagramSpec,
|
|
168
|
-
parseDiagramSource,
|
|
169
|
-
normalizeHostResourceProfile,
|
|
170
|
-
normalizeHostResourceClaims,
|
|
171
|
-
mcpSourceByteLimit,
|
|
172
|
-
mcpMaximumScale,
|
|
173
|
-
mcpMaximumRenderedPixels,
|
|
174
|
-
lintDiagram,
|
|
175
|
-
isSlopcameraOperationCode,
|
|
176
|
-
installSkill,
|
|
177
|
-
inspectStudioPlan,
|
|
178
|
-
inspectStudioBundle,
|
|
179
|
-
generateSlopcameraImageFile,
|
|
180
|
-
generateSlopcameraImage,
|
|
181
|
-
executeSlopcameraOperationWithLease,
|
|
182
|
-
executeSlopcameraOperation,
|
|
183
|
-
diagramApi,
|
|
184
|
-
defineSlopcameraWorkflow,
|
|
185
|
-
defaultSlopcameraHostResourceStateRoot,
|
|
186
|
-
defaultSlopcameraHostResourceProfile,
|
|
187
|
-
createProcessLocalHostResourceCoordinator,
|
|
188
|
-
createHostResourceCoordinator,
|
|
189
|
-
createFixedGatewayFetch,
|
|
190
|
-
createDefaultHostResourceCoordinator,
|
|
191
|
-
checkDiagramFile,
|
|
192
|
-
bundledSkillPath,
|
|
193
|
-
builtInIcons,
|
|
194
|
-
artifactSummary,
|
|
195
|
-
WorkspaceBoundaryError,
|
|
196
|
-
WorkspaceBoundary,
|
|
197
|
-
VectorizeError,
|
|
198
|
-
VTRACER_VERSION,
|
|
199
|
-
StudioSourceSpaceSchema,
|
|
200
|
-
StudioSourceBundleSchema,
|
|
201
|
-
StudioRuntimeIdentitySchema,
|
|
202
|
-
StudioRenderSchema,
|
|
203
|
-
StudioReceiptSchema,
|
|
204
|
-
StudioPlanSchema,
|
|
205
|
-
StudioPathSchema,
|
|
206
|
-
StudioOutputSpecSchema,
|
|
207
|
-
StudioOutputRoleSchema,
|
|
208
|
-
StudioOutputInterpretationSchema,
|
|
209
|
-
StudioOutputFormatSchema,
|
|
210
|
-
StudioOutputArtifactSchema,
|
|
211
|
-
StudioJobSchema,
|
|
212
|
-
StudioExecutionProfileSchema,
|
|
213
|
-
StudioEngineSchema,
|
|
214
|
-
StudioEngineOptionsSchema,
|
|
215
|
-
StudioDigestSchema,
|
|
216
|
-
StudioCapabilityNameSchema,
|
|
217
|
-
StackLayoutError,
|
|
218
|
-
SlopcameraWorkflowError,
|
|
219
|
-
SlopcameraOperationError,
|
|
220
|
-
SlopcameraMcpToolRuntime,
|
|
221
|
-
SlopcameraCloudError,
|
|
222
|
-
STUDIO_LIMITS,
|
|
223
|
-
SLOPCAMERA_VERSION,
|
|
224
|
-
HostResourceError,
|
|
225
|
-
HOST_RESOURCE_MAX_WAIT_MILLISECONDS,
|
|
226
|
-
DiagramValidationError
|
|
227
|
-
};
|
|
2
|
+
import{SLOPCAMERA_CAPABILITY_MANIFEST_LIMITS,SLOPCAMERA_PORTABLE_CAPABILITY_VERSION,SLOPCAMERA_VERSION,STUDIO_LIMITS,SlopcameraCapabilityCommandSchema,SlopcameraCapabilityEffectSchema,SlopcameraCapabilityManifestSchema,SlopcameraCapabilityModuleDeclarationSchema,SlopcameraCapabilityModuleSchema,SlopcameraCapabilityOperationSchema,SlopcameraCapabilityPreparationSchema,SlopcameraCapabilityProfileSchema,SlopcameraCapabilityQualificationSchema,SlopcameraCapabilityResourceSchema,SlopcameraCapabilityResumeSchema,SlopcameraCapabilityToolSchema,SlopcameraCapabilityWorkflowSchema,SlopcameraMcpToolRuntime,SlopcameraSceneVariantsSchema,StudioCapabilityNameSchema,StudioDigestSchema,StudioEngineOptionsSchema,StudioEngineSchema,StudioExecutionProfileSchema,StudioJobSchema,StudioOutputArtifactSchema,StudioOutputFormatSchema,StudioOutputInterpretationSchema,StudioOutputRoleSchema,StudioOutputSpecSchema,StudioPathSchema,StudioPlanSchema,StudioReceiptSchema,StudioRenderSchema,StudioRuntimeIdentitySchema,StudioSourceBundleSchema,StudioSourceSpaceSchema,WorkspaceBoundary,WorkspaceBoundaryError,artifactSummary,checkDiagramFile,compileSlopcameraCapabilityManifest,createPortableSlopcameraCapabilityManifest,defineSlopcameraCapabilityModule,diagramApi,inspectStudioBundle,inspectStudioPlan,mcpMaximumRenderedPixels,mcpMaximumScale,mcpSourceByteLimit,parseSlopcameraCapabilityManifest,parseSlopcameraSceneVariants,parseStudioJob,parseStudioPlan,parseStudioReceipt,parseStudioRuntimeIdentity,parseStudioSourceBundle,planSlopcameraSceneGallery,planStudioJob,readDiagramFile,renderDiagramFile,runMcpServer,slopcameraApi,slopcameraMcpProtocolVersion,slopcameraMcpServerName,slopcameraMcpTools,slopcameraPortableCapabilityManifest,slopcameraSceneGalleryLimits,studioJobSha256,studioOutputPath,studioRuntimeSha256,studioSourceBundleSha256,summarizeSceneVariantPatch,validateStudioReceipt}from"./index-f0ptv8dm.js";import{bundledSkillPath,installSkill}from"./index-grk47tgs.js";import"./index-cgpkyjqa.js";import"./index-3cxf2c58.js";import{SlopcameraWorkflowError,defineSlopcameraWorkflow,runSlopcameraWorkflow}from"./index-296qhpf2.js";import{DiagramValidationError,SlopcameraOperationError,StackLayoutError,builtInIcons,composeSlopcameraImageGallery,critiqueIconRaster,executeSlopcameraOperation,executeSlopcameraOperationWithLease,extractIconLineArt,galleryCandidateId,galleryPromptFor,generateSlopcameraIcon,generateSlopcameraImageGallery,iconPromptFor,iconVisualGateProblems,isSlopcameraOperationCode,lintDiagram,parseDiagramSource,parseDiagramSpec,parseSlopcameraGalleryVary,parseSlopcameraOperationInput,planSlopcameraGallery,renderPng,renderSvg,resolveDiagramSource,resolveEdge,resolveStackLayout,searchSlopcameraOperations,serializeTldr,slopcameraGalleryAxes,slopcameraGalleryKinds,slopcameraGalleryLimits,slopcameraIconCritiqueDefaultModel,slopcameraIconCritiqueTimeoutMs,slopcameraIconDefaultInk,slopcameraIconDefaultRounds,slopcameraIconMaximumRounds,slopcameraIconPanel,slopcameraIconSubjectMaximumBytes,slopcameraOperationCodes,slopcameraOperationHostResourceClaims,slopcameraOperationRegistry,stackLayoutDefaults,withSlopcameraOperationHostAdmission}from"./index-0bbesn4m.js";import{VTRACER_VERSION,VectorizeError,vectorizeDefaultLimits,vectorizeHardLimits,vectorizeImage,vectorizeProfileNames,vtracerReleases}from"./index-qry58nj2.js";import{SlopcameraCloudError,createFixedGatewayFetch,generateSlopcameraImage,generateSlopcameraImageFile,resolveSlopcameraGatewayCredential,slopcameraGatewayApiBaseUrl,slopcameraGatewayCredentialStatus,slopcameraImageModels,slopcameraMaximumPromptBytes,slopcameraMaximumRawImageBytes,slopcameraResponseMediaTypes}from"./index-77fjfg9f.js";import{HOST_RESOURCE_MAX_WAIT_MILLISECONDS,HostResourceError,createDefaultHostResourceCoordinator,createHostResourceCoordinator,createProcessLocalHostResourceCoordinator,defaultSlopcameraHostResourceProfile,defaultSlopcameraHostResourceStateRoot,normalizeHostResourceClaims,normalizeHostResourceProfile,slopcameraHostResourceNames}from"./index-b3geqczn.js";import"./index-80a36bc0.js";export{withSlopcameraOperationHostAdmission,vtracerReleases,vectorizeProfileNames,vectorizeImage,vectorizeHardLimits,vectorizeDefaultLimits,validateStudioReceipt,summarizeSceneVariantPatch,studioSourceBundleSha256,studioRuntimeSha256,studioOutputPath,studioJobSha256,stackLayoutDefaults,slopcameraSceneGalleryLimits,slopcameraResponseMediaTypes,slopcameraPortableCapabilityManifest,slopcameraOperationRegistry,slopcameraOperationHostResourceClaims,slopcameraOperationCodes,slopcameraMcpTools,slopcameraMcpServerName,slopcameraMcpProtocolVersion,slopcameraMaximumRawImageBytes,slopcameraMaximumPromptBytes,slopcameraImageModels,slopcameraIconSubjectMaximumBytes,slopcameraIconPanel,slopcameraIconMaximumRounds,slopcameraIconDefaultRounds,slopcameraIconDefaultInk,slopcameraIconCritiqueTimeoutMs,slopcameraIconCritiqueDefaultModel,slopcameraHostResourceNames,slopcameraGatewayCredentialStatus,slopcameraGatewayApiBaseUrl,slopcameraGalleryLimits,slopcameraGalleryKinds,slopcameraGalleryAxes,slopcameraApi,serializeTldr,searchSlopcameraOperations,runSlopcameraWorkflow,runMcpServer,resolveStackLayout,resolveSlopcameraGatewayCredential,resolveEdge,resolveDiagramSource,renderSvg,renderPng,renderDiagramFile,readDiagramFile,planStudioJob,planSlopcameraSceneGallery,planSlopcameraGallery,parseStudioSourceBundle,parseStudioRuntimeIdentity,parseStudioReceipt,parseStudioPlan,parseStudioJob,parseSlopcameraSceneVariants,parseSlopcameraOperationInput,parseSlopcameraGalleryVary,parseSlopcameraCapabilityManifest,parseDiagramSpec,parseDiagramSource,normalizeHostResourceProfile,normalizeHostResourceClaims,mcpSourceByteLimit,mcpMaximumScale,mcpMaximumRenderedPixels,lintDiagram,isSlopcameraOperationCode,installSkill,inspectStudioPlan,inspectStudioBundle,iconVisualGateProblems,iconPromptFor,generateSlopcameraImageGallery,generateSlopcameraImageFile,generateSlopcameraImage,generateSlopcameraIcon,galleryPromptFor,galleryCandidateId,extractIconLineArt,executeSlopcameraOperationWithLease,executeSlopcameraOperation,diagramApi,defineSlopcameraWorkflow,defineSlopcameraCapabilityModule,defaultSlopcameraHostResourceStateRoot,defaultSlopcameraHostResourceProfile,critiqueIconRaster,createProcessLocalHostResourceCoordinator,createPortableSlopcameraCapabilityManifest,createHostResourceCoordinator,createFixedGatewayFetch,createDefaultHostResourceCoordinator,composeSlopcameraImageGallery,compileSlopcameraCapabilityManifest,checkDiagramFile,bundledSkillPath,builtInIcons,artifactSummary,WorkspaceBoundaryError,WorkspaceBoundary,VectorizeError,VTRACER_VERSION,StudioSourceSpaceSchema,StudioSourceBundleSchema,StudioRuntimeIdentitySchema,StudioRenderSchema,StudioReceiptSchema,StudioPlanSchema,StudioPathSchema,StudioOutputSpecSchema,StudioOutputRoleSchema,StudioOutputInterpretationSchema,StudioOutputFormatSchema,StudioOutputArtifactSchema,StudioJobSchema,StudioExecutionProfileSchema,StudioEngineSchema,StudioEngineOptionsSchema,StudioDigestSchema,StudioCapabilityNameSchema,StackLayoutError,SlopcameraWorkflowError,SlopcameraSceneVariantsSchema,SlopcameraOperationError,SlopcameraMcpToolRuntime,SlopcameraCloudError,SlopcameraCapabilityWorkflowSchema,SlopcameraCapabilityToolSchema,SlopcameraCapabilityResumeSchema,SlopcameraCapabilityResourceSchema,SlopcameraCapabilityQualificationSchema,SlopcameraCapabilityProfileSchema,SlopcameraCapabilityPreparationSchema,SlopcameraCapabilityOperationSchema,SlopcameraCapabilityModuleSchema,SlopcameraCapabilityModuleDeclarationSchema,SlopcameraCapabilityManifestSchema,SlopcameraCapabilityEffectSchema,SlopcameraCapabilityCommandSchema,STUDIO_LIMITS,SLOPCAMERA_VERSION,SLOPCAMERA_PORTABLE_CAPABILITY_VERSION,SLOPCAMERA_CAPABILITY_MANIFEST_LIMITS,HostResourceError,HOST_RESOURCE_MAX_WAIT_MILLISECONDS,DiagramValidationError};
|
package/dist/operations.js
CHANGED
|
@@ -1,29 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import
|
|
3
|
-
SlopcameraOperationError,
|
|
4
|
-
executeSlopcameraOperation,
|
|
5
|
-
executeSlopcameraOperationWithLease,
|
|
6
|
-
isSlopcameraOperationCode,
|
|
7
|
-
parseSlopcameraOperationInput,
|
|
8
|
-
searchSlopcameraOperations,
|
|
9
|
-
slopcameraOperationCodes,
|
|
10
|
-
slopcameraOperationHostResourceClaims,
|
|
11
|
-
slopcameraOperationRegistry,
|
|
12
|
-
withSlopcameraOperationHostAdmission
|
|
13
|
-
} from "./index-h1k0fnjq.js";
|
|
14
|
-
import"./index-zfnddgay.js";
|
|
15
|
-
import"./index-r7gdhmsp.js";
|
|
16
|
-
import"./index-sh6xbav6.js";
|
|
17
|
-
import"./index-z1w83f81.js";
|
|
18
|
-
export {
|
|
19
|
-
withSlopcameraOperationHostAdmission,
|
|
20
|
-
slopcameraOperationRegistry,
|
|
21
|
-
slopcameraOperationHostResourceClaims,
|
|
22
|
-
slopcameraOperationCodes,
|
|
23
|
-
searchSlopcameraOperations,
|
|
24
|
-
parseSlopcameraOperationInput,
|
|
25
|
-
isSlopcameraOperationCode,
|
|
26
|
-
executeSlopcameraOperationWithLease,
|
|
27
|
-
executeSlopcameraOperation,
|
|
28
|
-
SlopcameraOperationError
|
|
29
|
-
};
|
|
2
|
+
import{SlopcameraOperationError,executeSlopcameraOperation,executeSlopcameraOperationWithLease,isSlopcameraOperationCode,parseSlopcameraOperationInput,searchSlopcameraOperations,slopcameraOperationCodes,slopcameraOperationHostResourceClaims,slopcameraOperationRegistry,withSlopcameraOperationHostAdmission}from"./index-0bbesn4m.js";import"./index-qry58nj2.js";import"./index-77fjfg9f.js";import"./index-b3geqczn.js";import"./index-80a36bc0.js";export{withSlopcameraOperationHostAdmission,slopcameraOperationRegistry,slopcameraOperationHostResourceClaims,slopcameraOperationCodes,searchSlopcameraOperations,parseSlopcameraOperationInput,isSlopcameraOperationCode,executeSlopcameraOperationWithLease,executeSlopcameraOperation,SlopcameraOperationError};
|
package/dist/vectorize/worker.js
CHANGED
|
@@ -1,142 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import {
|
|
3
|
-
MAX_VECTORIZE_REQUEST_BYTES,
|
|
4
|
-
MAX_VECTORIZE_RESPONSE_BYTES,
|
|
5
|
-
VECTORIZE_WORKER_PROTOCOL,
|
|
6
|
-
VectorizeError,
|
|
7
|
-
configureVectorizeSharpConcurrency,
|
|
8
|
-
forwardVectorizeWorkerTermination,
|
|
9
|
-
vectorizeImageInProcess,
|
|
10
|
-
withInheritedCommandFileDescriptors
|
|
11
|
-
} from "../index-zfnddgay.js";
|
|
12
|
-
import"../index-z1w83f81.js";
|
|
13
|
-
|
|
14
|
-
// src/vectorize/worker.ts
|
|
15
|
-
import { lstat, realpath } from "fs/promises";
|
|
16
|
-
import { tmpdir } from "os";
|
|
17
|
-
import { basename, dirname } from "path";
|
|
18
|
-
var errorCodes = new Set([
|
|
19
|
-
"input_limit",
|
|
20
|
-
"invalid_input",
|
|
21
|
-
"output_limit",
|
|
22
|
-
"quality_limit",
|
|
23
|
-
"timeout",
|
|
24
|
-
"tool_download",
|
|
25
|
-
"tool_integrity",
|
|
26
|
-
"tool_platform",
|
|
27
|
-
"tool_version",
|
|
28
|
-
"trace_failed",
|
|
29
|
-
"unsafe_svg"
|
|
30
|
-
]);
|
|
31
|
-
forwardVectorizeWorkerTermination();
|
|
32
|
-
await main();
|
|
33
|
-
async function main() {
|
|
34
|
-
let response;
|
|
35
|
-
try {
|
|
36
|
-
configureVectorizeSharpConcurrency();
|
|
37
|
-
const requestText = await readBoundedInput();
|
|
38
|
-
const request = parseRequest(requestText);
|
|
39
|
-
const input = decodeInput(request.input);
|
|
40
|
-
const temporaryRoot = await validateTemporaryRoot(request.temporaryRoot);
|
|
41
|
-
const result = await withInheritedCommandFileDescriptors(request.options.inheritedFileDescriptors, async () => await vectorizeImageInProcess(input, request.options, temporaryRoot));
|
|
42
|
-
response = {
|
|
43
|
-
ok: true,
|
|
44
|
-
protocol: VECTORIZE_WORKER_PROTOCOL,
|
|
45
|
-
result
|
|
46
|
-
};
|
|
47
|
-
} catch (error) {
|
|
48
|
-
response = {
|
|
49
|
-
error: serializeError(error),
|
|
50
|
-
ok: false,
|
|
51
|
-
protocol: VECTORIZE_WORKER_PROTOCOL
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
let encoded = JSON.stringify(response);
|
|
55
|
-
if (Buffer.byteLength(encoded) > MAX_VECTORIZE_RESPONSE_BYTES) {
|
|
56
|
-
encoded = JSON.stringify({
|
|
57
|
-
error: {
|
|
58
|
-
code: "output_limit",
|
|
59
|
-
details: { maximumBytes: MAX_VECTORIZE_RESPONSE_BYTES },
|
|
60
|
-
message: "The vectorization worker response exceeds its IPC limit."
|
|
61
|
-
},
|
|
62
|
-
ok: false,
|
|
63
|
-
protocol: VECTORIZE_WORKER_PROTOCOL
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
await Bun.write(Bun.stdout, encoded);
|
|
67
|
-
}
|
|
68
|
-
async function readBoundedInput() {
|
|
69
|
-
const reader = Bun.stdin.stream().getReader();
|
|
70
|
-
const chunks = [];
|
|
71
|
-
let bytes = 0;
|
|
72
|
-
try {
|
|
73
|
-
while (true) {
|
|
74
|
-
const { done, value } = await reader.read();
|
|
75
|
-
if (done)
|
|
76
|
-
break;
|
|
77
|
-
bytes += value.byteLength;
|
|
78
|
-
if (bytes > MAX_VECTORIZE_REQUEST_BYTES) {
|
|
79
|
-
await reader.cancel();
|
|
80
|
-
throw new VectorizeError("input_limit", "The vectorization worker request exceeds its IPC limit.", { bytes, maximumBytes: MAX_VECTORIZE_REQUEST_BYTES });
|
|
81
|
-
}
|
|
82
|
-
chunks.push(value);
|
|
83
|
-
}
|
|
84
|
-
} finally {
|
|
85
|
-
reader.releaseLock();
|
|
86
|
-
}
|
|
87
|
-
return Buffer.concat(chunks, bytes).toString("utf8");
|
|
88
|
-
}
|
|
89
|
-
function parseRequest(text) {
|
|
90
|
-
let parsed;
|
|
91
|
-
try {
|
|
92
|
-
parsed = JSON.parse(text);
|
|
93
|
-
} catch (error) {
|
|
94
|
-
throw new VectorizeError("invalid_input", "The vectorization worker request is malformed.", {}, { cause: error });
|
|
95
|
-
}
|
|
96
|
-
if (!isRecord(parsed) || parsed.protocol !== VECTORIZE_WORKER_PROTOCOL || !isRecord(parsed.input) || !isRecord(parsed.options) || typeof parsed.temporaryRoot !== "string" || parsed.temporaryRoot.length === 0 || typeof parsed.input.kind !== "string" || typeof parsed.input.value !== "string" || !["bytes", "path"].includes(parsed.input.kind)) {
|
|
97
|
-
throw new VectorizeError("invalid_input", "The vectorization worker request is invalid.");
|
|
98
|
-
}
|
|
99
|
-
return parsed;
|
|
100
|
-
}
|
|
101
|
-
function decodeInput(input) {
|
|
102
|
-
if (input.kind === "path")
|
|
103
|
-
return input.value;
|
|
104
|
-
if (input.value.length > Math.ceil(MAX_VECTORIZE_REQUEST_BYTES / 3) * 4 || input.value.length % 4 !== 0) {
|
|
105
|
-
throw new VectorizeError("input_limit", "Encoded raster input exceeds its IPC limit.");
|
|
106
|
-
}
|
|
107
|
-
const bytes = Buffer.from(input.value, "base64");
|
|
108
|
-
if (bytes.toString("base64") !== input.value) {
|
|
109
|
-
throw new VectorizeError("invalid_input", "Encoded raster input is not canonical base64.");
|
|
110
|
-
}
|
|
111
|
-
return bytes;
|
|
112
|
-
}
|
|
113
|
-
async function validateTemporaryRoot(path) {
|
|
114
|
-
let realRoot;
|
|
115
|
-
let realTemporaryDirectory;
|
|
116
|
-
try {
|
|
117
|
-
const resolved = await Promise.all([
|
|
118
|
-
realpath(path),
|
|
119
|
-
realpath(tmpdir())
|
|
120
|
-
]);
|
|
121
|
-
realRoot = resolved[0];
|
|
122
|
-
realTemporaryDirectory = resolved[1];
|
|
123
|
-
const metadata = await lstat(path);
|
|
124
|
-
if (!metadata.isDirectory() || metadata.isSymbolicLink() || dirname(realRoot) !== realTemporaryDirectory || !/^slopcamera-vectorize-[A-Za-z0-9_-]{6,}$/u.test(basename(realRoot))) {
|
|
125
|
-
throw new VectorizeError("invalid_input", "The supervisor temporary directory is invalid.");
|
|
126
|
-
}
|
|
127
|
-
} catch (error) {
|
|
128
|
-
if (error instanceof VectorizeError)
|
|
129
|
-
throw error;
|
|
130
|
-
throw new VectorizeError("invalid_input", "The supervisor temporary directory could not be verified.", {}, { cause: error });
|
|
131
|
-
}
|
|
132
|
-
return realRoot;
|
|
133
|
-
}
|
|
134
|
-
function serializeError(error) {
|
|
135
|
-
const code = error instanceof VectorizeError && errorCodes.has(error.code) ? error.code : "trace_failed";
|
|
136
|
-
const message = error instanceof Error ? error.message : "The vectorization worker failed.";
|
|
137
|
-
const details = error instanceof VectorizeError && Buffer.byteLength(JSON.stringify(error.details)) <= 64 * 1024 ? error.details : {};
|
|
138
|
-
return { code, details, message };
|
|
139
|
-
}
|
|
140
|
-
function isRecord(value) {
|
|
141
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
142
|
-
}
|
|
2
|
+
import{MAX_VECTORIZE_REQUEST_BYTES,MAX_VECTORIZE_RESPONSE_BYTES,VECTORIZE_WORKER_PROTOCOL,VectorizeError,configureVectorizeSharpConcurrency,forwardVectorizeWorkerTermination,vectorizeImageInProcess,withInheritedCommandFileDescriptors}from"../index-qry58nj2.js";import"../index-80a36bc0.js";import{lstat,realpath}from"fs/promises";import{tmpdir}from"os";import{basename,dirname}from"path";var errorCodes=new Set(["input_limit","invalid_input","output_limit","quality_limit","timeout","tool_download","tool_integrity","tool_platform","tool_version","trace_failed","unsafe_svg"]);forwardVectorizeWorkerTermination();await main();async function main(){let response;try{configureVectorizeSharpConcurrency();const requestText=await readBoundedInput();const request=parseRequest(requestText);const input=decodeInput(request.input);const temporaryRoot=await validateTemporaryRoot(request.temporaryRoot);const result=await withInheritedCommandFileDescriptors(request.options.inheritedFileDescriptors,async()=>await vectorizeImageInProcess(input,request.options,temporaryRoot));response={ok:true,protocol:VECTORIZE_WORKER_PROTOCOL,result}}catch(error){response={error:serializeError(error),ok:false,protocol:VECTORIZE_WORKER_PROTOCOL}}let encoded=JSON.stringify(response);if(Buffer.byteLength(encoded)>MAX_VECTORIZE_RESPONSE_BYTES){encoded=JSON.stringify({error:{code:"output_limit",details:{maximumBytes:MAX_VECTORIZE_RESPONSE_BYTES},message:"The vectorization worker response exceeds its IPC limit."},ok:false,protocol:VECTORIZE_WORKER_PROTOCOL})}await Bun.write(Bun.stdout,encoded)}async function readBoundedInput(){const reader=Bun.stdin.stream().getReader();const chunks=[];let bytes=0;try{while(true){const{done,value}=await reader.read();if(done)break;bytes+=value.byteLength;if(bytes>MAX_VECTORIZE_REQUEST_BYTES){await reader.cancel();throw new VectorizeError("input_limit","The vectorization worker request exceeds its IPC limit.",{bytes,maximumBytes:MAX_VECTORIZE_REQUEST_BYTES})}chunks.push(value)}}finally{reader.releaseLock()}return Buffer.concat(chunks,bytes).toString("utf8")}function parseRequest(text){let parsed;try{parsed=JSON.parse(text)}catch(error){throw new VectorizeError("invalid_input","The vectorization worker request is malformed.",{},{cause:error})}if(!isRecord(parsed)||parsed.protocol!==VECTORIZE_WORKER_PROTOCOL||!isRecord(parsed.input)||!isRecord(parsed.options)||typeof parsed.temporaryRoot!=="string"||parsed.temporaryRoot.length===0||typeof parsed.input.kind!=="string"||typeof parsed.input.value!=="string"||!["bytes","path"].includes(parsed.input.kind)){throw new VectorizeError("invalid_input","The vectorization worker request is invalid.")}return parsed}function decodeInput(input){if(input.kind==="path")return input.value;if(input.value.length>Math.ceil(MAX_VECTORIZE_REQUEST_BYTES/3)*4||input.value.length%4!==0){throw new VectorizeError("input_limit","Encoded raster input exceeds its IPC limit.")}const bytes=Buffer.from(input.value,"base64");if(bytes.toString("base64")!==input.value){throw new VectorizeError("invalid_input","Encoded raster input is not canonical base64.")}return bytes}async function validateTemporaryRoot(path){let realRoot;let realTemporaryDirectory;try{const resolved=await Promise.all([realpath(path),realpath(tmpdir())]);realRoot=resolved[0];realTemporaryDirectory=resolved[1];const metadata=await lstat(path);if(!metadata.isDirectory()||metadata.isSymbolicLink()||dirname(realRoot)!==realTemporaryDirectory||!/^slopcamera-vectorize-[A-Za-z0-9_-]{6,}$/u.test(basename(realRoot))){throw new VectorizeError("invalid_input","The supervisor temporary directory is invalid.")}}catch(error){if(error instanceof VectorizeError)throw error;throw new VectorizeError("invalid_input","The supervisor temporary directory could not be verified.",{},{cause:error})}return realRoot}function serializeError(error){const code=error instanceof VectorizeError&&errorCodes.has(error.code)?error.code:"trace_failed";const message=error instanceof Error?error.message:"The vectorization worker failed.";const details=error instanceof VectorizeError&&Buffer.byteLength(JSON.stringify(error.details))<=64*1024?error.details:{};return{code,details,message}}function isRecord(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)}
|
package/dist/workflow.js
CHANGED
|
@@ -1,16 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import
|
|
3
|
-
SlopcameraWorkflowError,
|
|
4
|
-
defineSlopcameraWorkflow,
|
|
5
|
-
runSlopcameraWorkflow
|
|
6
|
-
} from "./index-fava6pge.js";
|
|
7
|
-
import"./index-h1k0fnjq.js";
|
|
8
|
-
import"./index-zfnddgay.js";
|
|
9
|
-
import"./index-r7gdhmsp.js";
|
|
10
|
-
import"./index-sh6xbav6.js";
|
|
11
|
-
import"./index-z1w83f81.js";
|
|
12
|
-
export {
|
|
13
|
-
runSlopcameraWorkflow,
|
|
14
|
-
defineSlopcameraWorkflow,
|
|
15
|
-
SlopcameraWorkflowError
|
|
16
|
-
};
|
|
2
|
+
import{SlopcameraWorkflowError,defineSlopcameraWorkflow,runSlopcameraWorkflow}from"./index-296qhpf2.js";import"./index-0bbesn4m.js";import"./index-qry58nj2.js";import"./index-77fjfg9f.js";import"./index-b3geqczn.js";import"./index-80a36bc0.js";export{runSlopcameraWorkflow,defineSlopcameraWorkflow,SlopcameraWorkflowError};
|
package/docs/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Slopcamera retains editable source, renders local or generated media, and assembles it into inspectable video projects. Choose a guide for the work you want to do.
|
|
4
4
|
|
|
5
|
-
These pages describe Slopcamera from current source. [Install that source](how-to/use-current-source.md) to use the CLI, SDK and matching Agent Skill
|
|
5
|
+
These pages describe Slopcamera from current source. [Install that source](how-to/use-current-source.md) to use the newest CLI, SDK and matching Agent Skill. The [installation guide](../README.md#install-slopcamera) also links the currently verified release archive. Historical Atet archives retain their original package and commands. The CLI also has an optional unbundled macOS menu-bar companion; the [menu-bar release contract](menubar-release.md) covers its prebuilt binary and LaunchAgent. The [capability reference](reference/capabilities.md) distinguishes them and lists local runtime requirements.
|
|
6
6
|
|
|
7
7
|
## Learn by making something
|
|
8
8
|
|
|
@@ -18,7 +18,10 @@ These pages describe Slopcamera from current source. [Install that source](how-t
|
|
|
18
18
|
- [Generate images, video, or narration](how-to/generate-media.md): discover Gateway capabilities, acknowledge selected uploads, and retain the result.
|
|
19
19
|
- [Direct short generated clips](directing-video.md): budget, review takes, preserve endpoint continuity, and recover uncertain work.
|
|
20
20
|
- [Author a native film](studio.md): use Blender, CadQuery, or Manim; retain caches; share assets and calibrated cameras.
|
|
21
|
+
- [Build and revise a parametric design](how-to/parametric-design.md): generate architectural models from retained parameters, inspect dependencies and render alternatives.
|
|
21
22
|
- [Render and edit spatial scenes](spatial-scenes.md): patch named entities, use hardware rendering, import a saved world, or prepare a V2 shot composition.
|
|
23
|
+
- [Build a directed cinematic character world](how-to/cinematic-character-worlds.md): admit a rigged world, direct it semantically, plan effects and galleries, and audit temporal evidence.
|
|
24
|
+
- [Direct a cinematic world end to end](how-to/direct-cinematic-worlds.md): author an inert recipe pack and run the `cinematic-world` planning-and-review workflow.
|
|
22
25
|
- [Make an educational video](how-to/educational-video.md): keep mathematical visuals, narration, and timing evidence revisable.
|
|
23
26
|
- [Run or recover a workflow](how-to/run-workflows.md): use a built-in recipe or trusted Bun module and inspect its durable run.
|
|
24
27
|
- [Configure Vercel](vercel.md) or [publish Slopcamera](publishing.md): provider and maintainer procedures.
|
|
@@ -32,6 +35,7 @@ These pages describe Slopcamera from current source. [Install that source](how-t
|
|
|
32
35
|
## Understand the design
|
|
33
36
|
|
|
34
37
|
- [Source, representations, and projects](architecture.md): what stays editable, what a receipt proves, and how local and cloud work fit together.
|
|
38
|
+
- [Extension architecture](extension-architecture.md): the closed registry, inert recipe packs, trusted workflows, and where authored code can and cannot go.
|
|
35
39
|
- [Choose an HTML authoring surface](html-overlay-creative-toolkit.md): why DOM, vector, Three.js, and explicit GPU profiles serve different jobs. Its ecosystem research is dated separately from its supported locks.
|
|
36
40
|
|
|
37
41
|
## Work with an agent
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hraness/slopcamera",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.1",
|
|
4
4
|
"description": "A local visual studio for coding agents: author scenes, combine generated and recorded media, and export images, diagrams, animation, and video from retained sources.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -197,7 +197,7 @@
|
|
|
197
197
|
],
|
|
198
198
|
"scripts": {
|
|
199
199
|
"build": "bun run build:sdk && bun run build:desktop && bun run build:web",
|
|
200
|
-
"build:sdk": "bun -e 'await (await import(\"node:fs/promises\")).rm(\"./dist\", { recursive: true, force: true })' && bun build ./src/index.ts ./src/cli.ts ./src/code/index.ts ./src/code/advanced.ts ./src/generate.ts ./src/host-resources.ts ./src/operations.ts ./src/workflow.ts ./src/vectorize/worker.ts --outdir ./dist --root ./src --target bun --format esm --splitting --packages external",
|
|
200
|
+
"build:sdk": "bun -e 'await (await import(\"node:fs/promises\")).rm(\"./dist\", { recursive: true, force: true })' && bun build ./src/index.ts ./src/cli.ts ./src/code/index.ts ./src/code/advanced.ts ./src/generate.ts ./src/host-resources.ts ./src/operations.ts ./src/workflow.ts ./src/vectorize/worker.ts --outdir ./dist --root ./src --target bun --format esm --splitting --packages external --minify-whitespace --emit-dce-annotations",
|
|
201
201
|
"build:desktop": "bun run build:desktop:cli",
|
|
202
202
|
"build:desktop:cli": "bun -e 'await (await import(\"node:fs/promises\")).rm(\"./apps/desktop/dist/cli\", { recursive: true, force: true })' && bun build --target=bun --minify --sourcemap=none --packages external --external @hraness/slopcamera/cli apps/desktop/cli/main.ts --outdir apps/desktop/dist/cli",
|
|
203
203
|
"build:web": "bun run --cwd apps/web build",
|
|
@@ -226,7 +226,7 @@
|
|
|
226
226
|
"benchmark:code-concurrency": "bun run ./apps/desktop/code/concurrency-benchmark.ts",
|
|
227
227
|
"check:release-workflows": "bun test ./scripts/release-workflow.test.ts ./scripts/github-release.test.ts",
|
|
228
228
|
"check:schema": "bun run ./scripts/validate-schema.ts",
|
|
229
|
-
"check:skill": "bun run ./scripts/validate-skill.ts",
|
|
229
|
+
"check:skill": "bun run ./scripts/validate-skill.ts && bun test ./scripts/social-collage-compositor.test.ts",
|
|
230
230
|
"check:standalone": "bun test ./scripts/standalone-support-fixture.test.ts && bun run ./scripts/check-standalone.ts",
|
|
231
231
|
"test:vectorize:official": "bun run ./scripts/official-vectorizer-smoke.ts",
|
|
232
232
|
"test:package": "bun run ./scripts/package-smoke.ts",
|
|
@@ -237,13 +237,15 @@
|
|
|
237
237
|
"kb:check:lane": "bunx --bun github:hraness/kb#v0.15.2 check --root kb --no-catalog",
|
|
238
238
|
"kb:check": "bunx --bun github:hraness/kb#v0.15.2 check --root kb && bunx --bun github:hraness/kb#v0.15.2 agents check --root kb --repo .",
|
|
239
239
|
"kb:catalog": "bunx --bun github:hraness/kb#v0.15.2 catalog --root kb",
|
|
240
|
-
"check": "bun
|
|
240
|
+
"check:cost-surfaces": "bun ./scripts/check-cost-surfaces.mjs",
|
|
241
|
+
"check": "bun run check:cost-surfaces && bun run check:standalone && bun run check:sdk && bun run check:desktop && bun run check:web && bun run check:standalone && bun run test:package",
|
|
241
242
|
"prepack": "bun run check",
|
|
242
243
|
"check:effect": "bun run ./scripts/check-effect-policy.ts && bun test ./scripts/check-effect-architecture.test.ts"
|
|
243
244
|
},
|
|
244
245
|
"dependencies": {
|
|
245
|
-
"@hraness/support-foundation": "github:hraness/support-foundation#b32c1c81bb2444f50509ed54388758ecfab1f1c0",
|
|
246
246
|
"@ai-sdk/gateway-v4": "npm:@ai-sdk/gateway@^4.0.27",
|
|
247
|
+
"@hraness/algal": "github:hraness/algal#c46264a",
|
|
248
|
+
"@hraness/support-foundation": "github:hraness/support-foundation#b32c1c81bb2444f50509ed54388758ecfab1f1c0",
|
|
247
249
|
"@noble/hashes": "2.2.0",
|
|
248
250
|
"@paper-design/shaders": "0.0.77",
|
|
249
251
|
"@resvg/resvg-js": "2.6.2",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: slopcamera
|
|
3
|
-
description: Create, inspect, edit and render visual media with the Slopcamera CLI and SDK. Use for diagrams, raster-to-SVG conversion, screen or camera recordings, video editing and captions, music videos from authored scenes and local tracks, AI images/video/speech/transcription, Three.js scenes and world-space media, Blender rigs and simulation, CadQuery models, Manim educational films, HTML/WGSL motion graphics, and durable agent workflows.
|
|
3
|
+
description: Create, inspect, edit and render visual media with the Slopcamera CLI and SDK. Use for diagrams, raster-to-SVG conversion, screen or camera recordings, video editing and captions, social collage banners, music videos from authored scenes and local tracks, AI images/video/speech/transcription, Three.js scenes and world-space media, Blender rigs and simulation, CadQuery models, parametric architectural designs, Manim educational films, HTML/WGSL motion graphics, and durable agent workflows.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Create visual media with Slopcamera
|
|
@@ -24,8 +24,13 @@ Slopcamera installs from its verified release archive or from source. Historical
|
|
|
24
24
|
| Music video, dancing mascot or timed HTML scene with a local soundtrack | [Music videos](references/music-video.md) |
|
|
25
25
|
| Authorized YouTube or other public web-media excerpt (`yt-dlp` / `youtube-dl`) | [Web-media excerpts](references/web-media-excerpts.md) |
|
|
26
26
|
| Generate images, clips, narration or transcripts | [Gateway media](references/gateway-media.md) |
|
|
27
|
+
| Compose an editorial or social banner from generated layers, local type and diagrams | [Social collage banners](references/social-collage-banners.md) |
|
|
28
|
+
| Review alternative textures, skyboxes, backdrops, design candidates or whole-scene variants | [Image galleries](references/image-galleries.md) |
|
|
27
29
|
| Budgeted short clips, reviewed takes and continuity | [Directing video](references/directing-video.md) |
|
|
28
30
|
| Editable Three/Spark scene, saved world, named-part edits or shared camera | [Directed scenes](references/directed-scenes.md) |
|
|
31
|
+
| Semantic direction, galleries, bounded effects, temporal audit or the cinematic-world recipe pack | [Directed scenes](references/directed-scenes.md#direct-cinematic-worlds) |
|
|
32
|
+
| Author a scene from code, generate procedural entities, or audit framing | [Scene building](references/scene-building.md) |
|
|
33
|
+
| Parametric architecture, furniture, dimensions, repeated structures or editable design variants | [Parametric design](references/parametric-design.md) |
|
|
29
34
|
| Blender, rigs, bakes, CAD, shared native assets or production frames | [Native studio](references/native-studio.md) |
|
|
30
35
|
| Manim lesson, narrated explanation or mathematical animation | [Educational video](references/educational-video.md) |
|
|
31
36
|
| Typed Bun SDK, built-in workflow, durable resume or MCP | [Workflows and SDK](references/workflows-sdk.md) |
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Use `slopcamera scene --help` to check that the installed CLI includes the directed-scene foundation. The initial renderer uses Three.js and supports explicit scene JSON, semantic edits, calibrated cameras, native media surfaces, contact sheets, and transparent video.
|
|
4
4
|
|
|
5
|
-
Start with `slopcamera scene init scene.json --json`, then `slopcamera scene inspect scene.json --json`. Retain the original source. Use its stable entity IDs and exact `sceneSha256` in typed patches; save each edit with `--output` to a new file. Inspect `editableControls` before changing generated parts or imported materials. Do not replace named scene parts with opaque regenerated source merely to change one color or camera.
|
|
5
|
+
To author a scene from code — builder helpers, procedural generator modules, glTF admission, or geometric audit — read [scene building](scene-building.md) first. Start interactive work with `slopcamera scene init scene.json --json`, then `slopcamera scene inspect scene.json --json`. Retain the original source. Use its stable entity IDs and exact `sceneSha256` in typed patches; save each edit with `--output` to a new file. Inspect `editableControls` before changing generated parts or imported materials. Do not replace named scene parts with opaque regenerated source merely to change one color or camera.
|
|
6
6
|
|
|
7
7
|
Use `slopcamera scene plan scene.json --request request.json --json` before rendering. A frame request is:
|
|
8
8
|
|
|
@@ -22,15 +22,35 @@ For a media project, finish ordinary timeline/audio edits before V2 migration. R
|
|
|
22
22
|
|
|
23
23
|
Use `scene project restore` to select an earlier retained scene for explicit shots in a new project revision. Use `add-asset`/`replace-asset` and `set-mesh-geometry` for authored representation changes. Preserve the entity ID and explicitly readdress GLB node/clip indices after a payload replacement; inspect available controls again afterward.
|
|
24
24
|
|
|
25
|
+
Generated raster assets enter the scene the same way: declare the image as an `add-asset` payload with `provenance.source: "generated"`, then apply it explicitly — `set-material` with `material.map` on an authored procedural mesh for a texture, or `add-entity` a `kind: "environment"` entity (`role` plus bounded `intensity`) for a skybox. When alternatives matter, review them through [an image gallery](image-galleries.md) first and promote only the selected candidate; a frame renders at most one visible environment entity.
|
|
26
|
+
|
|
25
27
|
Prepare a camera program with `slopcamera scene project prepare-render <project-id> --input prepare.json --output prepared-render.json --json`. The input declares the exact basis, calibrated output profile, straight-alpha full-frame scene policy, and delivery output/sync policy/tier. Then run `slopcamera workflows plan directed-scene --input prepared-render.json --json` and `slopcamera workflows run directed-scene --input prepared-render.json --json`. Use `slopcamera workflows show directed-scene --json` for the complete prepared-input schema.
|
|
26
28
|
|
|
27
29
|
Use `--profile three-webgl2-hardware-v1` on scene rendering or project preparation to require the qualified macOS Metal backend. Missing or software GPU evidence rejects; no silent fallback occurs. A profile already in the request must agree with the CLI. Omit both fields for the historical software renderer. GPU identity and retained artifact hashes serve different purposes: cross-driver regeneration need not be pixel-identical.
|
|
28
30
|
|
|
29
|
-
Import saved SPZ and an optional approximate collider with `scene world import --input import.json --source-root <directory> --output-root artifacts/slopcamera/generated/<name> --json`. Declare exact payload hashes, stable IDs, scale, source up axis and uniform transform. Historical World Labs provenance remains supported for offline replay and requires the matching world ID, approximate collider and retained provider receipt. Import needs no provider credential; paid world-generation commands were removed from current source (they remain in the historical Atet v3.2.3 release). Keep all returned assets and the splat entity, and save the consuming scene JSON inside that import output directory so its asset paths resolve relative to the scene file. Metadata dependencies preserve provenance through source-gone replay. Do not invent scale or relabel a collider as verified physics. Use `three-spark-webgl2-hardware-v1` for non-AA SPZ v2/v3, perspective cameras and at most 500,000 splats across the rendered world. This profile renders beauty only; splat depth/ID products and interleaved transparent world surfaces are unsupported. Materials and internal objects inside a splat are not ordinary editable mesh parts.
|
|
31
|
+
Import saved SPZ and an optional approximate collider with `scene world import --input import.json --source-root <directory> --output-root artifacts/slopcamera/generated/<name> --json`. Declare exact payload hashes, stable IDs, scale, source up axis and uniform transform. An optional `providerMetadata` payload reference (for example a Marble `semantics_metadata` JSON export) surfaces recognized scale/ground/up-axis fields as an advisory `suggestedNormalization` in the output manifest; normalization still comes only from the explicit input fields. Historical World Labs provenance remains supported for offline replay and requires the matching world ID, approximate collider and retained provider receipt. Import needs no provider credential; paid world-generation commands were removed from current source (they remain in the historical Atet v3.2.3 release). Keep all returned assets and the splat entity, and save the consuming scene JSON inside that import output directory so its asset paths resolve relative to the scene file. Metadata dependencies preserve provenance through source-gone replay. Do not invent scale or relabel a collider as verified physics. Use `three-spark-webgl2-hardware-v1` for non-AA SPZ v2/v3, perspective cameras and at most 500,000 splats across the rendered world. This profile renders beauty only; splat depth/ID products and interleaved transparent world surfaces are unsupported. Materials and internal objects inside a splat are not ordinary editable mesh parts.
|
|
30
32
|
|
|
31
33
|
Keep receipts and the original run ID after interruption. Inspect `slopcamera runs` and reconcile the exact attempt instead of blindly repeating a possibly published operation. Candidate records preserve derivation and staleness; candidate selection does not yet replace authored footage in the V2 scene compositor. Interactive scene editing and portable simulation remain deferred; native Blender jobs retain their own simulation caches. Use the separate [directing workflow](directing-video.md) to generate and review short clips before assembling an ordinary media project.
|
|
32
34
|
|
|
33
35
|
|
|
36
|
+
## Direct cinematic worlds
|
|
37
|
+
|
|
38
|
+
A `slopcamera.spatial-direction` document describes beats, actions, camera coverage, and look intents semantically; its `projectDigest` must equal the scene's `sceneSha256` from `scene inspect`. Check it with `slopcamera scene direction check direction.json --scene scene.json --json`, compile proposals with `scene direction plan ... --camera <camera-id> --output plan.json`, and plan bounded variants with `scene direction gallery ... --axis performance|camera|lighting|materials|effects|sequence`. Compiled direction stays `verified: false` — it is review evidence, not applied state.
|
|
39
|
+
|
|
40
|
+
Bind declared effects through `scene effects plan` and `scene effects check` against the same scene, and bake planned simulation through `scene effects bake` when the plan calls for it. `scene temporal-audit` and `scene render-audit` report sampled evidence over explicit `--times-us` without inventing quality claims.
|
|
41
|
+
|
|
42
|
+
## Author character behaviors
|
|
43
|
+
|
|
44
|
+
A `slopcamera.spatial-behavior` document describes deterministic character behavior programs as ALGAL organism graphs — inert manifests of typed cells (`input`/`const`/`fn`/`repeat`/`each`/`organism` only for bake-safe behaviors), declared channels, scene binding, and explicit initial state. The organism closure is a content-addressed map of manifest digests to manifests; the `entry` field selects the top-level organism.
|
|
45
|
+
|
|
46
|
+
Check a behavior against a scene with `slopcamera scene behavior check behavior.json --scene scene.json --json`. The checker validates the organism closure (digest consistency, fn references against the admitted catalog, wiring, carry bindings, interface completeness, entity and range against the scene). Bake it with `slopcamera scene behavior bake behavior.json --scene scene.json --output bake.json --json`; the bake runs through the real ALGAL runtime and produces a deterministic emitted trace with a bound receipt. Plan seeded gallery variants with `slopcamera scene behavior gallery behavior.json --scene scene.json --json`. Audit a baked trace with `slopcamera scene behavior audit bake.json --json`; the audit reports state thrash, exact periodicity, dead channels, and unreachable states as advisory findings.
|
|
47
|
+
|
|
48
|
+
Four standard-library organisms are available for composition: locomotion FSM (`behavior.fsm.v1` — state machines with after/chance/flag/clear/always guards), expression layer (`behavior.expression.v1` — blink, gaze, mood), interaction sequence (`behavior.interact.v1` — phase sequencer with emit-on-entry), and a combined organism that merges all three via pairwise `emitted.append`. Each follows the `repeat`+`carry`+`window.advance` accumulation pattern. Use the stdlib organisms as templates; compose them into a behavior document with explicit initial states and scene-bound args.
|
|
49
|
+
|
|
50
|
+
The authoring loop: (1) assemble a behavior doc from stdlib organisms with scene-bound args, (2) check it with `scene behavior check`, (3) bake it with `scene behavior bake`, (4) audit the trace with `scene behavior audit`, (5) plan gallery variants and review. Identical behavior doc + seed + scene produce byte-identical bakes. The `seed` interface input auto-binds from `behavior.seed` for gallery diversity. A channel map (`--channel-map`) binds emitted channels to clip runs, attach/release pairs, or trajectory waypoints for performance directives. Behaviors never execute source, contact providers, or access the filesystem; organisms are data.
|
|
51
|
+
|
|
52
|
+
The `cinematic-world` built-in workflow composes exactly these operations for one admitted scene. Its input is an inert `slopcamera.spatial-recipe-pack` — one scene digest, one direction document, bounded gallery axes, up to 4 named preview render requests, optional declared effects, and optional temporal-audit inputs — wrapped with the scene document and its repository path. Plan it with `slopcamera workflows plan cinematic-world --input input.json --json`; run it with `workflows run`. The workflow never selects or promotes a candidate: registration uses `scene project add-candidate <project-id> --input <request.json>`, and selection uses `scene project select-candidate <project-id> --input <request.json>`, both after review. A recipe pack is data — it cannot register executors, source paths beyond the declared render source, permissions, secrets, or URLs.
|
|
53
|
+
|
|
34
54
|
## Direct short generated clips
|
|
35
55
|
|
|
36
56
|
Use [short-video directing](directing-video.md) for retained paid takes and accepted-shot assembly. Use the matching Slopcamera source build for those commands.
|
|
@@ -109,6 +109,12 @@ Never automatically retry an interrupted or failed paid generation. Slopcamera u
|
|
|
109
109
|
zero client retries because an ambiguous request may still have been charged.
|
|
110
110
|
Report the failure receipt and reconcile the exact attempt. A deliberate new paid command needs authority within the user’s budget; do not infer that an ambiguous failure was free.
|
|
111
111
|
|
|
112
|
+
When the request leaves alternatives open — texture maps, skyboxes,
|
|
113
|
+
backdrops, sprites, or competing design directions — prefer `slopcamera ai
|
|
114
|
+
image gallery`, which runs one tracked job per candidate and composes a
|
|
115
|
+
labelled contact sheet for one review pass. [Image galleries](image-galleries.md)
|
|
116
|
+
covers the candidate grammar, receipt, and explicit promotion steps.
|
|
117
|
+
|
|
112
118
|
## Finish the task
|
|
113
119
|
|
|
114
120
|
Report:
|
|
@@ -123,7 +129,9 @@ Report:
|
|
|
123
129
|
|
|
124
130
|
Use [directing video](directing-video.md) for budgeted takes, accepted predecessor frames and local recovery. URL-only models can use its explicit private Blob path; do not paste short-lived signed URLs into CLI arguments or project files. Blob charges and authority are separate from Gateway.
|
|
125
131
|
|
|
126
|
-
The small portable `slopcamera image generate '<prompt>' --output image.webp` command defaults to `recraft/recraft-v4.1-utility` and admits PNG/JPEG/WebP output. It is distinct from the local `ai` catalog workflow. Preserve literal prompts when requested, keep its output inside the intended workspace and never automatically retry a failed paid call.
|
|
132
|
+
The small portable `slopcamera image generate '<prompt>' --output image.webp` command defaults to `recraft/recraft-v4.1-utility` and admits PNG/JPEG/WebP output. It is distinct from the local `ai` catalog workflow. Preserve literal prompts when requested, keep its output inside the intended workspace and never automatically retry a failed paid call. Its sibling `slopcamera image gallery '<subject>' --output-dir <directory>` shares that bounded model contract and composes several candidates into one review sheet; see [image galleries](image-galleries.md).
|
|
133
|
+
|
|
134
|
+
For product identity SVGs, `slopcamera image icon '<subject>' --purpose <mark|illustration> --output icon.svg` is the canned pipeline. `mark` produces a compact favicon/app/header mark: one to three bold masses in one ink, gated for 16–32 px recognition and low path count. `illustration` (the compatibility default) produces the related marketing illustration: simple isometric structure in one ink, gated against hairlines, dense fills, and detail lost at 64 px. Both run one style-locked Gateway raster through ink normalization, local tracing, and deterministic geometry gates. `--rounds 2` (the default) adds a purpose-specific vision critique that revises the prompt between attempts; `--rounds 1` is a single paid generation with no critique call. `--ink` overrides the ink color and `--keep-raster` retains the normalized line-art PNG beside the SVG.
|
|
127
135
|
|
|
128
136
|
## Style recipes
|
|
129
137
|
|
|
@@ -132,3 +140,9 @@ vignette and typewriter notes on paper right), do not ask Gateway to redraw the
|
|
|
132
140
|
whole poster. Follow [rubber-stamp-field-notes.md](rubber-stamp-field-notes.md):
|
|
133
141
|
generate only the stamp with a reference-capable model, then assemble with the
|
|
134
142
|
local compositor.
|
|
143
|
+
|
|
144
|
+
For an editorial or social banner made from an opaque plate, transparent
|
|
145
|
+
characters, motif clusters, local type, annotations, and diagram clippings,
|
|
146
|
+
follow [social-collage-banners.md](social-collage-banners.md). Generate each
|
|
147
|
+
semantic role independently, inspect its pixels, and compose the selected files
|
|
148
|
+
with the packaged manifest-driven compositor.
|