Blaupausen-Generator (Blueprint Maker)
Erzeugt ein fertiges Blaupausen-Blatt (PNG, Standard 1920x1080) aus entweder:
- einem 3D-Modell → echte orthografische Ansichten mit verdeckten Linien: eine große 3/4-Ansicht sowie Seiten-, Drauf- und Vorderansicht mit gemessenen Maßlinien (3D-Pipeline), oder
- einem 2D-Bild → Linienextraktion mit Silhouettenumriss, Begrenzungsrahmen-Maßen und Beschriftungen (2D-Pipeline).
Beide Pipelines teilen sich eine gemeinsame Layout-Engine (Rahmen, Panels, Schriftfeld, Textanpassung), sodass das Ergebnis gleich aussieht.
Was es kann und nicht kann (sagen Sie dies dem Benutzer, wenn relevant)
- Keine Datei, keine Blaupause. Ein Objekt, das nur in Worten beschrieben wird, kann nicht in eine genaue Zeichnung umgewandelt werden. Fragen Sie nach einem 3D-Modell oder einem Bild. Erfinden Sie keine Geometrie.
- 3D liefert echte orthografische Ansichten; 2D nicht. Ein einzelnes Foto hat einen Blickwinkel, daher produziert die 2D-Pipeline eine Linienkunst-Ansicht, nicht Vorder-/Seiten-/Draufsicht.
- Die Linienqualität hängt vom Netz/Bild ab. Aus Spielen extrahierte Netze mit Hunderttausenden von Dreiecken ergeben dichte Linien; es ist eine gute automatische Basis, keine handgezeichnete Illustration.
- Der Maßstab ist unbekannt, es sei denn, der Benutzer gibt ihn an. Maße sind in Modelleinheiten (
u) oder Pixeln (px), sofern nicht einscale_ref(eine echte Messung) angegeben wird. Präsentieren Sie niemals eine geschätzte reale Größe als Tatsache. - Schriftarten: Die gebündelte Textdarstellung verwendet DejaVu (Lateinisch, Griechisch, Kyrillisch). CJK/Arabisch/Hebräischer Text wird nicht korrekt dargestellt.
- Layout ist für 16:9 ausgelegt (getestet mit 1920x1080, 2560x1440 und 1920x1200). Andere Seitenverhältnisse strecken das Panel-Layout; überprüfen Sie die Ausgabe.
- Gerippte Spiel-/Film-Assets sind das geistige Eigentum von jemandem. In Ordnung für einen persönlichen Hintergrund; erwähnen Sie, dass sie nicht weiterverteilt werden sollen.
Schritt 0 – Eingaben sammeln (einmal fragen, nur was fehlt)
- Die Datei (Modell oder Bild).
- Name des Objekts und eine Beschreibung – oder bieten Sie an, einen Entwurf zu erstellen. Die Beschreibung muss mit dem übereinstimmen, was tatsächlich im Render zu sehen ist (sehen Sie es sich zuerst an). Eine Beschreibung eines Radfahrzeugs auf einem vierbeinigen Lebewesen zerstört die Glaubwürdigkeit des Blattes; wenn der Text des Benutzers nicht mit der Geometrie übereinstimmt, sagen Sie das und schreiben Sie ihn um.
- Ausgabeauflösung und die obere Sicherheitszone, wenn es sich um einen Desktop-Hintergrund handelt (eine Desktop-Leiste bedeckt den oberen Bereich). Standard
top_safe= 76 (Rahmen beginnt 76 px tiefer bei 1080p, Platz für eine Leiste von ~1 cm auf einem Laptop). Wenn der Benutzer Zentimeter angibt, umrechnen: px_pro_cm = Bildschirmbreite_px / Bildschirmbreite_cm (etwa 36 px/cm auf einem 24" 1080p-Monitor, etwa 56 px/cm auf einem 15,6" Laptop). Verwenden Sie Leistenhöhe in px + ~12. - Stil:
blueprint(Standard, blau),graphite(dunkel mit orangefarbenen Linien),paper(hell, druckbar). - Sprache des Textes (Standard Englisch; schreiben Sie den Spezifikationstext in dieser Sprache).
Verhören Sie den Benutzer nicht: Wenn er bereits genug angegeben hat, fahren Sie mit den Standardeinstellungen fort und geben Sie Ihre Annahmen an.
Schritt 1 – Einrichtung
pip install trimesh numpy scipy networkx pillow opencv-python-headless matplotlib --break-system-packages -q
# optional, nur für Netze > 700k Flächen: pip install fast-simplification --break-system-packages
Alle Skripte befinden sich in scripts/ neben dieser Datei. Ersetzen Sie SKILL_DIR mit dem Skill-Ordner.
Schritt 2A – 3D-Modell
Inspizieren (immer zuerst durchführen – ein Bild, ein Befehl)
python3 SKILL_DIR/scripts/blueprint3d.py inspect MODELL.glb --out /home/claude/insp
Öffnen Sie inspect.png mit view (es ist ein einzelnes Kontaktblatt) und lesen Sie den gedruckten Text:
- Obere Reihe = rohe Achsenprojektionen: Finden Sie heraus, welche rohe Achse oben ist und in welche Richtung das Objekt blickt.
- Unten = die 3/4-Ansicht mit nummerierten Ankerkandidaten (gelb). Die Konsole listet jeden
cand Nmit seiner Pixel- und kanonischen Position. Das schwache Raster ist in 1500x860 Referenzpixeln (alspickverwendbar).
Orientierungsflags (kanonischer Rahmen: +y oben, Objektfront in Richtung -x):
--up +Y (Standard für GLB/glTF; +Z für andere Formate) und --front -X|+X|+Z|-Z|.... Der gedruckte Hinweis benennt die längste horizontale Achse; die Front muss LINKS in der Seitenansicht sein, also kehren Sie das Vorzeichen um, wenn sich der Kopf/die Front auf der anderen Seite befindet. Wenn die Orientierung falsch war, führen Sie inspect einmal mit anderen Werten erneut aus. Tragen Sie die endgültigen Werte in die Spezifikation als "up" und "front" ein.
inspect akzeptiert auch --az, --el (Standard 58 / 20) und --k (Anzahl der Kandidaten, Standard 16). Verwenden Sie dieselben view az/el in der Spezifikation, sonst stimmen die Kandidatennummern nicht.
Spezifikation schreiben
Erstellen Sie spec.json (Schema unten, funktionierendes Beispiel in assets/example_spec_3d.json). Geben Sie für jede Beschriftung einen Titel, eine kurze Beschreibung und einen Anker an:
"cand": N– ein nummerierter Kandidat ausinspect.png(am günstigsten: kein Pixelraten). Kandidaten sind über die sichtbare Oberfläche verteilt, also überprüfen Sie, ob der Punkt wirklich auf dem Teil landet, den Sie benennen; wenn kein Kandidat nah genug ist, verwenden Siepick."pick": [px, py]– Pixel in der 1500x860 Referenzansicht (das Raster ininspect.png)"extreme": "+x" | "-x" | "+y" | "-y" | "+z" | "-z"– Extrempunkt im kanonischen Rahmen (Front ist-x; kann hinter Geometrie verborgen sein)"point": [x, y, z]– exakte kanonische Koordinaten
Setzen Sie "label" nur, wenn nötig: Beschriftungspositionen werden dann automatisch gewählt (Text bleibt von der Modellsilhouette und anderen Beschriftungen entfernt, saubere Spalten an den Panel-Seiten, kurze, sich nicht kreuzende Linien). "label": [x, y] (1920x1080 Referenzkoordinaten, Hauptpanel x 40-1290, y 96-826) erzwingt eine manuelle Position und wird von der folgenden Prüfung überprüft.
Erstellen
python3 SKILL_DIR/scripts/blueprint3d.py build MODELL.glb spec.json --out /mnt/user-data/outputs/blueprint.png
Die gemalten Ansichten werden auf der Festplatte zwischengespeichert (~/.cache/blueprint-maker oder $BP_CACHE), indiziert nach Modell + Ansicht + Stil. Das Ändern von Text, Beschriftungen, Beschriftungen oder palettenunabhängigem Inhalt erstellt in etwa 2 s neu, anstatt neu zu malen; --no-cache oder "cache": false deaktiviert es.
Layouts: "layout": "multi" (Standard: große 3/4-Ansicht + Seiten-/Drauf-/Vorderansicht + Maße) oder "single" (nur die 3/4-Ansicht, breiter).
Spec-Lock (Bindung zwischen Spezifikation und Modell)
Anker, die als cand, pick oder extreme geschrieben wurden, sind nur für das Modell, die Orientierung und die Ansicht, für die sie ausgewählt wurden, von Bedeutung. Der erste Build schreibt <spezifikation>.lock.json neben die Spezifikation: den 3D-Punkt, in den jeder Anker aufgelöst wurde, einen geometrischen Fingerabdruck des Modells und die Einstellungen, die Anker beeinflussen (up, front, Ansicht az/el, candidates, max_faces). Jeder spätere Build löst die Anker erneut auf und vergleicht:
- Anker verschoben (anderes Modell, andere Orientierung oder Ansicht) -> Build schlägt fehl mit
error: spec is not bound to this model ..., wobei jede Beschriftung und die Änderung benannt werden. Führen Sieinspectmit den Einstellungen der Spezifikation erneut aus, wählen Sie die Anker neu aus und erstellen Sie dann mit--relock(oder stellen Sie das ursprüngliche Modell/die ursprünglichen Einstellungen wieder her); - Modell unterscheidet sich, aber jeder Anker landet immer noch an derselben Stelle (z. B. ein verlustfreier Re-Export) ->
WARNING: binding: ...; überprüfen, dann--relock; - Sie haben einen Anker absichtlich bearbeitet (gleiches Modell/gleiche Einstellungen) -> der Lock-Eintrag wird stillschweigend aktualisiert.
--no-lock überspringt die Prüfung (nicht empfohlen). Bewahren Sie die Lock-Datei mit der Spezifikation auf (commiten Sie sie). Beheben Sie einen Bindungsfehler niemals, indem Sie ihn ignorieren: Die Beschriftungen würden auf die falschen Teile zeigen.
Schritt 2B – 2D-Bild
python3 SKILL_DIR/scripts/blueprint2d.py inspect BILD.png --out /home/claude/insp
Lesen Sie die gedruckte Maskenabdeckung (Hintergrundentfernung funktioniert für einfarbige Hintergründe oder transparente PNGs; andernfalls wird "none" gemeldet), dann view inspect.png: links = die Quelle mit einem Raster, das in Quellpixeln beschriftet ist (für point_px), rechts = was der Linienextraktor sieht. Beschriftungen werden auch hier automatisch platziert (lassen Sie "label" weg).
Schreiben Sie spec.json (siehe assets/example_spec_2d.json) und erstellen Sie:
python3 SKILL_DIR/scripts/blueprint2d.py build BILD.png spec.json --out /mnt/user-data/outputs/blueprint.png
Feinabstimmung: "detail" 0.3 (sauber, fett) bis 0.8 (überladen); "mode": "edges" (Canny, Fotos/Render) oder "sketch" (XDoG, weiche/niedrigkontrastreiche Kunst); "bg": "none" um den gesamten Rahmen zu behalten, oder "mask": "pfad.png" für eine handgemachte Silhouette; "crop": [x0,y0,x1,y1] um das Motiv zu isolieren; "fill" 0-1 für den durchscheinenden Körperfarbton.
Schritt 3 – Ergebnis überprüfen (nicht überspringen, aber günstig halten)
Der Builder druckt WARNING:-Zeilen. Lesen Sie sie zuerst – sie sind eine automatische Prüfung, daher müssen Sie das PNG normalerweise nur einmal am Ende mit view ansehen:
error: spec is not bound to this model– siehe „Spec-Lock" oben; dies ist ein harter Fehler, keine Warnung.layout: ...– Beschriftungstext überlappt das Modell, zwei Beschriftungen überlappen sich, eine Linie kreuzt den Text einer anderen Beschriftung / eine andere Linie / ihren eigenen Text, Text außerhalb des Panels, Text auf der Achsentriade. Beheben Sie dies, indem Sie das manuelle"label"entfernen (lassen Sie den Platzierer entscheiden), den Anker ändern oder den Text kürzen.description / specs / notes: auf Npx verkleinertoderpasst NICHT– kürzen Sie den Text oder entfernen Sie Zeilen, anstatt unlesbaren Text zu akzeptieren.
Dann sehen Sie sich das endgültige PNG einmal mit view an und überprüfen Sie, was die Prüfung nicht wissen kann:
- Modell aufrecht und in der beabsichtigten Weise in allen Ansichten ausgerichtet; Maße plausibel.
- Jeder Beschriftungspunkt landet wirklich auf dem Teil, dessen Name im Text steht.
- Die obere Sicherheitszone ist leer (Desktop-Hintergrund-Verwendung).
Wenn etwas nicht stimmt, bearbeiten Sie die Spezifikation (Anker, view.az/view.el, Textlänge, feature_deg) und erstellen Sie neu; mit dem Cache dauert dies Sekunden. Üblich insgesamt: 1 Inspizieren + 1-2 Erstellen, 2-3 Bildansichten.
Schritt 4 – Liefern
Speichern Sie unter /mnt/user-data/outputs/, rufen Sie present_files auf, antworten Sie dann kurz. Geben Sie in der Antwort immer an:
- welche Texte Sie erfunden haben (Beschreibungen, Spezifikationen, Bemerkungen, Beschriftungsfunktionen) im Vergleich zu dem, was aus der Datei gemessen wurde – der Benutzer sollte erfundene technische Behauptungen, die ihm wichtig sind, ersetzen;
- die Einheiten-/Maßstabsannahme;
- alle
WARNINGoder sichtbaren Einschränkungen (dichte Linien, versteckter Anker, Seitenverhältnis).
Geringer Token-Verbrauch
- Ein
inspect-Bild, eine endgültigeview; verlassen Sie sich auf die gedruckte Prüfung, anstatt nach jeder Anpassung erneut zu sehen. - Verwenden Sie
cand-Anker und lassen Sielabelweg; passen Sie Pixelkoordinaten nicht von Hand an. - Schreiben Sie die Spezifikation einmal vollständig (Anker, Texte) und erstellen Sie dann; bearbeiten Sie nur die Felder, die von der Prüfung oder der endgültigen Ansicht markiert wurden.
Schreiben des Anmerkungstextes
- Beschreiben Sie nur, was in den Renders sichtbar ist; halten Sie funktionale Behauptungen plausibel und allgemein. Wenn das Objekt aus einem Franchise stammt, geben Sie keine Lore-Details an, bei denen Sie sich nicht sicher sind.
- Beschriftungstitel: 2-4 Wörter. Beschriftungstext: ein kurzer Satz (etwa 70 Zeichen). Anmerkungen: 3-5 kurze Punkte. Beschreibung: etwa 600-700 Zeichen. Spezifikationszeilen: Wert unter ~45 Zeichen.
- Halten Sie den Wortlaut technisch und konsistent: Bezeichnung, Spezifikationsnummer, Revision, Einheiten.
Spec-Referenz
Gemeinsame Schlüssel (beide Pipelines):
| Schlüssel | Bedeutung | Standard |
|---|---|---|
title | Großer Titel im Schriftfeld | "UNTITLED" |
subtitle | Zeile unter dem Titel | "" |
designation | Fette Zeile oben im Beschreibungsfeld | "" |
description | Absatz für das Beschreibungsfeld | (Feld weggelassen) |
specs | [["Label","Wert"], ...] für die Spezifikationstabelle | (weggelassen) |
notes | Liste von Zeichenfolgen für das Bemerkungsfeld (A, B, C...) | (weggelassen) |
notes_title | Überschrift dieses Feldes | "KONSTRUKTIONSHINWEISE" / "HINWEISE" |
callouts | Liste von Beschriftungsobjekten (unten) | keine |
spec_no, class, rev, sheet, scale | Schriftfeld-Felder (leere werden übersprungen) | Blatt "01 / 01", Maßstab "WIE DARGESTELLT" |
fields | Vollständige Überschreibung der Schriftfeld-Felder: [["SCHLÜSSEL","wert"], ...] | auto |
width, height | Ausgabegröße in px | 1920, 1080 |
top_safe | y (bei 1080p), wo der Rahmen beginnt; Desktop-Leiste freihalten | 76 |
palette | blueprint, graphite, paper | blueprint |
scale_ref | `{"axis": "length | height |
Nur 3D: up, front, layout (multi/single), view {"az": 58, "el": 20, "margin": 0.045}, candidates (k verwendet für cand, Standard 16; muss gleich inspect --k sein), feature_deg (Kantenwinkelschwellwert, Standard 38; auf 50-60 erhöhen für weniger Linien), feature_deg_small (Standard 44, Seiten-/Drauf-/Vorderansicht), max_faces (Standard 700000), cache (Standard true).
Nur 2D: mode, detail, bg, mask, crop, fill, fit_subject (auf Motiv zuschneiden, Standard true), view_title, view_sub.
Beschriftungsobjekt: {"title": "...", "desc": "..."} plus der Anker – 3D: cand / pick / extreme / point; 2D: point_px: [x, y] in Quellbild-Pixeln – und optional "label": [x, y] um eine manuelle Position zu erzwingen.
Fehlerbehebung
- Modell seitwärts / auf dem Kopf / weggerichtet: Führen Sie
inspectmit--up/--fronterneut aus; überprüfen Sie die obere Reihe voninspect.png. - Nur ein grauer Linienklumpen: Erhöhen Sie
feature_deg(50-65); setzen Sie bei einem sehr dichten Netz auchmax_facesniedriger (benötigtfast-simplification). - Fehlende Teile oder durchsichtige Löcher: Das Netz ist nicht wasserdicht oder hat invertierte Flächen; der Painter-Algorithmus-Renderer toleriert dies, aber interne Teile von Spiel-Assets können durchscheinen. Verringern Sie
view.marginoder versuchen Sie einen anderenaz. - Sehr langsam: Netze über ~700k Flächen werden automatisch dezimiert, wenn
fast-simplificationinstalliert ist; andernfalls kann ein Build Minuten dauern. - 2D-Maske falsch oder fragmentiert: Motivfarbe ist dem Hintergrund zu ähnlich. Verwenden Sie
"bg": "none", eincropoder stellen Sie einemaskPNG bereit (weiß = Motiv). - Textwarnungen: Kürzen Sie den Text; senken Sie Schriftgrößen nicht von Hand.
- Kandidatennummern stimmen nicht mit dem Bild überein /
spec is not bound to this model: Die Modelldatei,up/front, die Spezifikationsviewaz/el odercandidatesunterscheiden sich von denen, für die die Spezifikation geschrieben wurde. Führen Sieinspectmit den Einstellungen der Spezifikation erneut aus, wählen Sie die Anker neu aus und erstellen Sie mit--relock. - Auto-Label-Platzierung schlägt weiterhin fehl ("no collision-free position"): Zu viele oder zu lange Beschriftungen für das Panel; kürzen Sie die Beschreibungen, entfernen Sie Beschriftungen oder verwenden Sie
"layout": "single"für ein breiteres Panel. - Veraltet aussehende Ausgabe nach Bearbeitung der Skripte: Der Cache-Schlüssel enthält den Renderer-Code, aber führen Sie im Zweifelsfall einmal mit
--no-cacheaus.
Dateien
scripts/binding.py– Spezifikations-Lock-Datei (Lock-Prüfung und Relogik).scripts/blueprint3d.py– 3D-Pipeline (Inspizieren, Erstellen).scripts/blueprint2d.py– 2D-Pipeline (Inspizieren, Erstellen).scripts/render.py– Gemeinsame Layout- und Malroutine.scripts/fonts/– Gebündelte Schriftart (DejaVu).assets/example_spec_3d.json– Vollständige 3D-Beispielspezifikation zum Kopieren.assets/example_spec_2d.json– Vollständige 2D-Beispielspezifikation zum Kopieren.