JANCTION Render
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| JANCTION_RENDER_SERVER | Yes | The URL of the JANCTION Render server. The public endpoint is https://render.janction.jp. | |
| JANCTION_RENDER_API_KEY | No | Set to pin a specific API key; otherwise a temporary API key is issued automatically on first use and cached in ~/.janction-render.json. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| render_previewA | Show what a Blender scene looks like: a fast, low-cost preview render on a cloud GPU, back as an image in seconds. Typical requests: 'render this .blend', 'show me the scene', 'preview the turntable', 'I have no GPU', 'Blender is too slow on my laptop', 'Blenderでレンダリングして', 'GPUがない', 'ターンテーブル', '商品の360度動画'. Also use it after writing a bpy script, to see what it builds. Each preview returns a critic verdict (ok / check / fix) with fix code: apply the fixes and preview again before any final render. It also returns final_estimate (the same scene as a 1080p final) and quota_left_today; tell the user both before asking to go on. A script that raises comes back as a failure with the line (nothing is rendered). When not to use: editing a scene open in the user's Blender belongs to a local Blender MCP, and a single still on a machine with its own NVIDIA GPU usually renders faster locally. This service is for CPU-only machines, animations, and scripts with no Blender installed. Limits: up to 1280x720; 1-4 frames tiled in one labeled image for the GPU time of one 720p frame. preset='product' | 'turntable' | 'animation' sets camera, light, backdrop and frames for that purpose. Other options are explained on each parameter: environment presets and 'compare', orbit (turntable), cameras (several named cameras), engine, transparent, assets with 'polyhaven:' CC0 assets. Give the scene as scene_path (a local .blend, .py or 3D file), scene_script, scene_url or scene_id; the image is saved locally and shown. |
| render_finalA | Render the final frames or video of a Blender scene on cloud GPUs, after the user approved a preview: 'render the final', 'make the video', 'export the turntable MP4'. Call render_estimate first when the time or the free GPU time left (the welcome credit, or 2 preview GPU-minutes a day after it) is uncertain, the job is longer than about 24 frames or above 720p, or the user asks how long it takes, and tell the user. For animations, keep the approved engine/look, test 10 contiguous final-path frames, then estimate again. Long jobs are rendered in chunks and joined into one video. Returns job_id and estimate.human at once; then render_status until done, and render_download(job_id, only='mp4') for the video. Use the same environment and blender as the approved preview. Limits: up to 3,000 frames per call (over 240 runs as parts under one job id); 1920x1080 on free time, 3840x2160 with prepaid credit; each new key gets 100 JPY of GPU time free with no card (14 days) and 400 JPY more once the user saves a card on a page that charges nothing (once per card); after that, previews are free up to 2 GPU-minutes a day and finals cost 0.1 JPY per GPU-second (prepaid); ask before a render the free time does not cover; files are deleted 24 h after last use (7 days once topped up). preset='product' | 'turntable' | 'animation' fills the settings for that purpose. Options per parameter: output (png, exr, mp4, webm, prores, gif, webp), orbit, cameras, transparent, engine, notify_url, assets ('polyhaven:'). Pass scene_id from render_preview, or scene_path / scene_script / scene_url; files are saved locally. |
| render_reviewA | Check a 3D model or a generated Blender scene by looking at it from 4 sides: a turntable preview (0, 90, 180 and 270 degrees) under neutral studio light on a cloud GPU, back with pass / warning / fail, a score, the checks it ran (texture files found, objects visible and not hidden behind a floor or wall, camera not inside an object, framing, exposure, light) with fix code for each problem, and the 4 views tiled in one image. Typical requests: 'check this model', 'does the scene look right', 'QA this GLB', 'モデルを確認して', '見た目をチェックして'. Use it after writing a bpy script, generating or converting a model (.glb/.gltf/.fbx/.usd/.obj/.stl/.ply/.abc) or changing materials, before showing the result to the user or rendering a final; apply the fixes and call it again. The checks cannot judge whether the shape matches the request: look at the views for that. It costs the same as one preview. To check a shot through the scene's own camera and lights, use render_preview (its critic runs the same checks). Give the scene as scene_path, scene_script, scene_url or scene_id. |
| render_downloadA | Download a job's files to out_dir (default ~/janction-render/<job_id>) and return the local paths. only picks the files: 'all' (default), 'mp4' (just the video; use it when the user wants the video, to skip hundreds of frames), 'frames', 'sheet' or 'output'. wait_seconds > 0 first waits that long for the job to finish. |
| render_statusA | Check a render job: status (queued / running / done / failed / canceled), frames done, the ETA (eta.human, including queue wait), files ready, Blender warnings, and the error with the log tail if it failed. Use it to report progress to the user; call render_download once status is done. Without job_id it lists this key's recent jobs and the scene_ids still kept, to pick up earlier work in a new conversation. |
| scene_infoA | Read a Blender scene without rendering (a few seconds, no GPU time): cameras and the active one, frame range and fps, resolution, objects by type, lights, materials, whether it is animated, and missing linked files that would render pink. Use it for a .blend you did not write, or to check what a bpy script built. Returns scene_id; pass it to render_preview and render_final instead of sending the scene again. |
| render_estimateA | Estimate a render before starting it (no GPU time): GPU seconds, queue wait, the wall-clock time as text (estimate.human, e.g. 'about 3 minutes') and whether it fits the free GPU time left (the welcome credit, or 2 preview GPU-minutes a day after it) and the size limits. Call it before render_final when the time or quota is uncertain, the job is longer than about 24 frames or above 720p, or the user asks how long it takes; tell the user the result. With scene_id the estimate uses measured render times and returns calibration.final_path_measured. If false, treat it as preliminary: run a short contiguous final-path test and estimate again before the full animation. It also says when to split a job. |
| render_infoA | Check the connection and the service before rendering (read-only, no GPU time, no charge): the server URL, whether GPU workers are online, the queue length and expected wait, and this key's usage. Use it before the first render or when renders seem stuck, and to decide whether to route a render here: workers_available > 0 means a preview comes back in seconds; gated means the GPU is lent out and gate says how long the wait usually is. It uses the API key in JANCTION_RENDER_API_KEY or ~/.janction-render.json (a free key is made on first use). Every call is rate-limited per key; a 429 response carries retry_after_s, wait that long. diagnose.tell_user says in plain words whether the connection, the key, the free credit and the GPUs are fine and what the last failed render said; relay it when the user asks why something does not work. |
| asset_searchA | Find free CC0 3D models, PBR textures or HDRIs on Poly Haven by words ('wooden chair', 'forest hdri') to furnish a scene without uploading files; no GPU time. For product shots of something the user has no model for: asset_search(''), then render_preview(scene_script='import jr_assets; jr_assets.import_model("")', assets=['polyhaven:'], preset='product') gives 4 studio shots on a plain backdrop. Each result has a spec 'polyhaven:' to pass in assets, its size in metres and the entry file. In the scene script: import jr_assets, then jr_assets.import_model('', location=(x, y, z), scale=1.0) returns the objects, jr_assets.material('') builds a material and jr_assets.apply(obj, mat) assigns it, jr_assets.world_hdri('', strength=1.0) lights the world. 'polyhaven:@2k' fetches 2k textures (1k by default). |
| render_shareA | Publish a finished render as a public web page anyone with the link can open (for X, Discord or a client): the image or video, the render settings, an optional title and note, the user's request in their words (prompt), and the bpy script only if include_script=True. The page keeps its own copy of the result after the job's files expire, until render_unshare. listed=True only asks to appear in the public gallery; the operator reviews it first. Public: ask the user before sharing and return the url to them. Only the key that rendered the job can share it. |
| render_unshareA | Take down the public share page of a job made with render_share. Effects: the page URL stops working, its copy of the image or video, the shared script and the shown request are deleted, and the page leaves the public gallery. This cannot be undone: sharing again makes a new page with a new URL. The job's own files are not touched (they expire on their usual schedule). Only the key that shared the job can take the page down; a job without a share page returns not_found. |
| render_cancelA | Stop a queued or running render job of this key (a j_... job, or a b_... job split into parts, which stops every part). Effects: queued frames are dropped; frames already rendered are charged and stay downloadable until the job expires; the rest of the GPU time held for the job is returned to the key at once. It cannot be undone or resumed: to render again, call render_final again (a new job). A job that is already done, failed or canceled is returned unchanged, and a job whose frames are all rendered and is being assembled into the video cannot be stopped (nothing more is charged). Only the key that started the job can stop it; any other job_id returns not_found. Ask the user before cancelling a render they asked for. |
| billingA | Check what this key can still render for free and its credit (no GPU time): the free GPU time left and when it expires or resets (each new key gets 100 JPY of GPU time free with no card (14 days) and 400 JPY more once the user saves a card on a page that charges nothing (once per card); after that, previews are free up to 2 GPU-minutes a day and finals cost 0.1 JPY per GPU-second (prepaid)), the balance in yen, the price per GPU-second, any pending checkout link, and card_offer / autocharge_offer when they apply. Relay tell_user to the user in their language when it is present. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| try_janction_render | Check the connection with a sample scene: one preview image showing four lighting presets, in a few seconds. Free; no final render. |
| render_my_scene | Preview a .blend, a bpy script or a 3D file on a cloud GPU, fix what the critic finds, then render the final after you confirm the estimate. |
| turntable_video | A turntable MP4 (or a transparent WebM) of a 3D model: GLB, FBX, OBJ, USD or .blend. Preview first, final after you confirm. |
| product_shots | Four PNGs (front, side, back, side) of a 3D model, on a transparent background or a studio light. Preview first, final after you confirm. |
| scene_from_description | The assistant writes the Blender scene as a bpy script, previews it on a cloud GPU and iterates with the critic. No Blender or GPU needed on your side. |
| blend_to_mp4 | An animated .blend to MP4 on cloud GPUs: reads the scene, previews four frames, plans the render (up to 3,000 frames per instruction, run as parts of 240), then renders after you confirm. |
| render_for_free | Checks the free GPU time of this key first and keeps the render inside it; if the final would not fit, says what would and what it would cost. No sign-up or card. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| JANCTION Render app | Interactive view for JANCTION Render results: preview image, progress, ETA, links, preset picker. |
TDQS
Scored across 13 tools
Most tools map to clearly distinct stages of the cloud rendering workflow: estimate, preview, review, final render, status, download, cancel, share, info, billing, and asset search. The main ambiguity is between render_preview and render_review, which both return preview images and checks, and between render_status, render_info, and billing, which all report service or account state. Descriptions explicitly differentiate these, so an agent can tell them apart with care.
Almost all tools use consistent snake_case, and most render operations share the predictable render_ prefix. The few deviations are scene_info, asset_search, and billing, which drop the verb prefix or use a different domain noun, but they remain readable and unsurprising. Overall the naming is coherent with minor inconsistencies.
13 tools is well-scoped for a cloud Blender rendering service. The set covers the full workflow from scene inspection and estimation through preview, review, final render, download, cancel, sharing, and billing without obvious bloat. Each tool appears to earn its place.
The tool surface covers the rendering lifecycle comprehensively: scene_info, render_estimate, render_preview, render_review, render_final, render_status, render_download, render_cancel, render_share, render_unshare, render_info, billing, and asset_search. There are no obvious dead ends for the stated cloud rendering domain. Minor gaps like an explicit job-list tool are handled by render_status without job_id.