Skip to main content

JANCTION Render

JasmyLab-JANCTION/janction-render MCP server

What is JANCTION Render?

JANCTION Render is a cloud GPU render farm for Blender that AI agents call as an MCP server or HTTP API. Send a .blend file, a bpy script or a 3D file (glTF / FBX / USD), preview in seconds, and get frames or an MP4 back from JANCTION's NVIDIA GPUs. No local Blender or GPU is needed. Free beta, operated by JasmyLab Inc.

AI agents can render Blender projects on JANCTION GPUs without running Blender locally. Works from Claude, ChatGPT, Claude Code, Codex, Cursor or any MCP client: an MCP server (remote and stdio), an HTTP API and a CLI.

Official site: https://render.janction.jp · MCP endpoint: https://render.janction.jp/mcp · Fact sheet: https://render.janction.jp/facts

Why use it?

  • No GPU, no Blender install. The scene can be a bpy script the agent writes, a .blend, or a 3D file; Blender runs on our GPUs.
  • Built for agents. Preview first (1-4 frames in a few GPU seconds), an estimate with time and cost before the final, structured errors with the fix, spending caps per key, safe retries with Idempotency-Key.
  • 3D files and turntables. glTF / GLB, FBX, USD, OBJ, STL, PLY, Alembic are imported into an empty scene with a camera and HDRI lighting; orbit=True makes a turntable. Fixed-price outcomes: POST /v1/outcomes/turntable and /product-shot.
  • Honest limits. Free beta: 10 GPU-minutes per key per day, finals up to 240 frames at 1080p, one GPU shared with another workload (jobs can wait; the ETA says so). Inputs and results are deleted 24 hours after last use and never used for training.
  • Not Render.com. Same word, different product.

Quick start

Claude.ai / ChatGPT (nothing to install). Settings → Connectors → add https://render.janction.jp/mcp → Connect (a free key is created on the consent page). Then paste:

Render a preview of https://render.janction.jp/samples/cube_scene.py

A 4-frame preview comes back in a few seconds. A file on your computer: drop it at https://render.janction.jp/upload to get a 12-hour link, then "Render this file: ".

Claude Code.

claude mcp add --transport http janction-render https://render.janction.jp/mcp

Then /mcp to authenticate and ask: "Build a small street scene in Blender with a camera fly-through and render a preview with janction-render."

HTTP (any language).

curl -s -X POST https://render.janction.jp/v1/keys                                   # -> {"api_key": "jr_..."}  no sign-up
curl -s -X POST https://render.janction.jp/v1/files -H "X-API-Key: $KEY" -F "file=@scene.blend"   # -> {"scene_id": "f_..."}
curl -s -X POST https://render.janction.jp/v1/jobs -H "X-API-Key: $KEY" -H "Content-Type: application/json" \
  -d '{"scene_id":"f_...","kind":"preview","frames":[1]}'                             # -> job_id; then GET /v1/jobs/{job_id}

MCP

Remote (Streamable HTTP, OAuth 2.1 with dynamic client registration; a raw key also works as Authorization: Bearer jr_...)

client how
Claude.ai (web, desktop, mobile) Settings → Connectors → Add custom connector → paste the URL → Connect
ChatGPT Settings → Connectors → Advanced → Developer mode → Create → paste the URL (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
Gemini CLI / Antigravity CLI gemini extensions install https://github.com/JasmyLab-JANCTION/janction-render (this repository carries gemini-extension.json)
Grok (grok.com) Connectors → New Connector → Custom → paste the URL
Perplexity (Pro / Max / Enterprise), Le Chat (workspace admin) Add a custom remote MCP connector with the URL
Cursor .cursor/mcp.json (project) or ~/.cursor/mcp.json: {"mcpServers": {"janction-render": {"url": "https://render.janction.jp/mcp"}}}, then sign in when Cursor asks (OAuth). One click: install in Cursor
VS Code (Copilot agent mode) .vscode/mcp.json: {"servers": {"janction-render": {"type": "http", "url": "https://render.janction.jp/mcp"}}} or code --add-mcp '{"name":"janction-render","type":"http","url":"https://render.janction.jp/mcp"}', then Start the server and sign in (OAuth)
Windsurf, Cline, Goose, other MCP clients Streamable HTTP at the URL above (OAuth, or a Bearer API key header). Installer notes: llms-install.md. Cursor project rule (when to use it, preview-first flow): integrations/cursor

Remote tools take scene_script (bpy code as text), scene_url (an https link to a .blend, .py or a 3D file, or a link from https://render.janction.jp/upload) or scene_id, plus asset_urls for textures or glTF .bin files. Results come back as an inline image plus download links that need no key and work for about 24 hours (render_download(only="mp4") for just the video).

Claude Code plugin (the remote connector plus a skill with the workflow):

/plugin marketplace add JasmyLab-JANCTION/janction-render
/plugin install janction-render@janction-render

Stdio (sends local files)

The package is on PyPI as janction-render.

# Claude Code (uvx runs it without a global install)
claude mcp add janction-render -e JANCTION_RENDER_SERVER=https://render.janction.jp -- uvx --from janction-render janction-render-mcp

# or with pip / pipx
pip install janction-render
claude mcp add janction-render -e JANCTION_RENDER_SERVER=https://render.janction.jp -- janction-render-mcp

Codex: add to ~/.codex/config.toml

[mcp_servers.janction-render]
command = "uvx"
args = ["--from", "janction-render", "janction-render-mcp"]
env = { JANCTION_RENDER_SERVER = "https://render.janction.jp" }

A temporary API key is issued automatically on first use and cached in ~/.janction-render.json; set JANCTION_RENDER_API_KEY to pin one (quota and, later, credit belong to the key). The same key can be used from the remote connector: paste it on the connect page.

Tools

tool what
`scene_info(scene_script scene_url
render_preview(..., frames="1-24", environment?, blender?) up to 4 frames (720p budget) tiled with frame labels; returns the image inline
render_estimate(scene_id, frame_start, frame_end, width, height, samples) GPU seconds, queue wait, "about N minutes", fits today's free quota? No GPU time used
render_final(scene_id, frame_start, frame_end, width, height, samples, fps, output, environment?, blender?, engine?, transparent?, notify_url?) frames (png / exr) or video (mp4 / webm / prores / gif / webp); transparent=True keeps an alpha background (png / exr / webm / gif / webp); notify_url gets one JSON POST when the job finishes; returns job_id + estimate
render_status(job_id) progress and ETA (eta.human); render_download(job_id, only="mp4" / "frames" / "all") files or links; render_cancel(job_id)
billing() free-beta quota (used today, daily limit, reset time); later balance and top-up link
render_share(job_id, title?, note?, include_script?, listed?) a public page /r/<id> with the image or video, the conditions and (optionally) the script; survives the 24-hour expiry until render_unshare; with listed=True it appears in /gallery after a review
asset_search(query, kind) CC0 models / textures / HDRIs on Poly Haven by words; results carry polyhaven:<id> and the entry file
render_info() workers online or gated (GPU lent to another workload), queue, expected wait, supported inputs, environment presets, Blender versions

Options on render_preview / render_final: environment (studio, sunset, overcast, night, compare on previews; environment_strength, environment_visible=False for a flat grey backdrop with HDRI lighting), orbit / orbit_frames / orbit_elevation (turntable), blender ("5.2"), and assets (stdio: local files sent with the scene, found in the script through os.environ["JR_ASSETS_DIR"]; a .blend's external files are collected automatically with pip install janction-render[blend]) or asset_urls (remote).

CLI: janction-render inspect|preview|render|status|download|share|unshare|cancel|jobs|balance|topup|limits|outcomes|info.

API

POST /v1/keys                                   -> {api_key}         (header X-API-Key afterwards)
POST /v1/files  multipart "file" (.blend|.py|.glb|.fbx|.usd|.obj|...)   -> {scene_id}
POST /v1/files/{id}/assets  multipart "files"   textures, glTF .bin ...   GET /v1/files/lookup?sha256=  reuse an upload
POST /v1/estimate {kind, frames|frame_start/frame_end, width, height, samples, scene_id?} -> seconds, wall_seconds, human, quota, currency, expires_at
POST /v1/jobs   {scene_id, kind: info|preview|final, frames|frame_start/frame_end, width, height, samples, camera, fps, output (png|exr|mp4|webm|prores|gif|webp), transparent, notify_url (https), engine (cycles|eevee),
                 environment, environment_strength, environment_visible, blender, orbit, orbit_frames, orbit_elevation}   header Idempotency-Key makes retries safe
GET  /v1/jobs/{id}      status, progress, eta, artifacts[], cost, warnings, info, failure (code + fix)    DELETE /v1/jobs/{id}  cancel
GET  /v1/jobs/{id}/artifacts/{name}             PNG / MP4
GET  /v1/outcomes       fixed-price outcomes;  POST /v1/outcomes/turntable {scene_id, size, frames}   POST /v1/outcomes/product-shot {scene_id, size, transparent?}
POST /v1/try    JSON {scene_script | scene_url, frames?, width?, height?, environment?} (no key) -> first 720p preview + an API key to continue, in one response (1 per network per 24h)
POST /v1/drops  multipart "file" (no key)       -> a 12-hour https link to pass as scene_url (the /upload page uses this)
POST /v1/jobs/{id}/share {title?, note?, include_script?, listed?} -> {share_id, url}   DELETE /v1/jobs/{id}/share   GET /v1/shares
GET  /r/{share_id}  public page (no key)   GET /gallery
GET  /v1/assets/search?q=&kind=models|textures|hdris   CC0 assets (Poly Haven) -> spec polyhaven:<id>
POST /v1/files/{id}/assets/urls {urls: ["https://...", "polyhaven:<id>"]}   fetch assets server-side
GET  /v1/me  (quota, balance, limits)   POST /v1/me/limits {job_yen?, day_yen?}   spending caps per key
POST /mcp                                       remote MCP (Streamable HTTP; Bearer api key or OAuth)
GET  /.well-known/oauth-protected-resource/mcp  OAuth discovery
POST /v1/billing/checkout {amount_yen} -> {checkout_url}   POST /v1/billing/sync   GET /v1/ledger
GET  /openapi.json  /llms.txt  /llms-full.txt  /ja/llms.txt  /facts.json  /version.json  /capabilities.json  /pricing.json  /status.json

During the free beta a 429 quota_exceeded response carries resets_at and Retry-After; a 400 beta_limit means the job is too big (split it). Every API error carries retryable, possible_fix and docs_url; a failed job carries failure with a code and the recommended action. Once paid plans start, a 402 payment_required response carries checkout_url, and a job over a spending cap is refused with 403 spend_cap_exceeded before anything is reserved.

Example

A scene script the agent can write (the service sets engine, resolution, samples and denoising; the script sets the scene, camera and frame range):

import bpy, math
for ob in list(bpy.data.objects):
    bpy.data.objects.remove(ob, do_unlink=True)
scene = bpy.context.scene
scene.frame_start, scene.frame_end = 1, 24
bpy.ops.mesh.primitive_monkey_add(location=(0, 0, 1))
cam = bpy.data.objects.new("Camera", bpy.data.cameras.new("Camera"))
scene.collection.objects.link(cam); scene.camera = cam
cam.location = (6, -6, 4); cam.rotation_euler = (math.radians(60), 0, math.radians(45))
sun = bpy.data.objects.new("Sun", bpy.data.lights.new("Sun", "SUN"))
scene.collection.objects.link(sun)

Cycles by default; engine="eevee" for cheaper animations (about half the per-frame cost after ~7 s of shader compilation per job). In Blender 5.0 materials always use nodes: set the Principled BSDF Base Color, not diffuse_color. Scripts run in an isolated container with no network. More: samples/cube_scene.py, samples/polyhaven_room.py. Measured timings: https://render.janction.jp/benchmarks

Pricing

Free beta today: nothing is charged; 10 GPU-minutes per key per day, finals up to 240 frames at 1080p. The planned metered price is 0.1 JPY per GPU-second (prepaid credit), with planned monthly plans; both are announced on https://render.janction.jp/pricing before they start. POST /v1/estimate quotes the amount, currency and an expiry before any GPU time is used.

Docs

Features in detail

  • Input: a .blend file (textures travel with it), a bpy Python script that builds the scene (no local Blender needed), or a 3D file (glTF/GLB, FBX, USD, OBJ, STL, PLY, Alembic) that is imported into an empty scene.
  • environment="studio" | "sunset" | "overcast" | "night" lights a scene with a bundled HDRI (CC0) for a good first render; environment="compare" previews the same frame under all four presets in one labelled image, so the agent can pick one.
  • A .gltf or .obj brings its .bin / .mtl / textures along automatically (from the same folder or the same URL folder).
  • orbit=True turns any scene or imported model into a turntable: an orbit camera circles it once (orbit_frames, default 24; a preview shows 0/90/180/270 degrees, a final render without frame_end gives the whole turn as an MP4). Flat floors and walls are ignored when framing; orbit_target (object name or x,y,z) and orbit_distance (multiplier) adjust the shot.
  • While the GPU is lent to another workload, tools answer right away with the queued job and a wait estimate (how long it has been out, how long it usually stays out, how much longer to expect; eta.gate) instead of waiting.
  • While a job renders, render_status counts finished frames inside the running chunk, so the ETA updates every few seconds.
  • In hosts that support MCP Apps (Claude web and desktop, among others), previews, progress and download links also appear as an interactive panel in the chat: the image, a progress bar, "Open MP4", and preset buttons after an environment="compare" preview. Both the remote connector and the stdio package ship the panel (janction_render/mcp_app.html); set JR_MCP_APPS=0 to turn it off.
  • CC0 assets by name: asset_search("wooden table") finds Poly Haven models, textures and HDRIs; pass polyhaven:<id> in asset_urls (remote) or assets (stdio) and the files land in JR_ASSETS_DIR/<id>/ on the GPU, ready to import (bpy.ops.import_scene.gltf(filepath=os.path.join(os.environ['JR_ASSETS_DIR'], 'wooden_table_02', 'wooden_table_02_1k.gltf'))). Scene scripts can import jr_assets for one-liners: jr_assets.import_model('wooden_table_02'), jr_assets.apply(floor, jr_assets.material('wood_floor_deck', scale=2)) (diff / normal / roughness / metal wired into a Principled BSDF), jr_assets.world_hdri('studio_small_09'). See samples/polyhaven_room.py.
  • A render you choose to share (render_share) gets a public page (/r/<id>, OGP for X and Discord) that stays until you unshare it.
  • Blender 5.0, Cycles on GPU (blender="5.2" selects Blender 5.2 when the worker has it; render_info lists what is available).

Blender add-on and DCC tools (for people, not agents)

  • Blender extension (addons/blender/, Blender 4.2+): a JANCTION Render panel under Properties → Render with Preview, Estimate and Final. A copy of the open file and the textures it references with relative paths are uploaded; results land next to the .blend. Install from the extension repository https://render.janction.jp/extensions/index.json (Preferences → Get Extensions → Repositories → + → Add Remote Repository), or install the zip from https://render.janction.jp/extensions/janction_render-0.1.0.zip (python scripts/build_blender_addon.py builds it from this repository). Guide: https://render.janction.jp/blender-addon
  • Maya, Houdini, Cinema 4D (integrations/): export to USD / FBX / Alembic, upload with textures, render with Cycles, open the result; Preview, Final (MP4) and Turntable. Standard-library Python only; jr_submit.py is the shared client. Guide: https://render.janction.jp/maya-houdini-cinema4d

Self-hosting

The server (FastAPI + SQLite, with the remote MCP endpoint) and the worker (Blender in disposable Docker containers, --network none --cap-drop ALL) live in the internal repository and are not part of this package yet. This repository holds the client side: stdio MCP server, CLI, HTTP client, samples, the Claude Code plugin, the Blender add-on and the DCC tools.

MCP registry

This server is listed in the official MCP registry as io.github.JasmyLab-JANCTION/janction-render (remote: https://render.janction.jp/mcp).

mcp-name: io.github.JasmyLab-JANCTION/janction-render

Security

Vulnerability reports: see SECURITY.md. Retention, isolation and the external tests are summarised at https://render.janction.jp/security.

License

MIT (see LICENSE) for the package, the MCP servers, the CLI and the DCC tools. The Blender extension under addons/blender/ is GPL-3.0-or-later, as Blender requires for add-ons. Operated by JasmyLab Inc.

Metadata

Release files for janction-render 0.4.18

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for janction-render 0.4.18
File Size Uploaded
janction_render-0.4.18.tar.gz 46.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for janction-render 0.4.18
File Interpreter ABI Platform
janction_render-0.4.18-py3-none-any.whl Python 3 none any Details

Total release size: 87.3 kB

Release files / janction_render-0.4.18.tar.gz

Download URL janction_render-0.4.18.tar.gz
Size 46.1 kB
Tags Source
SHA-256 checksum
How to use checksums
06f388fab02d8abae1327952c7273e96fc5f7cb5c8000563e1252e0167c250da
BLAKE2b-256 checksum
How to use checksums
059fad89a16b8833f88e63103519160bc777586336834d259f57fe9917f4493d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.

Transparency log

Release files / janction_render-0.4.18-py3-none-any.whl

Download URL janction_render-0.4.18-py3-none-any.whl
Size 41.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6bdfb9ddbffda854cce151d08834b810c4917f7854a9c4f54c993b29d5e0a66f
BLAKE2b-256 checksum
How to use checksums
2d53b9343fa1888909b060ab74a2284a29f02c644cda4184bb8b1c1cc7583429
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.

Transparency log

Release history Release notifications | RSS feed

0.4.67

2 release files

0.4.66

2 release files

0.4.65

2 release files

0.4.64

2 release files

0.4.63

2 release files

0.4.62

2 release files

0.4.60

2 release files

0.4.59

2 release files

0.4.58

2 release files

0.4.57

2 release files

0.4.56

2 release files

0.4.55

2 release files

0.4.54

2 release files

0.4.53

2 release files

0.4.51

2 release files

0.4.50

2 release files

0.4.49

2 release files

0.4.48

2 release files

0.4.47

2 release files

0.4.46

2 release files

0.4.45

2 release files

0.4.44

2 release files

0.4.43

2 release files

0.4.42

2 release files

0.4.41

2 release files

0.4.40

2 release files

0.4.39

2 release files

This release

0.4.18 This release

2 release files

0.4.9

2 release files

0.4.8

2 release files

0.4.7

2 release files

0.4.6

2 release files

0.4.5

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page