Updated 2026-10-05
JANCTION Render is Blender running headless on an NVIDIA GPU behind an HTTP API: upload the scene (POST /v1/files), submit a job (POST /v1/jobs) with notify_url for a completion webhook, then download the artifacts. The CLI wraps the same calls (janction-render render scene.blend --wait). The runner needs Python or curl only; Blender 5.0 and the GPU are on our side.
pip install janction-render export JANCTION_RENDER_SERVER=https://render.janction.jp export JANCTION_RENDER_API_KEY=jr_... # from POST /v1/keys; keep it in the CI secret store janction-render render scene.blend --frames 1-24 --size 1280x720 --samples 64 --wait --out ./out ls out/ # output.mp4 (or frames)
The exit code is non-zero when the job fails; the JSON error has error, possible_fix and retryable, so a pipeline can decide whether to retry.
K=$(curl -s -X POST https://render.janction.jp/v1/keys -H 'Content-Type: application/json' -d '{"label":"ci"}' | jq -r .api_key)
SID=$(curl -s -X POST https://render.janction.jp/v1/files -H "X-API-Key: $K" -F [email protected] | jq -r .scene_id)
JOB=$(curl -s -X POST https://render.janction.jp/v1/jobs -H "X-API-Key: $K" -H 'Content-Type: application/json' \
-d "{\"scene_id\":\"$SID\",\"kind\":\"final\",\"frame_start\":1,\"frame_end\":24,\"width\":1280,\"height\":720,\"samples\":64,\"output\":\"mp4\",\"notify_url\":\"https://ci.example.com/hooks/render\"}" | jq -r .job_id)
# poll GET /v1/jobs/$JOB (status, progress, eta, artifacts[]) or wait for the POST to notify_url
curl -s -H "X-API-Key: $K" https://render.janction.jp/v1/jobs/$JOB/artifacts/output.mp4 -o output.mp4
notify_url receives one JSON POST when the job finishes (https, public host). GET /v1/jobs/{id} is safe to poll every few seconds; eta.human says how long is left and whether the GPU is lent out.
Upload once, submit many: the same scene_id can be rendered with different frames, sizes, samples, environment presets or orbit settings. Each job counts against the quota separately; POST /v1/estimate with the same body tells you the GPU seconds and whether it fits before you submit.
quota_exceeded carries resets_at; jobs are not queued for the next day.eta.gate says for how long. Build retries with backoff, not tight loops.asset_urls, not inside the script.| from | how |
|---|---|
| A file on this computer (.blend, 3D file) | Drop it at /upload to get a 12-hour link (no sign-up), then tell the AI "Render this file: <link>". From inside Blender use the add-on; from a terminal the CLI uploads directly |
| Claude.ai (web / desktop / mobile) | Settings → Connectors → Add custom connector → https://render.janction.jp/mcp. "Connect" opens a page that creates a free key |
| ChatGPT | Settings → Connectors → Advanced → Developer mode → Create → https://render.janction.jp/mcp (OAuth) |
| Claude Code | claude mcp add --transport http janction-render https://render.janction.jp/mcp, then /mcp to authenticate |
| Codex | codex mcp add janction-render --url https://render.janction.jp/mcp |
| Cursor / VS Code | Add to Cursor Add to VS Code The button opens the editor; confirm and it is added. Manual: Streamable HTTP at https://render.janction.jp/mcp |
| Gemini CLI / Antigravity CLI | gemini extensions install https://github.com/JasmyLab-JANCTION/janction-render |
| Grok / Perplexity / Le Chat | Add a custom (remote MCP) connector with https://render.janction.jp/mcp in each app's Connectors settings (Grok: New Connector → Custom; Perplexity: Pro / Max / Enterprise; Le Chat: workspace admin) |
| Windsurf, Cline, Goose, other MCP clients | Streamable HTTP at https://render.janction.jp/mcp; OAuth or Authorization: Bearer <api key> |
| Terminal (stdio, sends local files) | claude mcp add janction-render -e JANCTION_RENDER_SERVER=https://render.janction.jp -- uvx --from janction-render janction-render-mcp |
| Inside Blender (for people) | The add-on; extension repository https://render.janction.jp/extensions/index.json. Maya / Houdini / Cinema 4D: submit tools |
| job | GPU time | note |
|---|---|---|
| preview, 4 frames (720p split in 4 tiles, 16 samples, denoised) | about 4 s | round trip about 8 s; the image comes back inline |
| final, 24 frames at 1280x720, 64 samples → MP4 | about 60 s | measured 2026-09-30 / 10-01 (59 s and 58 s) |
| final, one 1920x1080 frame at 128 samples | about 11 s | the estimator's baseline; heavy scenes take longer |
These are individual observations of simple scenes (2026-09-30 to 10-01 UTC, NVIDIA RTX PRO 6000 Blackwell Max-Q Workstation Edition, 96 GB). The 4-GPU-second example used a rotating cube, four 640x360 tiles and 16 samples. GPU time includes Blender startup and scene loading; it is distinct from completion time including queue and transfers. See conditions, round trips and reproduction files. These are not speed guarantees.
render_estimate gives the number before rendering; once a scene has been rendered once, the estimate uses that scene's own measurement.
Free beta (as of 2026-10-01): 10 GPU-minutes per key per day (20 per network), final renders up to 240 frames at 1080p. Quotas reset at 00:00 UTC (09:00 JST). New jobs exceeding the quota are rejected with HTTP 429 quota_exceeded and resets_at; they are not queued for the next day. Resubmit after the quota resets. No sign-up: connecting creates a key. Inputs and results are deleted 24 hours after last use and never used for training. Paid plans will be announced on this site and in llms.txt before they start.
No. Only Python (for the CLI) or curl. Blender 5.0 and the NVIDIA GPU run on JANCTION's side.
Yes: pass notify_url (https, public host) in the job; the service POSTs one JSON when the job ends. Polling GET /v1/jobs/{id} works too.
Yes. Create a key with POST /v1/keys and store it in the CI secret store as JANCTION_RENDER_API_KEY; revoke it with POST /v1/keys/revoke if it leaks.
JANCTION Render v0.4.17 · JasmyLab Inc. · Updated 2026-10-05 · Tested with Blender 5.0, JANCTION Render 0.4.17 · 日本語