Initial marketplace with flamenco and kitsu plugins
Bundles the flamenco-api and kitsu-api skills as Claude Code plugins under an "adm-tools" marketplace. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,189 @@
|
||||
---
|
||||
name: flamenco-api
|
||||
description: >
|
||||
Flamenco render farm manager API reference, configuration, and usage guide.
|
||||
Use this skill whenever working with Flamenco — querying jobs, workers, tasks, or farm status via
|
||||
the REST API, writing curl commands or Python scripts that talk to the Flamenco Manager,
|
||||
configuring the manager or workers, troubleshooting render farm issues, managing worker tags
|
||||
or sleep schedules, creating custom job types, or understanding how Flamenco integrates with
|
||||
Blender. Also use when the user mentions render farm, farm status, render workers, job submission,
|
||||
or Flamenco in any context. Trigger on mentions of flamenco, render farm, render worker,
|
||||
farm status, job queue, render job, or worker management in the context of rendering.
|
||||
---
|
||||
|
||||
# Flamenco Render Farm
|
||||
|
||||
[Flamenco](https://flamenco.blender.org/) is the render farm manager developed by the Blender
|
||||
Foundation. It consists of a **Manager** (HTTP server, web UI, REST API) and one or more
|
||||
**Workers** that pull jobs from the Manager and execute them — usually Blender renders, but the
|
||||
job-type system is generic enough for ffmpeg encodes, file copies, or anything else.
|
||||
|
||||
## Setup before answering
|
||||
|
||||
Flamenco is self-hosted, so the Manager URL is site-specific. Before constructing API calls:
|
||||
|
||||
1. Check the user's environment for a Manager URL (env var like `FLAMENCO_MANAGER_URL`,
|
||||
project config, or `CLAUDE.md`). The Manager web UI and the REST API share the same host;
|
||||
`/api/v3/` is the API prefix.
|
||||
2. If you can't find one, ask the user. Don't invent a URL.
|
||||
|
||||
In examples below, `<MANAGER_URL>` is a placeholder for the user's Manager root
|
||||
(e.g. `https://flamenco.example.com` or `http://localhost:8080`). The API base is
|
||||
`<MANAGER_URL>/api/v3/`.
|
||||
|
||||
Useful endpoints on any Manager:
|
||||
|
||||
- Web UI: `<MANAGER_URL>/`
|
||||
- Swagger UI: `<MANAGER_URL>/api/v3/swagger-ui/`
|
||||
- OpenAPI spec: `<MANAGER_URL>/api/v3/openapi3.json`
|
||||
|
||||
The API has no authentication by default — Flamenco assumes a trusted LAN. If the user has
|
||||
fronted it with a reverse proxy that adds auth, account for that.
|
||||
|
||||
## Quick API examples
|
||||
|
||||
```bash
|
||||
# Farm status (one of: active, idle, waiting, asleep, inoperative, unknown, starting)
|
||||
curl -s <MANAGER_URL>/api/v3/status
|
||||
|
||||
# Manager version
|
||||
curl -s <MANAGER_URL>/api/v3/version
|
||||
|
||||
# List all workers
|
||||
curl -s <MANAGER_URL>/api/v3/worker-mgt/workers
|
||||
|
||||
# List all jobs
|
||||
curl -s <MANAGER_URL>/api/v3/jobs
|
||||
|
||||
# Get a specific job
|
||||
curl -s <MANAGER_URL>/api/v3/jobs/{job_id}
|
||||
|
||||
# Get tasks for a job
|
||||
curl -s <MANAGER_URL>/api/v3/jobs/{job_id}/tasks
|
||||
|
||||
# Get task details (commands, status, assigned worker)
|
||||
curl -s <MANAGER_URL>/api/v3/tasks/{task_id}
|
||||
|
||||
# Tail a task's log as plain text
|
||||
curl -s <MANAGER_URL>/api/v3/tasks/{task_id}/logtail
|
||||
|
||||
# Query jobs by status (note: jobs query is POST, not GET)
|
||||
curl -s <MANAGER_URL>/api/v3/jobs \
|
||||
-X POST -H 'Content-Type: application/json' \
|
||||
-d '{"status_in": ["failed"], "order_by": ["updated_at"], "limit": 5}'
|
||||
|
||||
# Change worker status (awake, asleep, offline, restart) — is_lazy waits for current task
|
||||
curl -X POST <MANAGER_URL>/api/v3/worker-mgt/workers/{worker_id}/setstatus \
|
||||
-H 'Content-Type: application/json' -d '{"status": "awake", "is_lazy": false}'
|
||||
|
||||
# Cancel / pause / requeue a job
|
||||
curl -X POST <MANAGER_URL>/api/v3/jobs/{job_id}/setstatus \
|
||||
-H 'Content-Type: application/json' -d '{"status": "canceled", "reason": "no longer needed"}'
|
||||
```
|
||||
|
||||
## Key concepts
|
||||
|
||||
- **Job**: A render request, typically submitted from the Blender add-on. Carries settings
|
||||
(blend file, frame range, output path, format) and is compiled by the Manager into tasks.
|
||||
- **Task**: An executable unit within a job (e.g. "render frames 1–10"). Assigned to one worker
|
||||
at a time. A task contains one or more **commands**.
|
||||
- **Command**: The lowest-level operation a worker runs (e.g. `blender-render`, `move-directory`,
|
||||
`frames-to-video`). Defined by the worker code; referenced by job-type scripts.
|
||||
- **Worker**: A machine that polls the Manager for tasks and executes them. Has a status
|
||||
(awake, asleep, offline, error, …) and a list of supported task types.
|
||||
- **Tag**: A grouping label for workers. Jobs can be restricted to a tag so they only run on
|
||||
matching workers (e.g. a `gpu` tag for GPU-only nodes).
|
||||
- **Job type**: A JavaScript file in the Manager's `scripts/` directory that defines settings
|
||||
and the compile function (turns a submitted job into a sequence of tasks). Built-in types
|
||||
like `simple-blender-render` cover the common cases; custom types add new behaviors.
|
||||
- **Shaman**: Optional content-addressed file store. When enabled, files are uploaded by
|
||||
SHA256+size and symlinked into per-job checkout dirs. When disabled, files are referenced
|
||||
in place on shared storage.
|
||||
|
||||
## Status enums
|
||||
|
||||
- **Job**: `active`, `canceled`, `completed`, `failed`, `paused`, `pause-requested`, `queued`,
|
||||
`cancel-requested`, `requeueing`, `under-construction`
|
||||
- **Task**: `active`, `canceled`, `completed`, `failed`, `queued`, `soft-failed`, `paused`
|
||||
- **Worker**: `starting`, `awake`, `asleep`, `error`, `testing`, `offline`, `restart`
|
||||
- **Farm**: `active`, `idle`, `waiting`, `asleep`, `inoperative`, `unknown`, `starting`
|
||||
|
||||
## Python SDK
|
||||
|
||||
Flamenco ships an auto-generated Python client (`flamenco-manager` on PyPI, importable as
|
||||
`flamenco.manager`):
|
||||
|
||||
```python
|
||||
from flamenco.manager import ApiClient, Configuration
|
||||
from flamenco.manager.api import JobsApi, WorkerMgtApi, MetaApi
|
||||
|
||||
configuration = Configuration(host="<MANAGER_URL>")
|
||||
api_client = ApiClient(configuration)
|
||||
|
||||
meta_api = MetaApi(api_client)
|
||||
print(meta_api.get_version()) # FlamencoVersion
|
||||
|
||||
jobs_api = JobsApi(api_client)
|
||||
jobs = jobs_api.fetch_jobs()
|
||||
failed = [j for j in jobs.jobs if j.status == "failed"]
|
||||
|
||||
worker_api = WorkerMgtApi(api_client)
|
||||
for w in worker_api.fetch_workers().workers:
|
||||
print(f"{w.name}: {w.status}")
|
||||
```
|
||||
|
||||
For ad-hoc scripts, plain `requests` against the REST API is often simpler and avoids the SDK
|
||||
dependency.
|
||||
|
||||
## Submitting a job
|
||||
|
||||
Two endpoints take the same body — `POST /api/v3/jobs/check` validates without inserting,
|
||||
`POST /api/v3/jobs` actually submits. Always send `submitter_platform` (`linux`, `windows`,
|
||||
`darwin`, or `manager`) so the Manager can apply path replacements.
|
||||
|
||||
```bash
|
||||
curl -X POST <MANAGER_URL>/api/v3/jobs \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{
|
||||
"name": "Test render",
|
||||
"type": "simple-blender-render",
|
||||
"priority": 50,
|
||||
"submitter_platform": "linux",
|
||||
"settings": {
|
||||
"blendfile": "/render/scene.blend",
|
||||
"frames": "1-100",
|
||||
"chunk_size": 5,
|
||||
"render_output_path": "/render/output/######",
|
||||
"format": "PNG"
|
||||
},
|
||||
"metadata": {"project": "demo", "user.name": "artist"}
|
||||
}'
|
||||
```
|
||||
|
||||
The exact `settings` keys depend on the job type. List available types with
|
||||
`GET /api/v3/jobs/types`, or fetch one with `GET /api/v3/jobs/type/{typeName}` to see its
|
||||
declared settings.
|
||||
|
||||
## Reference files
|
||||
|
||||
For complete details, read these as needed — they're verbose and only worth loading when
|
||||
you're actually constructing API calls or troubleshooting:
|
||||
|
||||
- **`references/api-reference.md`**: Every endpoint with parameters, request/response schemas,
|
||||
status codes, and curl examples. Read this when constructing a specific API call or
|
||||
understanding a response shape.
|
||||
- **`references/usage-docs.md`** (optional, may not be present): General Flamenco usage —
|
||||
shared storage, manager/worker configuration, two-way variable replacement, custom job
|
||||
types, failure handling, troubleshooting. Read this for setup or non-API questions.
|
||||
|
||||
If a reference file is missing or out of date, the canonical source is
|
||||
`<MANAGER_URL>/api/v3/swagger-ui/` and `<MANAGER_URL>/api/v3/openapi3.json` — fetching the
|
||||
OpenAPI JSON is the fastest way to verify a schema.
|
||||
|
||||
## Notes on the worker-side API
|
||||
|
||||
`/api/v3/worker/*` endpoints (`sign-on`, `sign-off`, `register-worker`, `state`,
|
||||
`state-changed`, `task`, `task/{id}`, `task/{id}/may-i-run`, `task/{id}/output-produced`)
|
||||
exist for the worker process to talk back to the Manager. They are not normally called by
|
||||
end-user scripts; only touch them if you're implementing a custom worker or debugging the
|
||||
worker protocol.
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user