Skip to main content
Glama

render_review

Check 3D models and Blender scenes from four angles under studio light; get pass/warning/fail, a score, detected issues with fix code, and a tiled preview before final rendering.

Instructions

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
assetsNoExtra files sent with the scene: local paths (textures, glTF .bin), https links, or 'polyhaven:<id>' CC0 assets from asset_search. A .blend finds them through relative paths (same folder); a script through os.environ['JR_ASSETS_DIR'] or the jr_assets helpers.
blenderNoBlender version: '' (default: a .blend opens with the version it was saved in, other scenes with 5.0) or '5.0' / '5.2' (also '4.5', '4.2', '3.6'; a script that stops on Blender 5 because of an older API is rendered again on those automatically) to choose.
out_dirNoLocal folder to save the files in (default ~/janction-render/<job_id>).
scene_idNoscene_id returned by an earlier call (reuses the uploaded scene without sending it again).
scene_urlNohttps link to a .blend, a .py script or a 3D file (.glb/.gltf/.fbx/.usd/.obj/.stl/.ply/.abc); the service fetches it (e.g. the sample https://render.janction.jp/samples/cube_scene.py, or a 12-hour /upload link). A .gltf or .obj also brings its .bin / .mtl / textures from the same folder.
scene_pathNoLocal path to the scene: a .blend file, a bpy .py script, or a 3D file (.glb/.gltf/.fbx/.usd/.obj/.stl/.ply/.abc, imported into an empty scene). Uploaded once; reuse the returned scene_id afterwards.
environmentNoLight for the review: 'studio' (default; the same neutral light every time), 'sunset', 'overcast', 'night', or '' for the scene's own lights.studio
orbit_targetNoObject name or 'x,y,z' to centre the orbit on (default: the scene's main objects).
scene_scriptNoThe scene as bpy Python code (text). No file and no local Blender needed; the service runs it in Blender 5.0 (5.2 with blender='5.2'). Blender 5.0 API notes: materials are node-based, so set a colour on the Principled BSDF (mat.node_tree.nodes['Principled BSDF'].inputs['Base Color'].default_value = (r, g, b, 1)); mat.diffuse_color only affects the viewport; do not set Material.use_nodes. Animate with obj.keyframe_insert() (action.fcurves no longer exists; set bpy.context.preferences.edit.keyframe_new_interpolation_type = 'LINEAR' first for constant speed). Build the scene, camera and frame range only; leave resolution, samples and denoising to the service. Helpers: `import jr_assets`, then jr_assets.frame_camera(margin=1.1) points the camera at every object and fits them in the frame; jr_assets.import_model('<id>'), jr_assets.material('<id>') and jr_assets.world_hdri('<id>') use Poly Haven assets passed in assets.
orbit_distanceNoMultiplier for the orbit camera distance (default 1.0).
orbit_elevationNoOrbit camera elevation in degrees (default 18).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.4.120
    • changedInput schema / properties / blender / description
      Previous value: -"Blender version: '' (default: a .blend opens with the version it was saved in, other scenes with 5.0) or '5.0' / '5.2' to choose."New value: +"Blender version: '' (default: a .blend opens with the version it was saved in, other scenes with 5.0) or '5.0' / '5.2' (also '4.5', '4.2', '3.6'; a script that stops on Blender 5 because of an older API is rendered again on those automatically) to choose."
  2. Addedv0.4.119

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the annotations: it runs on a cloud GPU, costs the same as one preview, enumerates the concrete checks performed (texture files, hidden objects, camera inside geometry, framing, exposure, light), returns fix code per problem, and returns the 4 views tiled in one image. The annotations only carry the generic openWorld/non-idempotent profile, so the description is doing real work here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and output, then usage triggers, then the sibling routing rule. Every sentence carries information, but the block is long and the multi-language example strings ('モデルを確認して') add bulk without adding much decision value for an English-speaking agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter, zero-required tool with no output schema, the description covers what matters: the return shape (pass/warning/fail, score, checks, fix code, tiled image), the input alternatives, cost, and the boundary of what the checks can judge. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: it frames scene_path/scene_script/scene_url/scene_id as four alternative ways to supply the same scene ('Give the scene as ...'), which the flat schema never states. It also notes environment affects lighting choice. Minor gap: it does not explain orbit_distance/orbit_elevation semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (check/review) and resource (a 3D model or generated Blender scene), and specifies the exact method: a 4-view turntable under neutral studio light returning pass/warning/fail, a score, and the checks run. It explicitly distinguishes itself from the sibling render_preview by naming the camera/lights case that selects the other tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use triggers ('after writing a bpy script, generating or converting a model ... before showing the result to the user or rendering a final'), the loop to follow ('apply the fixes and call it again'), an explicit limitation ('the checks cannot judge whether the shape matches the request'), and the alternative for camera-based shots (render_preview). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.