@hraness/slopcamera 3.8.1 → 3.9.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.
- package/NOTICE.md +14 -0
- package/README.md +14 -6
- package/apps/desktop/application/operation.ts +1 -1
- package/apps/desktop/cli/capability-manifest.ts +15 -2
- package/apps/desktop/cli/commands.ts +1 -1
- package/apps/desktop/cli/help.ts +23 -4
- package/apps/desktop/cli/portable-surface.ts +1 -0
- package/apps/desktop/cli/verbs.ts +4 -0
- package/apps/desktop/dist/cli/main.js +306 -284
- package/dist/cli.js +24 -4
- package/dist/{index-842t02pp.js → index-m6g0ca9b.js} +1 -1
- package/dist/{index-y8spxs77.js → index-mgychzh3.js} +6 -3
- package/dist/{index-6jrxaser.js → index-rxx27q8b.js} +4 -4
- package/dist/index.js +1 -1
- package/dist/operations.js +1 -1
- package/dist/workflow.js +1 -1
- package/package.json +4 -2
- package/skills/slopcamera/SKILL.md +2 -0
- package/skills/slopcamera/references/customization.md +8 -1
- package/skills/slopcamera/references/icon-place.md +76 -0
- package/skills/slopcamera/references/install.md +2 -2
- package/skills/slopcamera/references/music-video.md +10 -2
- package/skills/slopcamera/references/soundtracks.md +58 -0
- package/src/bounded-file.ts +135 -0
- package/src/cli.ts +191 -0
- package/src/icon-scene.ts +695 -0
- package/src/index.ts +2 -0
- package/src/mcp/tools.ts +311 -0
- package/src/mcp/types.ts +4 -0
- package/src/operations.ts +306 -0
- package/src/soundtrack.ts +489 -0
- package/src/version.ts +1 -1
package/NOTICE.md
CHANGED
|
@@ -52,3 +52,17 @@ The complete local workflow host uses
|
|
|
52
52
|
License (Copyright 2023 Effectful Technologies Inc). It remains a separately
|
|
53
53
|
installed runtime dependency and is not relicensed by this project. Portable
|
|
54
54
|
workflow authoring and graph compilation do not load this runtime.
|
|
55
|
+
|
|
56
|
+
Icon scene composition and rendering use
|
|
57
|
+
[`@hraness/iconplace`](https://github.com/hraness/iconplace) 0.1.0, the
|
|
58
|
+
icon.place library, and soundtrack scores and beat grids use
|
|
59
|
+
[`@hraness/soundfish`](https://github.com/hraness/soundfish) 0.7.0. Both are
|
|
60
|
+
distributed under the MIT License and remain separately installed runtime
|
|
61
|
+
dependencies pinned to exact versions; neither is relicensed by this project.
|
|
62
|
+
The letterform outline data in `@hraness/iconplace/scene` and
|
|
63
|
+
`@hraness/iconplace/collections` is derived from Cormorant Garamond and
|
|
64
|
+
UnifrakturMaguntia and stays under the SIL Open Font License 1.1, as that
|
|
65
|
+
package's `THIRD_PARTY_NOTICES.md` and `licenses/` record.
|
|
66
|
+
Slopcamera imports their library entry points only and never runs their
|
|
67
|
+
commands. The Soundfish Agent Skill ships with `@hraness/soundfish`, not with
|
|
68
|
+
Slopcamera.
|
package/README.md
CHANGED
|
@@ -23,7 +23,9 @@ file and a new render.
|
|
|
23
23
|
is a JSON file of boxes and arrows, a title animation is an HTML scaffold
|
|
24
24
|
for one of seven profiles, and a 3D shot is scene JSON with a named camera.
|
|
25
25
|
The renderer, frame timing, encoding, and export formats are already
|
|
26
|
-
installed.
|
|
26
|
+
installed. This does not make it cheaper in tokens: in our
|
|
27
|
+
[benchmark](https://slopcamera.com/docs/explanation/token-benchmark), the median cost with
|
|
28
|
+
SlopCamera installed was higher than without it on all four tasks.
|
|
27
29
|
- **Revisions change the source, not the whole result.** Change one label,
|
|
28
30
|
camera, or cut and render again. Every export comes from the same source, so
|
|
29
31
|
light and dark versions, or 16:9 and 9:16 cuts, stay in step.
|
|
@@ -41,11 +43,11 @@ file and a new render.
|
|
|
41
43
|
## Install SlopCamera
|
|
42
44
|
|
|
43
45
|
Install [Bun 1.3.14 or newer](https://bun.sh), then install the
|
|
44
|
-
[SlopCamera v3.8.
|
|
46
|
+
[SlopCamera v3.8.1 release](https://github.com/hraness/slopcamera/releases/tag/v3.8.1)
|
|
45
47
|
and its matching Agent Skill:
|
|
46
48
|
|
|
47
49
|
```sh
|
|
48
|
-
bun add --global https://github.com/hraness/slopcamera/releases/download/v3.8.
|
|
50
|
+
bun add --global https://github.com/hraness/slopcamera/releases/download/v3.8.1/hraness-slopcamera-3.8.1.tgz
|
|
49
51
|
slopcamera skill install --target agents
|
|
50
52
|
```
|
|
51
53
|
|
|
@@ -192,6 +194,10 @@ them all with their requirements.
|
|
|
192
194
|
| Explainer video | A Manim scene, captions, and a presenter | A lesson video with typeset math | [Geometry lesson](https://slopcamera.com/docs/how-to/educational-video#inspect-the-finished-example) |
|
|
193
195
|
| Footage edits | Cuts, captions, reframes, and color as project decisions | 16:9, 9:16, 1:1, and 4:5 exports from one edit | [Four formats](https://slopcamera.com/docs/how-to/edit-video#landscape-delivery) |
|
|
194
196
|
|
|
197
|
+
SlopCamera also composes vector icon scenes with the bundled icon.place library
|
|
198
|
+
and reads Soundfish scores or MIDI files into beat grids for music-timed scenes,
|
|
199
|
+
both locally and without a model. Neither renders audio.
|
|
200
|
+
|
|
195
201
|
Model-backed generation of images, video, and speech is available through your
|
|
196
202
|
own provider access, and cinematic effects, particles, and character
|
|
197
203
|
performance can be planned from source. The gallery has no rendered examples
|
|
@@ -319,9 +325,11 @@ or [Why SlopCamera](https://slopcamera.com/docs/explanation/why-slopcamera).
|
|
|
319
325
|
identical output elsewhere.
|
|
320
326
|
- **Trusted code is not sandboxed.** Native Python and your own Bun workflows
|
|
321
327
|
run with the current user's access.
|
|
322
|
-
- **MCP is a subset.**
|
|
323
|
-
audit scenes,
|
|
324
|
-
command and never changes
|
|
328
|
+
- **MCP is a subset.** Current source has 21 fixed tools that check and render diagrams, plan and
|
|
329
|
+
audit scenes, compose icon scenes and soundtrack beat grids, and run ten
|
|
330
|
+
operation codes. It does not expose every CLI command and never changes
|
|
331
|
+
project state. The verified v3.8.1 archive has a 17-tool subset and six
|
|
332
|
+
registered operations; icon and soundtrack composition require a later source build.
|
|
325
333
|
|
|
326
334
|
## Design and trust
|
|
327
335
|
|
|
@@ -4,7 +4,7 @@ import type { z } from "zod";
|
|
|
4
4
|
|
|
5
5
|
import type { ApplicationContext } from "./context";
|
|
6
6
|
|
|
7
|
-
export const SLOPCAMERA_APPLICATION_TOOL_VERSION = "slopcamera-3.
|
|
7
|
+
export const SLOPCAMERA_APPLICATION_TOOL_VERSION = "slopcamera-3.9.0" as const;
|
|
8
8
|
|
|
9
9
|
export const OPERATION_KINDS = [
|
|
10
10
|
"scene.audit",
|
|
@@ -127,8 +127,12 @@ const capabilityModules = Object.freeze([
|
|
|
127
127
|
{ effect: "local-read", name: "diagram sheets check" },
|
|
128
128
|
{ effect: "local-derived-write", name: "diagram sheets render" },
|
|
129
129
|
{ effect: "local-derived-write", name: "image vectorize" },
|
|
130
|
+
{ effect: "local-derived-write", name: "image icon compose" },
|
|
131
|
+
{ effect: "local-derived-write", name: "image icon render" },
|
|
132
|
+
{ effect: "local-derived-write", name: "media soundtrack compose" },
|
|
133
|
+
{ effect: "local-derived-write", name: "media soundtrack grid" },
|
|
130
134
|
],
|
|
131
|
-
description: "Portable diagrams, CLI/SDK drawing sheets, local vectorization, and the bounded semantic operation projection.",
|
|
135
|
+
description: "Portable diagrams, CLI/SDK drawing sheets, local vectorization, deterministic icon scenes and soundtrack beat grids, and the bounded semantic operation projection.",
|
|
132
136
|
moduleId: "slopcamera.capability.diagram-image",
|
|
133
137
|
operationKeys: diagramImageOperations,
|
|
134
138
|
profiles: [{
|
|
@@ -139,7 +143,16 @@ const capabilityModules = Object.freeze([
|
|
|
139
143
|
}],
|
|
140
144
|
stability: "stable",
|
|
141
145
|
title: "Diagrams and images",
|
|
142
|
-
toolNames: [
|
|
146
|
+
toolNames: [
|
|
147
|
+
"check_diagram",
|
|
148
|
+
"compose_icon",
|
|
149
|
+
"compose_soundtrack",
|
|
150
|
+
"derive_soundtrack_grid",
|
|
151
|
+
"execute_slopcamera",
|
|
152
|
+
"render_diagram",
|
|
153
|
+
"render_icon",
|
|
154
|
+
"search_slopcamera",
|
|
155
|
+
],
|
|
143
156
|
trust: "portable",
|
|
144
157
|
version: 1,
|
|
145
158
|
workflowKeys: [],
|
|
@@ -365,7 +365,7 @@ import {
|
|
|
365
365
|
workflowRunStore,
|
|
366
366
|
} from "./workflow-runs";
|
|
367
367
|
|
|
368
|
-
export const SLOPCAMERA_VERSION = "3.
|
|
368
|
+
export const SLOPCAMERA_VERSION = "3.9.0";
|
|
369
369
|
|
|
370
370
|
// Legacy direct renders predate per-target output contracts. Keep them
|
|
371
371
|
// bounded generously enough for long-form production while preventing one
|
package/apps/desktop/cli/help.ts
CHANGED
|
@@ -37,7 +37,7 @@ Commands:
|
|
|
37
37
|
Discover and run Vercel AI Gateway media models
|
|
38
38
|
credits status|topup|wait|forget
|
|
39
39
|
Buy and inspect hosted generation credits
|
|
40
|
-
media audio|color
|
|
40
|
+
media audio|color|soundtrack Apply local audio and video effects; derive soundtrack beat grids
|
|
41
41
|
outputs Print the agent outputs directory
|
|
42
42
|
outputs list|open|reveal List the newest outputs or open one on this Mac
|
|
43
43
|
status What Slopcamera is doing, credits and newest outputs
|
|
@@ -293,6 +293,10 @@ compliance. Drawing sheets are exposed through this CLI and the root SDK, not co
|
|
|
293
293
|
slopcamera image icon --set <file.json> --output-dir <directory>
|
|
294
294
|
[--context <card|hero|inline>] [--candidates <1-4>]
|
|
295
295
|
[--set-rounds <1-4>] [--keep-raster] [--json]
|
|
296
|
+
slopcamera image icon compose <source.json> [--output <file.json>] [--json]
|
|
297
|
+
slopcamera image icon render <source.json> --output <file.svg> [--recipe <file.json>]
|
|
298
|
+
[--size <16-1024>] [--background] [--palette <original|ink|earth|night>]
|
|
299
|
+
[--language <language>] [--json]
|
|
296
300
|
|
|
297
301
|
Explicit --output file commands delegate to @hraness/slopcamera. Vectorization is local,
|
|
298
302
|
bounded, checksum-pinned, and emits inert SVG. File generation uses Vercel AI Gateway with the
|
|
@@ -308,7 +312,13 @@ variation axes or an explicit candidate list — keeps every candidate with its
|
|
|
308
312
|
composes a labelled contact sheet plus receipt for agent review. Texture cells repeat the
|
|
309
313
|
candidate 2×2 so seams are inspectable (--tile/--no-tile overrides). It never replaces existing
|
|
310
314
|
outputs and never promotes a candidate into authored source; review the sheet and select
|
|
311
|
-
explicitly
|
|
315
|
+
explicitly.
|
|
316
|
+
|
|
317
|
+
Icon compose and render are local and deterministic, with no model or network. They solve and
|
|
318
|
+
draw icon.place scenes, collections, construction programs, and recipes into inert SVG; a recipe
|
|
319
|
+
replays only when its recorded digests match. Construction-program languages: outline, sketch,
|
|
320
|
+
pen, crosshatch, engraving, stipple, halftone, glyph, flat, shaded, figure, cutpaper, woodcut,
|
|
321
|
+
offset.`,
|
|
312
322
|
style: `Usage:
|
|
313
323
|
slopcamera style list [--json]
|
|
314
324
|
slopcamera style show <id> [--json]
|
|
@@ -616,6 +626,15 @@ argv, receipts, or logs. When a configured wallet runs out, paid calls fail with
|
|
|
616
626
|
[--output <relative-path>] [--json]
|
|
617
627
|
slopcamera media color <video-path> [grade] [--video-stream <index>]
|
|
618
628
|
[--output <relative-path>] [--json]
|
|
629
|
+
slopcamera media soundtrack compose <score> [--output <file.json>]
|
|
630
|
+
[--format <compose|song|json|midi>] [--json]
|
|
631
|
+
slopcamera media soundtrack grid <score> [--output <file.json>] [--start-us <n>]
|
|
632
|
+
[--format <compose|song|json|midi>] [--json]
|
|
633
|
+
|
|
634
|
+
Soundtrack verbs delegate to @hraness/slopcamera. They verify a Soundfish loop or song (compose
|
|
635
|
+
text, song text, score JSON, or a Standard MIDI file) and derive the {bpm, beatOffsetUs,
|
|
636
|
+
beatsPerBar} music timing that HTML scene requests accept, plus section cue times. They render
|
|
637
|
+
no audio; pair the grid with the track you mix.
|
|
619
638
|
|
|
620
639
|
Audio effects may be combined in one deterministic chain:
|
|
621
640
|
--volume-db <-60..24>
|
|
@@ -725,7 +744,7 @@ export function completions(words: readonly string[]): readonly string[] {
|
|
|
725
744
|
if (command === "diagram") return words[1] === "sheets"
|
|
726
745
|
? ["init", "check", "render"]
|
|
727
746
|
: ["init", "check", "render", "sheets"];
|
|
728
|
-
if (command === "image") return ["vectorize", "generate", "gallery", "icon"];
|
|
747
|
+
if (command === "image") return words[1] === "icon" ? ["compose", "render"] : ["vectorize", "generate", "gallery", "icon"];
|
|
729
748
|
if (command === "workflows") return ["list", "show", "plan", "run"];
|
|
730
749
|
if (command === "code") return ["init", "check", "plan", "run"];
|
|
731
750
|
if (command === "runs") return ["list", "show", "resume", "approve", "cancel"];
|
|
@@ -748,7 +767,7 @@ export function completions(words: readonly string[]): readonly string[] {
|
|
|
748
767
|
if (command === "fillers") return ["list", "apply"];
|
|
749
768
|
if (command === "ai") return ["models", "provider-options", "image", "video", "speech", "transcribe"];
|
|
750
769
|
if (command === "credits") return ["status", "topup", "wait", "forget"];
|
|
751
|
-
if (command === "media") return ["audio", "color"];
|
|
770
|
+
if (command === "media") return words[1] === "soundtrack" ? ["compose", "grid"] : ["audio", "color", "soundtrack"];
|
|
752
771
|
if (command === "render") return ["plan", "run"];
|
|
753
772
|
if (command === "assets") return ["emoji"];
|
|
754
773
|
if (command === "outputs") return ["list", "open", "reveal"];
|
|
@@ -96,6 +96,8 @@ export const CLI_VERBS: readonly VerbRow[] = [
|
|
|
96
96
|
row("image generate", "operate", "Generate an image with Vercel AI Gateway"),
|
|
97
97
|
row("image gallery", "operate", "Generate a review gallery of image candidates"),
|
|
98
98
|
row("image icon", "operate", "Generate a line-art SVG icon"),
|
|
99
|
+
row("image icon compose", "operate", "Solve a vector icon scene and report its digests"),
|
|
100
|
+
row("image icon render", "operate", "Draw a vector icon scene or recipe to inert SVG"),
|
|
99
101
|
|
|
100
102
|
row("html catalog", "read", "List HTML scene profiles"),
|
|
101
103
|
row("html scaffold", "operate", "Write a new HTML scene"),
|
|
@@ -138,6 +140,8 @@ export const CLI_VERBS: readonly VerbRow[] = [
|
|
|
138
140
|
|
|
139
141
|
row("media audio", "operate", "Apply audio effects into a new file"),
|
|
140
142
|
row("media color", "operate", "Apply a color grade into a new file"),
|
|
143
|
+
row("media soundtrack compose", "operate", "Verify a loop or song score"),
|
|
144
|
+
row("media soundtrack grid", "operate", "Derive music timing and section cues from a score"),
|
|
141
145
|
|
|
142
146
|
row("outputs", "read", "Print the outputs folder"),
|
|
143
147
|
row("outputs list", "read", "List the files in the outputs folder, newest first"),
|