CommunityImagegithub.com

m4bwav/polywright-references

Use whenever reference images, views or textures for a 3D model are needed, before modelling or image-to-3D: orthographic front, side and back views with a height bar, A-pose turnarounds, multi-view sets, blockout renders repainted into consistent views, seamless textures and quick normal/height/roughness maps (pw.py texture). Use on 'what references do I need', 'reference sheet', 'front side back views', 'turnaround', 'seamless texture', 'PBR maps from this photo'. Not for flat graphic...

What is polywright-references?

polywright-references is a Claude Code agent skill that use whenever reference images, views or textures for a 3D model are needed, before modelling or image-to-3D: orthographic front, side and back views with a height bar, A-pose turnarounds, multi-view sets, blockout renders repainted into consistent views, seamless textures and quick normal/height/roughness maps (pw.py texture). Use on 'what references do I need', 'reference sheet', 'front side back views', 'turnaround', 'seamless texture', 'PBR maps from this photo'. Not for flat graphic...

Works with✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/m4bwav/polywright/tree/HEAD/skills/polywright-references

Installed? Explore more Image skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

What does polywright-references do?

References decide most of a 3D result: an image-to-3D model copies its input's lighting, perspective and mistakes; a modeller or a bpy script needs dimensions and views. Gather or generate them first, put them in the asset's refs/, record each with pw.py manifest --add-source (generated ones name the model and seed).

Back to the hub: ../polywright/SKILL.md. Prompt templates and checks: references/reference-kit.md.

Step 1: what this model needs

ModelCollect (real)Generate (imagined or missing)
Real objectphotos from 6 sides with a ruler in the plane, close-ups, real dimensions (maker's sheet, Wikipedia, a tape)orthographic clean-ups only if photos are poor
Vehicle, product, furnitureblueprints or CAD drawings (check one known dimension), maker's dimensionsfront, side, top elevations in technical-drawing style
Buildingfootprint (OSM), height or floor count, photos of each face, roof shapeelevations per face, roof plan
Real placemap extract, elevation, aerial photo, ground photos of landmarksnone: places come from data (polywright-capture)
Imagined propstyle referencesa three-quarter hero image, then front/left/back/right at the same scale
Character or creaturestyle and costume referencesturnaround: front, side, back, three-quarter, A-pose, height bar, plain background
Surfaces (walls, ground, terrain)photo of the material, flat and evenly litseamless tileable albedo, then maps (Step 4)

Always add a scale reference: a known dimension, a 1.8 m human silhouette, a height bar on the sheet.

A history research pack (a folder holding answer.md, refs/index.json and anachronism.md, made by the historywright plugin) is already a valid asset folder: start from it, do not search again. Read refs/index.json: each reference has the object's own date, place, institution, accession number and licence. Use only references whose object_date fits the brief's period. Keep a reference with nc: true out of a commercial model. Check every generated view against anachronism.md before it is meshed.

Step 2: generate the views (rules that matter)

Ask the image tool for: one object, centred, filling about two thirds of the frame; plain white or light grey background; flat, even, shadowless light; no strong perspective (long lens or orthographic look); 1024 px or more; no text. Characters stand in a relaxed A-pose (arms 30 to 45 degrees down, legs slightly apart): T-poses distort proportions and action poses fail in generators and riggers. Templates per kind are in the kit.

For consistent extra views from one image, an image-edit model with a multi-angle adapter (Qwen Image Edit with a Multiple Angles LoRA, 2025-2026) keeps identity better than prompting each view; expect colour drift and colour-match each view to the front. Check every generated view against the front: same proportions, same number of arms, same items, nothing re-aimed. Drop a view that disagrees; a wrong back view is worse than none. Name a real object's colour from the photo's pixels (median hue, saturation, value), not from a word: the edit model follows the word over the picture (L-003). Back views tend to copy a front marking onto the back.

A ready workflow for a Z-Image Turbo host: references/zimage-reference.api.json ({SUBJECT} placeholder; tested 2026-10-11).

Step 2b: a designed prop's sheet comes from the model

When the prop is designed (a weapon, a tool, a vehicle part described in words or on a fan sheet) and text prompts keep giving half the shape, stop prompting: build it with a bpy script (polywright-blender recipe "A designed prop from a written description") and render the sheet from the model, side and top orthographic on flat mid-grey, Cycles on the CPU when the GPU is busy. A model is exact, re-renders in seconds after each note, and the same file later composes the prop into pictures (hub: "Compose a model into a picture"). Raise the side camera 10 to 15 degrees when parts come in mirror-image pairs, or one hides behind the other.

Step 3: views from a blockout (when views keep disagreeing)

Build a rough blockout (primitives, or a first front-only generated mesh), render it with pw.py render <file> --out refs/blockout --views front,right,back,left --color clay, then have an image-edit model repaint each grey render in the subject's colours and detail (image-to-image with the render as the first reference and the front view as the second). Only the camera moves, so nothing can be re-aimed or grow extra limbs; the back can only show what the blockout implies. Feed the repainted set to multi-view generation.

Step 4: textures and materials

  • Prefer a CC0 material (Poly Haven, ambientCG) over a generated one.
  • Generated tileable: ask for "seamless, tileable, top-down, flat even light" at a power of two, then pw.py texture <img> --out refs/tex --seamless (offset-blend seams) and look at a 2x2 tiling.
  • Quick maps from a photo or albedo: pw.py texture <img> --out refs/tex [--convention opengl|directx] writes height, normal and roughness derived from luminance. Fine for props and terrain, wrong for measured materials. Normal maps: OpenGL (Y+) for Blender, Unity, Godot, glTF, three.js, Roblox; DirectX (Y-) for Unreal.
  • Baked light in a photo becomes baked light in the albedo: fix upstream with flat light, or add --delight (divides out broad gradients; sharp cast shadows stay, paint those out). Normal maps change shading only: silhouettes stay flat and big forms break at grazing angles, so model large forms and map only small detail.

Step 5: put them to work

  • In Blender: reference images as empties in front, right and top views, scaled to a known dimension (orthographic renders from pw.py render report metres_per_px); recipe in polywright-blender.
  • For image-to-3D: square, padded, 1024 px; pw.py gen pads and removes backgrounds itself. Judge the picture before the GPU run, and what to fix in it rather than in the mesh: references/images-for-3d.md.
  • On a board (PureRef 2.1) for a human: group by view, note dimensions on the board.

Maintenance

Evergreen unit, tier fast. Companions: RESEARCH.md, CHANGELOG.md, LEARNINGS.md, TESTS.md with evals/evals.json, MAINTENANCE.md, state in evergreen.json. Read evergreen.json at each use; refresh when due.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

m4bwav/polywright

Start here whenever a task needs a 3D model and no sibling below clearly owns it: a model of a real or imagined thing for a game (Unity, Roblox, Unreal, three.js), a 3D print, AI video or AR, or another plugin asking for a mesh. Picks the route (find, capture, generate, code), scaffolds the asset folder and manifest other plugins read, and runs pw.py (inspect, render a sheet, convert, check a budget, bpy headless, match a picture's camera, army blockouts with depth and pose passes for AI...

m4bwav/polywright-blender

Use whenever Blender is scripted, automated or debugged, before writing any bpy code: headless runs that report errors (pw.py bpy), the bpy API traps models still write in Blender 5.x (removed importers, renamed sockets, EEVEE names), tested recipes (modifiers, booleans, remesh, UVs, bakes, turntables, depth passes, batch exports), Blender MCP servers and their risks, and other 3D tools per OS. Use on 'write a Blender script', 'automate Blender', 'batch export .blend', any bpy traceback or...

m4bwav/polywright-finish

Use whenever a mesh must be made ready for a game engine, the web or AR: is it game-ready, too many polygons, LODs, retopology, UVs, baking, PBR and normal-map conventions, collision, rigging, and axis, unit and format export for Roblox, Unity, Unreal, Godot, three.js (meshopt, KTX2), USDZ and video blockouts. Use on 'is this game-ready', 'make this work in Roblox/Unity', 'optimise for the web', 'reduce polygons', 'add LODs', 'retopologise', 'bake normals', 'imports sideways or tiny', 'flip...

m4bwav/polywright-generate

Use whenever an imagined or hypothetical 3D model must be made from a prompt, a drawing, concept art, photos or a blockout: image-to-3D through ComfyUI (TRELLIS.2, Pixal3D, Hunyuan3D-2 via pw.py gen) or hosted (Meshy, Tripo, Rodin), or code (bpy, build123d, CadQuery, OpenSCAD) when it has dimensions; then texturing and the licence record. Use on 'make me a 3D model of a dragon', 'turn this drawing or concept art into 3D', 'image to 3D', 'text to 3D', 'TRELLIS', 'Hunyuan3D', 'Meshy', 'model a...

Related Skills