@hraness/slopcamera 3.3.6 → 3.4.0

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.
Files changed (43) hide show
  1. package/README.md +6 -4
  2. package/apps/desktop/application/operation.ts +1 -1
  3. package/apps/desktop/cli/capability-manifest.ts +13 -0
  4. package/apps/desktop/cli/commands.ts +1 -1
  5. package/apps/desktop/cli/help.ts +12 -1
  6. package/apps/desktop/cli/html-overlay-renderer.ts +16 -0
  7. package/apps/desktop/cli/portable-surface.ts +2 -0
  8. package/apps/desktop/code/public.ts +1 -0
  9. package/apps/desktop/core/visual-style-look.ts +34 -0
  10. package/apps/desktop/dist/cli/main.js +132 -108
  11. package/apps/desktop/html-overlay/runtime.ts +15 -0
  12. package/dist/cli.js +6 -2
  13. package/dist/{index-10bz03js.js → index-abnk4h9c.js} +3 -2
  14. package/dist/index.js +1 -1
  15. package/docs/README.md +1 -0
  16. package/examples/style-portfolio/ANIMATION-STUDIES.md +34 -0
  17. package/examples/style-portfolio/FILM-PLATE.md +19 -0
  18. package/examples/style-portfolio/README.md +137 -0
  19. package/examples/style-portfolio/animation-studies.html +597 -0
  20. package/examples/style-portfolio/assets/instrument-serif-OFL.txt +93 -0
  21. package/examples/style-portfolio/assets/instrument-serif-latin-400.woff2 +0 -0
  22. package/examples/style-portfolio/build-gallery.ts +403 -0
  23. package/examples/style-portfolio/film-plate.html +76 -0
  24. package/examples/style-portfolio/finish-film.ts +152 -0
  25. package/examples/style-portfolio/market-street/README.md +43 -0
  26. package/examples/style-portfolio/market-street/mesh.py +145 -0
  27. package/examples/style-portfolio/market-street/scene.py +760 -0
  28. package/examples/style-portfolio/market-street/source.json +1 -0
  29. package/examples/style-portfolio/market-street/street_data.py +72 -0
  30. package/examples/style-portfolio/render-film-plate.ts +128 -0
  31. package/examples/style-portfolio/render.ts +89 -0
  32. package/examples/style-portfolio/verify-animation-source.mjs +94 -0
  33. package/package.json +11 -2
  34. package/skills/slopcamera/SKILL.md +9 -0
  35. package/skills/slopcamera/references/gateway-media.md +5 -0
  36. package/skills/slopcamera/references/install.md +1 -1
  37. package/skills/slopcamera/references/music-video.md +5 -0
  38. package/skills/slopcamera/references/native-studio.md +4 -0
  39. package/skills/slopcamera/references/visual-style-direction.md +143 -0
  40. package/src/cli.ts +28 -0
  41. package/src/index.ts +1 -0
  42. package/src/version.ts +1 -1
  43. package/src/visual-style.ts +375 -0
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{DrawingValidationError,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,checkDrawingFile,compileSlopcameraCapabilityManifest,createPortableSlopcameraCapabilityManifest,defineSlopcameraCapabilityModule,diagramApi,drawingMinimumGlyphHeightPt,drawingPageGeometry,drawingProfile,drawingSourceByteLimit,inspectStudioBundle,inspectStudioPlan,mcpMaximumRenderedPixels,mcpMaximumScale,mcpSourceByteLimit,parseDrawingSource,parseSlopcameraCapabilityManifest,parseSlopcameraSceneVariants,parseStudioJob,parseStudioPlan,parseStudioReceipt,parseStudioRuntimeIdentity,parseStudioSourceBundle,planSlopcameraSceneGallery,planStudioJob,readDiagramFile,readDrawingFile,renderDiagramFile,renderDrawing,renderDrawingFile,runMcpServer,slopcameraApi,slopcameraMcpProtocolVersion,slopcameraMcpServerName,slopcameraMcpTools,slopcameraPortableCapabilityManifest,slopcameraSceneGalleryLimits,starterDrawingSource,studioJobSha256,studioOutputPath,studioRuntimeSha256,studioSourceBundleSha256,summarizeSceneVariantPatch,validateStudioReceipt}from"./index-10bz03js.js";import{bundledSkillPath,installSkill}from"./index-grk47tgs.js";import"./index-z1kd1x8j.js";import"./index-3cxf2c58.js";import{SlopcameraWorkflowError,defineSlopcameraWorkflow,runSlopcameraWorkflow}from"./index-qtn3s421.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-sy1n4zfy.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,starterDrawingSource,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,renderDrawingFile,renderDrawing,renderDiagramFile,readDrawingFile,readDiagramFile,planStudioJob,planSlopcameraSceneGallery,planSlopcameraGallery,parseStudioSourceBundle,parseStudioRuntimeIdentity,parseStudioReceipt,parseStudioPlan,parseStudioJob,parseSlopcameraSceneVariants,parseSlopcameraOperationInput,parseSlopcameraGalleryVary,parseSlopcameraCapabilityManifest,parseDrawingSource,parseDiagramSpec,parseDiagramSource,normalizeHostResourceProfile,normalizeHostResourceClaims,mcpSourceByteLimit,mcpMaximumScale,mcpMaximumRenderedPixels,lintDiagram,isSlopcameraOperationCode,installSkill,inspectStudioPlan,inspectStudioBundle,iconVisualGateProblems,iconPromptFor,generateSlopcameraImageGallery,generateSlopcameraImageFile,generateSlopcameraImage,generateSlopcameraIcon,galleryPromptFor,galleryCandidateId,extractIconLineArt,executeSlopcameraOperationWithLease,executeSlopcameraOperation,drawingSourceByteLimit,drawingProfile,drawingPageGeometry,drawingMinimumGlyphHeightPt,diagramApi,defineSlopcameraWorkflow,defineSlopcameraCapabilityModule,defaultSlopcameraHostResourceStateRoot,defaultSlopcameraHostResourceProfile,critiqueIconRaster,createProcessLocalHostResourceCoordinator,createPortableSlopcameraCapabilityManifest,createHostResourceCoordinator,createFixedGatewayFetch,createDefaultHostResourceCoordinator,composeSlopcameraImageGallery,compileSlopcameraCapabilityManifest,checkDrawingFile,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,DrawingValidationError,DiagramValidationError};
2
+ import{DrawingValidationError,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,VISUAL_STYLE_IDS,VISUAL_STYLE_PROFILES,VISUAL_STYLE_VARIATION_ALGORITHM,VisualStyleIdSchema,VisualStyleProfileSchema,WorkspaceBoundary,WorkspaceBoundaryError,artifactSummary,checkDiagramFile,checkDrawingFile,compileSlopcameraCapabilityManifest,createPortableSlopcameraCapabilityManifest,createVisualStyleDirection,defineSlopcameraCapabilityModule,diagramApi,drawingMinimumGlyphHeightPt,drawingPageGeometry,drawingProfile,drawingSourceByteLimit,getVisualStyleProfile,inspectStudioBundle,inspectStudioPlan,mcpMaximumRenderedPixels,mcpMaximumScale,mcpSourceByteLimit,parseDrawingSource,parseSlopcameraCapabilityManifest,parseSlopcameraSceneVariants,parseStudioJob,parseStudioPlan,parseStudioReceipt,parseStudioRuntimeIdentity,parseStudioSourceBundle,planSlopcameraSceneGallery,planStudioJob,readDiagramFile,readDrawingFile,renderDiagramFile,renderDrawing,renderDrawingFile,runMcpServer,sampleVisualStyleExposure,slopcameraApi,slopcameraMcpProtocolVersion,slopcameraMcpServerName,slopcameraMcpTools,slopcameraPortableCapabilityManifest,slopcameraSceneGalleryLimits,starterDrawingSource,studioJobSha256,studioOutputPath,studioRuntimeSha256,studioSourceBundleSha256,summarizeSceneVariantPatch,validateStudioReceipt,visualStyleFrameVariation}from"./index-abnk4h9c.js";import{bundledSkillPath,installSkill}from"./index-grk47tgs.js";import"./index-z1kd1x8j.js";import"./index-3cxf2c58.js";import{SlopcameraWorkflowError,defineSlopcameraWorkflow,runSlopcameraWorkflow}from"./index-qtn3s421.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-sy1n4zfy.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,visualStyleFrameVariation,vectorizeProfileNames,vectorizeImage,vectorizeHardLimits,vectorizeDefaultLimits,validateStudioReceipt,summarizeSceneVariantPatch,studioSourceBundleSha256,studioRuntimeSha256,studioOutputPath,studioJobSha256,starterDrawingSource,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,sampleVisualStyleExposure,runSlopcameraWorkflow,runMcpServer,resolveStackLayout,resolveSlopcameraGatewayCredential,resolveEdge,resolveDiagramSource,renderSvg,renderPng,renderDrawingFile,renderDrawing,renderDiagramFile,readDrawingFile,readDiagramFile,planStudioJob,planSlopcameraSceneGallery,planSlopcameraGallery,parseStudioSourceBundle,parseStudioRuntimeIdentity,parseStudioReceipt,parseStudioPlan,parseStudioJob,parseSlopcameraSceneVariants,parseSlopcameraOperationInput,parseSlopcameraGalleryVary,parseSlopcameraCapabilityManifest,parseDrawingSource,parseDiagramSpec,parseDiagramSource,normalizeHostResourceProfile,normalizeHostResourceClaims,mcpSourceByteLimit,mcpMaximumScale,mcpMaximumRenderedPixels,lintDiagram,isSlopcameraOperationCode,installSkill,inspectStudioPlan,inspectStudioBundle,iconVisualGateProblems,iconPromptFor,getVisualStyleProfile,generateSlopcameraImageGallery,generateSlopcameraImageFile,generateSlopcameraImage,generateSlopcameraIcon,galleryPromptFor,galleryCandidateId,extractIconLineArt,executeSlopcameraOperationWithLease,executeSlopcameraOperation,drawingSourceByteLimit,drawingProfile,drawingPageGeometry,drawingMinimumGlyphHeightPt,diagramApi,defineSlopcameraWorkflow,defineSlopcameraCapabilityModule,defaultSlopcameraHostResourceStateRoot,defaultSlopcameraHostResourceProfile,critiqueIconRaster,createVisualStyleDirection,createProcessLocalHostResourceCoordinator,createPortableSlopcameraCapabilityManifest,createHostResourceCoordinator,createFixedGatewayFetch,createDefaultHostResourceCoordinator,composeSlopcameraImageGallery,compileSlopcameraCapabilityManifest,checkDrawingFile,checkDiagramFile,bundledSkillPath,builtInIcons,artifactSummary,WorkspaceBoundaryError,WorkspaceBoundary,VisualStyleProfileSchema,VisualStyleIdSchema,VectorizeError,VTRACER_VERSION,VISUAL_STYLE_VARIATION_ALGORITHM,VISUAL_STYLE_PROFILES,VISUAL_STYLE_IDS,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,DrawingValidationError,DiagramValidationError};
package/docs/README.md CHANGED
@@ -16,6 +16,7 @@ Install the [verified Slopcamera v3.3.2 release](../README.md#install-slopcamera
16
16
  - [Prepare patent-style drawing sheets](how-to/patent-drawings.md): retain diagram source, check physical bounds, and render monochrome SVG sheets and a PDF; requires current source.
17
17
 
18
18
  - [Render motion graphics from HTML](how-to/render-motion-graphics.md): choose among seven authoring profiles, render a graphic, and retain its source.
19
+ - [Direct a film or animation style](how-to/direct-visual-styles.md): use reusable art direction and render the original style studies; requires current source.
19
20
  - [Edit and deliver video](how-to/edit-video.md): import footage, align related tracks, place overlays, and check a delivery.
20
21
  - [Make a music video from an HTML scene](how-to/music-video.md): render authored visuals with a local track and retain separate sources in an editable project.
21
22
  - [Convert raster images to SVG](how-to/vectorize-images.md): trace artwork locally, compare a duotone treatment, and inspect fidelity.
@@ -0,0 +1,34 @@
1
+ # Original animation studies
2
+
3
+ `animation-studies.html` contains 12 six-second scenes. Each scene has its own composition, forms, materials, and movement. They use Canvas2D and load no external assets, fonts, libraries, or network resources.
4
+
5
+ | Style ID | Scene | Suggested still time |
6
+ | --- | --- | --- |
7
+ | `theatrical-cel` | A late train passes a rain-soaked platform and layered city. Cels hold while distant camera drift stays continuous. | 2.5 s |
8
+ | `watercolor-storybook` | A rabbit waters a greenhouse garden among transparent botanical washes. | 3 s |
9
+ | `pixel-art` | A tiny astronomer watches the sky from a mountain observatory. | 3.7 s |
10
+ | `math-explainer` | Five odd Fourier harmonics build sequentially, then rotate to trace their exact sum. | 2.65 s |
11
+ | `midcentury-limited` | An angular bird trio plays upright bass, trumpet, and piano. | 3 s |
12
+ | `rubber-hose` | An original record-shaped dancer performs beside a phonograph. | 3 s |
13
+ | `cut-paper` | A folded crane crosses shadowed layers of hills and reeds. | 3 s |
14
+ | `stopmotion-clay` | A clay-like snail, pressed ceramic objects, and petal flowers form a lit still life. | 3 s |
15
+ | `engraving` | An etched whale swims beneath a clipper and distant lighthouse. | 3 s |
16
+ | `ink-sketch` | A cyclist passes a cafe, a watching cat, and an ink-and-wash streetscape. | 2.5 s |
17
+ | `rotoscope` | A dancer moves through four authored anatomical poses with printed motion echoes. | 3 s |
18
+ | `clean-motion` | An orthographic kinetic sculpture combines a shaded ring, ribbon, and counterweight. | 2.65 s |
19
+
20
+ The clay scene is a two-dimensional material study. The dancer uses authored joint poses and interpolation; it was not traced from a filmed performer. The kinetic sculpture uses drawn projection and analytic shading. These scenes do not run Blender, Manim, a physical simulation, or a generative video model. The separate native street scene has its own source and receipts.
21
+
22
+ The mathematical scene evaluates `Σ sin(nθ) / n` for the active odd harmonics. Its limiting levels are `±π/4`. Each added harmonic updates both the rotating construction and the trace. No numerical integration or accumulated drawing history is used.
23
+
24
+ ## Timing and rendering contract
25
+
26
+ The Slopcamera host passes `parameters.style`, an optional canonical `parameters.direction` profile, and an optional numeric `parameters.timeOffsetSeconds`. Unknown styles, malformed profiles, unsupported parameters, nonfinite times, and oversized canvases fail explicitly. A direction profile must match the selected scene. Scenes with held drawings sample the supplied subject exposure cadence; watercolor, cut paper, the mathematical construction, and the kinetic sculpture use authored continuous time. Camera cadence remains authored per scene; `cameraExposureFrames` is not applied automatically. Palettes, drawing geometry, lighting, and finishes remain authored for each composition. Profile fields are direction and delivery recommendations, not an automatic renderer or a claim of achieved fidelity.
27
+
28
+ Every rendered pose depends on absolute `timeMs`. Seeking, repeating a frame, and rendering out of order produce the same drawing commands. The supported time interval is zero through six seconds, with six accepted as the endpoint. The still offset must be below six seconds, and the total frame time must stay in that interval.
29
+
30
+ The composition is 1920 × 1080 and scales to the physical canvas while preserving its aspect ratio. The viewport and device scale determine the raster size. Physical canvases are bounded to 8192 pixels per side and 33,554,432 pixels total. A 3840 × 2160 render redraws the geometry at that resolution. Pixel art is intentionally drawn on a 320 × 180 grid, enlarged by the largest fitting integer scale with nearest sampling. Letterboxing preserves the composition in a different viewport shape. Canvas edge rasterization and video encoding can introduce additional colors; this is not a strict indexed-palette export.
31
+
32
+ Opening the HTML directly uses the theatrical cel scene. The query parameters `style` and `time` select another scene and an optional fixed frame. The page also exposes `window.PortfolioDrawing.render(timeSeconds, styleId, direction?)` for a deterministic local preview.
33
+
34
+ `verify-animation-source.mjs` checks all canonical profiles, finite geometry, balanced drawing stacks, invalid input handling, and command determinism after out-of-order seeks. It does not render pixels. The delivery owner must inspect actual frames and complete clips for composition, movement, clipping, type, and material quality.
@@ -0,0 +1,19 @@
1
+ # A photographic plate in a film-transfer study
2
+
3
+ `film-plate.html` holds one local PNG or JPEG on screen for six seconds at 16 fps. The source image remains a single photograph. No people, vehicles, or other subjects move independently.
4
+
5
+ The optical treatment adds a 1.2% push after 0.4% initial overscan, registration movement bounded to 0.45 pixels per axis at 1080-pixel height, and continuous brightness variation bounded to 0.6% from the input level. The overscan conceals the moving image boundary. There are no scratches, light leaks, fabricated archive markings, or subject animation. `finish-film.ts` can add a separately retained grain and diffusion treatment after this render.
6
+
7
+ Run the local workflow with an explicit image and a new run identifier:
8
+
9
+ ```sh
10
+ bun examples/style-portfolio/render-film-plate.ts \
11
+ --image artifacts/style-portfolio/city/photographic-interpretation.png \
12
+ --run photographic-transfer-v1
13
+ ```
14
+
15
+ Use `--dry-run` with a different new run identifier to obtain the canonical Slopcamera plan without launching a browser. `--width` and `--height` set maximum output bounds. With neither option, the bounds are 1440 × 1080; with only one option, the other bound is 8192. The workflow derives even dimensions that preserve the input aspect ratio and never exceed its dimensions. A 1448 × 1086 source therefore delivers 1440 × 1080 by default. The optical crop resamples that image within its declared output raster; it does not create new photographic detail or justify a 4K claim.
16
+
17
+ The wrapper reads at most 32 MiB, checks PNG/JPEG metadata with Sharp, rejects animated or multipage files and sources above 33 megapixels, respects EXIF-oriented dimensions, and retains the exact input bytes under `artifacts/style-portfolio/film-plate/<run>/`. The HTML obtains that copy only through `SlopcameraOverlay.asset('plate')` and waits for image decoding before frame rendering. No network resources or uploads are used.
18
+
19
+ Each run records source identity, dimensions, timing, intent, canonical scene input, and the host result. An existing run directory is a hard stop, including after a failed or ambiguous attempt. Inspect its log and retained host state before making a separate new attempt. The input and existing outputs are never overwritten.
@@ -0,0 +1,137 @@
1
+ # Visual style portfolio
2
+
3
+ These examples turn reusable art direction into original short films, retain their editable sources, and assemble selected results into an offline gallery. The collection can combine Canvas animation, native Blender scenes, and generated image plates with camera motion. Each work names its actual method and limitations.
4
+
5
+ The twelve Canvas studies demonstrate drawn and graphic techniques. The [Market Street scene](market-street/README.md) is a procedural Blender interpretation of an early street film. A generated photographic plate can demonstrate image direction and film finishing, but camera motion over one image does not establish independently animated people, vehicles, or a reconstructed 3D world.
6
+
7
+ The supplied Canvas and Blender animation sources are silent. Sound design or a soundtrack is a separate authored production step.
8
+
9
+ ## Render a study
10
+
11
+ Run these commands from a Slopcamera source checkout or installed source package with Bun and the required local rendering capabilities available. `render.ts` calls the package's built CLI, so build the CLI first when working from edited source.
12
+
13
+ ```sh
14
+ slopcamera style list --json
15
+ slopcamera style show theatrical-cel --json
16
+ bun examples/style-portfolio/render.ts --style theatrical-cel --width 1920 --run train-preview --dry-run
17
+ bun examples/style-portfolio/render.ts --style theatrical-cel --width 1920 --run train-preview
18
+ bun examples/style-portfolio/render.ts --style theatrical-cel --run train-master
19
+ bun examples/style-portfolio/render.ts --all --width 1920 --run collection-previews
20
+ bun examples/style-portfolio/render.ts --all --still --width 3840 --offset 3 --run selected-stills
21
+ ```
22
+
23
+ `--all` selects the twelve implemented Canvas studies. Choose either `--all` or `--style`. Films run for six seconds at 24 fps. Movies and stills default to native 3840×2160; pass `--width 1920` for a smaller preview. `--still` renders one exposure at the requested `--offset` in seconds. The supported widths are 1280, 1920, 2560, and 3840; height follows the study's 16:9 canvas. These are native render sizes, not enlargement claims.
24
+
25
+ Dry runs keep separate `.plan.*` attempts and never replace render evidence.
26
+ Every run retains its scene request, operation result, log, and intent under `artifacts/style-portfolio/<run>`. An existing intent makes the runner report `already-attempted`. Inspect that attempt's host receipts before selecting a new run name; do not use a new name to hide an uncertain native operation.
27
+
28
+ Use the [Market Street source contract](market-street/README.md#source-contract) for native Blender jobs. It uses a 4:3 frame and a separate capture cadence.
29
+
30
+ ## Apply a film finish
31
+
32
+ ```sh
33
+ bun examples/style-portfolio/finish-film.ts \
34
+ artifacts/style-portfolio/city-master.mp4 \
35
+ silent-actuality \
36
+ artifacts/style-portfolio/city-finished.mp4
37
+ ```
38
+
39
+ The finisher probes the input, compiles the style's ordered video look, and retains an intent and receipt beside the new output. It accepts one video stream and at most one audio stream, at most 30 seconds and 120 fps, even dimensions from 64×64 through 4096×4320, and an input no larger than 512 MiB. Existing outputs are not overwritten. The receipt records the actual output dimensions, frame count, bytes, hashes, and limitations.
40
+
41
+ This is a display-referred artistic finish. It does not model a spectral film stock, add independently moving subjects, or repair scene geometry. Preserve the clean master and inspect the encoded result at its delivery size.
42
+
43
+ ## Assemble the offline gallery
44
+
45
+ Select final videos, posters, receipts, and source files explicitly in a JSON manifest. Paths resolve relative to the manifest file; absolute paths are accepted only inside the current Slopcamera checkout or package root. The assembly does not search artifact directories, follow receipt paths, or include reference material automatically.
46
+
47
+ ```sh
48
+ bun examples/style-portfolio/build-gallery.ts \
49
+ artifacts/style-portfolio/selection.json \
50
+ artifacts/style-portfolio/gallery
51
+ ```
52
+
53
+ The output directory must be new and lie strictly inside this repository's `artifacts/` directory. The default is `artifacts/style-portfolio/gallery`. Open its `index.html` directly or serve the directory using a local static server. The complete directory is portable: films, posters, captions, source files, receipts, metadata, and the licensed display font use relative local paths. No external fonts, scripts, libraries, or network requests are required by the gallery.
54
+
55
+ Assembly uses `ffprobe` to compare each selected video's width, height, duration, and optional frame rate with the manifest. It hashes copied files and writes the page last. `--trust-manifest` explicitly skips probing when the input facts have already been checked elsewhere; the resulting records say `supplied-manifest` and do not claim a fresh media check. Neither mode certifies visual quality or historical accuracy.
56
+
57
+ The selection is bounded to 64 studies, 512 unique files, and 3 GiB total. Individual films are limited to 512 MiB, posters to 32 MiB, receipts to 4 MiB, and source files to 8 MiB. Every copied input must be a regular file with an admitted extension. Hidden paths and `artifacts/style-portfolio/reference/` are rejected. A failed assembly retains its intent and any partial copies; inspect it and choose a new output directory for a corrected selection.
58
+
59
+ ### Manifest reference
60
+
61
+ The exported `GalleryManifest` and `GalleryStudy` interfaces in [build-gallery.ts](build-gallery.ts) define the input. The example below shows the shape; replace its paths and media facts with measured values from your selected outputs.
62
+
63
+ ```json
64
+ {
65
+ "schemaVersion": 1,
66
+ "title": "Studies in motion",
67
+ "intro": "Original scenes exploring drawn animation, material, light, and film.",
68
+ "hero": "market-street-blender",
69
+ "studies": [
70
+ {
71
+ "id": "market-street-blender",
72
+ "title": "A street before the earthquake",
73
+ "style": "silent-actuality",
74
+ "description": "A short cable-car journey toward a Ferry Building interpretation.",
75
+ "method": "Procedural Blender scene with a monochrome film finish",
76
+ "video": "selected/city.mp4",
77
+ "poster": "selected/city-poster.png",
78
+ "width": 1920,
79
+ "height": 1440,
80
+ "durationSeconds": 6,
81
+ "frameRate": 16,
82
+ "receipt": "selected/city.receipt.json",
83
+ "sourceFiles": [
84
+ { "path": "../../examples/style-portfolio/market-street/scene.py", "label": "Blender scene" },
85
+ { "path": "../../examples/style-portfolio/market-street/mesh.py", "label": "Geometry helpers" },
86
+ { "path": "../../examples/style-portfolio/market-street/street_data.py", "label": "Historical evidence and estimates" }
87
+ ],
88
+ "limitations": [
89
+ "Authored historical interpretation, not archival footage or a surveyed reconstruction."
90
+ ]
91
+ }
92
+ ]
93
+ }
94
+ ```
95
+
96
+ `hero` names one study to lead the page; the first study is used when it is omitted. Optional `reel` has the same fields as a study and appears after the collection. Its ID must be distinct. `sourceFiles` is an explicit list of files, with optional human-readable labels. Include every required helper, scene request, and source asset needed to reproduce a result. Receipts are copied intact; their embedded original paths remain evidence, and are not automatically made portable.
97
+
98
+ Optional `brief` supplies an original reusable direction under “Make a variation.”
99
+ `reviewPoints` accepts up to six `{ "label": "Main action", "timeSeconds": 2.65 }`
100
+ objects within the clip duration. These controls seek and pause the selected
101
+ film; they do not change its source or autoplay it. Use them to name the exact
102
+ moment for a revision and state which geometry, timing, or material should stay
103
+ unchanged. “Download still” retains the selected poster at its supplied resolution.
104
+
105
+ Optional `captions` names a WebVTT file, and `captionLanguage` defaults to `en`. Include captions when speech or meaningful audio needs a text equivalent. The gallery starts with posters, uses native accessible video controls, never autoplays, and pauses other films when one starts. It honors reduced-motion scrolling and preserves the full native aspect ratio.
106
+
107
+ Each study gets a metadata JSON file listing its copied paths, byte counts, SHA-256 hashes, production method, and media facts. `manifest.json` contains the portable selection. `gallery-receipt.json` records assembly evidence. The original manifest's absolute paths are not copied into those new records; selected execution receipts remain byte-for-byte originals.
108
+
109
+ Use precise method labels. Suitable examples include “Canvas 2D clay material study,” “Rotoscope-inspired procedural Canvas animation,” and “Generated photographic plate with camera motion and film finishing.” A style name describes an influence; it does not establish that a physical medium or archival process was used.
110
+
111
+ ## Direct the next scene
112
+
113
+ Read the [visual style direction guide](../../skills/slopcamera/references/visual-style-direction.md), select a profile, and specify a subject, a visible action, a camera, and a temporal decision. These short briefs are starting points for new compositions:
114
+
115
+ | Profile | Production brief |
116
+ | --- | --- |
117
+ | `silent-actuality` | Film a damp street from a fixed cable-car support. Keep a bright sky, dark shop recesses, irregular street traffic, and a coherent destination. Label estimated history. |
118
+ | `theatrical-cel` | An original courier pauses above a dense night city. Hold the figure, let rain and a sign move, then give the coat one decisive wind accent. |
119
+ | `watercolor-storybook` | A small boat crosses a quiet wash of river. Preserve paper in highlights, soften distant edges, and keep one crisp focal gesture. |
120
+ | `pixel-art` | A traveler arrives at an original station at dusk. Choose one logical grid, a limited palette, readable sprite poses, and integer movement. |
121
+ | `math-explainer` | Construct two simple waves, align their phases, and show their sum. Keep the equation true and pause when the relationship becomes visible. |
122
+ | `midcentury-limited` | Let an original bird inspect a seed through three held poses. Use asymmetric shapes, sparse texture, and one accent color. |
123
+ | `rubber-hose` | An original character anticipates, jumps, and settles. Design clean silhouettes, arcs, grounded feet, and a readable final hold. |
124
+ | `cut-paper` | Unfold a landscape from distinct paper layers. Keep pivots, overlap, edge shadows, and shallow depth consistent. |
125
+ | `stopmotion-clay` | Build a clay-like figure with uneven construction and deliberate pose steps. Name a 2D interpretation honestly when no physical simulation exists. |
126
+ | `engraving` | Reveal a form through directional hatching. Let line density describe light and preserve open highlights. |
127
+ | `ink-sketch` | Follow one gesture with confident contours and sparse searching lines. Hold the main silhouette while selected strokes change. |
128
+ | `rotoscope` | Invent a coherent human gesture with consistent limb lengths and weight. Label procedural motion as rotoscope-inspired unless tracing a real source. |
129
+ | `clean-motion` | Transform a small set of original shapes through one clear rule. Use optical alignment, deliberate pauses, and restrained easing. |
130
+
131
+ Expand by changing the composition, material system, action, and timing together. Recoloring the same scene does not demonstrate another animation language. Compare representative frames before a full render, then inspect the encoded motion for contact, pacing, flicker, texture shimmer, crop, and text. The gallery is a selected portfolio of these examples, not a claim to cover every Slopcamera capability.
132
+
133
+ ## Gallery design and review
134
+
135
+ The gallery uses Experience mode: a selected film occupies the first viewport, typography supports its caption, and the remaining works form an open image sequence. It inherits the site's warm paper and dark ink, with the existing Instrument Serif font copied into the example under its OFL license. There are no decorative cards, fake archival labels, or playback that starts without the visitor.
136
+
137
+ Review the assembled page once at desktop and mobile sizes, then repair observed issues in one batch. Check long titles, playback, local source links, keyboard focus, aspect ratios, and metadata disclosure. A static contact sheet does not verify motion. The assembly script does not run a browser or make a visual approval claim.