CommunityBildgithub.com

polywright

Starte hier, wenn eine Aufgabe ein 3D-Modell benötigt und keine der untergeordneten Fähigkeiten eindeutig zuständig ist: ein Modell eines realen oder imaginären Objekts für ein Spiel (Unity, Roblox, Unreal, three.js), einen 3D-Druck, ein KI-Video oder AR oder ein anderes Plugin, das ein Mesh anfordert. Wählt den Weg (finden, aufnehmen, generieren, codieren), erstellt das Asset-Verzeichnis und das Manifest, das andere Plugins lesen, und führt pw.py aus (prüfen, Rendering-Blatt, konvertieren, Budget prüfen, bpy headless, Kamera an ein Bild anpassen, Armee-Blockouts mit Tiefen- und Posen-Pässen für KI...

Was ist polywright?

polywright ist der zentrale Hub für alle 3D-Modellierungsaufgaben in einer KI-Agenten-Umgebung. Es entscheidet, wie ein Modell erstellt wird – ob durch Suchen, Aufnehmen (Fotogrammetrie), Generieren (KI) oder Programmieren (bpy, Build123d). Die Fähigkeit organisiert jedes Asset in einem einheitlichen Ordner mit Manifest und belegt jeden Schritt mit Zahlen (Dreiecke, Größe, Wasserdichtigkeit) und einem Bild (Sechs-Ansichten-Blatt). Vielseitig und plattformübergreifend einsetzbar, unterstützt sie Spiele-Engines (Unity, Roblox, Unreal, three.js), 3D-Druck, KI-Video (Wan, VACE), AR und CAD. Die Arbeit beginnt mit einem Brief (Was, Zielplattform, Maßstab, Budget), gefolgt von der Wahl des günstigsten Weges, Referenzsammlung, Bau und Nachweis (pw.py inspect, render, check). Für komplexe Szenen bietet sie spezielle Workflows: Modelle in Fotos einpassen (pw.py match), Spiel-Sprites aus Modellen rendern, Szenenillustrationen als Grundlage für KI-Übermalung, Crowd-Blockouts und Duelle für Videomodelle sowie Figurenerfassung für Videos. Regeln wie ‚Niemals behaupten, ein Mesh sei gut‘, ‚Jeder Download braucht eine Quellenangabe mit Lizenz‘ und die konsequente Trennung von Planen, Handeln und Kritik gewährleisten reproduzierbare, qualitätsgesicherte Ergebnisse.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/m4bwav/polywright/tree/HEAD/skills/polywright

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

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht polywright?

Der Dreh- und Angelpunkt für 3D-Modellarbeit. Er entscheidet, wie ein Modell erstellt wird, hält jedes Asset in einem Ordner mit einem Manifest und belegt jeden Schritt mit Zahlen und einem Bild. Die Schwesterfähigkeiten enthalten die Tiefe.

Skript: scripts/pw.py in diesem Fähigkeitsordner (Python 3.9+, Standardbibliothek, ein JSON-Objekt pro Befehl; scripts/pw_bpy.py ist seine Blender-Hälfte, niemals von Hand ausführen). Führen Sie einmal pro Sitzung python <dieser Ordner>/scripts/pw.py doctor aus: Es findet Blender (jedes Betriebssystem), die Python-Mesh-Bibliotheken, Slicer und ComfyUI-Hosts und sagt, was fehlt. Vollständige Befehlsliste: references/cli.md.

Schritt 1: Das Briefing (fragen Sie nur, was Sie nicht erschließen können)

  • Was: das Objekt oder der Ort, real oder imaginiert, und wie erkennbar es sein muss.
  • Ziele: eines oder mehrere aus pw.py check --list (game-roblox, game-unity, game-unreal, web-threejs, ar-usdz, commerce-gltf, print-fdm, print-resin, video-blockout, cad-step). Das Ziel setzt das Budget.
  • Reale Größe in Metern (eine Bank ist 1,8 m lang; eine Person 1,7 bis 1,8 m). Falscher Maßstab ist der häufigste stille Fehler; check --real-size-m fängt ihn ab.
  • Eingaben: eine Aufforderung, Fotos, eine Skizze, Maße, einen Kartenstandort, ein vorhandenes Mesh.
  • Genauigkeit und Budget: Blockout, spielbereit, Held; wie viel Zeit oder Geld ein gehosteter Generator kosten darf.

Gerüst: pw.py new <verz> --name <Name> --kind real|imagined|hybrid --route <route> --targets a,b --real-size-m X. Ordner: refs/ (Referenzen, jede als Quelle aufgezeichnet), work/ (.blend, Zwischenschritte), out/ (ein Auslieferungsobjekt pro Ziel), renders/ (Überprüfungsblätter), brief.md, manifest.json. Vertrag für andere Plugins: references/contract.md.

Schritt 2: Den Weg wählen (der günstigste, der dem Briefing entspricht)

SituationWegFähigkeit
Ein gewöhnliches Objekt; Lizenz erlaubt Wiederverwendungfinden: Poly Haven, Kenney, Quaternius (CC0), Sketchfab und Drucksites (jede Lizenz prüfen)diese Fähigkeit, references/routes.md
Hat Abmessungen, Teile, die passen, scharfe Kanten (Halterung, Gehäuse, Gebäude, Möbel)codieren (--route procedural): bpy, build123d/CadQuery/OpenSCADpolywright-generate, polywright-blender
Ein realer Ort (Park, Straße, Campus, Gelände)place (Ort): OSM + Höhe (pw.py place)polywright-capture
Ein reales Objekt, das Sie fotografieren oder scannen könnencapture (aufnehmen): Fotogrammetrie, Splats, Scanner oder Modell aus Maßenpolywright-capture
Imaginiertes organisches oder Einzelstück (Statue, Kreatur, Requisite)generieren: Referenzblatt, dann Bild-zu-3Dpolywright-references, polywright-generate
Heldencharakter, der sich verformtgenerieren oder formen als Basis, dann Retopologie und Riggingpolywright-generate, polywright-finish

Die meisten guten Ergebnisse mischen Wege: ein OSM-Park mit generierten Helden-Requisiten, ein codiertes Haus mit einer generierten Statue. Zeichnen Sie den Weg pro Teil im Manifest auf.

Schritt 3: Referenzen vor Geometrie

Für alles, das nicht fertig gefunden wird, sammeln oder generieren Sie zuerst Referenzen (polywright-references): orthografische Ansichten auf einer gemeinsamen Bodenlinie mit einem Höhenbalken, Materialmuster, Maßstabsreferenzen. Generierte Eingaben bestimmen den Großteil eines Bild-zu-3D-Ergebnisses.

Schritt 4: Bauen, dann beweisen (jeder Weg)

  1. Zuerst Blockout in realer Größe: Grundelemente für Silhouette und Proportion. Korrigieren Sie den Maßstab hier; es ist jetzt billig.
  2. Zahlen: pw.py inspect <datei>: Dreiecke, Objekte, Größe, Materialien, Texturen, UVs, wasserdicht, Teile. Lesen Sie es vor und nach jedem zerstörerischen Schritt.
  3. Bild: pw.py render <datei> --out renders/<schritt>: sechs Ansichten und eine sheet.png. Lesen Sie das Blatt, nicht sechs Screenshots. Vergleichen Sie mit den Referenzen: Silhouette, Proportion, fehlende oder schwebende Teile, Schattierungsspitzen, falsche Achse (liegt auf der Seite), falscher Maßstab.
  4. Ziel: pw.py check <datei> --target <z> --real-size-m X. Fehler bedeutet: vor der Lieferung korrigieren; Warnung bedeutet: in der Übergabe erwähnen.
  5. Aufzeichnen: pw.py manifest <verz> --add-output out/<datei> --target <z> --inspect, jede Quelle mit --add-source <url> --licence <l> --author <a>, dann --validate.

Planen, Handeln und Kritisieren sind separate Durchläufe: Nach dem Bauen betrachten Sie das Blatt wie ein Kritiker und listen Mängel auf, bevor Sie behaupten, fertig zu sein. Zwei Runden der Fehlerbehebung eines Tracebacks lohnen sich; danach überdenken Sie den Ansatz. Speichern Sie eine nummerierte .blend pro Meilenstein (work/<name>_v03.blend), damit eine lange Arbeit von der Festplatte neu gestartet werden kann.

Ein Modell in ein Bild komponieren

Wenn ein Bild- oder Videomodell weiterhin eine entworfene Requisite falsch zeichnet (ein Storyboard-Standbild, eine Set-Referenz, ein Poster), nehmen Sie die Komposition aus dem Bild und die Form aus dem Modell:

  1. Wählen Sie das Bild nur für die Komposition: wo Personen stehen, das Licht, das Ziel. Eine einfache Ersatz-Requisite ist in Ordnung.
  2. pw.py match model.blend --still pic.png --out work/match.png --anchor-px X,Y --anchor-local=X,Y,Z --aim-px X,Y --aim-local=X,Y,Z --depth M --horizon ROW --hide BOX --mask-add BOX: Der Anker des Modells (ein Griff) landet auf der Hand, sein Zielpunkt (eine Spitze) auf dem exakten Pixel, gerendert RGBA mit der Linse und dem Horizont des Bildes. Setzen Sie --depth so, dass seine Breite in Pixeln der des Ersatzes entspricht (Breite = f_px x Durchmesser / Tiefe; f_px steht im Ergebnis). --hide lässt das Teil hinter einer Hand verschwinden; --mask-add fügt die Hände der Maske hinzu.
  3. Lesen Sie match_paste.png 3-fach vergrößert: Form, Größe im Bildausschnitt, Ziel. Korrigieren Sie Tiefe und Pixel, führen Sie erneut aus (Sekunden).
  4. Mischen Sie innerhalb von match_mask.png mit einer maskierten, rauscharmen Bildbearbeitung (FLUX.2 Klein oder jedes Inpaint-Modell: Denoise 0,3 bis 0,5, niedriger CFG), dann fügen Sie das Ergebnis durch die Maske zurück, sodass jedes Pixel außerhalb das eigene des Bildes bleibt. Eine Vollbildbearbeitung malt alles neu (HDR-Farbe, eine größere Requisite).
  5. Prüfen Sie in voller Größe; behalten Sie zwei oder mehr Seeds.

Referenzblätter der Requisite kommen ebenfalls aus dem Modell (polywright-references, Schritt 2b).

Spiel-Sprites aus einem Modell

Wenn ein Bildmodell in einem Spiel-Sprite weiterhin einen Mechanismus falsch darstellt (ein Rad, das nicht rund ist, ein Blatt auf dem Dach), bauen Sie das Modell, rendern Sie es durch die eigene Kamera des Spiels und lassen Sie das Bildmodell nur malen:

  1. pw.py spritecam <registry.json> --like <sprite> --out camera.json: die orthografische Kamera, angepasst an die Bodendrahtgitter des Spiels (L-014). Setzen Sie tile_m darin auf die Meter des Modells pro Kachel.
  2. Bauen Sie das Modell mit einem Teile-Präfix pro Objekt (wheel_, roof_...) in der Szeneneigenschaft sprite_parts, bewegliche Teile unter einem Drehpivot-Empty, gebaut im Raum des Pivots, und die Bewegung in der Szeneneigenschaft loop.
  3. pw.py sprite model.blend --camera camera.json --out renders/L1 --scale 10.6667 (1024 px für ein 96 px Sprite): Lesen Sie die Pässe und das Beauty-Bild im sheet-Stil bei 1x neben den Sprites des Spiels; --frames N --frame-passes id,pos für ein animiertes Teil, --hide wheel_ für eine Platte ohne Rad. Prüfen Sie dann die Größe gegen die Nachbarn des Spiels vor dem Malen: aw.py sprite <beauty bei 96> --refs <gleichartige sprites> schlägt fehl bei einer Abdeckung unter 0,9 ihres Medians. Die Drahtgitteranpassung setzt den Bodenmaßstab, nicht wie groß das Gebäude wirkt: Fügen Sie zuerst Masse und Requisiten hinzu (höhere Wände, ein Anbau, ein Hof), dann erhöhen Sie px_per_tile und verschieben footprint_centre_px, sodass die Bounding Box die Leinwand wie die Nachbarn überspannt (L-016). Halten Sie dünne Balken von der Silhouette eines Zylinders fern: Ein waagerechter Baumstamm über schrägen Schienen wirkt, als ob er über und unter ihnen hindurchgeht (L-017).
  4. Malen Sie das Beauty-Bild mit Canny des Tonmodells als Steuerung (ein Bildmodell mit einem ControlNet), schneiden Sie es mit dem Alpha des Renderings, sodass die Rahmung und groundBase exakt bleiben, und prüfen Sie dann die Malerei gegen die ID- und Randdaten in sprite.json.

Szenenillustrationen aus einem Modell

Ein Ladebildschirm, ein Key Art oder ein Cover um ein bereits existierendes Modell herum (ein Gebäude, eine Maschine): Bauen Sie die Szene in Blender und lassen Sie das Bildmodell sie malen, damit der Mechanismus und das Layout stimmen.

  1. Bauen Sie die Szene um das Modell herum mit einem Teile-Präfix pro Objekt in der Szeneneigenschaft scene_parts, Räder und Scheiben in rings, Schlüsselpunkte oder Pfade in scene_points. Dämme, Deiche und Mauern entlang eines Pfades sind jeweils ein sweep (importieren Sie es aus scripts/pw_scene.py in einem pw.py bpy-Skript), keine Reihe von Kisten (L-020).
  2. pw.py framecam problem.json --out cameras.json: Weltpunkte mit Bildschirmkästchen, im Bildausschnitt gehaltene Punkte und außerhalb der Textbänder der Benutzeroberfläche, ein Größenmaß zur Maximierung; gibt die besten Kameras als Voreinstellungen aus. Nehmen Sie die Bänder aus der echten UI-Datei (ihre Abstände und Anker), nicht nach Faustregel (L-018).
  3. pw.py scene scene.blend --cameras cameras.json --camera framecam_1 --out renders/v1 --size 1280x720 (die erste Durchgangsgröße des Mal-Workflows): Tonmodell, Beauty, Tiefe, Normalen, ID, Linie und scene.json. Lesen Sie zuerst Tonmodell und Tiefe; belassen Sie den Tiefenbereich bei der eigenen Messung der Szene, es sei denn, eine Voreinstellung erfordert eine feste Angabe (L-019).
  4. Malen mit Steuerung (Tiefe oder Linie), dann prüfen Sie die Malerei gegen scene.json: Ringränder, Punkte, ID-Farben.

Menschenmengen- und Kampf-Blockouts (KI-Video)

Videomodelle scheitern an Menschenmengen; Blender nicht. Lassen Sie Blender die Armee platzieren und das Videomodell das Aussehen malen:

  1. pw.py crowd --out work/crowd --action clash --preview (oder march, advance, charge, hold; --view, --lens, --move), dann lesen Sie work/crowd/sheet.png.
  2. Entfernen Sie --preview für die volle Einstellung: depth.mp4 (Hauptsteuerung), pose.mp4 (vordere Reihen), mask.mp4, clay.mp4, camera.json; standardmäßig 832x480, 81 Bilder bei 16 fps (Wan).
  3. Übermalen Sie Tonmodell-Bild 1 zu einem genehmigten Start-Standbild; steuern Sie Wan VACE oder Wan 2.2 Fun Control mit dem Tiefenvideo und diesem Standbild. Geben Sie Kostüm, Farbe pro Seite, Licht und Dunst vor, nicht die Kopfzahl.

Details und was ungetestet ist: references/crowd-blockouts.md. Einstellungsplanung ist Sache von cinewright.

Zwei Kämpfer: pw.py duel shot.json --preview positioniert zwei Gliederpuppen an ihren Markierungen im Set durch die Kamera der Einstellung (examples/duel.json); lesen Sie sheet.png, dann entfernen Sie --preview für jedes Steuerungs-MP4. Mehr: crowd-blockouts.md, „Two fighters".

Eine kleine Besetzung realer Figuren oder Spielzeuge (Seiten getauscht, eine zusätzliche Figur, Markierungen verloren): Erstellen Sie ein Mesh aus Fotos, korrigieren Sie Farbe und bemalte Markierungen mit pw.py mark, geben Sie dem Videomodell pw.py turnaround-Bilder als Referenzen und ein pw.py lineup (Teams auf festen Seiten, Tiefe und Maske) als Eröffnung: references/figures-for-video.md.

Sets und Requisiten für eine Filmeinstellung: references/film-and-video.md.

Schritt 5: Fertigstellen und übergeben

Das Fertigstellen pro Ziel (UVs, LODs, Normal-Map-Konvention, Achsen- und Einheitenumrechnung, Komprimierung) ist polywright-finish; das Drucken (wasserdichter Körper, Wände, Basis, Teilung, 3MF) ist polywright-print. Übergeben Sie den Ordner an das Plugin, das ihn verwendet: three.js-Seiten (threewright), Film und Video (cinewright), Roblox-Orte (roblox-agent), Unity-Projekte (unity-agent), eine druckerspezifische oder Slicer-Fähigkeit für Druckeinstellungen, eine Bildfähigkeit für weitere Bilder. Diese lesen manifest.json und out/.

Übergabenachricht:

Modell: <name> (<route>) -> out/<datei> für <ziel>: <tris> Dreiecke, <größe> m, <wasserdicht/teile>
Check: <ziel> bestanden|Warnung (<regeln>)   Review: renders/<schritt>/sheet.png
Quellen: <n> mit Lizenzen; KI-gemachte Teile: <welche, welches Modell>   Geschuldet: <was nicht erledigt ist>

Regeln

  • Reale Größe in Metern in Blender und glTF (+Z oben in Blender, +Y oben in glTF); Millimeter nur in Druckdateien.
  • Behaupten Sie niemals, ein Mesh sei gut, nur aufgrund seines Dateinamens oder des Wortes eines Generators: prüfen, rendern, kontrollieren.
  • Jeder heruntergeladene oder generierte Eingang erhält eine Quellenzeile mit seiner Lizenz. Geschäfte und Drucksites (Fab, Unity Asset Store, Sketchfab, MakerWorld, Printables, Steam) verlangen die Offenlegung von KI-erstellten Inhalten; das Manifest zeichnet es auf.
  • Blender-Brücken über MCP führen beliebiges Python aus: Bevorzugen Sie pw.py bpy auf Kopien; verwenden Sie eine Live-MCP-Sitzung nur, wenn der Benutzer zusieht (polywright-blender).
  • Google Photorealistic 3D Tiles dürfen angesehen, niemals exportiert, zwischengespeichert oder nachgezeichnet werden (deren Bedingungen).

Wartung

Evergreen-Einheit, Stufe fast (Generatoren und Blender ändern sich monatlich). Begleiter: RESEARCH.md, CHANGELOG.md, LEARNINGS.md, TESTS.md mit evals/evals.json, MAINTENANCE.md, Zustand in evergreen.json. Lesen Sie evergreen.json bei jeder Verwendung; wenn fällig, erledigen Sie die Aufgabe, dann aktualisieren Sie (evergreen-refresh). Schreiben Sie Erkenntnisse während der Arbeit in LEARNINGS.md.

Individual skills in this repo

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

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...

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...

Verwandte Skills