BUILDING3D — KIT DE FOTOS A DISEÑO Contract: building3d.design v1 https://building3d.app/ai-design.html Genera un diseño 3D editable de la edificación mostrada en mis imágenes para Building3D (https://building3d.app/). Usa el esquema y el ejemplo incluidos más abajo. Trabaja en este orden: 1. Compara las fotos como vistas de UNA misma edificación. Identifica volumen, número de plantas, proporciones, ubicación de aperturas, cubierta y materiales. Da prioridad a silueta y proporciones antes de ornamentación. 2. Usa mis medidas conocidas como escala. Si falta una medida indispensable o las fotos se contradicen, pregunta primero. Si autorizo estimaciones, declara medidas estimadas y caras no visibles por separado. Una foto no permite recuperar dimensiones o interiores exactos. No inventes como hechos las partes ocultas. 3. Genera el edificio completo con las piezas soportadas y verifica las reglas de abajo. Si el detalle excede los límites, simplifica la ornamentación manteniendo la silueta y los pisos, y dilo fuera del archivo. 4. Entrega un archivo descargable llamado edificio.design.json que contenga SOLO un objeto JSON completo. Si no puedes crear archivos, devuelve un único bloque JSON completo para guardarlo como .json, sin comentarios ni puntos suspensivos. No entregues una imagen, código de un generador o el propio JSON Schema como sustituto del diseño. 5. Explica brevemente las suposiciones en el chat, fuera del archivo. Si te devuelvo errores de Building3D, corrige el JSON completo sin perder partes válidas ni cambiar IDs innecesariamente. DATOS DE MI EDIFICIO Nombre: No proporcionado; indica las suposiciones. Medidas conocidas y pisos: No proporcionado; indica las suposiciones. Vistas adjuntas: No proporcionado; indica las suposiciones. Prioridades y autorización para estimar: No proporcionado; indica las suposiciones. REGLAS DE COMPATIBILIDAD (también obligatorias aunque no aparezcan en JSON Schema) - Usa exclusivamente building3d.design, version 1, units "m". No inventes propiedades, tipos ni URLs de texturas. El ejemplo enseña el formato, no obliga a copiar su edificio. - Sistema X/Z horizontal, Y vertical. Los niveles se ordenan de abajo hacia arriba. Elevación absoluta = baseElevation + suma de alturas de niveles anteriores. position.y es RELATIVA al nivel; NO repitas la elevación absoluta. - Walls, columns, spaces y stairs: position.y=0. Floor: position.y=-dimensions.height, para que su cara superior quede en el nivel. Roof: position.y es la altura de la base sobre el nivel (0–30 m), normalmente la altura del muro más alto. La cubierta puede sobresalir por encima del nivel; dimensions.height no debe superar la altura del nivel. - Cada elemento mide al menos 0.05 m en sus dimensiones y su altura no supera la de su nivel. Stairs.height debe igualar la altura del nivel. Level.height: 2.4–6 m. - Los muros admiten rotaciones Y desde 0 hasta menos de 360 grados; los demás sólidos usan 0, 90, 180 o 270. Las áreas interiores automáticas requieren muros ortogonales. A 90 grados, el eje local +X apunta a -Z. No se admiten paredes curvas, mallas libres, balcones especiales ni escultura. Aproxima con piezas admitidas y declara las simplificaciones fuera del JSON; no prometas una réplica idéntica. - Muros unidos: haz coincidir sus extremos por la línea central. El ancho del muro es su longitud local X; el espesor es depth. A 90/270 grados se intercambian ancho y profundidad al calcular límites en X/Z. - Las ventanas y puertas usan host.wallId del MISMO nivel, host.offset a lo largo del X local del muro y host.sill desde su base. NO llevan position, rotation ni dimensions.depth. Las puertas requieren sill=0. - Apertura dentro del muro: abs(offset)+width/2 <= wall.width/2-0.05; sill>=0; sill+height<=wall.height. Evita aperturas superpuestas: si sus intervalos verticales coinciden, separa sus centros al menos (widthA+widthB)/2+0.02. Deja además espacio para molduras. - openingStyle es opcional, exclusivo de puertas/ventanas; si lo incluyes, proporciona TODOS sus campos según el esquema. "arch" recorta un arco real. columns/rows dividen el vidrio. material y color afectan al elemento; frameColor/trimColor a marcos y molduras. - Fidelidad visual: conserva la relación altura/ancho, el número de pisos, la silueta, los retranqueos y la distribución de fachadas antes de añadir detalles. Un nivel por piso; no combines dos pisos para ahorrar elementos. No modeles torres de vidrio como pilas de bloques macizos. - Muros cortina: solo type="wall" admite curtainWall={"shape":"ellipse","bays":64,"rows":1} o shape="flat". En ellipse, width/depth son los diámetros exteriores de una envolvente hueca; en flat son ancho/espesor. Bays=1–80, rows=1–8. No hospedes ventanas/puertas en estos elementos; el vidrio y los montantes están incluidos. Usa losas que queden dentro del contorno curvo y un muro normal separado para entradas. Para balcones o recortes irregulares no soportados, declara la simplificación; no inventes campos. - Secuencia constructiva: usa floor para cada losa habitable y un nivel por planta. No uses roof para simular plantas intermedias ni bloques macizos glass para rellenar torres. Incluye columnas, núcleo, escaleras y tabiques cuando existan planos; si solo hay fotos, solicita autorización para una distribución ilustrativa y declara esas partes como estimaciones fuera del JSON. Las grúas y andamios los añade la animación. - Roof.shape: flat, gable, hip, pyramid u octagonal. Gable/hip tienen cumbrera en el X local. Height es la subida total; octagonal es una aguja de ocho lados. Las cornisas pueden modelarse con techos planos finos dentro de su nivel. - Site.width/depth: 8–100 m. Setback>=0 y 2*setback=(widthA+widthB)/2+0.02. Comprueba también los márgenes al borde del muro y el espacio que ocupan marcos y molduras. 3. Ejemplo de conflicto: una puerta de 1.8 m centrada en offset=0 choca con ventanas de 1.4 m en offsets -1.25 y +1.25. La distancia de centros necesaria es al menos 1.62 m, más el espacio de molduras. Corregir puede requerir mover o estrechar ventanas; verifica de nuevo que sigan dentro del muro. 4. Al añadir una entrada a una planta con ventanas repetidas, ajusta el patrón de ESA planta. Revisa de nuevo todo el archivo después de la última modificación, aunque otros pisos sean iguales. Corrige todos los conflictos antes de entregar el JSON, conservando los IDs y las partes válidas. 5. Si dispones de ejecución de código, úsala internamente para generar las repeticiones y ejecutar estas comprobaciones sobre el archivo final. Entrega el JSON resultante completo, no el script. Si no puedes ejecutar código, reduce el detalle cuando haga falta para poder revisar el diseño y explica esa limitación. 6. En el chat, fuera del JSON, indica qué verificaciones ejecutaste realmente y cuáles quedan pendientes. JSON sintácticamente válido no implica geometría válida. NO afirmes que pasó el validador de Building3D si no lo utilizaste. === JSON SCHEMA (CONTRACT, NOT THE OUTPUT DESIGN) === { "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://building3d.app/design-schema.json", "title": "Building3D Design v1", "type": "object", "additionalProperties": false, "properties": { "format": { "const": "building3d.design" }, "version": { "const": 1 }, "units": { "const": "m" }, "name": { "type": "string", "minLength": 1, "maxLength": 120 }, "baseElevation": { "type": "number", "minimum": -30, "maximum": 30 }, "site": { "type": "object", "additionalProperties": false, "properties": { "width": { "type": "number", "minimum": 8, "maximum": 100 }, "depth": { "type": "number", "minimum": 8, "maximum": 100 }, "setback": { "type": "number", "minimum": 0, "maximum": 49.99 }, "north": { "type": "number", "minimum": 0, "maximum": 360 } }, "required": [ "width", "depth", "setback", "north" ] }, "levels": { "type": "array", "minItems": 1, "maxItems": 60, "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "minLength": 1, "maxLength": 100, "pattern": "^[A-Za-z0-9_-]+$" }, "name": { "type": "string", "minLength": 1, "maxLength": 80 }, "height": { "type": "number", "minimum": 2.4, "maximum": 6 }, "roomLabels": { "type": "array", "maxItems": 150, "items": { "type": "object", "additionalProperties": false, "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 80 }, "x": { "type": "number", "minimum": -100, "maximum": 100 }, "z": { "type": "number", "minimum": -100, "maximum": 100 } }, "required": [ "name", "x", "z" ] } } }, "required": [ "id", "name", "height" ] } }, "elements": { "type": "array", "maxItems": 3000, "items": { "oneOf": [ { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "minLength": 1, "maxLength": 100, "pattern": "^[A-Za-z0-9_-]+$" }, "type": { "enum": [ "floor", "space", "column", "stairs" ] }, "levelId": { "type": "string", "minLength": 1, "maxLength": 100, "pattern": "^[A-Za-z0-9_-]+$" }, "name": { "type": "string", "minLength": 1, "maxLength": 80 }, "use": { "enum": [ "Residential", "Commercial", "Office", "Circulation", "Service", "Other" ] }, "material": { "enum": [ "concrete", "plaster", "wood", "steel", "glass", "limestone", "stucco", "brick", "copper", "terracotta" ] }, "texture": { "enum": [ "none", "concrete", "stucco", "stone", "brick", "wood", "standing-seam", "tiles" ] }, "textureScale": { "type": "number", "minimum": 0.1, "maximum": 20 }, "color": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }, "stage": { "type": "string", "minLength": 1, "maxLength": 80 }, "columnShape": { "enum": [ "square", "round", "classical", "steel" ] }, "stairShape": { "enum": [ "straight", "quarter-turn", "half-turn", "spiral", "exterior-entry", "exterior-metal" ] }, "curtainWall": { "type": "object", "additionalProperties": false, "properties": { "shape": { "enum": [ "flat", "ellipse" ] }, "bays": { "type": "integer", "minimum": 1, "maximum": 80 }, "rows": { "type": "integer", "minimum": 1, "maximum": 8 } }, "required": [ "shape", "bays", "rows" ] }, "position": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "minimum": -100, "maximum": 100 }, "y": { "type": "number", "minimum": -100, "maximum": 100 }, "z": { "type": "number", "minimum": -100, "maximum": 100 } }, "required": [ "x", "y", "z" ] }, "dimensions": { "type": "object", "additionalProperties": false, "properties": { "width": { "type": "number", "minimum": 0.05, "maximum": 100 }, "height": { "type": "number", "minimum": 0.05, "maximum": 100 }, "depth": { "type": "number", "minimum": 0.05, "maximum": 100 } }, "required": [ "width", "height", "depth" ] }, "rotation": { "type": "object", "additionalProperties": false, "properties": { "y": { "enum": [ 0, 90, 180, 270 ] } }, "required": [ "y" ] } }, "required": [ "id", "type", "levelId", "position", "dimensions", "rotation" ] }, { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "minLength": 1, "maxLength": 100, "pattern": "^[A-Za-z0-9_-]+$" }, "type": { "const": "wall" }, "levelId": { "type": "string", "minLength": 1, "maxLength": 100, "pattern": "^[A-Za-z0-9_-]+$" }, "name": { "type": "string", "minLength": 1, "maxLength": 80 }, "use": { "enum": [ "Residential", "Commercial", "Office", "Circulation", "Service", "Other" ] }, "material": { "enum": [ "concrete", "plaster", "wood", "steel", "glass", "limestone", "stucco", "brick", "copper", "terracotta" ] }, "texture": { "enum": [ "none", "concrete", "stucco", "stone", "brick", "wood", "standing-seam", "tiles" ] }, "textureScale": { "type": "number", "minimum": 0.1, "maximum": 20 }, "color": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }, "stage": { "type": "string", "minLength": 1, "maxLength": 80 }, "wallpaper": { "type": "string", "maxLength": 220000, "pattern": "^data:image/(jpeg|png|webp);base64,[A-Za-z0-9+/]+={0,2}$" }, "curtainWall": { "type": "object", "additionalProperties": false, "properties": { "shape": { "enum": [ "flat", "ellipse" ] }, "bays": { "type": "integer", "minimum": 1, "maximum": 80 }, "rows": { "type": "integer", "minimum": 1, "maximum": 8 } }, "required": [ "shape", "bays", "rows" ] }, "position": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "minimum": -100, "maximum": 100 }, "y": { "type": "number", "minimum": -100, "maximum": 100 }, "z": { "type": "number", "minimum": -100, "maximum": 100 } }, "required": [ "x", "y", "z" ] }, "dimensions": { "type": "object", "additionalProperties": false, "properties": { "width": { "type": "number", "minimum": 0.05, "maximum": 100 }, "height": { "type": "number", "minimum": 0.05, "maximum": 100 }, "depth": { "type": "number", "minimum": 0.05, "maximum": 100 } }, "required": [ "width", "height", "depth" ] }, "rotation": { "type": "object", "additionalProperties": false, "properties": { "y": { "type": "number", "minimum": 0, "exclusiveMaximum": 360 } }, "required": [ "y" ] } }, "required": [ "id", "type", "levelId", "position", "dimensions", "rotation" ] }, { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "minLength": 1, "maxLength": 100, "pattern": "^[A-Za-z0-9_-]+$" }, "type": { "enum": [ "door", "window" ] }, "levelId": { "type": "string", "minLength": 1, "maxLength": 100, "pattern": "^[A-Za-z0-9_-]+$" }, "name": { "type": "string", "minLength": 1, "maxLength": 80 }, "use": { "enum": [ "Residential", "Commercial", "Office", "Circulation", "Service", "Other" ] }, "material": { "enum": [ "concrete", "plaster", "wood", "steel", "glass", "limestone", "stucco", "brick", "copper", "terracotta" ] }, "texture": { "enum": [ "none", "concrete", "stucco", "stone", "brick", "wood", "standing-seam", "tiles" ] }, "textureScale": { "type": "number", "minimum": 0.1, "maximum": 20 }, "color": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }, "stage": { "type": "string", "minLength": 1, "maxLength": 80 }, "doorStyle": { "enum": [ "flush", "panel", "double", "french", "sliding", "arched", "swinging", "sliding-solid", "french-clear", "three-panel", "romanesque", "gothic", "georgian", "art-nouveau", "moroccan", "shoji", "pivot", "barn" ] }, "openingStyle": { "type": "object", "additionalProperties": false, "properties": { "shape": { "enum": [ "rectangular", "arch", "pointed", "scalloped" ] }, "columns": { "type": "integer", "minimum": 1, "maximum": 6 }, "rows": { "type": "integer", "minimum": 1, "maximum": 8 }, "frameWidth": { "type": "number", "minimum": 0.015, "maximum": 0.15 }, "frameColor": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }, "trimWidth": { "type": "number", "minimum": 0, "maximum": 0.5 }, "trimDepth": { "type": "number", "minimum": 0.01, "maximum": 0.3 }, "trimColor": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" } }, "required": [ "shape", "columns", "rows", "frameWidth", "frameColor", "trimWidth", "trimDepth", "trimColor" ] }, "host": { "type": "object", "additionalProperties": false, "properties": { "wallId": { "type": "string", "minLength": 1, "maxLength": 100, "pattern": "^[A-Za-z0-9_-]+$" }, "offset": { "type": "number", "minimum": -100, "maximum": 100 }, "sill": { "type": "number", "minimum": 0, "maximum": 6 } }, "required": [ "wallId", "offset", "sill" ] }, "dimensions": { "type": "object", "additionalProperties": false, "properties": { "width": { "type": "number", "minimum": 0.05, "maximum": 100 }, "height": { "type": "number", "minimum": 0.05, "maximum": 100 } }, "required": [ "width", "height" ] } }, "required": [ "id", "type", "levelId", "host", "dimensions" ] }, { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "minLength": 1, "maxLength": 100, "pattern": "^[A-Za-z0-9_-]+$" }, "type": { "const": "roof" }, "levelId": { "type": "string", "minLength": 1, "maxLength": 100, "pattern": "^[A-Za-z0-9_-]+$" }, "name": { "type": "string", "minLength": 1, "maxLength": 80 }, "use": { "enum": [ "Residential", "Commercial", "Office", "Circulation", "Service", "Other" ] }, "material": { "enum": [ "concrete", "plaster", "wood", "steel", "glass", "limestone", "stucco", "brick", "copper", "terracotta" ] }, "texture": { "enum": [ "none", "concrete", "stucco", "stone", "brick", "wood", "standing-seam", "tiles" ] }, "textureScale": { "type": "number", "minimum": 0.1, "maximum": 20 }, "color": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }, "stage": { "type": "string", "minLength": 1, "maxLength": 80 }, "shape": { "enum": [ "flat", "gable", "hip", "pyramid", "octagonal", "shed" ] }, "position": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "minimum": -100, "maximum": 100 }, "y": { "type": "number", "minimum": 0, "maximum": 30 }, "z": { "type": "number", "minimum": -100, "maximum": 100 } }, "required": [ "x", "y", "z" ] }, "dimensions": { "type": "object", "additionalProperties": false, "properties": { "width": { "type": "number", "minimum": 0.05, "maximum": 100 }, "height": { "type": "number", "minimum": 0.05, "maximum": 100 }, "depth": { "type": "number", "minimum": 0.05, "maximum": 100 } }, "required": [ "width", "height", "depth" ] }, "rotation": { "type": "object", "additionalProperties": false, "properties": { "y": { "enum": [ 0, 90, 180, 270 ] } }, "required": [ "y" ] } }, "required": [ "id", "type", "levelId", "shape", "position", "dimensions", "rotation" ] } ] } } }, "required": [ "format", "version", "units", "name", "baseElevation", "site", "levels", "elements" ] } === VALID COMPLETE HOUSE EXAMPLE (REPLACE WITH THE BUILDING IN MY PHOTOS) === { "format": "building3d.design", "version": 1, "units": "m", "name": "Photo-to-design house template", "baseElevation": 0, "site": { "width": 20, "depth": 20, "setback": 2, "north": 0 }, "levels": [ { "id": "ground", "name": "Ground floor", "height": 3.2 }, { "id": "roof-level", "name": "Roof volume (not an occupied floor)", "height": 2.4 } ], "elements": [ { "id": "floor-ground", "type": "floor", "levelId": "ground", "position": { "x": 0, "y": -0.2, "z": 0 }, "dimensions": { "width": 8.2, "depth": 6.2, "height": 0.2 }, "rotation": { "y": 0 }, "material": "concrete" }, { "id": "wall-front", "type": "wall", "levelId": "ground", "position": { "x": 0, "y": 0, "z": 3 }, "dimensions": { "width": 8, "depth": 0.2, "height": 3.2 }, "rotation": { "y": 0 }, "material": "stucco" }, { "id": "wall-back", "type": "wall", "levelId": "ground", "position": { "x": 0, "y": 0, "z": -3 }, "dimensions": { "width": 8, "depth": 0.2, "height": 3.2 }, "rotation": { "y": 0 }, "material": "stucco" }, { "id": "wall-left", "type": "wall", "levelId": "ground", "position": { "x": -4, "y": 0, "z": 0 }, "dimensions": { "width": 6, "depth": 0.2, "height": 3.2 }, "rotation": { "y": 90 }, "material": "stucco" }, { "id": "wall-right", "type": "wall", "levelId": "ground", "position": { "x": 4, "y": 0, "z": 0 }, "dimensions": { "width": 6, "depth": 0.2, "height": 3.2 }, "rotation": { "y": 90 }, "material": "stucco" }, { "id": "roof-hip", "type": "roof", "levelId": "roof-level", "shape": "hip", "position": { "x": 0, "y": 0, "z": 0 }, "dimensions": { "width": 8.6, "depth": 6.6, "height": 2.2 }, "rotation": { "y": 0 }, "material": "copper", "texture": "standing-seam", "textureScale": 2, "color": "#7C9C84" }, { "id": "entry", "type": "door", "levelId": "ground", "host": { "wallId": "wall-front", "offset": 0, "sill": 0 }, "dimensions": { "width": 1.2, "height": 2.3 }, "material": "wood", "openingStyle": { "shape": "arch", "columns": 2, "rows": 2, "frameWidth": 0.045, "frameColor": "#666961", "trimWidth": 0.1, "trimDepth": 0.07, "trimColor": "#E4E0D4" } }, { "id": "window-front-left", "type": "window", "levelId": "ground", "host": { "wallId": "wall-front", "offset": -2.4, "sill": 0.8 }, "dimensions": { "width": 1.2, "height": 1.6 }, "material": "glass", "color": "#3E5762", "openingStyle": { "shape": "rectangular", "columns": 2, "rows": 3, "frameWidth": 0.045, "frameColor": "#666961", "trimWidth": 0.1, "trimDepth": 0.07, "trimColor": "#E4E0D4" } }, { "id": "window-front-right", "type": "window", "levelId": "ground", "host": { "wallId": "wall-front", "offset": 2.4, "sill": 0.8 }, "dimensions": { "width": 1.2, "height": 1.6 }, "material": "glass", "color": "#3E5762", "openingStyle": { "shape": "rectangular", "columns": 2, "rows": 3, "frameWidth": 0.045, "frameColor": "#666961", "trimWidth": 0.1, "trimDepth": 0.07, "trimColor": "#E4E0D4" } }, { "id": "window-back", "type": "window", "levelId": "ground", "host": { "wallId": "wall-back", "offset": 0, "sill": 0.8 }, "dimensions": { "width": 1.2, "height": 1.6 }, "material": "glass", "color": "#3E5762", "openingStyle": { "shape": "rectangular", "columns": 2, "rows": 3, "frameWidth": 0.045, "frameColor": "#666961", "trimWidth": 0.1, "trimDepth": 0.07, "trimColor": "#E4E0D4" } }, { "id": "window-right", "type": "window", "levelId": "ground", "host": { "wallId": "wall-right", "offset": 0, "sill": 0.8 }, "dimensions": { "width": 1.2, "height": 1.6 }, "material": "glass", "color": "#3E5762", "openingStyle": { "shape": "rectangular", "columns": 2, "rows": 3, "frameWidth": 0.045, "frameColor": "#666961", "trimWidth": 0.1, "trimDepth": 0.07, "trimColor": "#E4E0D4" } } ] }