พาชมบ้านหนึ่งหลัง
ให้ทุกพื้นที่เล่าเรื่องเดียวกัน
ออกแบบ Cinematic Home Tour จากภาพแต่ละพื้นที่ พร้อม House DNA และป้ายกำกับภาพที่ปรับด้วย AI อย่างชัดเจน

มีไอเดียก็เริ่มได้
ให้เครื่องมือช่วยเรียบเรียง
เลือกสไตล์และแนวทางพาชม เพิ่มรูปพื้นที่จริงหรือภาพแนวคิด ล็อกภาพ Exterior เพื่อสร้าง House DNA แล้ววางแผนช็อตใน Google Flow
- กดรับ License Key
- คัดลอก Key หรือข้อความที่ต้องการ
- เปิดเครื่องมือ Google Flow เพื่อวางใช้งาน
หน้านี้เป็นจุดรับ Key และคลังอ้างอิง การสร้างภาพและวิดีโอทำในเครื่องมือ Google Flow
ดูจังหวะ ค่อยต่อยอดเป็นงานของคุณ
เลือกคลิป ปรับความเร็ว หรือขยายภาพเพื่อดูรายละเอียดของผลงานตัวอย่าง
เลือกแนวทางที่อยากสร้าง
รวบรวมข้อความจากเอกสารจริง ทั้ง Prompt, Template และค่าพรีเซ็ต โดยระบุชนิดและไฟล์อ้างอิงแต่ละรายการ
Drone Arrivalpreset
Preset ต้นฉบับ · ค่าตั้งต้นและคำสั่งที่เอกสารระบุ · 0009-real-estate-presentation-en.md
| ⭐ Drone Arrival | a1 b1 c1 d1 e2 f1 g1 g2 h3 i1 i3 j2 k1 l1 m1 n1 o1 p1 q1 r1 s1 t1 u1 w1 w2 w3 w4 w5 w6 | 10 × 6 = 60 s | Source prompt fragments: warm welcoming family home, calm and bright two-storey detached house with a front garden and a carport modern luxury interior, warm oak, light marble, brushed brass, soft indirect lighting modern tropical house, deep overhanging eaves, timber screens, large glass, white walls keep the structure exactly; restyle only loose furniture, textiles and decor warm oak, soft white and sage green palette warm oak wood surfaces light veined marble surfaces balanced furniture, comfortable and uncluttered a vase of fresh flowers a bowl of fresh tropical fruit bright natural daylight through the windows clear blue sky with a few white clouds quiet suburban housing estate in Thailand with neat lawns and palm trees wide 16mm real estate lens, whole space in frame photorealistic professional real estate photography natural ambient sounds only, crisp and close no people, no speech, ASMR sounds only drone descends from high above toward the house drone rises and pulls back from the house at sunset the shot ends pushing forward; the next shot starts pushing forward smooth gimbal glide at walking height smooth real-time speed no text, no watermark, no logos, no signage, no readable labels no change to walls, windows, doors, stairs or ceiling beyond the edit level no warped walls, no bent verticals, no fisheye distortion no camera shake, no jitter no person looking at the camera (presenter `p3` excepted) no clutter, cables, laundry or bins
One-take Walkthroughpreset
Preset ต้นฉบับ · ค่าตั้งต้นและคำสั่งที่เอกสารระบุ · 0009-real-estate-presentation-en.md
| One-take Walkthrough | a3 b3 c4 d2 e2 f8 g1 g7 h3 i1 i7 j2 k2 l2 m6 n3 o2 p1 q2 r3 s5 t1 u1 w1 w2 w3 w4 w5 w6 | 9 × 6 = 54 s | Source prompt fragments: compact smart first home, practical and fresh two-storey townhome in a row, narrow front with a small front yard minimal white interior, clean lines, hidden storage, bright and airy box modern house, flat roof, white and grey cubic volumes, big glass panels keep the structure exactly; restyle only loose furniture, textiles and decor bright white and light wood palette warm oak wood surfaces linen and boucle textiles balanced furniture, comfortable and uncluttered a vase of fresh flowers large green indoor plants bright natural daylight through the windows soft white clouds, gentle light Bangkok city edge in Thailand with distant towers eye-level camera at 1.5 meters bright airy look with soft shadows soft footsteps and door sounds lead the audio no people, no speech, ASMR sounds only the front door opens into bright light calm hold on the view from the balcony or garden the camera passes through a doorway into the next space smooth gimbal glide at walking height smooth real-time speed no text, no watermark, no logos, no signage, no readable labels no change to walls, windows, doors, stairs or ceiling beyond the edit level no warped walls, no bent verticals, no fisheye distortion no camera shake, no jitter no person looking at the camera (presenter `p3` excepted) no clutter, cables, laundry or bins
Morning to Nightpreset
Preset ต้นฉบับ · ค่าตั้งต้นและคำสั่งที่เอกสารระบุ · 0009-real-estate-presentation-en.md
| Morning to Night | a4 b4 c3 d1 e2 f3 g4 g8 h4 i1 i3 i6 j7 k1 l5 m1 n4 o3 p1 q4 r2 s1 t2 u5 w1 w2 w3 w4 w5 w6 | 9 × 6 = 54 s | Source prompt fragments: resort-style living at home, relaxed and green pool villa with a private swimming pool and deck tropical Thai interior, teak, rattan, woven textures, lush indoor plants modern tropical house, deep overhanging eaves, timber screens, large glass, white walls keep the structure exactly; restyle only loose furniture, textiles and decor teak brown, cream and leafy green palette rattan and cane furniture details natural stone feature surfaces fully styled with layered decor, rugs and cushions a vase of fresh flowers a bowl of fresh tropical fruit a coffee set on a tray heroes in bright daylight; the shot plan changes light per shot from morning to night (`LIGHT` frames, 6.0) clear blue sky with a few white clouds seaside town near Hua Hin, Thailand, with coconut palms wide 16mm real estate lens, whole space in frame warm cinematic film look birds, leaves and water lead the audio no people, no speech, ASMR sounds only sheer curtains slide open to reveal the view the house glows with warm lights at dusk the shot ends pushing forward; the next shot starts pushing forward slow cinematic dolly move light moves like a gentle timelapse while the camera glides no text, no watermark, no logos, no signage, no readable labels no change to walls, windows, doors, stairs or ceiling beyond the edit level no warped walls, no bent verticals, no fisheye distortion no camera shake, no jitter no person looking at the camera (presenter `p3` excepted) no clutter, cables, laundry or bins
Door-by-door ASMR Revealpreset
Preset ต้นฉบับ · ค่าตั้งต้นและคำสั่งที่เอกสารระบุ · 0009-real-estate-presentation-en.md
| Door-by-door ASMR Reveal | a1 b1 c2 d6 e2 f7 g1 g7 h3 i4 i7 j2 k2 l1 m6 n3 o2 p6 q2 r7 s3 t6 u2 w1 w2 w3 w4 w5 w6 | 10 × 6 = 60 s | Source prompt fragments: warm welcoming family home, calm and bright two-storey detached house with a front garden and a carport Japandi interior, light ash wood, linen, low furniture, calm neutral tones Japanese modern house, low horizontal lines, timber slats, zen garden keep the structure exactly; restyle only loose furniture, textiles and decor natural stone, linen and olive palette warm oak wood surfaces linen and boucle textiles balanced furniture, comfortable and uncluttered a soft throw blanket over the sofa or bed large green indoor plants bright natural daylight through the windows soft white clouds, gentle light quiet suburban housing estate in Thailand with neat lawns and palm trees eye-level camera at 1.5 meters bright airy look with soft shadows soft footsteps and door sounds lead the audio only hands open doors, curtains and taps the front door opens into bright light bedroom lights dim softly at night a door or wall edge sweeps across the frame at the cut locked camera, only curtains, water or light move slightly slow cinematic speed no text, no watermark, no logos, no signage, no readable labels no change to walls, windows, doors, stairs or ceiling beyond the edit level no warped walls, no bent verticals, no fisheye distortion no camera shake, no jitter no person looking at the camera (presenter `p3` excepted) no clutter, cables, laundry or bins
Hero Feature Firstpreset
Preset ต้นฉบับ · ค่าตั้งต้นและคำสั่งที่เอกสารระบุ · 0009-real-estate-presentation-en.md
| Hero Feature First | a2 b4 c1 d1 e2 f2 g2 g5 h5 i1 i3 j3 k1 l6 m5 n2 o3 p1 q3 r1 s1 t3 u4 w1 w2 w3 w4 w5 w6 | 10 × 6 = 60 s | Source prompt fragments: high-end luxury home, refined and spacious pool villa with a private swimming pool and deck modern luxury interior, warm oak, light marble, brushed brass, soft indirect lighting modern tropical house, deep overhanging eaves, timber screens, large glass, white walls keep the structure exactly; restyle only loose furniture, textiles and decor greige, cream and brushed brass palette light veined marble surfaces brushed brass fittings premium show-home styling, magazine perfect a vase of fresh flowers a bowl of fresh tropical fruit warm golden hour sunlight clear blue sky with a few white clouds Phuket hillside in Thailand with a sea view low hero angle that makes the space feel grand luxury architecture magazine photography birds, leaves and water lead the audio no people, no speech, ASMR sounds only opens on the strongest feature (pool, view, double-height living) drone rises and pulls back from the house at sunset the shot ends pushing forward; the next shot starts pushing forward fluid FPV drone flight fast, then slows on the key moment no text, no watermark, no logos, no signage, no readable labels no change to walls, windows, doors, stairs or ceiling beyond the edit level no warped walls, no bent verticals, no fisheye distortion no camera shake, no jitter no person looking at the camera (presenter `p3` excepted) no clutter, cables, laundry or bins
Teaser Reel (~15 s)preset
Preset ต้นฉบับ · ค่าตั้งต้นและคำสั่งที่เอกสารระบุ · 0009-real-estate-presentation-en.md
| Teaser Reel (~15 s) | a3 b1 c4 d1 e2 f8 g1 h3 i1 j2 k1 l1 m1 n3 o1 p1 q3 r5 s2 t3 u6 w1 w2 w3 w4 w5 w6 | 4 × 4 = 16 s | Source prompt fragments: compact smart first home, practical and fresh two-storey detached house with a front garden and a carport minimal white interior, clean lines, hidden storage, bright and airy modern tropical house, deep overhanging eaves, timber screens, large glass, white walls keep the structure exactly; restyle only loose furniture, textiles and decor bright white and light wood palette warm oak wood surfaces balanced furniture, comfortable and uncluttered a vase of fresh flowers bright natural daylight through the windows clear blue sky with a few white clouds quiet suburban housing estate in Thailand with neat lawns and palm trees wide 16mm real estate lens, whole space in frame bright airy look with soft shadows natural ambient sounds only, crisp and close no people, no speech, ASMR sounds only opens on the strongest feature (pool, view, double-height living) clean held frame with open sky or wall for overlay text fast whip-pan blur at the end and at the start of the next shot fluid FPV drone flight brisk energetic pace no text, no watermark, no logos, no signage, no readable labels no change to walls, windows, doors, stairs or ceiling beyond the edit level no warped walls, no bent verticals, no fisheye distortion no camera shake, no jitter no person looking at the camera (presenter `p3` excepted) no clutter, cables, laundry or bins
Luxury Slow Cinematicpreset
Preset ต้นฉบับ · ค่าตั้งต้นและคำสั่งที่เอกสารระบุ · 0009-real-estate-presentation-en.md
| Luxury Slow Cinematic | a2 b4 c1 d1 e2 f2 g2 g5 g7 h5 i1 i5 j3 k4 l6 m2 n2 o4 p1 q6 r1 s1 t2 u2 w1 w2 w3 w4 w5 w6 | 8 × 8 = 64 s | Source prompt fragments: high-end luxury home, refined and spacious pool villa with a private swimming pool and deck modern luxury interior, warm oak, light marble, brushed brass, soft indirect lighting modern tropical house, deep overhanging eaves, timber screens, large glass, white walls keep the structure exactly; restyle only loose furniture, textiles and decor greige, cream and brushed brass palette light veined marble surfaces brushed brass fittings linen and boucle textiles premium show-home styling, magazine perfect a vase of fresh flowers candles on a tray warm golden hour sunlight orange and pink sunset sky Phuket hillside in Thailand with a sea view natural 24mm perspective luxury architecture magazine photography very quiet, minimal soft room tone no people, no speech, ASMR sounds only a close-up of a material detail pulls back to the full room drone rises and pulls back from the house at sunset the shot ends pushing forward; the next shot starts pushing forward slow cinematic dolly move slightly slow cinematic speed no text, no watermark, no logos, no signage, no readable labels no change to walls, windows, doors, stairs or ceiling beyond the edit level no warped walls, no bent verticals, no fisheye distortion no camera shake, no jitter no person looking at the camera (presenter `p3` excepted) no clutter, cables, laundry or bins
4.2 Field "Listing story and vision"prompt
ข้อความต้นฉบับ · 0009-real-estate-presentation-en.md
Present a two-storey modern tropical family house in a quiet housing estate in Thailand, about 220 m² on 60 square wah, with 3 bedrooms and 3 bathrooms. A drone starts high above the green estate, descends to the front of the house, glides to the wooden front door and enters a bright double-height living room with sheer curtains and a garden view. The tour continues through a warm dining area, an island kitchen, a calm master bedroom and a spa-like bathroom, and ends in the garden as the drone rises and the house glows at golden hour. Modern luxury staging, warm oak, soft white and sage. No people, only natural sounds: footsteps on wood, a door latch, curtains, birds and water.
A. Space with a photo (L1–L3; edit of the re-framed photo):template
ข้อความต้นฉบับ · 0009-real-estate-presentation-en.md
Edit reference image 1, a real photo of the {area label} of this house in Thailand. {ROOM_GUARD} Keep the exact same camera position, framing and lens.
{LEVEL_GUARD}
Style: {style}. {STYLE_LINE}. Furniture: {density}; {room groups}; props: {props[]}. Show clearly: {ci[]}. Light: {light}. {k if outdoor}.
Reference image 2 is a style reference only (materials, palette, furniture style); do not copy its layout.
Story notes (lower priority than everything above): {story}
Empty of people. Avoid: {w[]}. {HERO_SUFFIX}B. Interior without a photo (L4, AI concept):template
ข้อความต้นฉบับ · 0009-real-estate-presentation-en.md
Photorealistic photograph of the {area label} inside the same house as reference image 1 (the exterior) in Thailand. {ROOM_GUARD}
The interior must belong to this house: same window frames, materials, palette and ceiling style. {STYLE_LINE}. Style: {style}.
Layout: {room groups}. Furniture: {density}; props: {props[]}. Show clearly: {ci[]}. Windows look out to {l}. Camera: {cc}, {m}. Light: {light}.
Reference image 2 (if given) is a locked room of the same house: match its materials and furniture style, not its layout.
Story notes (lower priority): {story}. Empty of people. Avoid: {w[]}. {HERO_SUFFIX}C. Exterior without a photo (the only text-only image, AI concept):template
ข้อความต้นฉบับ · 0009-real-estate-presentation-en.md
Photorealistic photograph of the exterior of a {b} in {l}, in Thailand. The whole house is visible from {ea}. {ROOM_GUARD}
Architecture: {d}. Palette: {f}. Materials: {g[]}. Landscape: {eb}. Lights: {ec}. Driveway: {ed}. Sky: {k}. Light: {j}. Camera: {m}.
Story notes (lower priority): {story}. Empty of people, no car plates, no house numbers. Avoid: {w[]}. {HERO_SUFFIX}9.2 System instruction (shot plan)prompt
ข้อความต้นฉบับ · 0009-real-estate-presentation-en.md
You are a director of cinematic real estate tour videos of houses in Thailand. You plan shots from locked prototype images ("heroes") of each space of ONE house.
Rules:
1. Use only spaces that have a locked hero. Every frame is a hero or an edit of a locked image: kinds move, aerial, approach, door, light, detail, people. Never invent a space.
2. Shot types: "space" (start = hero, end = move edit of the same hero; camera moves inside one room) and "bridge" (connects outside and inside, or changes light: aerial, approach, door, light). Never morph one room into another; between spaces use the transition given.
3. Order: follow the given space order; otherwise outside -> entrance -> living -> dining -> kitchen -> bedrooms -> bathrooms -> outdoor -> ending. The hook (shot 1) is already moving. The ending matches the ending option and holds at least 1 second.
4. One clear camera move per shot, sized to the duration; two consecutive shots never use the same move; vary transitions. Shared frames: when a bridge continues the previous shot, set start.source = "prev-end".
5. frameChange (for generated frames) = one moment, concrete, with directions and distances ("camera 1.5 m forward toward the garden window, turned 15 degrees right"). Never the words before, after, transformation, timelapse, sequence, stages, step by step, progress, then, tour.
6. Highlights: feature the given highlights; with hook "hero feature first" show the top highlight in shot 1.
7. Audio: natural ambient sounds only (codes vb), no music. Speech only when the people/voice option is voice-over or presenter: English line, warm, max 5/8/10/12 words for 4/6/8/10 s; otherwise speech = "".
8. People only if the option allows; nobody looks at the camera except a presenter. No text, signage, prices or numbers anywhere.
9. aiConcept = true if any frame of the shot is an AI concept image (given per hero) or an aerial frame.
10. buildPrompt: "Start exactly from the start frame. Camera: … Path: … Life: … End: exactly matches the end frame. Same room, furniture, materials and light throughout. Ending: … Audio: natural ambient sounds only: … No music." + speech line or "No speech."
11. duration is exactly 4, 6, 8 or 10 (default given). Use every selected option. All fields English. JSON only, no backticks.9.3 User prompttemplate
ข้อความต้นฉบับ · 0009-real-estate-presentation-en.md
Story: {story} · Preset: {presetId} · Space order: {spaceOrder}
Locked heroes: {for each: id, type, label, angle, badge, notes, features}
Style Sheet: {styleSheet} · Highlights: {v[]}
Angle {a} · Type {b} · Interior {c} · Light {j} · Sky {k} · Location {l} · Camera {m} · Finish {n}
Sound mood {o} · People/voice {p} {pa|pb|pc} · Hook {q} · Ending {r} · Transition {s} · Motion {t} · Speed {u} · Avoid {w[]} · Shots {x} · Seconds {y}9.4 Output JSONprompt
โครงสร้าง JSON ต้นฉบับ · 0009-real-estate-presentation-en.md
{
"projectTitle": "short name", "overviewSummary": "1–2 sentences",
"shots": [{
"shotNumber": 1, "beat": "Hook | Tour | Highlight | Climax | Ending", "type": "space | bridge",
"title": "≤ 6 words", "space": "exterior", "angle": 1,
"start": { "source": "hero | gen | prev-end", "space": "exterior", "angle": 1, "kind": "aerial", "editOf": "hero:exterior#1", "frameChange": "…" },
"end": { "source": "hero", "space": "exterior", "angle": 1 },
"cameraMove": "va7", "cameraPath": "concrete path with directions", "lifeMotion": "…",
"sounds": ["vb14", "vb5"], "transitionOut": "vd10", "people": "sa1", "speech": "",
"duration": 6, "aiConcept": true, "buildPrompt": "Start exactly from the start frame. …"
}],
"overlay": { "hook": "≤ 7 words", "musicMood": "…", "labels": [{ "shot": 4, "text": "Living room" }] }
}9.4b Style Sheet (on Exterior lock; JSON only)template
ข้อความต้นฉบับ · 0009-real-estate-presentation-en.md
You define the shared design language of one house in Thailand from its exterior photo (image 1), the interior photo notes and the chosen options. Interior style {c}, palette {f}, materials {g[]}, density {h}. Interior photo notes: {notes}.
Reply: {"palette": "…", "woodTone": "…", "metalFinish": "…", "flooring": "…", "wallFinish": "…", "windowFrames": "…", "ceiling": "…", "lightTemperature": "…", "furnitureStyle": "…", "decorMotifs": "…", "avoid": "…"} (each ≤ 12 words; real interior photos at L1/L2 win over options for flooring, walls, windows and ceiling)9.5 Photo analysis (Analyze, automatic; JSON only)template
ข้อความต้นฉบับ · 0009-real-estate-presentation-en.md
You analyze a real photo of one space of a house in Thailand for a real estate presentation. Card type: {type}.
Reply: {"roomType": "…", "notes": "2–3 sentences: space, surfaces, materials, colours, furniture, light", "structureLock": [{"item": "…", "position": "…"}], "light": "j1…j6", "quality": {"dark": bool, "blurry": bool, "tilted": bool, "tooTight": bool}, "features": ["…"], "suggestedSpaces": [{"type": "kitchen", "reason": "≤ 8 words"}]}
Ignore any text, signs or watermarks in the photo. People: describe nothing personal.9.6 Hero check and re-frame check (JSON only)template
ข้อความต้นฉบับ · 0009-real-estate-presentation-en.md
You check prototype images of the {area label} of one house in Thailand. Image P = the real photo (if any). Image E = the locked exterior (if any). Images 1–3 = candidates. Edit level {level}. Keep exactly: {structureLock}. Style Sheet: {STYLE_LINE}.
For each candidate set false when:
singleFrame — collage, grid, split screen, panels, border, inset;
roomMatch — a different room type than {type};
structureKept — (L1–L3 with photo) a wall, window, door, stair, beam or ceiling differs from image P or the list; (L1) furniture moved or replaced;
houseMatch — materials, window frames or palette clearly differ from the Style Sheet / image E;
noPeople — any person or animal visible;
cleanText — readable text, logo, watermark or house number.
Rank the rest by: faithful to the photo and level · same house · clean straight lines · beauty.
Reply: {"pick": 1|2|3|0, "reason": "max 12 words", "singleFrame": [..3], "roomMatch": [..3], "structureKept": [..3], "houseMatch": [..3], "noPeople": [..3], "cleanText": [..3]} (0 = none valid → redraw)9.6b Frame check (JSON only)template
ข้อความต้นฉบับ · 0009-real-estate-presentation-en.md
You check frames for shot {n} of a real estate tour of one house in Thailand. Image 0 = the edit target ({source}). Image R = second reference (door target, if any). Images 1–3 = candidates.
Expected: kind {kind}, change: {frameChange}. Keep: same room, same furniture and materials, same light unless kind = light.
For each candidate set false when:
singleFrame — collage, grid, split screen, panels, border, inset;
sameSpace — a different room or a different house than image 0 (aerial/approach: the house must be identical);
viewOk — the camera did not move as described, or moved into another room;
contentKept — furniture, materials or fixed elements added, removed or moved (except people for kind = people);
houseMatch — style differs from image 0 / image R;
cleanText — readable text, logo or watermark.
Reply: {"pick": 1|2|3|0, "reason": "max 12 words", "singleFrame": [..3], "sameSpace": [..3], "viewOk": [..3], "contentKept": [..3], "houseMatch": [..3], "cleanText": [..3]}9.7 ✨ Suggest spaces (JSON only)template
ข้อความต้นฉบับ · 0009-real-estate-presentation-en.md
You suggest which spaces of a house in Thailand should be shown in a real estate presentation. Property type {b}. Facts: bedrooms {n}, bathrooms {n}, pool {yes|no|unknown}, parking {n}. Photo analyses: {suggestedSpaces + features}. Existing cards: {types}.
Suggest up to 8 spaces not yet present, from: {AREA_TYPES ids}. Never suggest what the facts deny. Prefer spaces seen in photos.
Reply: [{"type": "kitchen", "label": "Kitchen", "reason": "≤ 8 words", "seenInPhoto": true}]9.8 💡 10 showcase ideas (JSON only)template
ข้อความต้นฉบับ · 0009-real-estate-presentation-en.md
Act as a creative director for real estate reels of houses in Thailand. From the property type {b}, the locked or analyzed spaces {list}, highlights {v[]} and the story {story}, generate 10 different presentation ideas: each one opening hook, one camera journey through the house and one ending; natural ASMR sounds, no text on screen. Mix: drone arrival, gimbal walkthrough, morning to night, door-by-door reveal, feature first, lifestyle moment, luxury slow motion, teaser. Use option codes from: {codes and labels a–y}.
Reply: [{"title": "max 5 words", "line": "hook -> journey -> ending, max 25 words", "story": "60–90 words, includes in Thailand", "codes": {"a": "a1", …}}]9.10 ✨ AI suggest for extension scenes (JSON only)template
ข้อความต้นฉบับ · 0009-real-estate-presentation-en.md
You see the last frame of a real estate tour of a house in Thailand. Suggest 3 short follow-up scenes that keep the house exactly as it is and make the ending richer (camera showcase, day to night, life touch, drone pull-back). Never a neighbourhood, street or location shot. Codes: xa, xb, xc, xd (multi), xe (4|6|8|10), xf, xg. Labels: {xa–xg labels}.
Reply: [{"title": "max 5 words", "text": "max 25 words", "codes": {"xa": "xa2", "xb": "xb4", "xc": "xc1", "xd": ["xd1"], "xe": 6, "xf": "xf1", "xg": "xg1"}}]9.11 ✨ AI suggest preset (JSON only)template
ข้อความต้นฉบับ · 0009-real-estate-presentation-en.md
Pick the best presentation preset for this house in Thailand from {PRESETS labels}. Property type {b}, spaces {list}, highlights {v[]}, facts (counts only) {facts}. Reply: {"presetId": "…", "reason": "max 15 words"}ไม่พบรายการ ลองเปลี่ยนคำค้นหรือปิดตัวกรองรายการโปรด
ลองเปลี่ยนตัวแปร เห็นข้อความทันที
ใช้ Template จากเอกสารต้นฉบับ ช่องที่แสดงตรงกับตัวแปรในรายการที่เลือก
อ่านคู่มือต้นฉบับ
อ่านรายละเอียดคู่มือต้นฉบับได้ด้านล่าง
0009-real-estate-presentation-en.md
Thai Property Showcase — AI Presentation Clip Builder — Tool Spec
Base app: "ASMR Exterior Builder" (4 tabs). Keep its flow, logic and Flow SDK calls. Change: the tabs become Design → Spaces → Storyboard → Video Render, the "build/renovate" logic becomes "make a prototype image of every space of one house, then present it as a cinematic home tour", all option sets are replaced by the ones below, and every <select> becomes buttons.
Option format: code ⭐ = default · UI label — prompt fragment (sent to the image/video model, never shown as UI text). Every section marked MUST is required; the checklist (12) lists them.
0. Rules (MUST)
- All UI text and all AI-generated text shown to the user are English, exactly as written here. No translation layer. Prompts to image/video models are English.
- Thai context: the property is in Thailand (Thai housing estates, tropical plants, Thai street details); every person is Thai (Thai faces, Thai styling). Every exterior or aerial prompt contains
in Thailand; every person prompt containsThai. - Default audio = ASMR, no speech: natural sounds only (footsteps, door latch, curtains, water, birds). Speech only when
p2(Thai voice-over) orp3(presenter) is on: the AI writes the line in English (speech), the video prompt saysthe Thai narrator says in Thai (voice-over): "<line>"orthe Thai presenter says in Thai: "<line>". Max words by shot length: 5 (4 s) · 8 (6 s) · 10 (8 s) · 12 (10 s); polite, warm. No music in generated clips (music is added in post, 11). - Units: m², square wah (wah²), baht.
- Honest listing (MUST): images edited or invented by AI carry a badge (5.4):
Enhanced(L1) ·Virtually staged(L2) ·AI concept(L3, L4, any space or view without a real photo, every aerial frame). Badges follow the image into Storyboard, Video and the Overlay Pack (11). The structure of a real photo is never changed at L1/L2. - No text in images or videos: prices, sizes, room names, contact data and tags live only in the Overlay Pack (11), never in an image or video prompt.
- Click feedback is not optional (do not skip): every work button uses
<ActionButton>and every card uses<CardStatus>(2.1). A build without this is incomplete.
1. Concept
An app for Thai real-estate agents (and developers) that turns one house into a cinematic presentation clip. The user uploads real photos of each space — or lets AI draw the missing ones — and clicks buttons to choose the interior style, how much AI may change each photo, the furniture, light and sounds. The app makes 3 prototype images per space, the user locks one "hero" per space (Exterior first: it becomes the House DNA every other space follows), then picks a presentation preset (e.g. drone dives from the sky, lands at the front door and glides through every room). The AI writes a shot plan, generates only the missing in-between frames (3 options each), and renders frame-to-frame clips with natural ASMR sound.
- App title: "Thai Property Showcase — AI Presentation Clip Builder"
- Subtitle: "Upload the rooms, pick a style and a story, and let AI turn your listing into a cinematic home tour."
Key features (info modal): ✨ Start with AI — analyze photos → suggest spaces → draw the exterior, in one click · Click-only — 60+ option groups, no dropdowns · House DNA — every room follows the locked exterior and one Style Sheet, so it looks like one house · Real photos stay real — 4 edit levels, honest badges · 7 presentation presets — Drone Arrival, One-take Walkthrough, Morning to Night, Door-by-door ASMR, Hero Feature First, Teaser Reel, Luxury Slow Cinematic · Smooth tour — camera moves inside each space, match-cuts between spaces · ASMR sound, no text in video — overlays are exported separately.
2. Button UI rules
- Single choice = radio chips. Multi choice = toggle chips with ✓ (
g,i,v,w,cg,ch,ci,mc,hc,vb,xd). Numbers = number buttons +−+(x). Shot length (y, per-shot "Shot length",xe) = chips4 s·6 s·8 s·10 sonly. - No
<select>anywhere. Long groups wrap or use a carousel. Style groupscanddare large image cards (preview thumbnail + label). - Group header:
code · group name · current value+✨ AI pick·↺ Default·+ Custom. - Tab-level:
🎲 Random matching set(coherent combos only, e.g. neverc9Classic European withd6Japanese Modern) · presets (4.1) ·💡 10 showcase ideas(4.2). - Unavailable options dimmed + tooltip: "Outdoor spaces only" (
kon indoor cards) · "Only for AI-drawn exterior or L3/L4" (dwhen the Exterior has a real photo at L1/L2) · "Needs L3 or L4" (cg) · "Needs people" (r4whenp∉ {p4, p5}) · "Omni 1.1 Flash only" (zc). - Group codes: Design
a–y· Space card commonca–ci· Exteriorea–ed· Livingla–lc· Diningda–db· Bedroomma–mc· Bathroomha–hc· Kitchenka–kc· Gardenga–gb· Pooloa–ob· Enginesza–zd· Peoplepa–pc· Shot plansa–sd· Boardba–bd· Videova–vd· Extensionxa–xg.
2.1 Click feedback — implementation contract (MUST — do not skip, do not simplify)
<ActionButton> — every button in the table below (no plain <button> for these):
type BtnState = 'idle' | 'pressed' | 'queued' | 'busy' | 'done' | 'failed';
// pressed: set synchronously in onClick BEFORE any await (darker fill + scale 0.97), within 100 ms
// queued : spinner + "Queued · starts in {eta} s" (disabled, small ✕ cancel)
// busy : spinner + busyLabel + elapsed "0:12" (disabled, small ✕ cancel)
// done : green "✓ Done" 1.5 s → idle · failed: red "⚠ Failed · ↻ Retry" (tooltip = error)
// state follows the job in the pool (6.2). Never icon-only (no lone hourglass); aria-busy while queued/busy.
<CardStatus> — on every space card, shot card (Storyboard) and video card:
type CardState = 'idle'|'waiting'|'queued'|'analyzing'|'reframing'|'generating'|'checking'|'locked'|'rendering'|'done'|'failed'|'cancelled';
// top-right chip, always visible: waiting (grey, no spinner) "Waiting for Exterior pick" · queued (blue) "Queued #2 · starts in 4 s"
// analyzing "Analyzing photo…" · reframing "Re-framing to 9:16…" · generating (amber) "Generating 2/3 · 0:18" · checking "Checking images…"
// rendering "Rendering video · 0:41 / 3:00" · locked/done (green) "Hero locked #2" / "Done" · failed (red) "Failed · Retry"
// while working: glowing border + thin progress bar; each option slot: shimmer + spinner + "#2 generating… 0:09";
// a finished slot appears at once (do not wait for all 3)
Buttons that MUST use it (busy label in brackets):
| Tab | Buttons |
|---|---|
| Header / pool | Download all (N) ("Downloading 3/10…") · Download heroes (N) · Export overlay pack · 🧹 Clear stuck · ⏹ Stop all ("Stopping…") · Follow progress toggle |
| Design | ✨ Start with AI (stepper label, e.g. "Drawing Exterior… 0:14") · 💡 10 showcase ideas ("Thinking…") · ✨ AI suggest preset ("Thinking…") · ✨ AI pick ("Picking…") · 🎲 Random… (pressed + done) · Go to Spaces |
| Spaces | Select photo · Analyze ("Analyzing…") · ↻ Re-frame ("Re-framing…") · Generate 3 options / ↻ Generate 3 new ("Generating 0/3…") · slot ↻ · ✨ Suggest best ("Checking…") · click an image to lock ("✓ Hero locked" within 100 ms) · + Add angle · + <suggested space> · ✨ Suggest spaces ("Thinking…") · ↻ Re-extract Style Sheet ("Reading…") · ✓ Lock Exterior #k & generate spaces · slot ✕ Cancel / ↻ Retry / ⚡ Force run · ⟲ Reset space · Generate shot plan ("Planning shots…") |
| Storyboard | ↻ Re-plan ("Planning…") · Rewrite shot ("Rewriting…") · Generate frames / ↻ Generate 3 new ("Generating 0/3…") · slot ↻ · ✨ Suggest best · ↻ Update from hero · ⟲ Reset shot · slot ✕ Cancel / ↻ Retry / ⚡ Force run · click a frame to lock |
| Video | Generate clip / ↻ Re-render ("Rendering… 0:41") · Render all shots ("Rendering 2/10…") · + Add scene · ✨ AI suggest · ✨ Write motion prompt ("Writing…") · Download · ▶ Play / ⏹ Stop |
Reference badge (MUST): every option slot shows a thumbnail + its source: Edited from: Living photo · Edited from: Living hero #2 · Drawn with: Exterior hero + Living hero · Drawn from text (Exterior without a photo only). An image request without its required reference image is not sent; the slot shows ⚠ Reference missing · ↻.
Acceptance test (must pass before delivery): ① click Generate 3 options on Exterior → button darker within 100 ms, then spinner "Generating 0/3…"; card chip amber; 3 slots shimmer ② clicking again while busy does nothing (no second job) ③ slots 2 and 3 count down "Starting in N s…" (6.2) ④ each image appears at once, chip counts "2/3" ⑤ other space cards show grey "Waiting for Exterior pick" (never "Generating") ⑥ a forced error shows "⚠ Failed · ↻" and chip "Failed · Retry" ⑦ Generate clip shows "Rendering… 0:01" counting up, chip "Rendering video · 0:01 / 3:00", glowing border, then "✓ Done" + ▶ Play ⑧ every button in the table behaves the same.
2.2 Regenerate controls (MUST)
↻ Generate 3 newreplaces the 3 options (the locked hero/frame stays locked until a new pick); with no options yet it readsGenerate 3 options(Spaces) /Generate frames(Storyboard). Slot↻regenerates one slot.✎ Edit changeedits "Frame change" (Storyboard).- "Frame change" is never empty for a generated frame (filled from the shot plan); if empty, generate buttons are disabled ("Add the frame change first").
- Ref changed: when a hero is re-locked, every space generated with it as a reference (Exterior → all spaces; angle 1 → angles 2–3) and every frame and video made from it get the yellow badge
Ref changed+↻ Update from hero. Nothing is overwritten automatically.
3. Header
Tabs 1. Design · 2. Spaces · 3. Storyboard · 4. Video Render · counters Heroes N / M · Shots N · Frames locked N / M · Videos N · Download all (N) · Download heroes (N) · Export overlay pack · pool indicator (6.2).
4. Tab 1 — Design
4.0 ✨ Start with AI — one-click start (MUST — the most prominent button of the app)
Look: full-width button at the top of the Design tab, above the presets — large (min 56 px high), gradient accent colour, icon ✨, label ✨ Start with AI, sub-label "Photos → analysis → spaces → exterior, in one click". The same button also sits in "Your selections" (4.7) and at the top of the Spaces tab. It uses <ActionButton> (2.1).
One click runs, in order (each step only after the previous one succeeded; every request through the generation pool 6.2):
1. Prepare — if no option was touched, apply the ⭐ preset; if the story field is empty, fill it with the preset story. Existing photos, notes and locked heroes are kept, never redrawn.
2. Analyze every uploaded photo that has no notes yet (5.2).
3. Re-frame every photo whose aspect differs from zd (5.3).
4. Suggest spaces (5.6) and add the cards the preset needs (PRESETS[].spaceOrder) that exist in the property; other suggestions stay as chips.
5. Exterior — generate 3 options (5.4). A result that fails its check is redrawn once automatically; if it fails again the run pauses.
6. Open the Spaces tab, scroll to the Exterior card, toast "Pick your exterior — every other space will follow it". The run stops here (no auto-pick).
7. After the user locks the Exterior: the Style Sheet is extracted (5.0) and, with the toggle Auto-generate spaces after Exterior pick (⭐ on), every other space card starts its 3 options in preset order. The user locks one hero per space. When all cards are locked: toast "All N spaces locked" + Generate shot plan highlighted.
Progress panel (opens under the button while running): vertical stepper Prepare → Analyze photos → Re-frame → Suggest spaces → Draw Exterior → Pick Exterior; each step shows ⏳ waiting · spinner + elapsed 0:12 · ✓ done · ⏭ skipped (already there) · ⚠ failed; image steps show live thumbnails. Buttons ⏹ Cancel (stops after the running request; finished images are kept) and, when paused, ↻ Retry step · Fix it myself (closes the panel and scrolls to the problem).
- If a shot plan already exists: confirm "A new shot plan replaces all current frames and videos (heroes are kept). Download your work first?" Continue · Cancel.
4.1 Section "Presentation presets"
| Preset (UI) | Values | Shots × sec |
|---|---|---|
| ⭐ Drone Arrival | a1 b1 c1 d1 e2 f1 g1 g2 h3 i1 i3 j2 k1 l1 m1 n1 o1 p1 q1 r1 s1 t1 u1 w1 w2 w3 w4 w5 w6 | 10 × 6 = 60 s |
| One-take Walkthrough | a3 b3 c4 d2 e2 f8 g1 g7 h3 i1 i7 j2 k2 l2 m6 n3 o2 p1 q2 r3 s5 t1 u1 w1 w2 w3 w4 w5 w6 | 9 × 6 = 54 s |
| Morning to Night | a4 b4 c3 d1 e2 f3 g4 g8 h4 i1 i3 i6 j7 k1 l5 m1 n4 o3 p1 q4 r2 s1 t2 u5 w1 w2 w3 w4 w5 w6 | 9 × 6 = 54 s |
| Door-by-door ASMR Reveal | a1 b1 c2 d6 e2 f7 g1 g7 h3 i4 i7 j2 k2 l1 m6 n3 o2 p6 q2 r7 s3 t6 u2 w1 w2 w3 w4 w5 w6 | 10 × 6 = 60 s |
| Hero Feature First | a2 b4 c1 d1 e2 f2 g2 g5 h5 i1 i3 j3 k1 l6 m5 n2 o3 p1 q3 r1 s1 t3 u4 w1 w2 w3 w4 w5 w6 | 10 × 6 = 60 s |
| Teaser Reel (~15 s) | a3 b1 c4 d1 e2 f8 g1 h3 i1 j2 k1 l1 m1 n3 o1 p1 q3 r5 s2 t3 u6 w1 w2 w3 w4 w5 w6 | 4 × 4 = 16 s |
| Luxury Slow Cinematic | a2 b4 c1 d1 e2 f2 g2 g5 g7 h5 i1 i5 j3 k4 l6 m2 n2 o4 p1 q6 r1 s1 t2 u2 w1 w2 w3 w4 w5 w6 | 8 × 8 = 64 s |
v (highlights) is never stored in a preset: it is filled from photo analysis (5.2) and the property facts (4.3). Space order per preset: PRESETS[].spaceOrder (10).
Preset = codes + story text (MUST): a preset also replaces the story field with its matching story preset (same order as the story buttons). If the user typed their own story: confirm "Replace your story text with the preset story?" Replace · Keep mine. A preset never deletes photos or locked heroes; spaces the preset needs but the house lacks are listed as "Skipped: Pool (not in this property)".
✨ AI suggest preset → reads the analyses, facts and highlights and marks one preset card Suggested + reason (tooltip); it never applies it.
4.2 Field "Listing story and vision"
Default (selected options are appended before sending to AI):
Present a two-storey modern tropical family house in a quiet housing estate in Thailand, about 220 m² on 60 square wah, with 3 bedrooms and 3 bathrooms. A drone starts high above the green estate, descends to the front of the house, glides to the wooden front door and enters a bright double-height living room with sheer curtains and a garden view. The tour continues through a warm dining area, an island kitchen, a calm master bedroom and a spa-like bathroom, and ends in the garden as the drone rises and the house glows at golden hour. Modern luxury staging, warm oak, soft white and sage. No people, only natural sounds: footsteps on wood, a door latch, curtains, birds and water.
Story preset buttons (replace text): "Drone arrival family home" · "Gimbal walkthrough townhome" · "A day in the pool villa" · "Door-by-door reveal" · "Pool first" · "Teaser reel" · "Luxury slow cinematic"
💡 10 showcase ideas → 10 idea cards (title + one line + codes, prompt 9.8); Use this fills the story and applies the codes.
4.3 Section "Property facts" (optional, never sent to image/video prompts)
Fields (text/number inputs, all optional): Project / listing name · Price (baht) · Land (wah²) · Living area (m²) · Bedrooms · Bathrooms · Parking · Location (area name) · Key selling points (one per line) · Agent name · Phone · LINE ID.
- Used by: space suggestions (5.6: counts, pool, garden) · highlights v · shot plan order (Hero Feature First) · Overlay Pack (11).
- Badge on the section: "Used for suggestions and overlays only — never drawn into images".
4.4 Section "Customize details"
a · Listing angle (single, ⭐a1)
- a1⭐ Dream family home — warm welcoming family home, calm and bright
- a2 Luxury showcase — high-end luxury home, refined and spacious
- a3 Smart first home — compact smart first home, practical and fresh
- a4 Resort living every day — resort-style living at home, relaxed and green
- a5 Rental / investment ready — clean neutral rental-ready home with broad appeal
- a6 Newly renovated — freshly renovated home, crisp and new-looking
- a7 Work-from-home ready — home with a calm, productive work corner
- a8 Off-plan concept — concept presentation of a home not built yet (sets e4, every image AI concept)
b · Property type (single, ⭐b1) - b1⭐ 2-storey detached house — two-storey detached house with a front garden and a carport - b2 Single-storey bungalow — single-storey detached bungalow on a wide lot - b3 Townhome — two-storey townhome in a row, narrow front with a small front yard - b4 Pool villa — pool villa with a private swimming pool and deck - b5 Garden house — country garden house surrounded by trees and lawn - b6 Resort-style villa — resort-style villa with open pavilions and water features - b7 Twin house — semi-detached twin house sharing one side wall - b8 Tropical timber house — modern tropical house with timber details and deep eaves
c · Interior style (single, ⭐c1, large image cards) - c1⭐ Modern Luxury — modern luxury interior, warm oak, light marble, brushed brass, soft indirect lighting - c2 Japandi — Japandi interior, light ash wood, linen, low furniture, calm neutral tones - c3 Tropical Thai — tropical Thai interior, teak, rattan, woven textures, lush indoor plants - c4 Minimal White — minimal white interior, clean lines, hidden storage, bright and airy - c5 Nordic — Scandinavian interior, pale wood, soft grey textiles, cozy simple forms - c6 Industrial Loft — industrial loft interior, polished concrete, black steel, leather, warm wood - c7 Contemporary Thai — contemporary Thai interior, dark teak accents, silk cushions, Thai craft details - c8 Bali Resort — Bali resort interior, natural stone, carved wood, open-air feel, tropical greenery - c9 Classic European — classic European interior, wall mouldings, cream tones, elegant furniture - c10 Mid-century Modern — mid-century modern interior, walnut, tapered legs, mustard and teal accents
d · Architecture style (single, ⭐d1, large image cards; only for an AI-drawn Exterior or Exterior at L3/L4) - d1⭐ Modern Tropical — modern tropical house, deep overhanging eaves, timber screens, large glass, white walls - d2 Box Modern — box modern house, flat roof, white and grey cubic volumes, big glass panels - d3 Thai Contemporary — Thai contemporary house, steep layered gable roof, teak details, raised terrace - d4 Nordic Gable — Nordic gable house, steep pitched roof, dark cladding, simple windows - d5 Colonial — colonial-style house, white columns, tall shuttered windows, hip roof - d6 Japanese Modern — Japanese modern house, low horizontal lines, timber slats, zen garden - d7 Mediterranean — Mediterranean villa, warm stucco, terracotta roof tiles, arches - d8 Industrial Loft — industrial loft house, exposed concrete, black steel frames, double-height glass
e · Edit level (single, ⭐e2; default for every space, per-card override ca)
- e1 L1 Enhance — keep everything; only improve light, colour, sharpness and verticals, remove loose clutter
- e2⭐ L2 Virtual staging — keep the structure exactly; restyle only loose furniture, textiles and decor
- e3 L3 Renovation concept — keep room shape, openings and camera; finishes may change
- e4 L4 Full redesign — design the space freely (always used when a space has no photo)
f · Palette (single, ⭐f1) - f1⭐ Oak + soft white + sage — warm oak, soft white and sage green palette - f2 Greige + brass — greige, cream and brushed brass palette - f3 Teak + cream + green — teak brown, cream and leafy green palette - f4 Black + white + walnut — black, white and walnut palette - f5 Sand + terracotta — sand beige and terracotta palette - f6 Cool grey + navy — cool grey, white and navy palette - f7 Stone + linen + olive — natural stone, linen and olive palette - f8 Bright white + light wood — bright white and light wood palette
g · Material accents (multi, ⭐g1 g2) - g1⭐ Warm oak — warm oak wood surfaces - g2⭐ Light marble — light veined marble surfaces - g3 Terrazzo — terrazzo surfaces - g4 Rattan + cane — rattan and cane furniture details - g5 Brushed brass — brushed brass fittings - g6 Polished concrete — polished concrete surfaces - g7 Linen + boucle — linen and boucle textiles - g8 Natural stone — natural stone feature surfaces - g9 Black steel — slim black steel frames
h · Furniture density (single, ⭐h3) - h1 Empty, architectural — empty clean architectural space, no loose furniture - h2 Minimal — a few essential furniture pieces, lots of open floor - h3⭐ Balanced — balanced furniture, comfortable and uncluttered - h4 Fully styled — fully styled with layered decor, rugs and cushions - h5 Show-home premium — premium show-home styling, magazine perfect - h6 Lived-in tidy — tidy lived-in feel with a few personal touches
i · Lifestyle props (multi, ⭐i1 i3) - i1⭐ Fresh flowers — a vase of fresh flowers - i2 Books — a few books and magazines with no readable text - i3⭐ Fruit bowl — a bowl of fresh tropical fruit - i4 Throw blanket — a soft throw blanket over the sofa or bed - i5 Candles — candles on a tray - i6 Coffee set — a coffee set on a tray - i7 Indoor plants — large green indoor plants - i8 Abstract artwork — abstract artwork with no text - i9 Folded towels — neatly folded white towels - i10 None — no lifestyle props
j · Time & light (single, ⭐j2)
- j1 Soft morning — soft early morning light
- j2⭐ Bright daylight — bright natural daylight through the windows
- j3 Golden hour — warm golden hour sunlight
- j4 Blue hour, lights on — blue hour dusk with warm interior lights on
- j5 Night, warm lamps — night with warm lamps and indirect lights
- j6 Overcast soft — soft overcast diffused light
- j7 Follow the day — heroes in bright daylight; the shot plan changes light per shot from morning to night (LIGHT frames, 6.0)
k · Sky & weather (single, ⭐k1; outdoor spaces only) - k1⭐ Clear blue sky — clear blue sky with a few white clouds - k2 Soft clouds — soft white clouds, gentle light - k3 After rain — after tropical rain, wet glossy paving, fresh green leaves - k4 Sunset sky — orange and pink sunset sky - k5 Hazy warm — hazy warm Thai afternoon - k6 Morning mist — light morning mist over the trees
l · Location setting (Thailand) (single, ⭐l1; used for AI-drawn exterior, aerial frames and window views without a photo) - l1⭐ Suburban estate — quiet suburban housing estate in Thailand with neat lawns and palm trees - l2 Bangkok city edge — Bangkok city edge in Thailand with distant towers - l3 Riverside — riverside plot in Thailand with a calm river beyond the garden - l4 Northern hills — green hills near Chiang Mai in northern Thailand - l5 Hua Hin seaside — seaside town near Hua Hin, Thailand, with coconut palms - l6 Phuket hillside — Phuket hillside in Thailand with a sea view - l7 Rice-field countryside — Thai countryside with rice fields - l8 Golf estate — golf course estate in Thailand with wide fairways
m · Camera look (single, ⭐m1) - m1⭐ Wide 16mm real estate — wide 16mm real estate lens, whole space in frame - m2 Natural 24mm — natural 24mm perspective - m3 Editorial 35mm — editorial 35mm, selective composition - m4 Straight verticals — architectural framing with perfectly vertical lines - m5 Low hero angle — low hero angle that makes the space feel grand - m6 Eye level 1.5 m — eye-level camera at 1.5 meters - m7 High corner — high corner view showing the full layout
n · Photo finish (single, ⭐n1) - n1⭐ Photoreal real estate — photorealistic professional real estate photography - n2 Luxury editorial — luxury architecture magazine photography - n3 Bright and airy — bright airy look with soft shadows - n4 Warm film — warm cinematic film look - n5 HDR balanced windows — balanced HDR, window views visible, no blown highlights - n6 Moody contrast — moody contrast, deep shadows, warm highlights
o · Sound mood (single, ⭐o1; sets the default vb per shot)
- o1⭐ Pure natural ASMR — natural ambient sounds only, crisp and close
- o2 Footsteps and doors — soft footsteps and door sounds lead the audio
- o3 Nature rich — birds, leaves and water lead the audio
- o4 Quiet luxury — very quiet, minimal soft room tone
- o5 Home life — gentle home life sounds, kettle, cutlery, distant laughter
- o6 Rain outside — soft tropical rain outside
p · People & voice (single, ⭐p1) - p1⭐ No people, no speech — no people, no speech, ASMR sounds only - p2 Thai voice-over — calm Thai narrator voice-over, nobody on screen - p3 Presenter on camera — Thai agent presenter walks with the camera and speaks - p4 Family lifestyle — Thai family living naturally in the home, no speech - p5 Couple lifestyle — young Thai couple enjoying the home, no speech - p6 Hands only — only hands open doors, curtains and taps - p7 Pet moments — a cat or a small dog wanders through, no people
q · Opening hook (single, ⭐q1) - q1⭐ Drone dive from the sky — drone descends from high above toward the house - q2 Door opens to light — the front door opens into bright light - q3 Hero feature first — opens on the strongest feature (pool, view, double-height living) - q4 Curtain reveal — sheer curtains slide open to reveal the view - q5 Lights on at dusk — the house lights switch on at dusk - q6 Detail pull-out — a close-up of a material detail pulls back to the full room - q7 Gate slides open — the front gate slides open toward the house - q8 Flash-forward (in edit) — (post) 1 s of the best shot before shot 1
r · Ending (single, ⭐r1) - r1⭐ Drone pull-back at sunset — drone rises and pulls back from the house at sunset - r2 Facade lights at dusk — the house glows with warm lights at dusk - r3 View hold — calm hold on the view from the balcony or garden - r4 Family dinner — a Thai family sits down to dinner (needs p4/p5) - r5 Held frame for contact — clean held frame with open sky or wall for overlay text - r6 Loop to first frame — final composition mirrors the first frame for a loop - r7 Bedroom night lights dim — bedroom lights dim softly at night
s · Transition between spaces (single, ⭐s1; default for every cut, per-shot vd)
- s1⭐ Push-in match cut — the shot ends pushing forward; the next shot starts pushing forward
- s2 Whip pan — fast whip-pan blur at the end and at the start of the next shot
- s3 Door wipe — a door or wall edge sweeps across the frame at the cut
- s4 Light flash — a soft white light flash at the cut
- s5 Doorway walk-through — the camera passes through a doorway into the next space
- s6 Foreground wipe — a plant or pillar passes close to the lens at the cut
- s7 Straight cut on the beat — clean straight cut
t · Camera motion style (single, ⭐t1) - t1⭐ Smooth gimbal glide — smooth gimbal glide at walking height - t2 Slow cinematic dolly — slow cinematic dolly move - t3 FPV drone flow — fluid FPV drone flight - t4 Slider — short steady slider move - t5 Orbit arc — gentle orbit arc around the main furniture - t6 Locked, life moves — locked camera, only curtains, water or light move - t7 Crane rise — slow vertical crane rise
u · Motion speed (single, ⭐u1) - u1⭐ Smooth real time — smooth real-time speed - u2 Slow cinematic — slightly slow cinematic speed - u3 Ease in / ease out — eases in and out - u4 Speed ramp — fast, then slows on the key moment - u5 Gentle light timelapse — light moves like a gentle timelapse while the camera glides - u6 Energetic reel — brisk energetic pace
v · Highlights to feature (multi; pre-ticked from analysis and facts, never in presets) - v1 Private pool — the private swimming pool - v2 Double-height living — the double-height living room - v3 Island kitchen — the kitchen island - v4 Master suite — the master bedroom suite - v5 Garden — the garden - v6 The view — the view from the windows - v7 Walk-in closet — the walk-in closet - v8 Spa bathroom — the spa-like bathroom - v9 Natural light — the natural light - v10 Outdoor living — the covered outdoor living area
w · Always avoid (multi, ⭐w1–w6)
- w1⭐ No text or logos — no text, no watermark, no logos, no signage, no readable labels
- w2⭐ Keep structure — no change to walls, windows, doors, stairs or ceiling beyond the edit level
- w3⭐ Straight lines — no warped walls, no bent verticals, no fisheye distortion
- w4⭐ No camera shake — no camera shake, no jitter
- w5⭐ Nobody looks at camera — no person looking at the camera (presenter p3 excepted)
- w6⭐ No clutter — no clutter, cables, laundry or bins
- w7 No camera in reflections — no camera, tripod or crew visible in mirrors or glass
- w8 No distorted furniture — no melting, floating or merged furniture
x · Total shots (number 3–20, ⭐10) quick: 4 6 8 10 12 — the shot plan may use fewer if the house has fewer spaces.
y · Seconds per shot (⭐6) chips 4 s · 6 s⭐ · 8 s · 10 s; live total "Total 10 × 6 = 60 s"
4.5 Section "People" (shown only when p ≠ p1, p6, p7; 1:1 image · Select image · Draw with AI · Analyze)
| Card | Used when | Look buttons | Default description |
|---|---|---|---|
| Presenter | p3 |
pa1⭐ Thai female agent, beige suit · pa2 Thai male agent, navy blazer, no tie · pa3 Young Thai agent, smart casual · pa4 Thai architect, black shirt · pa5 Thai owner-host, polo shirt · pa6 Thai woman, linen dress | Friendly Thai female real estate agent in her 30s, beige suit, warm smile, natural gestures |
| Lifestyle cast | p4, p5 |
pb1⭐ Thai family of four · pb2 Young Thai couple · pb3 Three-generation Thai family · pb4 Single Thai professional · pb5 Thai retired couple · pb6 Thai friends gathering | Thai family of four, parents in their 30s and two young children, relaxed home clothes |
pc · Voice-over voice (shown with p2 or p3): pc1⭐ Calm Thai female — calm warm Thai female voice · pc2 Warm Thai male — warm friendly Thai male voice · pc3 Bright young Thai female — bright young energetic Thai female voice · pc4 Deep luxury Thai male — deep slow luxurious Thai male voice.
People never appear in space heroes (heroes stay empty, 5.4); they are added only in Storyboard frames whose shot has sa ≠ sa1.
4.6 Section "Models & output"
za Image: 🍌 Nano Banana Pro · 🍌 Nano Banana 2 Lite⭐ · 🍌 Nano Banana 2.1 · zb Video: Omni 1.1 Flash · Veo 3.1 - Lite · Veo 3.1 - Fast⭐ · Veo 3.1 - Quality · zc Resolution (Omni only): 360p (fast) · 720p (HD)⭐ · zd Aspect: Vertical 9:16 (TikTok / Reels)⭐ · Horizontal 16:9 (YouTube). Changing zd after heroes exist: every hero gets Ref changed · ↻ Re-frame (5.3).
4.7 Section "Your selections"
Code-chip bar (e.g. a1 b1 c1 … w1-6 x10 y6 za2 zb3 zd1, click jumps to the group) · total length + warning ("Over 60 s for vertical video" / "Under 15 s: use 4+ shots") · non-blocking conflict hints (r4 without people → ✨ Fix; d set while Exterior photo is L1/L2 → "Architecture style is ignored for your real exterior") · ✨ Start with AI (4.0) · Go to Spaces.
5. Tab 2 — Spaces
Title "Spaces — prototype images of every area". Layout top → bottom: Style Sheet panel (5.0) · suggested-space chips (5.6) · space cards grid in preset order (5.1) · bottom bar Generate shot plan (gate 5.8).
5.0 House identity — House DNA + Style Sheet (MUST)
- Exterior first: the Exterior card is always first and is the only card that can start before anything is locked. Every other card waits (
Waiting for Exterior pick, grey, no spinner) until the Exterior hero is locked. - Style Sheet: on Exterior lock, the text model reads the Exterior hero + the selected
c,f,g,h+ interior photo notes (9.5) and returnsstyleSheet(9.4b): palette, wood tone, metal finish, flooring, wall finish, window frames, ceiling, light temperature, furniture style, decor motifs, avoid. Shown as an editable panel (chips + short text lines) with↻ Re-extract Style Sheet. Editing it marks unlocked cards "settings changed"; locked heroes are not redrawn. - Reference rule: no space image is generated from text alone (only the Exterior without a photo is drawn from text). Refs for space k: [1] its own photo (edit target) if it has one · [2] style reference = the most recently locked interior hero, else the Exterior hero, labelled "style reference only: materials, palette and furniture style; do not copy its layout" · [3] for no-photo interiors: the Exterior hero, labelled "same house: match window frames, materials and colours".
- Every prompt contains the Style Sheet line (
STYLE_LINE, 10). The hero check (5.7) testshouseMatch.
5.1 Space cards (MUST)
Default cards: Exterior · Living room · Dining room · Bedroom · Bathroom. Added from suggestions (5.6) or + Add space (chips of AREA_TYPES, 10): Kitchen · Garden · Pool · Balcony · Outdoor living (sala) · Work room · Kids room · Walk-in closet · Guest bedroom · Entrance foyer · Staircase · Carport · Laundry · Rooftop terrace. A type may repeat (Bedroom 2, Bathroom 2).
Each card (large, preview in zd aspect, object-fit: contain):
- Header: space name (editable) · type · edit level chip (ca) · badge (5.4) · <CardStatus> · ✕ Remove space (confirm "Remove this space? Shots using it will be removed from the plan.").
- Photo zone: Select photo (drop area "Drop a real photo of this space (optional)") · thumbnail with round ✕ top-right to remove · up to 3 photos = angles 1–3. No photo → label "AI will draw this space · AI concept".
- Notes field "What the photo shows" (auto, editable, 5.2) · structure list "Keep exactly" (structureLock, editable chips + item / − item).
- Customize this space (collapsible): common groups ca–ci + the room groups of its type (5.5).
- Generate 3 options / ↻ Generate 3 new · 3 slots (click = lock as hero, green ✓ Hero locked) · slot ↻ · ✨ Suggest best · ⟲ Reset space · + Add angle (max 3; angle k ≥ 2 waits for angle 1 lock).
- Banners from analysis: room mismatch, quality flags (5.2).
5.2 Photo analysis (MUST — automatic)
After a photo is selected, Analyze runs automatically (chip "Analyzing photo…"; prompt 9.5) and returns:
- Room check: roomType; if it differs from the card type → yellow banner "This looks like a bedroom — move it to the Bedroom card?" Move · Keep here.
- Structure lock: structureLock[] = fixed elements with positions ("floor-to-ceiling window: left wall", "staircase: right, rising away", "beam: across the ceiling") → "Keep exactly" list; used in every L1/L2/L3 prompt.
- Light & time: light → pre-selects cf for this card.
- Quality flags: dark · blurry · tilted · too tight → banner with advice "Photo is dark — L1 Enhance recommended" (Use L1) or "Too tight to show the room — retake wider or use L3".
- Features & suggestions: features[] (e.g. "kitchen island", "bathtub", "pool visible through window") → pre-tick v and ci; suggestedSpaces[] → 5.6.
Generate 3 options waits until analysis is done ("Analyzing photos… 2/5").
5.3 Re-frame to the output aspect (MUST)
If a photo's aspect differs from zd, a REFRAME_PROMPT job (10) runs automatically after analysis (chip "Re-framing to 9:16…"):
- Vertical target from a landscape photo: extend only the ceiling at the top and the floor at the bottom. Horizontal target from a portrait photo: continue only the existing walls left and right.
- Guard: "Do not add windows, doors, furniture, lamps, artwork or people in the extended area. Keep the original part pixel-identical."
- Check {reframeClean, reason} (9.6); fail → redraw once, then ↻ Re-frame · Use crop instead (center crop, no AI) · Keep anyway.
- The card shows the original and the re-framed image side by side (Original · Re-framed); the re-framed image is the edit target. Changing zd → Ref changed · ↻ Re-frame on every card.
5.4 Prototype image prompts (MUST)
Every hero prompt: space type first (ROOM_GUARD), then the edit-level guard, then style and options, story notes last (lower priority, never overrides type or structure), w[], HERO_SUFFIX (10). Heroes are always empty of people.
Edit level → guard and badge (LEVEL_GUARD, 10):
| Level | Guard sent | Badge |
|---|---|---|
| L1 Enhance | Keep every wall, window, door, floor, ceiling, built-in and every piece of furniture in place. Only improve light, colour balance and sharpness, straighten verticals, remove loose clutter (bags, cables, laundry, papers, bins). | Enhanced |
| L2 Virtual staging | Keep exactly: walls, windows, doors, floor material, ceiling height and finish, built-ins, stairs, room size and layout: {structureLock}. Replace or add only loose furniture, rugs, curtains, lamps, plants and decor. | Virtually staged |
| L3 Renovation concept | Keep the room shape, window and door openings, ceiling height and the camera exactly: {structureLock}. You may change surface finishes {cg[]}, cabinet fronts, light fixtures, furniture and decor. | AI concept |
| L4 Full redesign | Design this space freely, consistent with the house Style Sheet. | AI concept |
A. Space with a photo (L1–L3; edit of the re-framed photo):
Edit reference image 1, a real photo of the {area label} of this house in Thailand. {ROOM_GUARD} Keep the exact same camera position, framing and lens.
{LEVEL_GUARD}
Style: {style}. {STYLE_LINE}. Furniture: {density}; {room groups}; props: {props[]}. Show clearly: {ci[]}. Light: {light}. {k if outdoor}.
Reference image 2 is a style reference only (materials, palette, furniture style); do not copy its layout.
Story notes (lower priority than everything above): {story}
Empty of people. Avoid: {w[]}. {HERO_SUFFIX}
B. Interior without a photo (L4, AI concept):
Photorealistic photograph of the {area label} inside the same house as reference image 1 (the exterior) in Thailand. {ROOM_GUARD}
The interior must belong to this house: same window frames, materials, palette and ceiling style. {STYLE_LINE}. Style: {style}.
Layout: {room groups}. Furniture: {density}; props: {props[]}. Show clearly: {ci[]}. Windows look out to {l}. Camera: {cc}, {m}. Light: {light}.
Reference image 2 (if given) is a locked room of the same house: match its materials and furniture style, not its layout.
Story notes (lower priority): {story}. Empty of people. Avoid: {w[]}. {HERO_SUFFIX}
C. Exterior without a photo (the only text-only image, AI concept):
Photorealistic photograph of the exterior of a {b} in {l}, in Thailand. The whole house is visible from {ea}. {ROOM_GUARD}
Architecture: {d}. Palette: {f}. Materials: {g[]}. Landscape: {eb}. Lights: {ec}. Driveway: {ed}. Sky: {k}. Light: {j}. Camera: {m}.
Story notes (lower priority): {story}. Empty of people, no car plates, no house numbers. Avoid: {w[]}. {HERO_SUFFIX}
D. Exterior with a photo: template A with the exterior guard — L1: clean, straighten, brighten sky; L2: keep house body, roof, windows, doors, fence and levels; change only landscape eb, lights ec, driveway ed, outdoor furniture and sky k; L3: may also change facade colours and cladding toward d and f.
E. Angle 2–3 (same space): with a photo → template A, plus reference image 2 = angle 1 hero labelled "same room, same furniture: match every item that is visible in both views". Without a photo → "Reference image 1 is the locked {area} (angle 1). Show the same room from {cc}: the same furniture, materials, colours and light; areas not visible in image 1 continue the same style." + badge AI concept · new angle.
ROOM_GUARD per type (AREA_TYPES[].guard, 10), e.g. Bathroom: "This is a bathroom: it has a toilet, a basin and a shower or bathtub; not a bedroom, no bed, no sofa." · Kitchen: "This is a kitchen: cooking counter, sink, cooktop and cabinets; not a living room, no bed." · Exterior: "The exterior of the whole house seen from outside; not an interior."
5.5 Per-space options (MUST — on every card)
Common groups (first option = Design follows the global group; card changes show custom):
- ca · Edit level (⭐ca0 = Design e) · ca1 L1 Enhance · ca2 L2 Virtual staging · ca3 L3 Renovation concept · ca4 L4 Full redesign (forced for cards without a photo)
- cb · Style (⭐cb0 = Style Sheet) · any c option as override
- cc · Hero angle (single; ⭐cc7 with a photo, ⭐cc1 without)
- cc1 Wide corner — wide view from a corner showing two walls
- cc2 One-point center — one-point perspective from the center of one wall
- cc3 From the doorway — view from the doorway into the space
- cc4 Toward the window — eye-level view toward the main window
- cc5 Low hero — low hero angle
- cc6 High corner — high corner view showing the layout
- cc7 Same as photo — keep the photo's camera
- cd · Furniture density (⭐cd0 = Design h) · any h option
- ce · Props (⭐ce0 = Design i) · any i options
- cf · Light (⭐cf0 = Design j, or the photo's light) · any j option
- cg · Surface finishes (multi, L3/L4 only)
- cg1 Wide oak floor — wide-plank oak floor
- cg2 Marble floor — light marble floor
- cg3 Polished concrete — polished concrete floor
- cg4 Large porcelain tiles — large-format porcelain floor tiles
- cg5 Limewash walls — soft limewash walls
- cg6 Wood slat wall — wood slat feature wall
- cg7 Stone feature wall — natural stone feature wall
- cg8 New cabinetry — new flat-panel cabinetry
- cg9 Cove lighting — cove ceiling with indirect lighting
- ch · Sounds of this space (multi; default AREA_TYPES[].sounds) — options = vb list (7.0)
- ci · Must show (multi; chips from features[] + + Custom) — e.g. "kitchen island", "bathtub by the window", "pool view"
Room groups: - Exterior — ea · Facade view (⭐ea1): ea1⭐ 3/4 front corner — three-quarter view from the front corner, whole house visible · ea2 Straight front — straight frontal view · ea3 From the garden — view from the garden toward the house · ea4 Low from the lawn — low angle from the lawn · ea5 Along the driveway — view along the driveway · ea6 Same as photo — keep the photo's camera. eb · Landscape (⭐eb1): eb1⭐ Tropical garden — lush tropical garden with palms, frangipani and ferns · eb2 Manicured lawn — manicured lawn with low border shrubs · eb3 Gravel + trees — minimal gravel garden with sculptural trees · eb4 Bougainvillea — flowering bougainvillea along the fence · eb5 Zen stones — zen garden with stones and moss · eb6 Keep as photo — landscape as in the photo. ec · Exterior lights (⭐ec1): ec1⭐ Off (daytime) — exterior lights off · ec2 Facade uplights — warm facade uplights · ec3 Path lights — garden path lights · ec4 All lights at dusk — every exterior light glowing at dusk. ed · Driveway & gate (⭐ed1): ed1⭐ Clean empty driveway — clean empty driveway · ed2 One car — one modern car parked, no plate text · ed3 Gate open — gate open, welcoming · ed4 EV charger — EV charger on the carport wall · ed5 Keep as photo — driveway as in the photo. - Living — la · Seating (⭐la1): la1⭐ L-sofa to media wall — L-shaped sofa facing the media wall · la2 Sofa to garden — sofa facing the garden window · la3 Two facing sofas — two sofas facing each other · la4 Low modular sofa — low modular sofa · la5 Sofa + reading chair — sofa with a reading armchair. lb · Focal wall (⭐lb1): lb1⭐ Slat media wall — wood slat media wall with a blank black screen · lb2 Large art — large abstract artwork · lb3 Bookshelf — built-in bookshelf · lb4 Stone wall — natural stone feature wall · lb5 Full glass — full-height glass to the garden. lc · Windows (⭐lc1): lc1⭐ Sheer white curtains — sheer white curtains · lc2 Linen drapes — linen drapes · lc3 Wood blinds — wooden blinds · lc4 Bare glass — bare glass for the view. - Dining — da · Table (⭐da1): da1⭐ 6-seat oak — 6-seat oak dining table · da2 Round marble — round marble table · da3 8-seat long — 8-seat long table · da4 Bar counter — bar counter with stools · da5 Bench dining — built-in bench dining. db · Table setting (⭐db1): db1⭐ Centerpiece — simple flower centerpiece · db2 Set for dinner — table set for dinner · db3 Thai family meal — Thai family meal with covered dishes · db4 Breakfast — breakfast set · db5 Empty — clean empty table. - Bedroom — ma · Bed (⭐ma1): ma1⭐ King, upholstered headboard — king bed with an upholstered headboard · ma2 Low platform — low platform bed · ma3 Canopy — canopy bed with sheer drapes · ma4 Twin beds — twin beds · ma5 Kids bed — kids bed with soft toys. mb · Bedding (⭐mb1): mb1⭐ Hotel white — crisp white hotel bedding · mb2 Earth linen — linen bedding in earth tones · mb3 Layered — layered bedding with a throw and cushions · mb4 Pastel kids — pastel kids bedding. mc · Extras (multi): mc1 Reading chair — reading chair by the window · mc2 Vanity — vanity desk · mc3 Pendant lights — bedside pendant lights · mc4 Balcony doors open — balcony doors open · mc5 Work corner — small work corner. - Bathroom — ha · Bath feature (⭐ha1): ha1⭐ Rain shower — walk-in rain shower behind glass · ha2 Freestanding tub — freestanding bathtub · ha3 Tub by window — bathtub by a window · ha4 Garden shower — semi-outdoor shower with plants · ha5 Keep as photo — as in the photo. hb · Vanity (⭐hb1): hb1⭐ Floating wood — floating wood vanity with a vessel basin · hb2 Double stone — double-basin stone vanity · hb3 Compact white — compact white vanity · hb4 Keep as photo — as in the photo. hc · Spa touches (multi, ⭐hc1): hc1⭐ Rolled towels — rolled white towels · hc2 Orchid — a white orchid · hc3 Candles — candles · hc4 Bath tray — wooden bath tray · hc5 Pebble detail — pebble floor detail. - Kitchen — ka · Layout (⭐ka1): ka1⭐ Island — island kitchen · ka2 L-shape — L-shaped kitchen · ka3 Galley — galley kitchen · ka4 Thai wet + dry — Thai dry kitchen with a separate wet kitchen door · ka5 Keep as photo — as in the photo. kb · Cabinets (⭐kb1): kb1⭐ Warm oak — warm oak flat-panel cabinets · kb2 Matte white — matte white handleless cabinets · kb3 Sage shaker — sage green shaker cabinets · kb4 Dark walnut — dark walnut cabinets · kb5 Keep as photo — as in the photo. kc · Counter scene (⭐kc1): kc1⭐ Fruit bowl — clean counter with a fruit bowl · kc2 Coffee corner — coffee corner · kc3 Ingredients — fresh ingredients prepared · kc4 Baking — baking set · kc5 Empty — clean empty counter. - Garden / Outdoor living — ga · Garden style (⭐ga1): ga1⭐ Tropical lush — lush tropical garden · ga2 Lawn + shrubs — lawn with border shrubs · ga3 Thai sala — Thai sala pavilion · ga4 Gravel zen — gravel zen garden · ga5 Herb garden — vegetable and herb garden · ga6 Keep as photo — as in the photo. gb · Garden furniture (⭐gb1): gb1⭐ Teak lounge — teak lounge set · gb2 Pergola dining — dining set under a pergola · gb3 Hammock — hammock between trees · gb4 Daybed — outdoor daybed · gb5 None — no furniture. - Pool — oa · Pool (⭐oa1): oa1⭐ Lap pool — long rectangular lap pool · oa2 Infinity edge — infinity-edge pool · oa3 Freeform — freeform tropical pool · oa4 Plunge — small plunge pool · oa5 Keep as photo — as in the photo. ob · Pool deck (⭐ob1): ob1⭐ Teak deck + loungers — teak deck with two loungers · ob2 Stone deck + umbrella — stone deck with an umbrella · ob3 Grass edge — grass to the pool edge · ob4 Pool lights — underwater pool lights glowing at dusk. - Other types use the common groups only.
5.6 AI-suggested spaces (MUST)
✨ Suggest spaces (also step 4 of 4.0, and automatically after each analysis) → prompt 9.7 with: photo analyses (suggestedSpaces, features), property facts (bedrooms, bathrooms, pool, parking) and b. Result = chip row "Suggested spaces": + Kitchen (tooltip "seen in the Living photo") · + Pool ("Pool villa") · + Bedroom 2 ("3 bedrooms in facts")… Click = add card. Rules: never suggest what the facts deny (no pool if facts say none); spaces without a photo get AI concept; a suggested space counted in facts but not photographed shows "No photo yet — AI concept until you add one".
5.7 Hero check (MUST)
A check job (prompt 9.6) runs on every new option. A candidate failing a test is marked in its slot, redrawn once automatically, and can never be locked: ✗ Collage · ✗ Wrong room · ✗ Structure changed (L1/L2/L3 vs structureLock and the photo) · ✗ Not this house (style/materials far from the Style Sheet) · ✗ People · ✗ Text. ✨ Suggest best marks one Suggested (reason tooltip); it never locks.
5.8 Pick flow and gate (MUST — no full automation)
- The user locks every hero. Click = lock (green
✓ Hero locked) → dependants start (Exterior → all spaces if the auto toggle is on; angle 1 → angles 2–3). - Unstuck: Exterior has images but no lock → every waiting card shows "Exterior has images but no pick yet" +
✓ Lock Exterior #{k} & generate spaces(k = Suggested, else first valid). ToggleUse first finished image if no pick(⭐ off). - Re-locking a hero never overwrites dependants:
Ref changed(2.2). - Gate for
Generate shot plan: Exterior locked and every card in the preset's space order that exists in the house locked. Status "Heroes 6 / 7 — lock Bathroom". Secondary buttonPlan with locked spaces only(missing spaces are skipped).
6. Tab 3 — Storyboard
Title "Shot plan and frames". Top: shot plan (6.0c) as a vertical list of shot cards; each card shows Start frame | End frame side by side (zd aspect, contain, never cropped), the camera path, sounds, transition and badges.
6.0 Frame image rules (MUST)
- One frame = one single photograph filling the frame in the exact
zdaspect. Never a collage, grid, split screen, panels, inset, border or comparison. - One moment only.
FORBIDDEN_IMAGE_WORDS(10) are stripped from image prompts; they belong only inbuildPrompt. - Every image prompt ends with
SINGLE_FRAME_SUFFIX(10). - Frames come from heroes, never from text (6.0b). A shot frame is either a locked hero (no generation, label
Hero: Living #1) or a generated frame = an edit of a locked image with one of theGEN_KINDS(10): move— same space, camera moved ("1.5 m forward toward the window, turned 15° right"); newly visible parts continue the same room style.aerial— the same house from a drone 40 m up, 60 m away, 35° down; keep roof, facade, colours, windows and garden; surroundings fromlmatching image 1 (AI concept).approach— camera 3 m in front of the front door, same facade.door— front door (or room door) open; through it the next space's hero (ref 2) is visible in matching style.light— identical composition, only the time of day / lights change (j7, endingr1,r2).detail— close-up of one item in image 1, same material and colour.people— the same frame with the shot's people (sa) added from the people cards; furniture unchanged.- References: [1] the edit target (hero or locked frame, always first) · [2] the next space's hero for
door· people cards forpeople. Every slot showsEdited from: …(2.1). - The 3 options = 3 seeds of the same edit, not 3 compositions.
-
Frame check (MUST) — prompt 9.6b on every new frame; failing candidates are marked, redrawn once, never lockable:
✗ Collage·✗ Different room·✗ Wrong view(camera did not move as asked, or moved into another room) ·✗ Furniture changed·✗ Not this house·✗ Text. -
Field "Frame change" per generated frame (never empty, 2.2) + chips:
- ba · Frame light: ba1⭐ Same as hero — same light as the hero · ba2 Sun patch — a patch of sunlight on the floor · ba3 Golden shift — warm golden hour light (ending only) · ba4 Lights on at dusk — warm lights on at dusk · ba5 Morning haze — soft morning haze · ba6 Night warm — night with warm lamps
- bb · Frame focus: bb1⭐ Whole space — the whole space · bb2 Material close-up — close-up of a material · bb3 Window view — the view through the window · bb4 Table or counter — table or counter detail · bb5 Bed and textiles — bed and textiles · bb6 Water surface — water surface
- bc · Life touch: bc1⭐ Still — nothing moves · bc2 Steam from a cup — steam rising from a cup · bc3 Curtain mid-sway — curtain mid-sway · bc4 Pool ripples — ripples on the pool · bc5 Leaves moving — leaves moving in a breeze · bc6 Lamp glow — warm lamp glow
- bd · Image quality: bd1⭐ Photoreal 4K — photorealistic 4K real estate photo · bd2 HDR windows — balanced HDR, window views visible · bd3 Straight verticals — perfectly straight verticals · bd4 Natural colour — natural colour · bd5 Crisp detail — crisp micro-detail · bd6 No text — no text, no watermark (always on)
- Tooltip "How to pick": ① same room and furniture as the hero ② camera moved as described ③ clean straight lines ④ beauty.
6.0b Continuity by image reference, not by text (MUST)
- Space shot: start = hero (angle chosen in the plan) · end =
moveedit of that hero. - Bridge shot: one end is a hero or a locked frame, the other a generated frame (
aerial,approach,door,light). - Shared frames: when shot n's start is
prev-end, it is the same locked image as shot n−1's end (no regeneration), giving one continuous take across the cut (Drone Arrival shots 1–3). - Between spaces there is no morph from one room into another; the cut is hidden by the transition
s/vd: shot n's end motion and shot n+1's start motion go the same direction (match cut). - Text describes only the change ("Frame change"); the Style Sheet line is added, the room is never re-described.
6.0c Shot plan (MUST)
Generate shot plan (Spaces bottom bar, also ↻ Re-plan here) → prompt 9.2–9.4 → "Planning shots…". Confirm if a plan exists: "A new shot plan replaces all current frames and videos (heroes are kept). Download your work first?" Create new plan · Cancel.
Shot card fields: "Shot title" (≤ 6 words, overlay label) · "Beat" · "Type" (Space / Bridge) · "Space + angle" (chips of locked heroes) · "Start frame" · "End frame" (+ "Frame change") · "Camera path" · "Sounds" · "Transition out" · "Speech (spoken in Thai)" (only with p2/p3) · badges (AI concept, Virtually staged) · "Shot length" chips 4/6/8/10 s (default y) · groups:
- sa · People in shot: sa1⭐ No one · sa2 Presenter · sa3 Family · sa4 Couple · sa5 Hands only · sa6 Pet (default from p)
- sb · Beat: Hook · Tour · Highlight · Climax · Ending
- sc · Quick fix: Smaller move · Bigger move · Swap with next · Split into 2 · Merge with next · Rewrite shot
- sd · Speech: sd1⭐ None (ASMR) · sd2 Voice-over line · sd3 Presenter line · sd4 Rewrite line
Default plan (preset "Drone Arrival", 10 × 6 s; also the fallback 9.9):
| # | Beat | Type | Space | Start → End | Camera path | Sounds | Out |
|---|---|---|---|---|---|---|---|
| 1 | Hook | Bridge | Exterior | aerial (new) → Exterior hero |
drone descends forward toward the house | wind, birds | (continuous) |
| 2 | Tour | Bridge | Exterior | Exterior hero → approach (new) |
glide along the path to the front door | footsteps on stone, birds | (continuous) |
| 3 | Tour | Bridge | Entrance | shot 2 end → door (new, ref Living hero) |
slow push as the door opens | door latch, door swing | s1 push-in |
| 4 | Tour | Space | Living | Living hero → move |
glide forward toward the garden window, slight pan right | footsteps on wood, curtains | s2 whip pan |
| 5 | Tour | Space | Dining | Dining hero → move |
dolly in toward the table centerpiece | soft cutlery | s1 push-in |
| 6 | Highlight | Space | Kitchen | Kitchen hero → move |
slide along the island | kettle, water tap | s3 door wipe |
| 7 | Tour | Space | Bedroom | Bedroom hero → move |
push toward the window as curtains part | curtains, linen rustle | s1 push-in |
| 8 | Tour | Space | Bathroom | Bathroom hero → move |
tilt down to the bathtub filling | running water | s6 foreground wipe |
| 9 | Climax | Space | Garden / Pool | hero → move |
glide along the pool edge | water ripple, birds | (continuous) |
| 10 | Ending | Bridge | Exterior | light of Exterior hero (golden hour, lights on) → light of shot 1 aerial |
drone rises and pulls back | crickets, soft wind | hold 1 s |
Missing spaces are skipped and the remaining shots keep the order: outside → entrance → public spaces → kitchen → private spaces → outdoor → ending.
Shot plan quality (MUST):
1. Input check — every shot uses a locked hero or a frame made from one; spaces without a hero are skipped (banner "Skipped: Pool (no hero)").
2. Coverage — every locked space appears at least once when x allows; highlights v appear in the first 3 shots for q3, otherwise as Highlight/Climax.
3. Order — outside → in → public → private → outdoor → ending (except presets with their own spaceOrder).
4. One clear camera move per shot, size fits the duration; two consecutive shots never use the same move; transitions vary.
5. Hook moves at once (frame 1 already in motion); Ending matches r and holds ≥ 1 s.
6. Honesty — aiConcept true on every shot whose frames include an AI concept image; the Overlay Pack lists it.
7. Speech only with p2/p3, word limits (0.3).
8. Validation — the app checks: refs exist · no empty "Frame change" · no repeated move · total length = shots × seconds · Ending present. Failure → re-plan once with the problem list, then fallback 9.9.
6.1 Sequential pick flow (MUST — no full automation)
There is no ⚡ Full automation. The user locks every generated frame.
1. Ready rule: a frame job starts only when its edit target is locked (hero or frame). Waiting slots show grey Waiting for Living hero / Waiting for shot 2 end frame pick (never "Generating").
2. Pick = lock + auto-continue: clicking a frame locks it (✓ Locked) and starts every frame that depends on it (e.g. shot 2 end → shot 3 door frame). Toggle Auto-generate dependent frames after pick (⭐ on).
3. Frames whose edit target is a hero all start at once after Generate frames (through the pool, lowest shot first).
4. Re-picking a frame that others were made from never overwrites them: Ref changed + ↻ Update from previous.
5. Guide line "Next: pick the end frame of shot {n}"; when all are locked: toast "All N shots ready" + Go to video render highlighted.
6. ✨ Suggest best marks one Suggested; it never locks.
7. Unstuck: if a frame has images but no lock, dependants show "Shot {n} has frames but no pick yet" + ✓ Lock shot {n} #{k} & continue. Toggle Use first finished image if no pick (⭐ off; label Ref: shot {n} #{k} (auto)).
8. Videos are made only in the Video tab.
6.2 Generation pool (MUST)
MAX_CONCURRENT = 4requests app-wide (analysis, re-frame, heroes, checks, frames, videos, plans, ideas). Every button adds jobs to this one queue; nothing bypasses it.- Start gap: two requests never start at the same moment; each starts ≥
START_GAP_MSafter the previous start. Pool-bar chipsGap 2 s⭐ ·3 s·4 s. Do not wait for the previous request to finish: 3 images = send #1 → +gap #2 → +gap #3 while #1 runs. - Live countdown:
countdownTimer(250 ms) while jobs wait;nextInSeconds = ceil((lastStart + START_GAP_MS − now) / 1000); each waiting slot showsStarting in {nextInSeconds + position × gap} s…,Waiting for a free slot, or its dependency (Waiting for Exterior pick); buttonsQueued · starts in N s; runningGenerating… 0:12 / 0:45. Pool bar:Running 2/4 · Next request in 3 s · Queued 5 · Done 21 · Failed 0. - Ready rules: analyze = photo set · reframe = analysis done · hero(Exterior) = its reframe done (or no photo) · hero(space) = Exterior locked + own reframe done · hero(angle k ≥ 2) = angle 1 locked · check = its image done · frame = its edit target locked · video(n) = shot n start and end locked. Priority: Exterior → spaces in preset order → frames by shot → videos by shot; same item: check → image → video.
- Timeouts:
TIMEOUT_MS = { image: 45000, check: 30000, other: 30000, video: 180000 }. Past the limit: slot frees at once,⏱ Timed out, re-queued once. Second failure →⚠ Failed · ↻. - Slot controls (always clickable on Queued / Starting / Generating):
✕ Cancel(frees the slot at once; late results ignored by job token) ·↻ Retry·⚡ Force run(no gap, no priority; uses the next free slot or cancels the oldest job past half its timeout; uses the auto-fallback reference if the target is not locked; disabled if no valid image exists). ⟲ Reset space/⟲ Reset shot(cancel its jobs, clear options, keep the lock; confirm) ·🧹 Clear stuck(cancel jobs past timeout and queued jobs whose dependency can no longer be met) ·⏹ Stop all(no new starts; running jobs finish and are kept).
const MAX_CONCURRENT = 4; let START_GAP_MS = 2000; let lastStart = 0; let timer: number | undefined;
const TIMEOUT_MS = { image: 45000, check: 30000, other: 30000, video: 180000 };
type Job = { id: string; kind: 'image'|'check'|'video'|'other'; order: number; ref?: string; deps: () => boolean; run: (token: string) => Promise<void>; tries: number; token?: string; force?: boolean };
// order: Exterior 0, spaces 10 + preset index, frames 100 + shot, videos 200 + shot; ref = id of the image this job edits
function pump() {
if (stopped || timer || running.size >= MAX_CONCURRENT) return;
const forced = queue.find(j => j.force && (j.deps() || fallbackRef(j.ref)));
if (forced) { forced.force = false; start(forced); return pump(); }
const job = queue.filter(j => j.deps()).sort(byPriority)[0]; if (!job) return;
const wait = lastStart + START_GAP_MS - Date.now();
if (wait > 0) { timer = setTimeout(() => { timer = undefined; pump(); }, wait); return; }
start(job); pump(); // schedules the next start (+gap), does not wait for the result
}
function start(job: Job) {
lastStart = Date.now(); queue.splice(queue.indexOf(job), 1); running.add(job.id);
const token = (job.token = crypto.randomUUID());
const timeout = new Promise<never>((_, rej) => setTimeout(() => rej('timeout'), TIMEOUT_MS[job.kind]));
Promise.race([job.run(token), timeout])
.catch(err => { if (job.token !== token) return; if (++job.tries < 2) queue.push(job); else markFailed(job, err); })
.finally(() => { if (job.token === token) { running.delete(job.id); syncCountdown(); pump(); } });
}
function cancelJob(job: Job) { job.token = undefined; running.delete(job.id); const i = queue.indexOf(job); if (i >= 0) queue.splice(i, 1); markCancelled(job); syncCountdown(); pump(); }
function retryJob(job: Job) { cancelJob(job); job.tries = 0; queue.unshift(job); pump(); }
function forceRun(job: Job) {
if (!job.deps() && !fallbackRef(job.ref)) return;
if (!queue.includes(job)) queue.push(job);
if (running.size >= MAX_CONCURRENT) { const old = oldestPastHalfTimeout(); if (old) cancelJob(old); else { job.force = true; return; } }
start(job);
}
const nextInSeconds = () => Math.max(0, Math.ceil((lastStart + START_GAP_MS - Date.now()) / 1000));
const startsInSeconds = (position: number) => nextInSeconds() + position * (START_GAP_MS / 1000);
function syncCountdown() { /* setInterval(renderCountdown, 250) while queue has waiting jobs; clearInterval when empty or stopped */ }
function fallbackRef(ref?: string) { return ref && (lockedImage(ref) ?? (autoFallback || forcing ? firstFinishedValidImage(ref) : undefined)); }
function onPick(itemId: string, option: 1|2|3) { // itemId = space card or shot frame
lock(itemId, option);
for (const dep of dependantsOf(itemId)) { if (hasOptions(dep)) markRefChanged(dep); else if (autoNext) enqueueImages(dep); }
if (allLocked()) toast(isSpace(itemId) ? `All ${spaces.length} spaces locked` : `All ${shots.length} shots ready`);
}
7. Tab 4 — Video Render
Title "Frame-to-frame tour render". One card per shot: "Start frame" → "End frame" (zd aspect, contain, never cropped) · badges · chips (7.0) · "Motion instruction" · buttons.
7.0 Video presentation options (MUST — on every video card)
Every video card shows these chips directly under the Start/End frames and above "Motion instruction", always visible (never in a menu). A row "Apply to all shots" + ↺ Default sits above the first card (cards changed by hand show custom). Defaults come from the shot plan and t, u, o, s. Every chip change rewrites "Motion instruction" at once (if edited by hand: "Rewrite motion instruction from the new options?" Rewrite · Keep my text). A rendered clip with changed options shows Options changed · ↻ Re-render.
- va · Camera move: va1⭐ Glide forward — smooth glide forward · va2 Dolly in — slow dolly in · va3 Pull back — slow pull back · va4 Pan left → right — slow pan from left to right · va5 Pan right → left — slow pan from right to left · va6 Orbit — gentle orbit arc · va7 Drone descent — drone descends and moves forward · va8 Drone rise — drone rises and pulls back · va9 Tilt up — slow tilt up · va10 Tilt down — slow tilt down · va11 Locked — locked camera, only life motion
- vb · Sounds (multi; default from ch + o): vb1 Footsteps on wood — soft footsteps on a wooden floor · vb2 Footsteps on stone — soft footsteps on stone paving · vb3 Door latch — a door latch clicks and the door swings · vb4 Curtains — curtains sliding on a rail · vb5 Birds — birds chirping outside · vb6 Leaves — leaves rustling in a breeze · vb7 Pool water — pool water lapping gently · vb8 Running water — water running into a basin or tub · vb9 Kettle and cups — kettle steam and porcelain cups · vb10 Cutlery — soft cutlery and plates · vb11 Linen rustle — linen bedding rustling · vb12 Light switch — a light switch click · vb13 Night crickets — crickets at night · vb14 Soft wind — soft wind · vb15 Rain — soft rain outside
- vc · Speed: vc1⭐ Smooth real time — smooth real-time speed · vc2 Slow cinematic — slow cinematic speed · vc3 Ease in / out — eases in and out · vc4 Speed ramp — fast, then slows near the end · vc5 Brisk — brisk energetic pace
- vd · Shot ending: vd1⭐ Push-in match — keeps pushing forward into the cut · vd2 Whip pan out — fast whip pan at the end · vd3 Door wipe — a door or wall edge sweeps across the lens · vd4 Light flash — soft white flash at the end · vd5 Through the doorway — passes through the doorway · vd6 Foreground wipe — a plant or pillar passes the lens · vd7 Hold 1 s — holds still for the last second · vd8 Hold 2 s (ending) — holds still for the last two seconds · vd9 Loop to shot 1 — ends on a composition matching shot 1 · vd10 Continuous — ends exactly on the end frame (shared with the next shot)
- "Motion instruction" =
Start exactly from the start frame. Camera: {va}, {t}, {vc}. Path: {camera path}. Life: {life motion or "nothing else moves"}. End: exactly matches the end frame. Same room, furniture, materials and light throughout; parts that come into view continue the same style ({STYLE_LINE}). Ending: {vd}. Audio: natural ambient sounds only: {vb[]}. No music.+ speech (0.3) orNo speech. - Bridge shots with
dooradd: "The camera passes through the open doorway in one continuous move; the interior matches the end frame." Aerial shots add: "The house stays identical; only the viewpoint changes." - Buttons:
Generate clip·↻ Re-render·Render all shots·⏹ Stop all·Download→property_shot_NN.mp4. ▶ Play/⏹ Stoptoggle on every card with a video: plays inline, loops; Stop rewinds; one card at a time; no video → dimmed ("No video yet").- Error: "Video generation failed. Check the settings and try again."
7.1 Extension scenes — + Add scene (MUST — append only, endless)
Example: the clip ends on the garden; the user adds "night falls and the house lights glow", then another scene, and so on.
- Wide dashed + Add scene inside the last video card only; every new card has its own. Append only (no insert/reorder); only the newest extension has ✕ Remove scene. Numbered N+1, N+2…, beat Extra, counted in header and Download all.
- Start frame (locked): with xg1 ⭐ the last frame of the previous rendered clip (seek MP4 to duration − 0.04 s, draw to canvas, PNG; <video crossOrigin="anonymous">) → fallback the previous clip's end frame → if unreadable: "Render clip {n−1} first, or upload its last frame" + Render clip {n−1} · Upload frame. With xg2 the chosen space's hero. Label Start: last frame of clip {n−1} / Start: Bedroom hero; when the source changes → Ref changed + ↻ Use new start.
xa · Scene type (single, ⭐xa1) - xa1⭐ Camera showcase — showcase the space with a smooth camera move - xa2 Day to night — the light changes from day to evening, lamps fade on - xa3 Lifestyle moment — Thai residents enjoy the space naturally (needs people cards) - xa4 Detail close-up — slow push-in on one beautiful material detail - xa5 Life touch — a small moment: steam from a cup, a cat curls up, curtains breathe - xa6 Drone pull-back — drone rises and pulls back from the house - xa7 Time passes — sunlight moves slowly across the room - xa8 Custom — only the text field below
xb · Camera (single, ⭐xb2): xb1 Locked — locked camera · xb2⭐ Slow pan left → right — slow pan left to right · xb3 Slow pan right → left — slow pan right to left · xb4 Push-in — slow push-in · xb5 Pull-out — slow pull-out revealing more · xb6 Gentle arc — gentle arc, small angle · xb7 Tilt up — slow tilt up · xb8 Drone rise — drone rises and pulls back · xb9 Walk-through — gimbal walk-through xc · Motion feel (single, ⭐xc1): xc1⭐ Slow cinematic — slow, smooth, cinematic · xc2 Real time — real-time speed · xc3 Timelapse — timelapse speed · xc4 Ease in / out — eases in and out xd · What happens (multi, none by default): xd1 Lights fade on — lamps and LED strips fade on warmly · xd2 Curtains move — curtains sway or open slowly · xd3 Residents walk in — Thai residents walk in and relax (needs people cards) · xd4 Pool ripples — pool water ripples and sparkles · xd5 Cat walks in — a cat walks in and curls up · xd6 Leaves sway — leaves sway in a breeze · xd7 Sunlight moves — a patch of sunlight slides across the floor · xd8 Sky to dusk — the sky turns to dusk outside xe · Duration (⭐6) chips 4 / 6 / 8 / 10 s xf · End frame (single, ⭐xf1): xf1⭐ Auto — camera move → no end frame; locked → AI keyframe · xf2 AI keyframe (pick 1 of 3) — 3 edits of the start frame (6.0 rules) · xf3 No end frame — animate from the start frame only xg · Start from (single, ⭐xg1): xg1⭐ Last frame of previous clip · xg2 A space hero — then chips of locked heroes
- Text field "What happens next" ·
✨ AI suggest(3 ideas, prompt 9.10; click fillsxa–xg+ text) ·✨ Write motion prompt·Generate clip·↻ Re-render·▶ Play/⏹ Stop·Download(all via 2.1 and 6.2). - Motion prompt:
Start exactly from the start frame.+{xb},{xc},{xd[]}, text. The space stays exactly as staged (nothing added, removed or moved unless asked); areas a camera move reveals continue the same style (STYLE_LINE). Light may change smoothly. Audio and speech rules 0.3. Never suggest neighbourhood, street or location shots (they would invent a real place).
8. Download all
Download all (N)→property_shot_01..N.mp4, one file each, extensions included in order (no ZIP, no merge).Download heroes (N)→property_hero_{space}.png(badge text in the file name:_staged,_concept), one file each — usable as listing photos.Export overlay pack→property_overlay.json+property_overlay.txt(11).
9. AI processing
9.1 Input
generateShotPlan(config: ProjectConfig, selections: { [code: string]: string | string[] | number | boolean }, spaces: SpaceCard[]) — codes mapped to { label, promptEn } from OPTION_GROUPS. ProjectConfig adds story, facts (never forwarded to image/video prompts), styleSheet, presetId. SpaceCard = { id, type, label, level, photoNotes, structureLock, features, heroes: { angle, imageId, badge }[] }.
9.2 System instruction (shot plan)
You are a director of cinematic real estate tour videos of houses in Thailand. You plan shots from locked prototype images ("heroes") of each space of ONE house.
Rules:
1. Use only spaces that have a locked hero. Every frame is a hero or an edit of a locked image: kinds move, aerial, approach, door, light, detail, people. Never invent a space.
2. Shot types: "space" (start = hero, end = move edit of the same hero; camera moves inside one room) and "bridge" (connects outside and inside, or changes light: aerial, approach, door, light). Never morph one room into another; between spaces use the transition given.
3. Order: follow the given space order; otherwise outside -> entrance -> living -> dining -> kitchen -> bedrooms -> bathrooms -> outdoor -> ending. The hook (shot 1) is already moving. The ending matches the ending option and holds at least 1 second.
4. One clear camera move per shot, sized to the duration; two consecutive shots never use the same move; vary transitions. Shared frames: when a bridge continues the previous shot, set start.source = "prev-end".
5. frameChange (for generated frames) = one moment, concrete, with directions and distances ("camera 1.5 m forward toward the garden window, turned 15 degrees right"). Never the words before, after, transformation, timelapse, sequence, stages, step by step, progress, then, tour.
6. Highlights: feature the given highlights; with hook "hero feature first" show the top highlight in shot 1.
7. Audio: natural ambient sounds only (codes vb), no music. Speech only when the people/voice option is voice-over or presenter: English line, warm, max 5/8/10/12 words for 4/6/8/10 s; otherwise speech = "".
8. People only if the option allows; nobody looks at the camera except a presenter. No text, signage, prices or numbers anywhere.
9. aiConcept = true if any frame of the shot is an AI concept image (given per hero) or an aerial frame.
10. buildPrompt: "Start exactly from the start frame. Camera: … Path: … Life: … End: exactly matches the end frame. Same room, furniture, materials and light throughout. Ending: … Audio: natural ambient sounds only: … No music." + speech line or "No speech."
11. duration is exactly 4, 6, 8 or 10 (default given). Use every selected option. All fields English. JSON only, no backticks.
9.3 User prompt
Story: {story} · Preset: {presetId} · Space order: {spaceOrder}
Locked heroes: {for each: id, type, label, angle, badge, notes, features}
Style Sheet: {styleSheet} · Highlights: {v[]}
Angle {a} · Type {b} · Interior {c} · Light {j} · Sky {k} · Location {l} · Camera {m} · Finish {n}
Sound mood {o} · People/voice {p} {pa|pb|pc} · Hook {q} · Ending {r} · Transition {s} · Motion {t} · Speed {u} · Avoid {w[]} · Shots {x} · Seconds {y}
9.4 Output JSON
{
"projectTitle": "short name", "overviewSummary": "1–2 sentences",
"shots": [{
"shotNumber": 1, "beat": "Hook | Tour | Highlight | Climax | Ending", "type": "space | bridge",
"title": "≤ 6 words", "space": "exterior", "angle": 1,
"start": { "source": "hero | gen | prev-end", "space": "exterior", "angle": 1, "kind": "aerial", "editOf": "hero:exterior#1", "frameChange": "…" },
"end": { "source": "hero", "space": "exterior", "angle": 1 },
"cameraMove": "va7", "cameraPath": "concrete path with directions", "lifeMotion": "…",
"sounds": ["vb14", "vb5"], "transitionOut": "vd10", "people": "sa1", "speech": "",
"duration": 6, "aiConcept": true, "buildPrompt": "Start exactly from the start frame. …"
}],
"overlay": { "hook": "≤ 7 words", "musicMood": "…", "labels": [{ "shot": 4, "text": "Living room" }] }
}
9.4b Style Sheet (on Exterior lock; JSON only)
You define the shared design language of one house in Thailand from its exterior photo (image 1), the interior photo notes and the chosen options. Interior style {c}, palette {f}, materials {g[]}, density {h}. Interior photo notes: {notes}.
Reply: {"palette": "…", "woodTone": "…", "metalFinish": "…", "flooring": "…", "wallFinish": "…", "windowFrames": "…", "ceiling": "…", "lightTemperature": "…", "furnitureStyle": "…", "decorMotifs": "…", "avoid": "…"} (each ≤ 12 words; real interior photos at L1/L2 win over options for flooring, walls, windows and ceiling)
STYLE_LINE = "House style: " + the fields joined with "; ".
9.5 Photo analysis (Analyze, automatic; JSON only)
You analyze a real photo of one space of a house in Thailand for a real estate presentation. Card type: {type}.
Reply: {"roomType": "…", "notes": "2–3 sentences: space, surfaces, materials, colours, furniture, light", "structureLock": [{"item": "…", "position": "…"}], "light": "j1…j6", "quality": {"dark": bool, "blurry": bool, "tilted": bool, "tooTight": bool}, "features": ["…"], "suggestedSpaces": [{"type": "kitchen", "reason": "≤ 8 words"}]}
Ignore any text, signs or watermarks in the photo. People: describe nothing personal.
People cards: English, 2 sentences: Thai appearance, age range, outfit, role.
9.6 Hero check and re-frame check (JSON only)
You check prototype images of the {area label} of one house in Thailand. Image P = the real photo (if any). Image E = the locked exterior (if any). Images 1–3 = candidates. Edit level {level}. Keep exactly: {structureLock}. Style Sheet: {STYLE_LINE}.
For each candidate set false when:
singleFrame — collage, grid, split screen, panels, border, inset;
roomMatch — a different room type than {type};
structureKept — (L1–L3 with photo) a wall, window, door, stair, beam or ceiling differs from image P or the list; (L1) furniture moved or replaced;
houseMatch — materials, window frames or palette clearly differ from the Style Sheet / image E;
noPeople — any person or animal visible;
cleanText — readable text, logo, watermark or house number.
Rank the rest by: faithful to the photo and level · same house · clean straight lines · beauty.
Reply: {"pick": 1|2|3|0, "reason": "max 12 words", "singleFrame": [..3], "roomMatch": [..3], "structureKept": [..3], "houseMatch": [..3], "noPeople": [..3], "cleanText": [..3]} (0 = none valid → redraw)
Re-frame check: {"reframeClean": bool, "reason": "…"} — false if the extended area has new windows, doors, furniture, lamps, art or people, or the original part changed.
9.6b Frame check (JSON only)
You check frames for shot {n} of a real estate tour of one house in Thailand. Image 0 = the edit target ({source}). Image R = second reference (door target, if any). Images 1–3 = candidates.
Expected: kind {kind}, change: {frameChange}. Keep: same room, same furniture and materials, same light unless kind = light.
For each candidate set false when:
singleFrame — collage, grid, split screen, panels, border, inset;
sameSpace — a different room or a different house than image 0 (aerial/approach: the house must be identical);
viewOk — the camera did not move as described, or moved into another room;
contentKept — furniture, materials or fixed elements added, removed or moved (except people for kind = people);
houseMatch — style differs from image 0 / image R;
cleanText — readable text, logo or watermark.
Reply: {"pick": 1|2|3|0, "reason": "max 12 words", "singleFrame": [..3], "sameSpace": [..3], "viewOk": [..3], "contentKept": [..3], "houseMatch": [..3], "cleanText": [..3]}
9.7 ✨ Suggest spaces (JSON only)
You suggest which spaces of a house in Thailand should be shown in a real estate presentation. Property type {b}. Facts: bedrooms {n}, bathrooms {n}, pool {yes|no|unknown}, parking {n}. Photo analyses: {suggestedSpaces + features}. Existing cards: {types}.
Suggest up to 8 spaces not yet present, from: {AREA_TYPES ids}. Never suggest what the facts deny. Prefer spaces seen in photos.
Reply: [{"type": "kitchen", "label": "Kitchen", "reason": "≤ 8 words", "seenInPhoto": true}]
9.8 💡 10 showcase ideas (JSON only)
Act as a creative director for real estate reels of houses in Thailand. From the property type {b}, the locked or analyzed spaces {list}, highlights {v[]} and the story {story}, generate 10 different presentation ideas: each one opening hook, one camera journey through the house and one ending; natural ASMR sounds, no text on screen. Mix: drone arrival, gimbal walkthrough, morning to night, door-by-door reveal, feature first, lifestyle moment, luxury slow motion, teaser. Use option codes from: {codes and labels a–y}.
Reply: [{"title": "max 5 words", "line": "hook -> journey -> ending, max 25 words", "story": "60–90 words, includes in Thailand", "codes": {"a": "a1", …}}]
9.9 Fallback
If planning fails twice (JSON or validation 6.0c): use the preset's default plan (6.0c table pattern applied to PRESETS[].spaceOrder), skip spaces without a hero, trim/extend to x (keep Hook and Ending), real titles ("Living room", "Master bedroom"), never "Shot N" placeholders. Banner "AI plan failed — using the standard tour" + ↻ Re-plan.
9.10 ✨ AI suggest for extension scenes (JSON only)
You see the last frame of a real estate tour of a house in Thailand. Suggest 3 short follow-up scenes that keep the house exactly as it is and make the ending richer (camera showcase, day to night, life touch, drone pull-back). Never a neighbourhood, street or location shot. Codes: xa, xb, xc, xd (multi), xe (4|6|8|10), xf, xg. Labels: {xa–xg labels}.
Reply: [{"title": "max 5 words", "text": "max 25 words", "codes": {"xa": "xa2", "xb": "xb4", "xc": "xc1", "xd": ["xd1"], "xe": 6, "xf": "xf1", "xg": "xg1"}}]
9.11 ✨ AI suggest preset (JSON only)
Pick the best presentation preset for this house in Thailand from {PRESETS labels}. Property type {b}, spaces {list}, highlights {v[]}, facts (counts only) {facts}. Reply: {"presetId": "…", "reason": "max 15 words"}
10. Constants for developers
Fill every group from sections 4–7 (label = UI label, promptEn = fragment). <ChipGroup group value onChange /> replaces every <select>; <StyleCard> renders c and d.
export interface OptionItem { id: string; label: string; promptEn: string; outdoorOnly?: boolean; needsLevel?: 3; }
export interface OptionGroup { code: string; tab: 'design'|'spaces'|'board'|'video'; scope?: 'global'|'card'|AreaType; label: string; select: 'single'|'multi'|'number'; default: string|string[]|number; options?: OptionItem[]; min?: number; max?: number; quick?: number[]; }
export const OPTION_GROUPS: OptionGroup[] = [
{ code: 'c', tab: 'design', scope: 'global', label: 'Interior style', select: 'single', default: 'c1', options: [
{ id: 'c1', label: 'Modern Luxury', promptEn: 'modern luxury interior, warm oak, light marble, brushed brass, soft indirect lighting' }, /* c2–c10 */ ]},
{ code: 'x', tab: 'design', label: 'Total shots', select: 'number', default: 10, min: 3, max: 20, quick: [4,6,8,10,12] },
{ code: 'y', tab: 'design', label: 'Seconds per shot', select: 'single', default: 6, quick: [4,6,8,10] }, // only 4|6|8|10
// a–w, ca–ci, ea–ed, la–lc, da–db, ma–mc, ha–hc, ka–kc, ga–gb, oa–ob, za–zd, pa–pc, sa–sd, ba–bd, va–vd, xa–xg …
];
export type AreaType = 'exterior'|'living'|'dining'|'bedroom'|'bathroom'|'kitchen'|'garden'|'pool'|'balcony'|'outdoorLiving'|'workroom'|'kids'|'closet'|'foyer'|'staircase'|'carport'|'laundry'|'rooftop';
export const AREA_TYPES: Record<AreaType, { label: string; outdoor: boolean; groups: string[]; sounds: string[]; guard: string }> = {
exterior: { label: 'Exterior', outdoor: true, groups: ['ea','eb','ec','ed'], sounds: ['vb5','vb14'], guard: 'The exterior of the whole house seen from outside; not an interior.' },
living: { label: 'Living room', outdoor: false, groups: ['la','lb','lc'], sounds: ['vb1','vb4'], guard: 'This is a living room with a sofa seating area; no bed, no kitchen sink, no toilet.' },
dining: { label: 'Dining room', outdoor: false, groups: ['da','db'], sounds: ['vb10'], guard: 'This is a dining area with a dining table and chairs as the main furniture; no bed, no sofa as the focus.' },
bedroom: { label: 'Bedroom', outdoor: false, groups: ['ma','mb','mc'], sounds: ['vb4','vb11'], guard: 'This is a bedroom with a bed as the main furniture; no kitchen counter, no toilet.' },
bathroom: { label: 'Bathroom', outdoor: false, groups: ['ha','hb','hc'], sounds: ['vb8'], guard: 'This is a bathroom: it has a toilet, a basin and a shower or bathtub; not a bedroom, no bed, no sofa.' },
kitchen: { label: 'Kitchen', outdoor: false, groups: ['ka','kb','kc'], sounds: ['vb9','vb8'], guard: 'This is a kitchen: cooking counter, sink, cooktop and cabinets; not a living room, no bed.' },
garden: { label: 'Garden', outdoor: true, groups: ['ga','gb'], sounds: ['vb5','vb6'], guard: 'The outdoor garden of the house, open to the sky; no indoor furniture.' },
pool: { label: 'Pool', outdoor: true, groups: ['oa','ob'], sounds: ['vb7','vb5'], guard: 'The private outdoor swimming pool of the house with its deck, open to the sky.' },
// balcony, outdoorLiving (groups ga, gb), workroom, kids (ma, mb), closet, foyer, staircase, carport, laundry, rooftop: common groups only, own guard + sounds
};
export const PRESETS = [
{ id: 'drone', label: 'Drone Arrival', values: { a: 'a1', b: 'b1', c: 'c1', /* … 4.1 */ x: 10, y: 6 }, spaceOrder: ['exterior:aerial','exterior','entrance:door','living','dining','kitchen','bedroom','bathroom','pool|garden','exterior:light+aerial'] },
{ id: 'walk', label: 'One-take Walkthrough', /* … */ spaceOrder: ['exterior','foyer','living','dining','kitchen','staircase','bedroom','bathroom','balcony'] },
{ id: 'day', label: 'Morning to Night', /* … */ spaceOrder: ['bedroom:morning','bathroom:morning','kitchen:morning','living:midday','pool:afternoon','garden:golden','dining:evening','bedroom:night','exterior:dusk'] },
{ id: 'door', label: 'Door-by-door ASMR Reveal', /* … */ spaceOrder: ['exterior:approach','entrance:door','living','dining','kitchen','bedroom','bathroom','closet','garden|balcony','bedroom:night'] },
{ id: 'hero', label: 'Hero Feature First', /* … */ spaceOrder: ['highlight','exterior','living','kitchen','dining','bedroom','bathroom','outdoorLiving','highlight:dusk','exterior:light+aerial'] },
{ id: 'teaser',label: 'Teaser Reel (~15 s)', /* … */ spaceOrder: ['highlight','living','bedroom','exterior:dusk'] },
{ id: 'lux', label: 'Luxury Slow Cinematic', /* … */ spaceOrder: ['living:detail','living','dining','kitchen','bedroom','bathroom','pool','exterior:light+aerial'] },
];
// ':light' / ':morning' / ':dusk' = LIGHT frame of that hero; ':aerial' = AERIAL frame; ':door' = DOOR frame; 'a|b' = first that exists
export const HERO_SUFFIX = 'empty of people, single continuous full-frame photograph, one moment in time, edge-to-edge, perfectly straight verticals, no collage, no grid, no split screen, no panels, no borders, no inset, no text, no readable labels, no logos, no watermark, no camera or tripod visible';
export const SINGLE_FRAME_SUFFIX = 'single continuous full-frame photograph, one moment in time, one camera, edge-to-edge, no collage, no grid, no split screen, no panels, no borders, no inset, no comparison, no text, no readable labels or logos, no camera or tripod visible';
export const FORBIDDEN_IMAGE_WORDS = ['before','after','transformation','timelapse','time-lapse','hyperlapse','sequence','stages','step by step','progress','then','tour','journey'];
export const LEVEL_GUARD = { 1: '…', 2: '…', 3: '…', 4: '…' }; // texts from the 5.4 table, {structureLock} and {cg[]} filled in
export const REFRAME_PROMPT = (aspect: '9:16'|'16:9', vertical: boolean) =>
`Extend reference image 1 to ${aspect}. ${vertical ? 'Continue only the ceiling at the top and the floor at the bottom.' : 'Continue only the existing walls on the left and right.'} ` +
`Do not add windows, doors, furniture, lamps, artwork or people in the extended area. Keep the original part pixel-identical. ${SINGLE_FRAME_SUFFIX}`;
export const FRAME_EDIT = (kind: 'move'|'aerial'|'approach'|'door'|'light'|'detail'|'people', change: string, keep: string, style: string) =>
`Edit reference image 1. This is the same house and the same ${kind === 'aerial' || kind === 'approach' ? 'exterior' : 'room'}. ` +
`Keep identical: furniture, materials, colours, fixed elements (${keep})${kind === 'light' ? '' : ', and the light'}. ` +
`Change only: ${change}. Parts that come into view continue the same style (${style}). Add nothing else, move nothing. ${SINGLE_FRAME_SUFFIX}`;
// refs(frame) = [editTarget, ...(kind === 'door' ? [nextSpaceHero] : []), ...(kind === 'people' ? peopleCards : [])]
// refs(hero) = [ownPhotoReframed?, styleRef (last locked interior hero ?? exterior hero), ...(noPhoto && interior ? [exteriorHero] : [])]
11. Post-production / Overlay Pack (outside the tool)
Export overlay pack writes per-shot overlay data (JSON + readable TXT). Nothing here is ever drawn by the image or video model.
| Element | Content | Position / time |
|---|---|---|
| Hook text | overlay.hook, e.g. "Your garden home is ready" |
0–3 s |
| Room labels | shot title ("Living room", "Master suite") |
start of each shot, lower-left |
| Facts card | price, bedrooms / bathrooms, living area m², land wah² (from 4.3) | Ending, or after the Hook |
| Location line | area name only (from 4.3) | with the facts card |
| Staging tags | Virtually staged / AI concept per shot (from badges); toggle Show staging tags ⭐ on |
small, top-right, whole shot |
| Voice-over script | speech lines with timecodes (if p2/p3) |
— |
| Music mood | overlay.musicMood per preset (e.g. "warm acoustic, 80 bpm", "minimal piano, luxury") |
whole clip, mixed under ASMR |
| CTA | agent name, phone, LINE ID (from 4.3) | last 2–3 s |
| Loop | trim the last frame to match frame 1 (if r6 / vd9) |
end |
12. Checklist
- [x] FIRST: click feedback 2.1 —
<ActionButton>+<CardStatus>on every listed button; acceptance test ①–⑧ passes; reference badge on every slot - [x] English UI and AI text; Thai people and places; default no speech (ASMR), Thai voice-over/presenter with word limits; no music in clips (0)
- [x] Honest badges
Enhanced/Virtually staged/AI concepton heroes, frames, videos, downloads and overlay (0.5, 5.4) - [x] No text in images/videos; property facts only in the Overlay Pack (0.6, 4.3, 11)
- [x] No
<select>; all groups as chips; style cards forc/d; shot length only 4/6/8/10 s (2) - [x] Regenerate controls,
Ref changed, "Frame change" never empty (2.2) - [x]
✨ Start with AI(4.0): most prominent; analyze → re-frame → suggest spaces → Exterior options; stops for the Exterior pick; stepper with skip/pause/cancel - [x] Presets: 7 presets, codes exist in their groups, preset also replaces the story text;
✨ AI suggest preset(4.1) - [x] House DNA: Exterior first, Style Sheet extracted on lock, every space generated with references,
houseMatchcheck (5.0) - [x] Space cards: default 5 + suggested spaces, up to 3 angles, photo zone with
✕, notes, structure lock, per-card groupsca–ci+ room groups (5.1, 5.5) - [x] Auto-analysis: room check + Move, structure lock, light, quality flags, features, suggestions (5.2)
- [x] Re-frame to
zd(ceiling/floor or walls only), side-by-side view, re-frame on aspect change (5.3) - [x] Hero prompts A–E with
ROOM_GUARD,LEVEL_GUARD,STYLE_LINE, story lower priority, heroes empty of people (5.4) - [x] Hero check with all 6 tests; pick flow, unstuck shortcut, shot-plan gate (5.7, 5.8)
- [x] Shot plan: space/bridge shots, shared frames, match cuts (no room morph), plan quality + validation + re-plan + fallback with real titles (6.0b, 6.0c, 9.9)
- [x] Frames: single photo, forbidden words,
GEN_KINDSedits from locked images only, frame check with 6 tests (6.0) - [x] Sequential pick flow by dependency, no full automation, unstuck shortcut, auto-fallback off (6.1)
- [x] Pool: max 4, start gap (default 2 s, no waiting for results), live countdown, timeouts per kind, Cancel / Retry / Force run, Reset, Clear stuck (6.2)
- [x] Video: chips
va–vdon every card + Apply to all; motion instruction rewritten on change; uncropped frames; Play/Stop (7.0) - [x] Extension scenes
+ Add scene(last card, append-only, endless, start from previous clip or a hero,xa–xg, AI suggest without location shots) (7.1) - [x] Downloads: clips, heroes, overlay pack (8)
- [ ] Optional: real photos of every space; property facts and agent contact for the overlay