@nodetool-ai/cli 0.7.0-rc.23 → 0.8.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 +79 -0
- package/dist/.nodetool-build-stamp +1 -0
- package/dist/ExecutionTree.d.ts +2 -1
- package/dist/ExecutionTree.d.ts.map +1 -1
- package/dist/ExecutionTree.js +1 -1
- package/dist/ExecutionTree.js.map +1 -1
- package/dist/affected/affected.d.ts +50 -0
- package/dist/affected/affected.d.ts.map +1 -0
- package/dist/affected/affected.js +118 -0
- package/dist/affected/affected.js.map +1 -0
- package/dist/agent-toolbelt.d.ts +15 -0
- package/dist/agent-toolbelt.d.ts.map +1 -0
- package/dist/agent-toolbelt.js +28 -0
- package/dist/agent-toolbelt.js.map +1 -0
- package/dist/api-client.d.ts +12 -0
- package/dist/api-client.d.ts.map +1 -0
- package/dist/api-client.js +21 -0
- package/dist/api-client.js.map +1 -0
- package/dist/app-build/bundle.d.ts +15 -0
- package/dist/app-build/bundle.d.ts.map +1 -0
- package/dist/app-build/bundle.js +45 -0
- package/dist/app-build/bundle.js.map +1 -0
- package/dist/app-build/watch.d.ts +13 -0
- package/dist/app-build/watch.d.ts.map +1 -0
- package/dist/app-build/watch.js +25 -0
- package/dist/app-build/watch.js.map +1 -0
- package/dist/app-debug/app-target.d.ts +14 -0
- package/dist/app-debug/app-target.d.ts.map +1 -0
- package/dist/app-debug/app-target.js +120 -0
- package/dist/app-debug/app-target.js.map +1 -0
- package/dist/app-debug/harness.d.ts +27 -0
- package/dist/app-debug/harness.d.ts.map +1 -0
- package/dist/app-debug/harness.js +93 -0
- package/dist/app-debug/harness.js.map +1 -0
- package/dist/app-debug/index.d.ts +12 -0
- package/dist/app-debug/index.d.ts.map +1 -0
- package/dist/app-debug/index.js +9 -0
- package/dist/app-debug/index.js.map +1 -0
- package/dist/app.d.ts +38 -48
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +979 -677
- package/dist/app.js.map +1 -1
- package/dist/bash-tool.d.ts +13 -0
- package/dist/bash-tool.d.ts.map +1 -0
- package/dist/bash-tool.js +85 -0
- package/dist/bash-tool.js.map +1 -0
- package/dist/chat-codeact.d.ts +85 -0
- package/dist/chat-codeact.d.ts.map +1 -0
- package/dist/chat-codeact.js +141 -0
- package/dist/chat-codeact.js.map +1 -0
- package/dist/chat-context.d.ts +18 -0
- package/dist/chat-context.d.ts.map +1 -0
- package/dist/chat-context.js +27 -0
- package/dist/chat-context.js.map +1 -0
- package/dist/chat-media.d.ts +3 -0
- package/dist/chat-media.d.ts.map +1 -0
- package/dist/chat-media.js +46 -0
- package/dist/chat-media.js.map +1 -0
- package/dist/chat-prompts.d.ts +20 -0
- package/dist/chat-prompts.d.ts.map +1 -0
- package/dist/chat-prompts.js +42 -0
- package/dist/chat-prompts.js.map +1 -0
- package/dist/chat-sessions.d.ts +25 -0
- package/dist/chat-sessions.d.ts.map +1 -0
- package/dist/chat-sessions.js +153 -0
- package/dist/chat-sessions.js.map +1 -0
- package/dist/command-errors.d.ts +10 -0
- package/dist/command-errors.d.ts.map +1 -0
- package/dist/command-errors.js +15 -0
- package/dist/command-errors.js.map +1 -0
- package/dist/commands/__tests__/jtbd.test.d.ts +2 -0
- package/dist/commands/__tests__/jtbd.test.d.ts.map +1 -0
- package/dist/commands/__tests__/jtbd.test.js +120 -0
- package/dist/commands/__tests__/jtbd.test.js.map +1 -0
- package/dist/commands/__tests__/timeline-render-audio.test.d.ts +2 -0
- package/dist/commands/__tests__/timeline-render-audio.test.d.ts.map +1 -0
- package/dist/commands/__tests__/timeline-render-audio.test.js +53 -0
- package/dist/commands/__tests__/timeline-render-audio.test.js.map +1 -0
- package/dist/commands/__tests__/timeline-render.test.d.ts +2 -0
- package/dist/commands/__tests__/timeline-render.test.d.ts.map +1 -0
- package/dist/commands/__tests__/timeline-render.test.js +115 -0
- package/dist/commands/__tests__/timeline-render.test.js.map +1 -0
- package/dist/commands/affected.d.ts +9 -0
- package/dist/commands/affected.d.ts.map +1 -0
- package/dist/commands/affected.js +122 -0
- package/dist/commands/affected.js.map +1 -0
- package/dist/commands/agent.d.ts +26 -4
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +327 -306
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/app.d.ts +3 -0
- package/dist/commands/app.d.ts.map +1 -0
- package/dist/commands/app.js +381 -0
- package/dist/commands/app.js.map +1 -0
- package/dist/commands/apps.d.ts +15 -0
- package/dist/commands/apps.d.ts.map +1 -0
- package/dist/commands/apps.js +180 -0
- package/dist/commands/apps.js.map +1 -0
- package/dist/commands/auth.d.ts +12 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +154 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/collections.d.ts +10 -0
- package/dist/commands/collections.d.ts.map +1 -0
- package/dist/commands/collections.js +257 -0
- package/dist/commands/collections.js.map +1 -0
- package/dist/commands/costs.d.ts +15 -0
- package/dist/commands/costs.d.ts.map +1 -0
- package/dist/commands/costs.js +201 -0
- package/dist/commands/costs.js.map +1 -0
- package/dist/commands/db.d.ts +3 -0
- package/dist/commands/db.d.ts.map +1 -0
- package/dist/commands/db.js +176 -0
- package/dist/commands/db.js.map +1 -0
- package/dist/commands/debug.d.ts +13 -0
- package/dist/commands/debug.d.ts.map +1 -0
- package/dist/commands/debug.js +138 -0
- package/dist/commands/debug.js.map +1 -0
- package/dist/commands/deploy-helpers.d.ts +49 -18
- package/dist/commands/deploy-helpers.d.ts.map +1 -1
- package/dist/commands/deploy-helpers.js +10 -276
- package/dist/commands/deploy-helpers.js.map +1 -1
- package/dist/commands/deploy.d.ts +0 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +21 -217
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/eval.d.ts +152 -0
- package/dist/commands/eval.d.ts.map +1 -0
- package/dist/commands/eval.js +688 -0
- package/dist/commands/eval.js.map +1 -0
- package/dist/commands/game.d.ts +4 -0
- package/dist/commands/game.d.ts.map +1 -0
- package/dist/commands/game.js +395 -0
- package/dist/commands/game.js.map +1 -0
- package/dist/commands/generate.d.ts +17 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +324 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/generations.d.ts +17 -0
- package/dist/commands/generations.d.ts.map +1 -0
- package/dist/commands/generations.js +408 -0
- package/dist/commands/generations.js.map +1 -0
- package/dist/commands/harness.d.ts +19 -0
- package/dist/commands/harness.d.ts.map +1 -0
- package/dist/commands/harness.js +361 -0
- package/dist/commands/harness.js.map +1 -0
- package/dist/commands/js-script-validation-output.d.ts +7 -0
- package/dist/commands/js-script-validation-output.d.ts.map +1 -0
- package/dist/commands/js-script-validation-output.js +5 -0
- package/dist/commands/js-script-validation-output.js.map +1 -0
- package/dist/commands/js-script-versions.d.ts +53 -0
- package/dist/commands/js-script-versions.d.ts.map +1 -0
- package/dist/commands/js-script-versions.js +89 -0
- package/dist/commands/js-script-versions.js.map +1 -0
- package/dist/commands/js-script.d.ts +29 -0
- package/dist/commands/js-script.d.ts.map +1 -0
- package/dist/commands/js-script.js +227 -0
- package/dist/commands/js-script.js.map +1 -0
- package/dist/commands/jtbd.d.ts +38 -0
- package/dist/commands/jtbd.d.ts.map +1 -0
- package/dist/commands/jtbd.js +261 -0
- package/dist/commands/jtbd.js.map +1 -0
- package/dist/commands/local-db.d.ts +16 -0
- package/dist/commands/local-db.d.ts.map +1 -0
- package/dist/commands/local-db.js +33 -0
- package/dist/commands/local-db.js.map +1 -0
- package/dist/commands/migrate-code-inputs.d.ts +24 -0
- package/dist/commands/migrate-code-inputs.d.ts.map +1 -0
- package/dist/commands/migrate-code-inputs.js +120 -0
- package/dist/commands/migrate-code-inputs.js.map +1 -0
- package/dist/commands/models-hf.js +4 -4
- package/dist/commands/models-hf.js.map +1 -1
- package/dist/commands/models-recommended.d.ts.map +1 -1
- package/dist/commands/models-recommended.js +16 -24
- package/dist/commands/models-recommended.js.map +1 -1
- package/dist/commands/node.d.ts +10 -0
- package/dist/commands/node.d.ts.map +1 -0
- package/dist/commands/node.js +72 -0
- package/dist/commands/node.js.map +1 -0
- package/dist/commands/output.d.ts +24 -0
- package/dist/commands/output.d.ts.map +1 -0
- package/dist/commands/output.js +132 -0
- package/dist/commands/output.js.map +1 -0
- package/dist/commands/package-helpers.d.ts +1 -7
- package/dist/commands/package-helpers.d.ts.map +1 -1
- package/dist/commands/package-helpers.js +3 -26
- package/dist/commands/package-helpers.js.map +1 -1
- package/dist/commands/package.js +2 -2
- package/dist/commands/package.js.map +1 -1
- package/dist/commands/packs.d.ts +13 -0
- package/dist/commands/packs.d.ts.map +1 -0
- package/dist/commands/packs.js +60 -0
- package/dist/commands/packs.js.map +1 -0
- package/dist/commands/reliability.d.ts +14 -0
- package/dist/commands/reliability.d.ts.map +1 -0
- package/dist/commands/reliability.js +80 -0
- package/dist/commands/reliability.js.map +1 -0
- package/dist/commands/resource-read.d.ts +28 -0
- package/dist/commands/resource-read.d.ts.map +1 -0
- package/dist/commands/resource-read.js +316 -0
- package/dist/commands/resource-read.js.map +1 -0
- package/dist/commands/sketch-validation-output.d.ts +7 -0
- package/dist/commands/sketch-validation-output.d.ts.map +1 -0
- package/dist/commands/sketch-validation-output.js +5 -0
- package/dist/commands/sketch-validation-output.js.map +1 -0
- package/dist/commands/sketch-versions.d.ts +66 -0
- package/dist/commands/sketch-versions.d.ts.map +1 -0
- package/dist/commands/sketch-versions.js +108 -0
- package/dist/commands/sketch-versions.js.map +1 -0
- package/dist/commands/sketch.d.ts +21 -0
- package/dist/commands/sketch.d.ts.map +1 -0
- package/dist/commands/sketch.js +117 -0
- package/dist/commands/sketch.js.map +1 -0
- package/dist/commands/storage.d.ts +24 -0
- package/dist/commands/storage.d.ts.map +1 -0
- package/dist/commands/storage.js +112 -0
- package/dist/commands/storage.js.map +1 -0
- package/dist/commands/telegram.d.ts +11 -0
- package/dist/commands/telegram.d.ts.map +1 -0
- package/dist/commands/telegram.js +66 -0
- package/dist/commands/telegram.js.map +1 -0
- package/dist/commands/timeline-render.d.ts +80 -0
- package/dist/commands/timeline-render.d.ts.map +1 -0
- package/dist/commands/timeline-render.js +465 -0
- package/dist/commands/timeline-render.js.map +1 -0
- package/dist/commands/timeline-validation-output.d.ts +7 -0
- package/dist/commands/timeline-validation-output.d.ts.map +1 -0
- package/dist/commands/timeline-validation-output.js +9 -0
- package/dist/commands/timeline-validation-output.js.map +1 -0
- package/dist/commands/timeline-versions.d.ts +72 -0
- package/dist/commands/timeline-versions.d.ts.map +1 -0
- package/dist/commands/timeline-versions.js +108 -0
- package/dist/commands/timeline-versions.js.map +1 -0
- package/dist/commands/timeline.d.ts +22 -0
- package/dist/commands/timeline.d.ts.map +1 -0
- package/dist/commands/timeline.js +119 -0
- package/dist/commands/timeline.js.map +1 -0
- package/dist/commands/validate.d.ts +22 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +127 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/validation-output.d.ts +25 -0
- package/dist/commands/validation-output.d.ts.map +1 -0
- package/dist/commands/validation-output.js +29 -0
- package/dist/commands/validation-output.js.map +1 -0
- package/dist/commands/version-commands.d.ts +94 -0
- package/dist/commands/version-commands.d.ts.map +1 -0
- package/dist/commands/version-commands.js +227 -0
- package/dist/commands/version-commands.js.map +1 -0
- package/dist/commands/worker-models.d.ts +13 -0
- package/dist/commands/worker-models.d.ts.map +1 -0
- package/dist/commands/worker-models.js +207 -0
- package/dist/commands/worker-models.js.map +1 -0
- package/dist/commands/worker.d.ts +23 -0
- package/dist/commands/worker.d.ts.map +1 -0
- package/dist/commands/worker.js +374 -0
- package/dist/commands/worker.js.map +1 -0
- package/dist/debug/browser-runner.d.ts +21 -0
- package/dist/debug/browser-runner.d.ts.map +1 -0
- package/dist/debug/browser-runner.js +196 -0
- package/dist/debug/browser-runner.js.map +1 -0
- package/dist/debug/collector.d.ts +9 -0
- package/dist/debug/collector.d.ts.map +1 -0
- package/dist/debug/collector.js +9 -0
- package/dist/debug/collector.js.map +1 -0
- package/dist/debug/diff.d.ts +48 -0
- package/dist/debug/diff.d.ts.map +1 -0
- package/dist/debug/diff.js +68 -0
- package/dist/debug/diff.js.map +1 -0
- package/dist/debug/harness.d.ts +11 -0
- package/dist/debug/harness.d.ts.map +1 -0
- package/dist/debug/harness.js +103 -0
- package/dist/debug/harness.js.map +1 -0
- package/dist/debug/index.d.ts +17 -0
- package/dist/debug/index.d.ts.map +1 -0
- package/dist/debug/index.js +16 -0
- package/dist/debug/index.js.map +1 -0
- package/dist/debug/markdown.d.ts +3 -0
- package/dist/debug/markdown.d.ts.map +1 -0
- package/dist/debug/markdown.js +127 -0
- package/dist/debug/markdown.js.map +1 -0
- package/dist/debug/server-runner.d.ts +22 -0
- package/dist/debug/server-runner.d.ts.map +1 -0
- package/dist/debug/server-runner.js +164 -0
- package/dist/debug/server-runner.js.map +1 -0
- package/dist/debug/target.d.ts +34 -0
- package/dist/debug/target.d.ts.map +1 -0
- package/dist/debug/target.js +104 -0
- package/dist/debug/target.js.map +1 -0
- package/dist/debug/trace.d.ts +30 -0
- package/dist/debug/trace.d.ts.map +1 -0
- package/dist/debug/trace.js +87 -0
- package/dist/debug/trace.js.map +1 -0
- package/dist/debug/types.d.ts +82 -0
- package/dist/debug/types.d.ts.map +1 -0
- package/dist/debug/types.js +13 -0
- package/dist/debug/types.js.map +1 -0
- package/dist/debug/verdict.d.ts +3 -0
- package/dist/debug/verdict.d.ts.map +1 -0
- package/dist/debug/verdict.js +78 -0
- package/dist/debug/verdict.js.map +1 -0
- package/dist/debug/watch.d.ts +23 -0
- package/dist/debug/watch.d.ts.map +1 -0
- package/dist/debug/watch.js +68 -0
- package/dist/debug/watch.js.map +1 -0
- package/dist/diagnose.d.ts +139 -0
- package/dist/diagnose.d.ts.map +1 -0
- package/dist/diagnose.js +418 -0
- package/dist/diagnose.js.map +1 -0
- package/dist/evals/graph-runner.d.ts +8 -0
- package/dist/evals/graph-runner.d.ts.map +1 -0
- package/dist/evals/graph-runner.js +136 -0
- package/dist/evals/graph-runner.js.map +1 -0
- package/dist/harness/capability-coverage.d.ts +161 -0
- package/dist/harness/capability-coverage.d.ts.map +1 -0
- package/dist/harness/capability-coverage.js +266 -0
- package/dist/harness/capability-coverage.js.map +1 -0
- package/dist/harness/capability-table.d.ts +17 -0
- package/dist/harness/capability-table.d.ts.map +1 -0
- package/dist/harness/capability-table.js +3576 -0
- package/dist/harness/capability-table.js.map +1 -0
- package/dist/harness/changed-files.d.ts +18 -0
- package/dist/harness/changed-files.d.ts.map +1 -0
- package/dist/harness/changed-files.js +76 -0
- package/dist/harness/changed-files.js.map +1 -0
- package/dist/harness/declared-capabilities.d.ts +12 -0
- package/dist/harness/declared-capabilities.d.ts.map +1 -0
- package/dist/harness/declared-capabilities.js +21 -0
- package/dist/harness/declared-capabilities.js.map +1 -0
- package/dist/harness/registry.d.ts +162 -0
- package/dist/harness/registry.d.ts.map +1 -0
- package/dist/harness/registry.js +1738 -0
- package/dist/harness/registry.js.map +1 -0
- package/dist/index.js +121 -130
- package/dist/index.js.map +1 -1
- package/dist/interaction-script.d.ts +17 -0
- package/dist/interaction-script.d.ts.map +1 -0
- package/dist/interaction-script.js +47 -0
- package/dist/interaction-script.js.map +1 -0
- package/dist/js-script-debug/harness.d.ts +114 -0
- package/dist/js-script-debug/harness.d.ts.map +1 -0
- package/dist/js-script-debug/harness.js +252 -0
- package/dist/js-script-debug/harness.js.map +1 -0
- package/dist/js-script-debug/index.d.ts +9 -0
- package/dist/js-script-debug/index.d.ts.map +1 -0
- package/dist/js-script-debug/index.js +9 -0
- package/dist/js-script-debug/index.js.map +1 -0
- package/dist/js-script-debug/interactions.d.ts +19 -0
- package/dist/js-script-debug/interactions.d.ts.map +1 -0
- package/dist/js-script-debug/interactions.js +17 -0
- package/dist/js-script-debug/interactions.js.map +1 -0
- package/dist/js-script-debug/target.d.ts +20 -0
- package/dist/js-script-debug/target.d.ts.map +1 -0
- package/dist/js-script-debug/target.js +78 -0
- package/dist/js-script-debug/target.js.map +1 -0
- package/dist/local-model-interfaces.d.ts +20 -0
- package/dist/local-model-interfaces.d.ts.map +1 -0
- package/dist/local-model-interfaces.js +64 -0
- package/dist/local-model-interfaces.js.map +1 -0
- package/dist/local-secrets.d.ts +3 -0
- package/dist/local-secrets.d.ts.map +1 -0
- package/dist/local-secrets.js +16 -0
- package/dist/local-secrets.js.map +1 -0
- package/dist/markdown.d.ts.map +1 -1
- package/dist/markdown.js +7 -2
- package/dist/markdown.js.map +1 -1
- package/dist/node/run-node.d.ts +28 -0
- package/dist/node/run-node.d.ts.map +1 -0
- package/dist/node/run-node.js +76 -0
- package/dist/node/run-node.js.map +1 -0
- package/dist/node-registry.d.ts +13 -0
- package/dist/node-registry.d.ts.map +1 -0
- package/dist/node-registry.js +36 -0
- package/dist/node-registry.js.map +1 -0
- package/dist/nodetool.js +845 -309
- package/dist/nodetool.js.map +1 -1
- package/dist/numeric-options.d.ts +22 -0
- package/dist/numeric-options.d.ts.map +1 -0
- package/dist/numeric-options.js +45 -0
- package/dist/numeric-options.js.map +1 -0
- package/dist/permission-gate.d.ts +55 -0
- package/dist/permission-gate.d.ts.map +1 -0
- package/dist/permission-gate.js +118 -0
- package/dist/permission-gate.js.map +1 -0
- package/dist/predicates.d.ts +6 -0
- package/dist/predicates.d.ts.map +1 -0
- package/dist/predicates.js +6 -0
- package/dist/predicates.js.map +1 -0
- package/dist/providers.d.ts +73 -10
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +329 -97
- package/dist/providers.js.map +1 -1
- package/dist/readline-input.d.ts +13 -19
- package/dist/readline-input.d.ts.map +1 -1
- package/dist/readline-input.js +201 -190
- package/dist/readline-input.js.map +1 -1
- package/dist/run-budget.d.ts +40 -0
- package/dist/run-budget.d.ts.map +1 -0
- package/dist/run-budget.js +119 -0
- package/dist/run-budget.js.map +1 -0
- package/dist/run-dsl-supervised.d.ts +11 -0
- package/dist/run-dsl-supervised.d.ts.map +1 -0
- package/dist/run-dsl-supervised.js +82 -0
- package/dist/run-dsl-supervised.js.map +1 -0
- package/dist/run-dsl.d.ts +23 -0
- package/dist/run-dsl.d.ts.map +1 -1
- package/dist/run-dsl.js +40 -9
- package/dist/run-dsl.js.map +1 -1
- package/dist/run-json.d.ts +24 -0
- package/dist/run-json.d.ts.map +1 -0
- package/dist/run-json.js +132 -0
- package/dist/run-json.js.map +1 -0
- package/dist/sandbox-catalog.d.ts +12 -0
- package/dist/sandbox-catalog.d.ts.map +1 -0
- package/dist/sandbox-catalog.js +27 -0
- package/dist/sandbox-catalog.js.map +1 -0
- package/dist/settings.d.ts +11 -10
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +71 -13
- package/dist/settings.js.map +1 -1
- package/dist/sketch-debug/harness.d.ts +87 -0
- package/dist/sketch-debug/harness.d.ts.map +1 -0
- package/dist/sketch-debug/harness.js +178 -0
- package/dist/sketch-debug/harness.js.map +1 -0
- package/dist/sketch-debug/index.d.ts +9 -0
- package/dist/sketch-debug/index.d.ts.map +1 -0
- package/dist/sketch-debug/index.js +9 -0
- package/dist/sketch-debug/index.js.map +1 -0
- package/dist/sketch-debug/interactions.d.ts +19 -0
- package/dist/sketch-debug/interactions.d.ts.map +1 -0
- package/dist/sketch-debug/interactions.js +17 -0
- package/dist/sketch-debug/interactions.js.map +1 -0
- package/dist/sketch-debug/target.d.ts +48 -0
- package/dist/sketch-debug/target.d.ts.map +1 -0
- package/dist/sketch-debug/target.js +138 -0
- package/dist/sketch-debug/target.js.map +1 -0
- package/dist/stdin.d.ts +18 -19
- package/dist/stdin.d.ts.map +1 -1
- package/dist/stdin.js +159 -157
- package/dist/stdin.js.map +1 -1
- package/dist/supervisor.d.ts +97 -0
- package/dist/supervisor.d.ts.map +1 -0
- package/dist/supervisor.js +194 -0
- package/dist/supervisor.js.map +1 -0
- package/dist/terminal-clipboard.d.ts +3 -0
- package/dist/terminal-clipboard.d.ts.map +1 -0
- package/dist/terminal-clipboard.js +24 -0
- package/dist/terminal-clipboard.js.map +1 -0
- package/dist/terminal-mouse.d.ts +24 -0
- package/dist/terminal-mouse.d.ts.map +1 -0
- package/dist/terminal-mouse.js +84 -0
- package/dist/terminal-mouse.js.map +1 -0
- package/dist/terminal-screen.d.ts +41 -0
- package/dist/terminal-screen.d.ts.map +1 -0
- package/dist/terminal-screen.js +228 -0
- package/dist/terminal-screen.js.map +1 -0
- package/dist/timeline-debug/harness.d.ts +79 -0
- package/dist/timeline-debug/harness.d.ts.map +1 -0
- package/dist/timeline-debug/harness.js +155 -0
- package/dist/timeline-debug/harness.js.map +1 -0
- package/dist/timeline-debug/index.d.ts +9 -0
- package/dist/timeline-debug/index.d.ts.map +1 -0
- package/dist/timeline-debug/index.js +9 -0
- package/dist/timeline-debug/index.js.map +1 -0
- package/dist/timeline-debug/interactions.d.ts +19 -0
- package/dist/timeline-debug/interactions.d.ts.map +1 -0
- package/dist/timeline-debug/interactions.js +17 -0
- package/dist/timeline-debug/interactions.js.map +1 -0
- package/dist/timeline-debug/target.d.ts +34 -0
- package/dist/timeline-debug/target.d.ts.map +1 -0
- package/dist/timeline-debug/target.js +132 -0
- package/dist/timeline-debug/target.js.map +1 -0
- package/dist/tool-format.d.ts +54 -0
- package/dist/tool-format.d.ts.map +1 -0
- package/dist/tool-format.js +360 -0
- package/dist/tool-format.js.map +1 -0
- package/dist/useExecutionState.d.ts.map +1 -1
- package/dist/useExecutionState.js +8 -4
- package/dist/useExecutionState.js.map +1 -1
- package/dist/validate/index.d.ts +28 -0
- package/dist/validate/index.d.ts.map +1 -0
- package/dist/validate/index.js +51 -0
- package/dist/validate/index.js.map +1 -0
- package/dist/websocket-client.d.ts +78 -15
- package/dist/websocket-client.d.ts.map +1 -1
- package/dist/websocket-client.js +497 -171
- package/dist/websocket-client.js.map +1 -1
- package/package.json +62 -31
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nodetool timeline render` — render a timeline's picture through the GPU
|
|
3
|
+
* compositor behind the Render Timeline node, from a JSON file or a
|
|
4
|
+
* `timeline_sequences` row id.
|
|
5
|
+
*
|
|
6
|
+
* Outputs an encoded video, individual PNG stills, or one contact-sheet PNG.
|
|
7
|
+
* Stills and sheets show the exported pixels for frame-by-frame review.
|
|
8
|
+
*
|
|
9
|
+
* Video exports mix the timeline audio after compositing the picture.
|
|
10
|
+
*/
|
|
11
|
+
import type { Command } from "commander";
|
|
12
|
+
import type { TimelineSequenceRecord } from "../timeline-debug/target.js";
|
|
13
|
+
interface TimelineRenderCliOptions {
|
|
14
|
+
out?: string;
|
|
15
|
+
format?: string;
|
|
16
|
+
frames?: string;
|
|
17
|
+
stills?: boolean;
|
|
18
|
+
sheet?: string | boolean;
|
|
19
|
+
only?: string;
|
|
20
|
+
scale?: string;
|
|
21
|
+
bitrate?: string;
|
|
22
|
+
json?: boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Parse a frame selection such as `0-89` or `175,290,380-390` into sorted,
|
|
26
|
+
* unique frame indices. Ranges are inclusive. An index at or past
|
|
27
|
+
* `totalFrames` is an error, so a typo does not render an empty selection.
|
|
28
|
+
*/
|
|
29
|
+
export declare function parseFrameSpec(spec: string, totalFrames: number): number[];
|
|
30
|
+
/** The clip fields `--only` reads. */
|
|
31
|
+
interface SubsetClip {
|
|
32
|
+
id: string;
|
|
33
|
+
name?: string;
|
|
34
|
+
parentId?: string;
|
|
35
|
+
matte?: {
|
|
36
|
+
sourceClipId: string;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The clips `--only` renders: every clip whose id or name is in the
|
|
41
|
+
* comma-separated list, the children of a selected group, and what those clips
|
|
42
|
+
* need to render as they do in context — their ancestor groups (whose
|
|
43
|
+
* transforms they inherit) and their matte source clips. Document order is
|
|
44
|
+
* kept. A token that matches no clip is an error.
|
|
45
|
+
*/
|
|
46
|
+
export declare function selectClipSubset<T extends SubsetClip>(clips: T[], list: string): T[];
|
|
47
|
+
/** A coverage row whose Frame cell is not a frame index. */
|
|
48
|
+
export interface SkippedCoverageRow {
|
|
49
|
+
/** The row's other cells, joined as they read in the table. */
|
|
50
|
+
row: string;
|
|
51
|
+
value: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Read the frame indices a builder claims from the Markdown table in its
|
|
55
|
+
* leading comment whose last column is "Frame". A row whose Frame cell is not
|
|
56
|
+
* a non-negative integer (a dash for audio, say) is returned in `skipped`.
|
|
57
|
+
* Frames keep table order; `parseFrameSpec` sorts them and checks the range.
|
|
58
|
+
*/
|
|
59
|
+
export declare function parseCoverageFrames(source: string): {
|
|
60
|
+
frames: number[];
|
|
61
|
+
skipped: SkippedCoverageRow[];
|
|
62
|
+
};
|
|
63
|
+
export declare function registerTimelineRenderCommand(timeline: Command, loadSequence: () => Promise<(id: string) => Promise<TimelineSequenceRecord | null>>): void;
|
|
64
|
+
interface TimelineRenderResult {
|
|
65
|
+
out: string;
|
|
66
|
+
format: string;
|
|
67
|
+
stills: boolean;
|
|
68
|
+
sheet: boolean;
|
|
69
|
+
frames: number;
|
|
70
|
+
width: number;
|
|
71
|
+
height: number;
|
|
72
|
+
fps: number;
|
|
73
|
+
elapsedMs: number;
|
|
74
|
+
skippedClips: string[];
|
|
75
|
+
/** Coverage rows `--frames coverage:<file>` could not read a frame from. */
|
|
76
|
+
coverageSkipped?: SkippedCoverageRow[];
|
|
77
|
+
}
|
|
78
|
+
export declare function runTimelineRender(ref: string, opts: TimelineRenderCliOptions, loadSequence: (id: string) => Promise<TimelineSequenceRecord | null>, renderComposited?: typeof import("@nodetool-ai/video-nodes/nodes/timeline/compositeRender").renderTimelineComposited): Promise<TimelineRenderResult>;
|
|
79
|
+
export {};
|
|
80
|
+
//# sourceMappingURL=timeline-render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-render.d.ts","sourceRoot":"","sources":["../../src/commands/timeline-render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAK1E,UAAU,wBAAwB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CA2B1E;AAED,sCAAsC;AACtC,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CAClC;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,UAAU,EACnD,KAAK,EAAE,CAAC,EAAE,EACV,IAAI,EAAE,MAAM,GACX,CAAC,EAAE,CAqEL;AAED,4DAA4D;AAC5D,MAAM,WAAW,kBAAkB;IACjC,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG;IACnD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,kBAAkB,EAAE,CAAC;CAC/B,CA0DA;AAyFD,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,OAAO,EACjB,YAAY,EAAE,MAAM,OAAO,CACzB,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CACvD,GACA,IAAI,CA0DN;AAED,UAAU,oBAAoB;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,4EAA4E;IAC5E,eAAe,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACxC;AAkBD,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,wBAAwB,EAC9B,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,EACpE,gBAAgB,CAAC,EAAE,cACjB,yDAAyD,EACzD,wBAAwB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CAyM/B"}
|
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
import { printCommandError } from "../command-errors.js";
|
|
2
|
+
/** A contact sheet past this many frames has cells too small to review. */
|
|
3
|
+
const MAX_SHEET_FRAMES = 60;
|
|
4
|
+
/**
|
|
5
|
+
* Parse a frame selection such as `0-89` or `175,290,380-390` into sorted,
|
|
6
|
+
* unique frame indices. Ranges are inclusive. An index at or past
|
|
7
|
+
* `totalFrames` is an error, so a typo does not render an empty selection.
|
|
8
|
+
*/
|
|
9
|
+
export function parseFrameSpec(spec, totalFrames) {
|
|
10
|
+
const frames = new Set();
|
|
11
|
+
for (const part of spec.split(",")) {
|
|
12
|
+
const token = part.trim();
|
|
13
|
+
if (token === "")
|
|
14
|
+
continue;
|
|
15
|
+
const match = /^(\d+)(?:-(\d+))?$/.exec(token);
|
|
16
|
+
if (!match) {
|
|
17
|
+
throw new Error(`Invalid frame selection "${token}". Use indices and inclusive ranges, e.g. 175,290,380-390.`);
|
|
18
|
+
}
|
|
19
|
+
const first = Number(match[1]);
|
|
20
|
+
const last = match[2] === undefined ? first : Number(match[2]);
|
|
21
|
+
if (last < first) {
|
|
22
|
+
throw new Error(`Frame range "${token}" ends before it starts.`);
|
|
23
|
+
}
|
|
24
|
+
if (last >= totalFrames) {
|
|
25
|
+
throw new Error(`Frame ${last} is outside the timeline, which has frames 0-${totalFrames - 1}.`);
|
|
26
|
+
}
|
|
27
|
+
for (let frame = first; frame <= last; frame++)
|
|
28
|
+
frames.add(frame);
|
|
29
|
+
}
|
|
30
|
+
if (frames.size === 0) {
|
|
31
|
+
throw new Error("The frame selection is empty.");
|
|
32
|
+
}
|
|
33
|
+
return [...frames].sort((a, b) => a - b);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The clips `--only` renders: every clip whose id or name is in the
|
|
37
|
+
* comma-separated list, the children of a selected group, and what those clips
|
|
38
|
+
* need to render as they do in context — their ancestor groups (whose
|
|
39
|
+
* transforms they inherit) and their matte source clips. Document order is
|
|
40
|
+
* kept. A token that matches no clip is an error.
|
|
41
|
+
*/
|
|
42
|
+
export function selectClipSubset(clips, list) {
|
|
43
|
+
const tokens = list
|
|
44
|
+
.split(",")
|
|
45
|
+
.map((token) => token.trim())
|
|
46
|
+
.filter((token) => token !== "");
|
|
47
|
+
if (tokens.length === 0) {
|
|
48
|
+
throw new Error("The --only list is empty.");
|
|
49
|
+
}
|
|
50
|
+
const unmatched = tokens.filter((token) => !clips.some((clip) => clip.id === token || clip.name === token));
|
|
51
|
+
if (unmatched.length > 0) {
|
|
52
|
+
throw new Error(`No clip has the id or name ${unmatched.map((t) => `"${t}"`).join(", ")}.`);
|
|
53
|
+
}
|
|
54
|
+
const byId = new Map(clips.map((clip) => [clip.id, clip]));
|
|
55
|
+
const children = new Map();
|
|
56
|
+
for (const clip of clips) {
|
|
57
|
+
if (clip.parentId === undefined) {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
const siblings = children.get(clip.parentId) ?? [];
|
|
61
|
+
siblings.push(clip.id);
|
|
62
|
+
children.set(clip.parentId, siblings);
|
|
63
|
+
}
|
|
64
|
+
const kept = new Set();
|
|
65
|
+
const pending = [];
|
|
66
|
+
// A root brings its whole subtree; everything kept brings its ancestors and
|
|
67
|
+
// its matte source, which is itself a root.
|
|
68
|
+
const addRoot = (id) => {
|
|
69
|
+
const stack = [id];
|
|
70
|
+
while (stack.length > 0) {
|
|
71
|
+
const next = stack.pop();
|
|
72
|
+
if (next === undefined) {
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
if (kept.has(next) || !byId.has(next)) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
kept.add(next);
|
|
79
|
+
pending.push(next);
|
|
80
|
+
stack.push(...(children.get(next) ?? []));
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
for (const clip of clips) {
|
|
84
|
+
if (tokens.includes(clip.id) || tokens.includes(clip.name ?? "")) {
|
|
85
|
+
addRoot(clip.id);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
while (pending.length > 0) {
|
|
89
|
+
const next = pending.pop();
|
|
90
|
+
const clip = next === undefined ? undefined : byId.get(next);
|
|
91
|
+
if (clip === undefined) {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (clip.parentId !== undefined && !kept.has(clip.parentId)) {
|
|
95
|
+
if (byId.has(clip.parentId)) {
|
|
96
|
+
kept.add(clip.parentId);
|
|
97
|
+
pending.push(clip.parentId);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (clip.matte) {
|
|
101
|
+
addRoot(clip.matte.sourceClipId);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return clips.filter((clip) => kept.has(clip.id));
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Read the frame indices a builder claims from the Markdown table in its
|
|
108
|
+
* leading comment whose last column is "Frame". A row whose Frame cell is not
|
|
109
|
+
* a non-negative integer (a dash for audio, say) is returned in `skipped`.
|
|
110
|
+
* Frames keep table order; `parseFrameSpec` sorts them and checks the range.
|
|
111
|
+
*/
|
|
112
|
+
export function parseCoverageFrames(source) {
|
|
113
|
+
const comment = [];
|
|
114
|
+
let inBlock = false;
|
|
115
|
+
for (const raw of source.split(/\r?\n/)) {
|
|
116
|
+
const line = raw.trim();
|
|
117
|
+
if (inBlock) {
|
|
118
|
+
if (line.endsWith("*/")) {
|
|
119
|
+
inBlock = false;
|
|
120
|
+
}
|
|
121
|
+
comment.push(line.replace(/\*\/$/, "").replace(/^\*\s?/, ""));
|
|
122
|
+
}
|
|
123
|
+
else if (line.startsWith("#!") || (line === "" && comment.length === 0)) {
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
else if (line.startsWith("//")) {
|
|
127
|
+
comment.push(line.replace(/^\/\/\s?/, ""));
|
|
128
|
+
}
|
|
129
|
+
else if (line.startsWith("/*")) {
|
|
130
|
+
inBlock = !line.endsWith("*/");
|
|
131
|
+
comment.push(line.replace(/^\/\*+\s?/, "").replace(/\*\/$/, ""));
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
const cellsOf = (line) => line
|
|
138
|
+
.trim()
|
|
139
|
+
.replace(/^\|/, "")
|
|
140
|
+
.replace(/\|$/, "")
|
|
141
|
+
.split("|")
|
|
142
|
+
.map((cell) => cell.trim());
|
|
143
|
+
const header = comment.findIndex((line) => line.trim().startsWith("|") &&
|
|
144
|
+
cellsOf(line).at(-1)?.toLowerCase() === "frame");
|
|
145
|
+
if (header === -1) {
|
|
146
|
+
throw new Error('The leading comment has no Markdown table whose last column is "Frame".');
|
|
147
|
+
}
|
|
148
|
+
const frames = [];
|
|
149
|
+
const skipped = [];
|
|
150
|
+
for (const line of comment.slice(header + 1)) {
|
|
151
|
+
if (!line.trim().startsWith("|")) {
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
const cells = cellsOf(line);
|
|
155
|
+
if (cells.every((cell) => /^:?-+:?$/.test(cell))) {
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
const value = cells.at(-1) ?? "";
|
|
159
|
+
if (/^\d+$/.test(value)) {
|
|
160
|
+
frames.push(Number(value));
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
skipped.push({ row: cells.slice(0, -1).join(" | "), value });
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return { frames, skipped };
|
|
167
|
+
}
|
|
168
|
+
/** Round a scaled dimension down to an even number, as H.264 requires. */
|
|
169
|
+
function evenScaled(size, scale) {
|
|
170
|
+
return Math.max(2, Math.floor((size * scale) / 2) * 2);
|
|
171
|
+
}
|
|
172
|
+
function positiveNumber(value, flag) {
|
|
173
|
+
if (value === undefined) {
|
|
174
|
+
return undefined;
|
|
175
|
+
}
|
|
176
|
+
const parsed = Number(value);
|
|
177
|
+
if (!Number.isFinite(parsed) || parsed <= 0) {
|
|
178
|
+
throw new Error(`${flag} must be a positive number (got "${value}").`);
|
|
179
|
+
}
|
|
180
|
+
return parsed;
|
|
181
|
+
}
|
|
182
|
+
/** A file-system-safe name for the default output path. */
|
|
183
|
+
function slugOf(name) {
|
|
184
|
+
const slug = name
|
|
185
|
+
.toLowerCase()
|
|
186
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
187
|
+
.replace(/^-+|-+$/g, "");
|
|
188
|
+
return slug || "timeline";
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* The shipped `package://` assets in a checkout, which the server serves from
|
|
192
|
+
* `packages/base-nodes/nodetool/assets`. The runtime reads that directory when
|
|
193
|
+
* `NODETOOL_PACKAGE_ASSETS_DIR` names it and otherwise asks a running server,
|
|
194
|
+
* so without this a rendered example's stills need the server up.
|
|
195
|
+
*/
|
|
196
|
+
async function checkoutPackageAssetsDir() {
|
|
197
|
+
const { existsSync } = await import("node:fs");
|
|
198
|
+
const { createRequire } = await import("node:module");
|
|
199
|
+
const path = await import("node:path");
|
|
200
|
+
try {
|
|
201
|
+
const entry = createRequire(import.meta.url).resolve("@nodetool-ai/base-nodes");
|
|
202
|
+
const dir = path.resolve(path.dirname(entry), "..", "nodetool", "assets");
|
|
203
|
+
return existsSync(dir) ? dir : null;
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
// Not installed beside the CLI: package assets resolve over HTTP.
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Resolve clip assets to local files through the local asset store. The
|
|
212
|
+
* database opens on the first asset a clip needs, so a pure motion-graphics
|
|
213
|
+
* timeline renders without one.
|
|
214
|
+
*/
|
|
215
|
+
async function localAssetResolver(workDir) {
|
|
216
|
+
let files;
|
|
217
|
+
const open = async () => {
|
|
218
|
+
const { initDb } = await import("@nodetool-ai/models");
|
|
219
|
+
const { getDefaultAssetsPath, getDefaultDbPath } = await import("@nodetool-ai/config");
|
|
220
|
+
const { ProcessingContext } = await import("@nodetool-ai/runtime");
|
|
221
|
+
const { FileStorageAdapter } = await import("@nodetool-ai/storage");
|
|
222
|
+
const { AssetFiles } = await import("@nodetool-ai/video-nodes/nodes/timeline/assetFiles");
|
|
223
|
+
const packageAssets = await checkoutPackageAssetsDir();
|
|
224
|
+
initDb(getDefaultDbPath());
|
|
225
|
+
const context = new ProcessingContext({
|
|
226
|
+
jobId: `timeline-render-${Date.now()}`,
|
|
227
|
+
workflowId: null,
|
|
228
|
+
userId: "1",
|
|
229
|
+
storage: new FileStorageAdapter(getDefaultAssetsPath()),
|
|
230
|
+
...(packageAssets && {
|
|
231
|
+
environment: { NODETOOL_PACKAGE_ASSETS_DIR: packageAssets }
|
|
232
|
+
})
|
|
233
|
+
});
|
|
234
|
+
return new AssetFiles(workDir, context);
|
|
235
|
+
};
|
|
236
|
+
return async (assetId) => {
|
|
237
|
+
files ??= open();
|
|
238
|
+
return (await files).path(assetId);
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
export function registerTimelineRenderCommand(timeline, loadSequence) {
|
|
242
|
+
timeline
|
|
243
|
+
.command("render <timeline_id_or_file>")
|
|
244
|
+
.description("Render a timeline through the GPU compositor the Render Timeline node uses. Takes a timeline JSON file or a timeline_sequences row id. Writes a video with audio, stills, or a contact sheet")
|
|
245
|
+
.option("--out <path>", "Output file, or the output directory with loose --stills (default: nodetool-render/<name>.<ext>, <name>-frames/, or <name>-sheet.png)")
|
|
246
|
+
.option("--format <format>", "mp4, webm, mov or png_sequence", "mp4")
|
|
247
|
+
.option("--frames <spec>", "Render only these frames: indices and inclusive ranges, e.g. 0-89 or 175,290,380-390, or coverage:<file> for the Frame column of the table in a builder file's leading comment")
|
|
248
|
+
.option("--stills", "Write each selected frame as frame_<index>.png instead of encoding a video")
|
|
249
|
+
.option("--sheet [columns]", `Write the selected frames as one labelled contact-sheet PNG instead of loose stills (default 3 columns, at most ${MAX_SHEET_FRAMES} frames)`)
|
|
250
|
+
.option("--only <clips>", "Render only these clips, by comma-separated name or id, with their ancestor groups, the children of a selected group, and their matte sources")
|
|
251
|
+
.option("--scale <n>", "Render at this fraction of the sequence size, e.g. 0.5 for a fast draft", "1")
|
|
252
|
+
.option("--bitrate <bps>", "Video bitrate in bits per second")
|
|
253
|
+
.option("--json", "Print the result as JSON")
|
|
254
|
+
.action(async (ref, opts) => {
|
|
255
|
+
try {
|
|
256
|
+
const result = await runTimelineRender(ref, opts, await loadSequence());
|
|
257
|
+
if (opts.json) {
|
|
258
|
+
console.log(JSON.stringify(result, null, 2));
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
console.log(`${result.frames} frame(s) at ${result.width}x${result.height} in ${(result.elapsedMs / 1000).toFixed(1)}s -> ${result.out}`);
|
|
262
|
+
for (const { row, value } of result.coverageSkipped ?? []) {
|
|
263
|
+
console.log(`Skipped coverage row "${row}": "${value}" is not a frame index`);
|
|
264
|
+
}
|
|
265
|
+
if (result.skippedClips.length > 0) {
|
|
266
|
+
console.log(`Skipped clips: ${result.skippedClips.join(", ")}`);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
process.exit(0);
|
|
270
|
+
}
|
|
271
|
+
catch (e) {
|
|
272
|
+
printCommandError(e, opts.json);
|
|
273
|
+
process.exit(1);
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
function sheetColumns(value) {
|
|
278
|
+
if (value === undefined || value === false) {
|
|
279
|
+
return undefined;
|
|
280
|
+
}
|
|
281
|
+
if (value === true) {
|
|
282
|
+
return 3;
|
|
283
|
+
}
|
|
284
|
+
const columns = Number(value);
|
|
285
|
+
if (!Number.isInteger(columns) || columns < 1) {
|
|
286
|
+
throw new Error(`--sheet takes a whole number of columns (got "${value}").`);
|
|
287
|
+
}
|
|
288
|
+
return columns;
|
|
289
|
+
}
|
|
290
|
+
export async function runTimelineRender(ref, opts, loadSequence, renderComposited) {
|
|
291
|
+
const fs = await import("node:fs/promises");
|
|
292
|
+
const os = await import("node:os");
|
|
293
|
+
const path = await import("node:path");
|
|
294
|
+
const { resolveTimelineTarget } = await import("../timeline-debug/target.js");
|
|
295
|
+
const { renderTimelineComposited } = await import("@nodetool-ai/video-nodes/nodes/timeline/compositeRender");
|
|
296
|
+
const { resolveTimelineOutput } = await import("@nodetool-ai/video-nodes/nodes/timeline/outputFormats");
|
|
297
|
+
const { encodeRgbaPng } = await import("@nodetool-ai/video-nodes/nodes/timeline/pngSequence");
|
|
298
|
+
const { mixCompositedTimelineAudio } = await import("@nodetool-ai/video-nodes/nodes/timeline");
|
|
299
|
+
const { contactSheetLayout, createContactSheet } = await import("@nodetool-ai/video-nodes/nodes/timeline/contactSheet");
|
|
300
|
+
const resolved = await resolveTimelineTarget(ref, { loadSequence });
|
|
301
|
+
const { target, meta } = resolved;
|
|
302
|
+
const fps = meta.fps && meta.fps > 0 ? meta.fps : 30;
|
|
303
|
+
const scale = positiveNumber(opts.scale, "--scale") ?? 1;
|
|
304
|
+
const sequenceWidth = meta.width && meta.width > 0 ? meta.width : 1920;
|
|
305
|
+
const sequenceHeight = meta.height && meta.height > 0 ? meta.height : 1080;
|
|
306
|
+
const width = evenScaled(sequenceWidth, scale);
|
|
307
|
+
const height = evenScaled(sequenceHeight, scale);
|
|
308
|
+
const durationMs = meta.durationMs && meta.durationMs > 0
|
|
309
|
+
? meta.durationMs
|
|
310
|
+
: resolved.document.clips.reduce((end, clip) => Math.max(end, clip.startMs + clip.durationMs), 0);
|
|
311
|
+
if (durationMs <= 0) {
|
|
312
|
+
throw new Error("The timeline has zero duration: it has no clips.");
|
|
313
|
+
}
|
|
314
|
+
const totalFrames = Math.max(1, Math.round((durationMs / 1000) * fps));
|
|
315
|
+
// Duration and frame count come from the whole document, so an --only
|
|
316
|
+
// render keeps the timeline's frame indices.
|
|
317
|
+
const document = opts.only
|
|
318
|
+
? {
|
|
319
|
+
...resolved.document,
|
|
320
|
+
clips: selectClipSubset(resolved.document.clips, opts.only)
|
|
321
|
+
}
|
|
322
|
+
: resolved.document;
|
|
323
|
+
let frames;
|
|
324
|
+
let coverageSkipped;
|
|
325
|
+
if (opts.frames?.startsWith("coverage:")) {
|
|
326
|
+
const file = path.resolve(opts.frames.slice("coverage:".length));
|
|
327
|
+
const coverage = parseCoverageFrames(await fs.readFile(file, "utf8"));
|
|
328
|
+
if (coverage.frames.length === 0) {
|
|
329
|
+
throw new Error(`The coverage table in ${file} names no frame index.`);
|
|
330
|
+
}
|
|
331
|
+
frames = parseFrameSpec(coverage.frames.join(","), totalFrames);
|
|
332
|
+
coverageSkipped = coverage.skipped;
|
|
333
|
+
}
|
|
334
|
+
else if (opts.frames) {
|
|
335
|
+
frames = parseFrameSpec(opts.frames, totalFrames);
|
|
336
|
+
}
|
|
337
|
+
const columns = sheetColumns(opts.sheet);
|
|
338
|
+
const sheetFrames = columns === undefined
|
|
339
|
+
? undefined
|
|
340
|
+
: (frames ?? Array.from({ length: totalFrames }, (_, frame) => frame));
|
|
341
|
+
if (sheetFrames && sheetFrames.length > MAX_SHEET_FRAMES) {
|
|
342
|
+
throw new Error(`A contact sheet of ${sheetFrames.length} frames is too small to review. Pick at most ${MAX_SHEET_FRAMES} with --frames.`);
|
|
343
|
+
}
|
|
344
|
+
const stills = opts.stills === true || sheetFrames !== undefined;
|
|
345
|
+
const bitrate = positiveNumber(opts.bitrate, "--bitrate");
|
|
346
|
+
const output = resolveTimelineOutput({
|
|
347
|
+
format: opts.format,
|
|
348
|
+
...(bitrate !== undefined && { bitrate })
|
|
349
|
+
});
|
|
350
|
+
const name = target.name ?? path.basename(ref).replace(/\.json$/i, "");
|
|
351
|
+
const out = path.resolve(opts.out ??
|
|
352
|
+
path.join("nodetool-render", sheetFrames
|
|
353
|
+
? `${slugOf(name)}-sheet.png`
|
|
354
|
+
: stills
|
|
355
|
+
? `${slugOf(name)}-frames`
|
|
356
|
+
: `${slugOf(name)}.${output.extension}`));
|
|
357
|
+
const sheetOutIsDirectory = sheetFrames !== undefined &&
|
|
358
|
+
((await fs.stat(out).catch(() => undefined))?.isDirectory() ||
|
|
359
|
+
opts.out?.endsWith(path.sep));
|
|
360
|
+
const sheetOut = sheetOutIsDirectory
|
|
361
|
+
? path.join(out, `${slugOf(name)}-sheet.png`)
|
|
362
|
+
: out;
|
|
363
|
+
// A sheet is one file; loose stills fill a directory.
|
|
364
|
+
const stillsDir = stills && !sheetFrames;
|
|
365
|
+
await fs.mkdir(stillsDir ? out : path.dirname(sheetOut), { recursive: true });
|
|
366
|
+
const sheet = sheetFrames &&
|
|
367
|
+
createContactSheet(contactSheetLayout({
|
|
368
|
+
count: sheetFrames.length,
|
|
369
|
+
columns: columns ?? 3,
|
|
370
|
+
frameWidth: width,
|
|
371
|
+
frameHeight: height
|
|
372
|
+
}));
|
|
373
|
+
const sheetCell = new Map(sheetFrames?.map((frame, index) => [frame, index]));
|
|
374
|
+
const workDir = await fs.mkdtemp(path.join(os.tmpdir(), "nodetool-render-"));
|
|
375
|
+
const now = new Date().toISOString();
|
|
376
|
+
const selected = frames?.length ?? totalFrames;
|
|
377
|
+
let lastTenth = -1;
|
|
378
|
+
const started = Date.now();
|
|
379
|
+
try {
|
|
380
|
+
const sequence = {
|
|
381
|
+
id: target.kind === "id" ? ref : slugOf(name),
|
|
382
|
+
projectId: "cli",
|
|
383
|
+
name,
|
|
384
|
+
fps,
|
|
385
|
+
width: sequenceWidth,
|
|
386
|
+
height: sequenceHeight,
|
|
387
|
+
durationMs,
|
|
388
|
+
...document,
|
|
389
|
+
createdAt: now,
|
|
390
|
+
updatedAt: now
|
|
391
|
+
};
|
|
392
|
+
const resolveAssetPath = await localAssetResolver(workDir);
|
|
393
|
+
const basePath = stills
|
|
394
|
+
? sheetOut
|
|
395
|
+
: path.join(workDir, `composited.${output.extension}`);
|
|
396
|
+
console.error(`Rendering ${selected} frame(s) at ${width}x${height}. The first frame compiles the GPU pipelines and can take a while.`);
|
|
397
|
+
const render = renderComposited ?? renderTimelineComposited;
|
|
398
|
+
const { skippedClips } = await render({
|
|
399
|
+
sequence,
|
|
400
|
+
width,
|
|
401
|
+
height,
|
|
402
|
+
fps,
|
|
403
|
+
durationMs,
|
|
404
|
+
resolveAssetPath,
|
|
405
|
+
outPath: basePath,
|
|
406
|
+
output,
|
|
407
|
+
...(frames && { frames }),
|
|
408
|
+
...(stills && {
|
|
409
|
+
writeFrame: async (frame, rgba) => {
|
|
410
|
+
if (sheet) {
|
|
411
|
+
const index = sheetCell.get(frame);
|
|
412
|
+
if (index === undefined) {
|
|
413
|
+
throw new Error(`Rendered frame ${frame} is absent from the sheet selection.`);
|
|
414
|
+
}
|
|
415
|
+
sheet.draw(index, String(frame), rgba, width, height);
|
|
416
|
+
return;
|
|
417
|
+
}
|
|
418
|
+
const file = path.join(out, `frame_${String(frame).padStart(6, "0")}.png`);
|
|
419
|
+
await fs.writeFile(file, encodeRgbaPng(rgba, width, height));
|
|
420
|
+
}
|
|
421
|
+
}),
|
|
422
|
+
onProgress: (done, total) => {
|
|
423
|
+
const tenth = Math.floor((done / total) * 10);
|
|
424
|
+
if (tenth !== lastTenth) {
|
|
425
|
+
lastTenth = tenth;
|
|
426
|
+
console.error(`frame ${done}/${total}`);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
});
|
|
430
|
+
if (sheet)
|
|
431
|
+
await fs.writeFile(sheetOut, sheet.encode());
|
|
432
|
+
if (!stills) {
|
|
433
|
+
const mixedPath = frames || output.format === "png_sequence"
|
|
434
|
+
? basePath
|
|
435
|
+
: await mixCompositedTimelineAudio({
|
|
436
|
+
sequence,
|
|
437
|
+
basePath,
|
|
438
|
+
workDir,
|
|
439
|
+
output,
|
|
440
|
+
resolveAssetPath
|
|
441
|
+
});
|
|
442
|
+
if (frames) {
|
|
443
|
+
console.error("Audio is omitted when --frames selects video frames.");
|
|
444
|
+
}
|
|
445
|
+
await fs.copyFile(mixedPath, out);
|
|
446
|
+
}
|
|
447
|
+
return {
|
|
448
|
+
out: sheetOut,
|
|
449
|
+
format: stills ? "png" : output.format,
|
|
450
|
+
stills,
|
|
451
|
+
sheet: sheet !== undefined,
|
|
452
|
+
frames: selected,
|
|
453
|
+
width,
|
|
454
|
+
height,
|
|
455
|
+
fps,
|
|
456
|
+
elapsedMs: Date.now() - started,
|
|
457
|
+
skippedClips,
|
|
458
|
+
...(coverageSkipped && { coverageSkipped })
|
|
459
|
+
};
|
|
460
|
+
}
|
|
461
|
+
finally {
|
|
462
|
+
await fs.rm(workDir, { recursive: true, force: true });
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
//# sourceMappingURL=timeline-render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-render.js","sourceRoot":"","sources":["../../src/commands/timeline-render.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human-readable rendering of a `TimelineValidation`, shared by
|
|
3
|
+
* `timeline validate` and `timeline versions restore`.
|
|
4
|
+
*/
|
|
5
|
+
import type { TimelineValidation } from "@nodetool-ai/execution/timeline-debug";
|
|
6
|
+
export declare function renderTimelineValidation(validation: TimelineValidation): string[];
|
|
7
|
+
//# sourceMappingURL=timeline-validation-output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-validation-output.d.ts","sourceRoot":"","sources":["../../src/commands/timeline-validation-output.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAEV,kBAAkB,EACnB,MAAM,uCAAuC,CAAC;AAG/C,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,kBAAkB,GAC7B,MAAM,EAAE,CAQV"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { issueLocation, renderValidation } from "./validation-output.js";
|
|
2
|
+
export function renderTimelineValidation(validation) {
|
|
3
|
+
return renderValidation(validation, (issue) => issue.clipId != null
|
|
4
|
+
? ` [clip ${issue.clipId}]`
|
|
5
|
+
: issue.trackId != null
|
|
6
|
+
? ` [track ${issue.trackId}]`
|
|
7
|
+
: issueLocation(issue));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=timeline-validation-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-validation-output.js","sourceRoot":"","sources":["../../src/commands/timeline-validation-output.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEzE,MAAM,UAAU,wBAAwB,CACtC,UAA8B;IAE9B,OAAO,gBAAgB,CAAC,UAAU,EAAE,CAAC,KAAyB,EAAE,EAAE,CAChE,KAAK,CAAC,MAAM,IAAI,IAAI;QAClB,CAAC,CAAC,UAAU,KAAK,CAAC,MAAM,GAAG;QAC3B,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI;YACrB,CAAC,CAAC,WAAW,KAAK,CAAC,OAAO,GAAG;YAC7B,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAC3B,CAAC;AACJ,CAAC"}
|