resolvescript
Build, test, package and install DaVinci Resolve Python scripts and plugins: a small CLI with an npm-style workflow for the Resolve Scripts/ tree.
createscaffolds a project with amanifest.jsonand smoke testsdev/testrun against a mockDaVinciResolveScriptAPI - no Resolve neededbuildconsolidates the multi-file package into a single.pyfor distributionadd/install/updateresolve dependencies from GitHub, URLs, archives or local folders and record them inresolvescript.jsonpackageemitsdist/<name>-<version>.tar.gzplusSHA256SUMS.txt
Install with pip: pip install resolvescript (Python 3.12+).
Quickstart
$ resolvescript create my-cool-tool
$ cd my-cool-tool
$ resolvescript dev # sandboxed dev loop against the mock API
$ resolvescript test # run the smoke tests
$ resolvescript build # single-file build -> dist/my_cool_tool.py
$ resolvescript analyze # static checks (imports, manifest, API usage)
$ resolvescript package # dist/my-cool-tool-0.1.0.tar.gz + SHA256SUMS.txt
# elsewhere, consume it:
$ resolvescript add github:example/my-cool-tool
$ resolvescript install # materialize all recorded deps into Resolve
Authoring
Directory
my-cool-tool/
manifest.json # project manifest (or manifest.xml)
my_cool_tool/ # your Python package (module name from manifest.name/python)
__init__.py
export.py
tests/
test_smoke.py
Commands
| Command | Purpose |
|---|---|
create <name> |
Scaffold a new project (--json/--xml, --template minimal|toolkit, --dir) |
dev |
Sandboxed dev loop / REPL against the mock Resolve API (--built for the consolidated file, --repl, --editor) |
test |
Run the project's pytest suite against the mock API (--built, -k pattern, --api-coverage) |
analyze |
Static checks: missing entrypoint/module, syntax, unused imports, unmocked API methods, attribute typing (--json) |
build |
Consolidate into a single file (--output, or the manifest consolidate.output) |
package |
Assemble dist/<name>-<version>.tar.gz + SHA256SUMS.txt (--dist DIR) |
add <spec> |
Resolve, install a dependency and record it (--no-save, --target, --scripts-root) |
install [<spec>] |
One-off install, local project, or materialize recorded deps (--locked, --dry-run) |
update [<name>] |
Re-resolve recorded deps within their ranges (--precise X.Y.Z, --fix) |
remove <name> |
Uninstall and unrecord (--no-save) |
search <query> |
Search the known sources table |
manage list|remove |
Low-level registry operations (--json, --all) |
Exit codes: 0 ok, 1 error, 2 usage.
Specifiers
add / install <spec> accept:
name- a name from the built-in known-sources table (resolvescript search)owner/repoorgithub:owner/repo[#ref]- GitHub repo (ref = branch/tag/commit, or#semver:^1.2for a range)https://...tar.gz/.zip- direct archive URLhttps://...- a URL whose root carries amanifest.json(GitHub Pages-style hosting)file:path,./dir, an absolute path - local directory or archive.tar.gz/.zipfiles and local directories
Recorded specs live in resolvescript.json; use resolvescript install --locked for a CI/npm-ci style check that recorded artifacts still satisfy the recorded ranges.
Manifest reference
manifest.json (or manifest.xml, same shape):
{
"name": "my-cool-tool", // required
"version": "0.1.0", // required, semver
"author": "You",
"description": "...",
"python": "my_cool_tool", // package/module name (defaults to "name")
"entrypoint": "export.py", // recommended CLI/bootstrap module
"kind": "script", // "script" (default) | "extension" (plugin)
"targets": ["Comp"], // Scripts subfolders: Comp, Utility, Tool, Render,
// Deliver, Edit, WorkflowIntegrations, Fusion, root
"compat": { "resolve": "18.6.4", "python": "3.12" },
"release": { "owner": "you", "repo": "my-cool-tool" }, // for `add` discovery
"scripts_root": "", // per-OS override for the Resolve Scripts root
"consolidate": { "enabled": true, "output": "dist/my_tool.py", "exclude": [], "no_comment": [] },
"install": { "as_directory": true, "include": [], "exclude": [], "to": "resolve" },
"dependencies": ["github:example/dep"] // resolved on install
}
Install model
Installs drop into each OS's Resolve Scripts root under the manifest targets. Directories install as a single folder; .py-only packages can opt into install.as_directory: false multi-file installs. Every install is recorded in <ScriptsRoot>/.resolvescript/install.json (schema v1):
- keys are
<name>:<target>(directory) or<name>:<target>:<relpath>(file-based) - each entry carries
version,targets,as_directory,files,source,resolvedandintegrity install --lockedverifies registry entries against recorded specs before reusing them
--scripts-root (or RESOLVESCRIPT_SCRIPTS_ROOT) overrides OS detection.
Frameworks
resolvescript ships a mock DaVinciResolveScript module with a faithful-enough Resolve color/editing/page object model for testing, plus resolvescript test --api-coverage to report which mock methods your tests actually exercise.
Development
python -m venv .venv
.\.venv\Scripts\activate # Windows; source .venv/bin/activate elsewhere
pip install -e ".[dev]"
pytest
ruff check .
Milestones and the full plan live in TODO.md. CI runs the shared OseMine/workflows action; cutting a vX.Y.Z tag runs the release pipeline (sdist+wheel, checksums, GitHub release, optional PyPI publishing).
Metadata
Release files for resolvescript 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| resolvescript-0.1.2.tar.gz | 70.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| resolvescript-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 138.8 kB
Release files / resolvescript-0.1.2.tar.gz
| Download URL | resolvescript-0.1.2.tar.gz |
|---|---|
| Size | 70.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d5d0d5e570a9ac0aed32ac76eae260f88d9f45399b76ae9502dc07326e1ee521
|
|
BLAKE2b-256 checksum How to use checksums |
00e4d835f58c42d96221e979afbbb548ee7d62f49a727a7919987321fdf8d313
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / resolvescript-0.1.2-py3-none-any.whl
| Download URL | resolvescript-0.1.2-py3-none-any.whl |
|---|---|
| Size | 67.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c8fbe6893ec5c88f62f5569e63bb91a0fe24c5c6a315220e62ba2bd8520d3d52
|
|
BLAKE2b-256 checksum How to use checksums |
f8f9ef8c7d612ea9d7cffe2ca72faaf15fe14d8bcb7eb151531354cb5305f07f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|