Asset-Manager
An independent, open-source asset manager for creative teams: a local-first project hub with an action plug-in host, git-first version control and a Python automation API.
Clean-room notice. Asset-Manager is an original implementation written from observed interface facts (file formats, CLI shapes, public API signatures). It contains no vendor code, binaries, artwork or text, is not affiliated with Anchorpoint Software GmbH, and "Anchorpoint" remains their trademark. The
anchorpointPython module name is kept only so community plug-ins written against the documented automation API keep importing.
What works in v0.1 (all verified by tests)
- Action host —
*.yamlmanifest discovery/validation, 10 registration triggers,;-separated file filters,${var}substitution,pythonandcommanddispatch with per-actionContextinjection. - Python API —
import anchorpoint(Context,UI,Dialog,Progress, VC enums, local helpers) andimport apsync(project markers, file ops, versioning, sidecar attributes, thumbnail via ffmpeg/ImageMagick). - CLI —
assetmgr actions|validate|info|project-init|run|status. - Local projects —
*.approjJSON markers,.meta.jsonsidecars, offlinegit status. - Server-backed collaboration (locks, channel notifications, membership) is
an explicit boundary: those calls raise
ServerRequiredError.
Screenshots
| Actions console | Project browser |
|---|---|
![]() |
![]() |
| Run tab, discovery + one-click actions | Scan of the demo Godot project: import badges, params, live thumbnail |
Quick start (Python host)
python -m venv .venv && source .venv/bin/activate
pip install -e ".[test]"
pytest
assetmgr validate --root actions
assetmgr actions --root actions
assetmgr project-init ./demo-film --name demo-film
assetmgr run example::hello-world --path ./demo-film
Web UI (native binary + Docker)
The native assetmgrd binary serves the browser UI and a JSON API, driving
the same Python host — no behaviour is reimplemented:
cd native && go test ./... && go build -o assetmgrd .
./assetmgrd -home .. # http://127.0.0.1:8080
docker compose up --build # same, in a container (verified 2026-10-25:
# image builds; /api/* and the UI respond)
The image also ships headless Godot 4.3 (godot on PATH), so
godot::reimport works inside the container: project volumes mount at
/work and --headless --import runs against them (verified: .godot/ +
.godot/imported/ are produced in-container).
API: GET /api/info|/api/actions|/api/validate|/api/status|/api/scan,
POST /api/project-init|/api/run|/api/thumbnail (thumbnail returns
image/png bytes; 404 unknown asset, 503 no engine). Every command also has
a --json CLI form the binary consumes; see docs/API.md.
Layout
| Path | Contents |
|---|---|
assetmgr/ |
host: manifests, dispatch, project store, CLI (--json for machines) |
assetmgr/godot.py |
Godot project adapter: discovery, ConfigFile parsing, .uid, import |
actions/godot/ |
bundled Godot actions: godot::import-asset, godot::reimport, godot::open-project |
native/ |
assetmgrd Go binary: web UI + JSON API over the Python host |
native/web/ |
browser UI (no dependencies, fetch against /api/*) |
Dockerfile / docker-compose.yml |
Go build stage + trixie-slim runtime (python3, git) |
anchorpoint/ |
automation API bridge (UI/context side) |
apsync/ |
local project/file engine (store side) |
actions/ |
bundled example actions (<name>/<name>.yaml + .py) |
tests/ |
pytest suite (run: pytest) |
docs/ |
reverse-engineering ledger, schemas, roadmap |
Docs
docs/REVERSE_ENGINEERING.md— evidence ledger: what was observed, how, and what stays unknown.docs/ARCHITECTURE.md— system map and module responsibilities.docs/ACTION_YAML.md— manifest schema reference.docs/API.md— Python API reference and server boundary.docs/GAPS.md— open questions and how to close them.

