bluerskill
Original:🇺🇸 English
Translated
4 scripts
Anti-slop 3D for Blender. Use whenever building, editing, lighting, texturing, or rendering a Blender scene (bpy scripts, blender-mcp, .blend files, product shots, props, environments, stylized scenes) so the result looks authored by a 3D artist instead of AI/procedural-default. Triggers on Blender, bpy, 3D modeling, 3D render, lookdev, "make it look less CG / less fake / less AI". Not for game-engine shader code, CAD tolerancing, or 2D image generation.
9installs
Added on
NPX Install
npx skill4agent add growing7696-cmyk/bluerskill bluerskillTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →bluerskill — anti-slop 3D for Blender
tasteA Blender scene reads as "AI made this" for the same reason a landing page does: every decision was left at its default, everything is perfect, and nothing has a history. Primitive soup, razor edges, 0.8-gray plastic, one white point light, the camera that shipped with the startup file. This skill replaces defaults with decisions, and perfection with plausible imperfection.
Files in this skill (paths relative to this SKILL.md):
| File | Use |
|---|---|
| Full catalog of 3D AI tells, with the fix for each. Read before starting any non-trivial scene. |
| Physically plausible albedo/roughness table and breakup recipes. |
| Lighting rigs, color temperature, lens and composition rules. |
| Importable helper library: bevel, ground, jitter, physical materials, wear, light rigs, camera, color management. |
| Scores a scene 0–100 for AI tells and prints fixes. Run it, don't eyeball it. |
| Renders clay / beauty / wire check images so you can look at the result. |
| Worked example: same brief built the AI-default way ( |
0. How you drive Blender
Prefer, in order:
- blender-mcp (if an MCP server exposing or similar is connected): run code live in the user's open session.
execute_blender_codeor addexec(open("<skill>/scripts/humanize.py").read())toscripts/andsys.path.import humanize - Headless CLI (always available if is on PATH):
blenderInbashblender -b scene.blend --python build.py # build / modify blender -b scene.blend --python <skill>/scripts/audit.py # score blender -b scene.blend --python <skill>/scripts/preview.py -- --out ./renders # look, putbuild.pythensys.path.insert(0, "<skill>/scripts"). Save withimport humanize as hz.bpy.ops.wm.save_as_mainfile(filepath=...)
Target Blender 4.2+ / 5.x API (Principled v2 socket names like , , ; no ; is deprecated and always on). Check before using anything version-specific.
Specular IOR LevelCoat WeightEmission Coloruse_auto_smoothMaterial.use_nodesbpy.app.version1. Output header
Post this before writing any bpy code:
text
READ: <subject> for <purpose>, <style family>, <mood>
REFS: <2-3 concrete real-world references: object, era, place, material>
DIALS: WEAR <0-10> / STYLIZATION <0-10> / CLUTTER <0-10>
SCALE: metric, hero object ≈ <real size>
ENGINE: CYCLES | EEVEE, AgX <look>REFSDials
- WEAR — 0 new-in-box, 3 lightly used (default), 6 daily-use years, 9 derelict. Drives bevel softness, edge wear, grime, roughness breakup, jitter.
- STYLIZATION — 0 photoreal, 4 "Pixar-real" (default for stylized asks), 8 toon/flat. Stylized ≠ lazy: stylized work still has deliberate shape language, edge softness, and value design.
- CLUTTER — 0 isolated product, 3 hero + 2–4 supporting props (default), 7 lived-in environment.
Baselines: product shot · stylized prop · interior archviz · game-ready prop · narrative environment .
2/1/13/5/23/0/54/3/06/2/72. Hard rules (never ship these)
- No razor edges. Every hard-surface mesh gets a bevel (modifier or modeled). Width ≈ 0.5–2 % of the object's smallest dimension at WEAR 0–3, larger with wear/stylization. .
hz.bevel(obj) - Real-world scale, applied. 1 BU = 1 m. Mug ≈ 0.095 m tall, door 2.03 m, table 0.74 m. Scale applied (). Wrong scale breaks DOF, SSS, bevels, lighting falloff.
hz.apply_scale - Nothing floats, nothing clips. Objects rest on something (). Contact is where realism lives.
hz.ground - No default material. No 0.8 gray / 0.5 roughness. Every material has a real-world reference, albedo inside 0.03–0.85 (non-metals), metallic exactly 0 or 1.
- No constant roughness on a hero surface. Roughness gets breakup (). Real surfaces are never uniform.
hz.add_breakup - No startup camera, no startup light. Delete or move them. Never ship 50 mm from (7.36, -6.93, 4.96).
- AgX (or Filmic), never Standard. Standard clips highlights into flat CG white.
- No clone armies. Repeated objects get per-instance variation in rotation, scale, and ideally material ().
hz.jitter - Verify by looking. Run (target ≥ 85) and
audit.py, then open the PNGs with the Read tool before claiming done. Don't report a score you didn't run.preview.py
3. Default bans (override only when the user asks)
These are the 3D equivalent of purple gradients and glassmorphism — instant "AI made this" signals:
- Neon purple/teal or pink/cyan lighting on a dark void.
- Glossy chrome or iridescent blobs/torus/spheres floating on a gradient backdrop.
- Pastel clay "isometric tiny room" with every object the same softness and saturation.
- Hero object dead-center on an infinite seamless backdrop with a single soft shadow.
- Everything brand new, symmetrical, axis-aligned, and placed on round-number coordinates.
- Emission used as lighting instead of lights; bloom as a style instead of a consequence.
- Huge f/1.2 bokeh on a scene that isn't macro, or zero DOF on a close-up.
- UV sphere / 32-vertex cylinder with visible faceting on a silhouette.
4. Workflow
- Header (§1). Pick dials. Name references.
- Units & scale: metric, scale 1.0. Block out at real dimensions.
- Silhouette first: judge the blockout in clay from the final camera. Shapes need a big/medium/small rhythm; avoid everything being the same size. Break perfect symmetry on anything that has been used or handmade.
- Edges: bevel pass on all hard surfaces; subdivision with support loops for organic/molded parts; shade smooth + harden normals.
- Materials: start from , then
hz.physical_material(preset)and, for WEAR ≥ 3,hz.add_breakup. Colors come from reference, desaturated a notch from what feels right.hz.add_wear - Placement: ,
hz.ground; nothing on round coordinates; objects relate to each other (touching, leaning, overlapping in depth).hz.jitter - Light: motivated sources only (window, lamp, sun, practical). Warm/cool contrast via color temperature. .
hz.light_rig("window" | "overcast" | "golden_hour" | "studio" | "night_practical") - Camera: chosen lens (35 mm environment, 50–85 mm product, 100 mm macro), eye height that a person would actually stand at, rule-of-thirds subject, foreground element when CLUTTER ≥ 3. .
hz.camera_rig - Color & render: ,
hz.color_management.hz.render_settings - Audit → preview → look → fix, loop until audit ≥ 85 and the renders hold up at thumbnail size.
Read for the full tell → fix catalog and / when doing that stage.
reference/ai-tells.mdreference/materials.mdreference/light-camera.md5. Pre-flight (answer each before saying done)
- Header posted; references are concrete.
- run; score ≥ 85; every remaining FAIL justified in one line.
audit.py - Clay render: silhouette reads; shapes have size rhythm; no faceting.
- Beauty render viewed with Read: edges catch highlights; contact shadows exist; no clipped whites.
- At least one sign of history (wear, use, dust, asymmetry) proportional to WEAR.
- Nothing in §3 present unless the user asked for it.
Report: final audit score, render paths, and any deliberate deviations.