Vol. 1 · No. 303Blender 3.6 / 4.2 / 4.5 / 5.0 / 5.2 / 5.3Cycles · EEVEE
JANCTION
Render · Blender on RTX PRO 6000 · 東京
0.1 円/ GPU 秒最初の 100 円無料・カード不要
一面 / Blender を描画する HTTP API

Blender を描画する HTTP API

JANCTION Render の HTTP API は 5 つの呼び出しです。POST /v1/keys で一時的な鍵、POST /v1/files でシーンのアップロード、POST /v1/jobs で描画(kind は info | preview | final)、GET /v1/jobs/{id} で状態と残り時間、GET /v1/jobs/{id}/artifacts/{name} でファイル。JSON で入れて JSON で返り、登録は要りません。新しい鍵には最大 500 円分(100 円分はカード不要、残りの 400 円分は請求なしのカード登録で)のようこそクレジット(14 日間)が付きます。その後も試し描きは毎日 2 GPU 分まで無料、仕上げは 0.1 円/GPU 秒です。 AI エージェントは https://render.janction.jp/mcp(リモート MCP、OAuth。つなぐと無料の鍵ができる)につなぎます。

更新 2026-11-12

用語: 試し描き=プレビュー、仕上げ=最終レンダー(本番レンダリング)、鍵=API キー、道具=MCP ツール

できること 自分の .blend・bpy スクリプト・3D ファイル(glTF/GLB・FBX・USD・OBJ…)を、クラウドの NVIDIA GPU で画像や動画にします。AI アプリ・ターミナル・ブラウザのどこからでも使えます。最初の試し描きに支払いは要りません。
できないこと 手元の Blender の編集画面は速くなりません。Blender 以外の動画・シミュレーション・汎用の GPU 計算は受けません。つながっていない AI が勝手に描くことはありません。

自分のファイルを無料で試すAI で作って試す

ブラウザだけで、MCP も CLI も要りません。新しい鍵に 100 円のようこそクレジット(14 日間、カード不要。回線ごと 30 日に 1 回、同じ回線の 2 本目以降は残りを分け合う)。カードを保存(請求なし)するとカード 1 枚につき 1 回 400 円分が足されます。その後も試し描きは毎日 2 GPU 分まで無料、仕上げは 0.1 円/GPU 秒です。

パイプラインや自作エージェントから

MCP の道具がやっていることは、すべて JSON の素の HTTP です。一時的な鍵を作るのに登録は要りません。

curl -X POST https://render.janction.jp/v1/keys                       # -> {"api_key": "jr_..."}
curl -X POST https://render.janction.jp/v1/files -H "X-API-Key: $K" -F [email protected]     # -> {"scene_id": "f_..."}
curl -X POST https://render.janction.jp/v1/files/f_.../assets -H "X-API-Key: $K" -F files=@textures/wood.png   # 素材(任意)
curl -X POST https://render.janction.jp/v1/estimate -H "X-API-Key: $K" -H "Content-Type: application/json" \
     -d '{"kind":"final","frame_start":1,"frame_end":24,"width":1280,"height":720,"samples":64}'   # -> 秒数、human、無料枠
curl -X POST https://render.janction.jp/v1/jobs -H "X-API-Key: $K" -H "Content-Type: application/json" \
     -d '{"scene_id":"f_...","kind":"final","frame_start":1,"frame_end":24,"width":1280,"height":720,"samples":64,"environment":"studio"}'
curl https://render.janction.jp/v1/jobs/j_... -H "X-API-Key: $K"      # 状態、進み具合、eta、artifacts[]
curl -o output.mp4 https://render.janction.jp/v1/jobs/j_.../artifacts/output.mp4 -H "X-API-Key: $K"

自分のアプリに組み込む(アップロードごとに商品写真)

利用者が 3D モデルを上げるアプリ(AI の 3D 生成、モデルの販売サイト、ショップ作成ツール)には、このサービスは描画の裏方になります。アプリに鍵を 1 本持ち、アップロードごとに固定価格の注文を出し、終わったら webhook で受け取ります。FastAPI と httpx の完全な例:

# pip install fastapi httpx uvicorn
import hashlib, os, httpx
from fastapi import FastAPI, Request, UploadFile

JR = "https://render.janction.jp"
KEY = os.environ["JANCTION_RENDER_API_KEY"]     # one key for your app: POST /v1/keys creates it, GET /v1/me shows the credit
H = {"X-API-Key": KEY}
app = FastAPI()
orders: dict[str, dict] = {}                      # your database in real life

@app.post("/products/{sku}/shots")               # your user uploads a GLB; you order 4 product shots
async def order_shots(sku: str, file: UploadFile, request: Request):
    data = await file.read()
    async with httpx.AsyncClient(timeout=120) as jr:
        up = await jr.post(f"{JR}/v1/files", headers=H, files={"file": (file.filename, data)})
        up.raise_for_status()                      # 100 MB per upload; a larger model goes in as a link (scene_url)
        r = await jr.post(f"{JR}/v1/outcomes/product-shot",
                          headers={**H, "Idempotency-Key": f"shots-{sku}-{hashlib.sha256(data).hexdigest()[:16]}"},
                          json={"scene_id": up.json()["scene_id"], "size": "square", "transparent": True,
                                "notify_url": str(request.url_for("jr_done"))})
    if r.status_code == 402:                       # credit is short: send the user to r.json()["checkout_url"], then retry
        return {"error": "credit", "pay_at": r.json().get("checkout_url")}
    r.raise_for_status()
    j = r.json()                                   # j["outcome"]["price_yen"] is the ceiling; you pay the GPU seconds used
    orders[j["job_id"]] = {"sku": sku, "status": j["status"], "ceiling_yen": j["outcome"]["price_yen"]}
    return {"job_id": j["job_id"], "ceiling_yen": j["outcome"]["price_yen"]}

@app.post("/jr/done", name="jr_done")             # JANCTION Render POSTs here once, when the job is done or failed
async def jr_done(request: Request):
    body = await request.json()                    # {"event": "job.done" | "job.failed", "job_id": ..., "artifacts": [...]}
    async with httpx.AsyncClient(timeout=30) as jr:
        j = (await jr.get(f"{JR}/v1/jobs/{body['job_id']}", headers=H)).json()   # read it back with your key; do not trust the body
    if j["status"] == "done":                      # view_url links last 24 hours: copy the images to your own storage
        orders[j["job_id"]].update(status="done", images=[a["view_url"] for a in j["artifacts"] if a["name"].endswith(".png")])
    else:
        orders[j["job_id"]].update(status="failed", why=(j.get("failure") or {}).get("reason"))
    return {"ok": True}

この例が頼っているもの: POST /v1/outcomes/product-shot(0/90/180/270 度の PNG 4 枚、無地の背景。turntable なら 360 度の MP4)は走る前に上限の値段を返し、使った GPU 秒だけ引く。Idempotency-Key を付けると、再送しても 2 回描かず最初の仕事が返る。notify_url(https)に job.done か job.failed の POST が 1 回届く(X-JR-Timestamp と X-JR-Signature で署名。v1=hex(HMAC-SHA256(secret, "<timestamp>.<body>"))、secret は GET /v1/me の webhook.secret)。受け取り側は本文を信じずに鍵で仕事を読み直す。view_url は 24 時間で切れるので、ファイルは自分の置き場に写す。まとめて描くなら POST /v1/batches(100 件まで、notify_url 1 つ)。1 仕事・1 日の上限は POST /v1/me/limits、402 には checkout_url、忙しいアプリはオートチャージ(POST /v1/billing/autocharge)で止まらない。値段は 料金、注文ごとの額は 商品。

エンドポイント

POST /v1/keys、POST /v1/files、POST /v1/files/{id}/assets、GET /v1/files/lookup?sha256=(送り直しの省略)、 POST /v1/estimate、POST /v1/jobs(kind は info | preview | final。オプション width, height, samples, camera, fps, output, environment, environment_strength, environment_visible, blender)、GET /v1/jobs/{id}、DELETE /v1/jobs/{id}、 GET /v1/jobs/{id}/artifacts/{name}、GET /v1/me、GET /v1/health(ワーカー・待ち行列・送れる形式・プリセット)。 エラー: 402 payment_required(無料の残りを超え、クレジットが足りない。無料の残りは、ようこそクレジットの間はその残り、その後は試し描きの毎日 2 GPU 分。checkout_url 付き)、400 beta_limit(大きすぎる。分ける)、429 rate_limited(間隔を空ける。retry_after_s 付き)。

ターンテーブル。orbit=true でカメラがシーンを 1 周します(既定 24 コマ)。試し描きは 4 方向、仕上げは 1 周の MP4。読み込んだモデルを見せるのに向きます。

bpy スクリプトから render_final(orbit=true) で作った 48 コマのターンテーブル(960x540、24 サンプル、studio)。JANCTION Render で GPU 76 秒、2026-10-01。

送れるもの: .blend(外部の画像は一緒に送るか、File → External Data → Pack Resources で詰める)、bpy の Python スクリプト(手元に Blender が無くてもよい。 シーン・カメラ・コマ範囲だけを書く。エンジン・解像度・サンプル数はサービス側が設定)、3D ファイル(glTF/GLB・FBX・USD・OBJ・STL・PLY・Alembic。空のシーンに読み込んで描く)。 カメラや光が無ければ自動で補い、応答の warnings に書きます。environment に studio / sunset / overcast / night を指定すると、同梱の HDRI で照明します。environment="compare" の試し描きは、同じコマを 4 つのプリセットで描き、ラベル付きの 1 枚にします。

同じ Blender のシーン(サルと金属の立方体)を environment=studio / sunset / overcast / night の 4 つのプリセットで描いた比較
同じシーンを 4 つのプリセットで。照明を作り込まなくても、どれかを選べば形になります(JANCTION Render で描画、2026-10-01)。

安全性

仕事ごとに作って捨てる隔離された環境で、外部と通信できず、CPU・メモリ・時間に上限を付けて動かします。鍵はハッシュで保存し、ヘッダでだけ受けます。 詳しくは安全性のページに。

Python パッケージ

pip install janction-render
janction-render preview scene.blend --frames 1-24     # コマンドも同じ API を使う
janction-render render scene.blend --frames 1-240 --wait

MCP

同じサービスが MCP サーバー https://render.janction.jp/mcp でもあります。Blender を描画する MCP サーバーを参照。

無料枠

料金(2026-10-08 から): 新しい鍵ごとに、試し描きにも仕上げにも使える 100 円分(1,000 GPU 秒)の GPU 時間が 14 日間無料です(カード不要)。Stripe の 0 円のページでカードを保存すると、カード 1 枚につき 1 回 400 円分が足されます(合わせて最大 500 円分)。使い切るか期限が過ぎたあとは、試し描きが鍵ごとに毎日 2 GPU 分まで無料、仕上げは先払いのクレジットから 0.1 円/GPU 秒です。チャージ(有料)は 100 円からです。ようこそ期間(14 日)の最初のチャージは 1.5 倍です(上乗せは 500 円まで、100 円で 150 円分)。2,000 円以上のチャージには 10〜20% の上乗せがあります(初回の上乗せとは重ねず、大きい方)。チャージの上乗せは、ようこそクレジットやカード登録の分とは別の制度です。決済は Stripe のページです。満額のようこそクレジットは 1 回線につき 30 日に 1 本までで、同じ回線の 2 本目からは、その回線のクレジットの残りを使えます。クレジットが足りない仕事には HTTP 402 payment_required と checkout_url が返ります。仕上げは 1 回の指示で 3,000 コマまで(必要なら自動で内部分割し、1 つの仕事 ID で描きます)。無料の分は 1080p (1920x1080)、先払いのクレジットでは 4K (3840x2160) まで。試し描きの無料分は UTC 0 時(日本時間 9 時)に戻ります。登録は不要で、つなぐと鍵ができます。入力と結果は最後に使ってから 24 時間(累計 500 円以上払った鍵は通常 7 日)で消え、学習には使いません。

よくある質問

Python から .blend ファイルを送ってレンダリングする API は?

あります。/v1/files へ .blend を送り、/v1/estimate で見積もり、/v1/jobs へ仕事を入れ、返った job_id を確認します。Python パッケージは同じ呼び出しを包み、OpenAPI にすべての入出力があります。

CI で headless Blender を GPU 実行できますか?

できます。鍵を CI の秘密情報に置き、.blend か bpy スクリプトを送り、先に見積もり、Idempotency-Key と max_yen 付きで仕上げを入れます。CI ランナーに Blender も GPU も要らず、PNG 連番か MP4 が返ります。

OpenAPI の文書はありますか

あります: https://render.janction.jp/openapi.json(OpenAPI 3.1。公開しているすべての口と欄・エラー)。llms.txt にも同じ呼び方を文章で書いてあり、Python パッケージ(janction-render)がそれを包んでいます。

コマを全部落とさずに MP4 だけ取るには

artifacts/output.mp4 だけを取ってください。仕事の状態に、出力ファイルの名前が並びます。MCP の道具なら render_download(only='mp4')。

上げたシーンを使い回せますか

使えます。scene_id を持っておくか、GET /v1/files/lookup?sha256=... を呼ぶと、同じ中身があればそれを返します。

関連

案内 · 案内の一覧 · llms.txt