Adnan commited on
Commit
02744eb
ยท
verified ยท
1 Parent(s): 8afb680

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +108 -531
app.py CHANGED
@@ -7,10 +7,6 @@ from typing import List, Dict, Optional
7
  from dataclasses import dataclass, field
8
  import gradio as gr
9
 
10
- # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
11
- # DATA CLASSES & ENUMS
12
- # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
13
-
14
  class CameraProfile(Enum):
15
  DOCUMENTARY_WITNESS = "Documentary Witness (24mm, f/8, static)"
16
  ARCHITECTURAL_DIGEST = "Architectural Digest (24mm TS, f/11, editorial)"
@@ -45,27 +41,6 @@ class Landmark:
45
  position: str
46
  description: str
47
 
48
- @dataclass
49
- class ImagePrompt:
50
- stage: str
51
- stage_name: str
52
- scene_lock: str
53
- landmarks: str
54
- description: str
55
- lighting: str
56
- mood: str
57
- negative: str
58
-
59
- @dataclass
60
- class VideoPrompt:
61
- video_number: int
62
- transition_name: str
63
- camera: str
64
- action: str
65
- motion_details: str
66
- duration_feel: str
67
- forbidden: str
68
-
69
  @dataclass
70
  class TitleBlock:
71
  primary: str
@@ -80,84 +55,59 @@ class KeywordBlock:
80
  ai_platform_tags: List[str]
81
  metadata: List[str]
82
 
83
- # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
84
- # LIGHTING DATABASE
85
- # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
86
-
87
  LIGHTING_DATABASE = {
88
  "golden_hour": {
89
  "color_temp": "2500-3500K",
90
  "shadow_quality": "Long, warm, directional, soft edges",
91
- "window_behavior": "Strong warm light shafts with visible dust particles, deep amber patches on floors and walls",
92
  "prompt_tokens": "golden hour warm directional sunlight streaming through windows, long soft amber shadows, dust particles visible in light beams, color temperature 3000K, cinematic warm natural lighting"
93
  },
94
  "blue_hour": {
95
  "color_temp": "9000-15000K",
96
  "shadow_quality": "Very soft, almost shadowless, ethereal",
97
- "window_behavior": "Cool ambient glow from outside, interior artificial lights become primary warm sources",
98
- "prompt_tokens": "blue hour twilight lighting, deep blue sky visible through windows, warm interior lights contrasting with cool exterior, intimate atmospheric lighting"
99
  },
100
  "overcast_noon": {
101
  "color_temp": "6500-7500K",
102
- "shadow_quality": "Extremely soft, diffused, minimal shadow definition",
103
  "window_behavior": "Even flat light distribution throughout space",
104
- "prompt_tokens": "soft overcast natural daylight, even diffused illumination, no harsh shadows, neutral color temperature, flat even lighting from all windows"
105
  },
106
  "harsh_midday": {
107
  "color_temp": "5500-6000K",
108
- "shadow_quality": "Short, hard, high contrast, directly below objects",
109
  "window_behavior": "Sharp geometric light patterns on floors and walls",
110
- "prompt_tokens": "harsh direct midday sunlight, sharp geometric shadow patterns, high contrast between light and shadow, bright white highlights, deep dark shadows"
111
  },
112
  "night_interior": {
113
  "color_temp": "2700-3000K",
114
- "shadow_quality": "Multiple soft shadow directions from multiple artificial sources",
115
  "window_behavior": "Windows appear as black mirrors reflecting interior",
116
- "prompt_tokens": "nighttime interior with warm artificial lighting 2700K, multiple light sources creating layered illumination, windows reflecting interior like mirrors, warm inviting atmospheric residential lighting"
117
  },
118
  "construction_work_lights": {
119
  "color_temp": "5000-6500K",
120
- "shadow_quality": "Hard, multiple directions from temporary lights on tripods",
121
- "window_behavior": "If daytime combination of natural and artificial",
122
- "prompt_tokens": "temporary construction work lights on tripods, harsh directional LED work lighting, multiple shadow directions, industrial unfinished lighting environment, 5000K color temperature"
123
  }
124
  }
125
 
126
- # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
127
- # NEGATIVE PROMPT GENERATOR
128
- # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
129
-
130
  def generate_negative_prompt(stage, niche):
131
- base = [
132
- "blurry", "low quality", "oversaturated", "watermark", "text overlay",
133
- "logo", "distorted proportions", "extra limbs", "floating objects",
134
- "impossible shadows", "AI artifacts", "plastic texture", "uncanny valley",
135
- "teleporting objects", "objects appearing from nowhere", "snap installation"
136
- ]
137
  stage_neg = {
138
- "STAGE_0": ["clean surfaces", "new materials", "furniture", "fresh paint"],
139
- "STAGE_1": ["completed renovation", "furniture", "finished walls"],
140
- "STAGE_2": ["finished drywall", "paint", "flooring installed", "fixtures"],
141
- "STAGE_3": ["furniture", "decorative items", "staging elements"],
142
- "STAGE_4": ["furniture", "art on walls", "decorative items", "construction tools"],
143
- "STAGE_5": ["construction debris", "unfinished elements", "workers", "tools", "dust"]
144
  }
145
- extras = stage_neg.get(stage, [])
146
- return ", ".join(base + extras)
147
-
148
- # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
149
- # TITLE & KEYWORD ENGINE
150
- # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
151
 
152
  class TitleKeywordEngine:
153
- EMOTIONAL_TRIGGERS = [
154
- ("Abandoned", "Stunning"), ("Destroyed", "Dream"),
155
- ("Condemned", "Magazine-Ready"), ("Rusted", "Reborn"),
156
- ("Dead", "Paradise"), ("Forgotten", "Unforgettable"),
157
- ("Crumbling", "Cinematic"), ("Gutted", "Gorgeous"),
158
- ("Neglected", "Luxurious"), ("Wrecked", "Worth a Fortune"),
159
- ("Trashed", "Transformed"), ("Buried", "Breathtaking")
160
- ]
161
 
162
  def __init__(self):
163
  self.current_year = datetime.now().year
@@ -173,60 +123,19 @@ class TitleKeywordEngine:
173
  alternate = f"{space_type} Renovation Timelapse โ€” {style} Before and After {self.current_year}"
174
  if len(alternate) > 100:
175
  alternate = alternate[:97] + "..."
176
- short_options = [
177
- f"Same Space. UNRECOGNIZABLE.",
178
- f"{trigger[0]} โ†’ {trigger[1]}.",
179
- f"The Glow-Up is INSANE.",
180
- f"Nobody Believed This.",
181
- f"Wait for the REVEAL."
182
- ]
183
  short = random.choice(short_options)
184
  return TitleBlock(primary=primary, alternate=alternate, short=short)
185
 
186
  def generate_keywords(self, space_type, style, niche):
187
  sl = space_type.lower()
188
  stl = style.lower()
189
- primary_seo = [
190
- f"{sl} renovation", f"{sl} remodel before after",
191
- f"{sl} transformation", f"{stl} {sl}", f"{sl} makeover timelapse"
192
- ]
193
- long_tail = [
194
- f"{sl} renovation before and after {self.current_year}",
195
- f"{stl} {sl} remodel ideas",
196
- f"how to renovate a {sl} step by step",
197
- f"{sl} renovation cost breakdown realistic",
198
- f"best {sl} renovation timelapse"
199
- ]
200
- hashtags = [
201
- f"#{sl.replace(' ', '')}renovation", "#beforeandafter",
202
- f"#{sl.replace(' ', '')}makeover", f"#{sl.replace(' ', '')}design",
203
- "#renovationtimelapse", "#homerenovation", "#fixerupper",
204
- f"#{stl.replace(' ', '')}", f"#{stl.replace(' ', '')}design",
205
- "#warmminimalism", "#homedesign", "#interiordesign",
206
- "#homedecor", "#dreamhome", "#satisfying", "#transformation",
207
- "#renovationjourney", "#homeimprovement", "#remodel", "#makeover"
208
- ]
209
- ai_tags = [
210
- "architectural photography", "interior design photography",
211
- f"photorealistic {sl}", "8k resolution",
212
- "professional interior photography", "magazine quality",
213
- "warm natural lighting", f"{stl} design",
214
- "cinematic composition", "hyperrealistic render",
215
- "editorial interior", "renovation before after",
216
- "studio quality", "luxury residential", "construction documentation"
217
- ]
218
- metadata = [
219
- f"niche:{niche}", f"room:{sl.replace(' ', '-')}",
220
- f"style:{stl.replace(' ', '-')}", "stages:6",
221
- "type:transformation-sequence", "mood:aspirational",
222
- "lighting:golden-hour", "camera:cinematic",
223
- "audience:homeowners-designers", "season:evergreen"
224
- ]
225
- return KeywordBlock(
226
- primary_seo=primary_seo, long_tail=long_tail,
227
- hashtags=hashtags[:20], ai_platform_tags=ai_tags[:15],
228
- metadata=metadata[:10]
229
- )
230
 
231
  def format_output(self, titles, keywords):
232
  lines = []
@@ -247,108 +156,14 @@ class TitleKeywordEngine:
247
  lines.append("\n" + "=" * 60)
248
  return "\n".join(lines)
249
 
250
- # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
251
- # REALITY SHIFT ENGINE
252
- # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
253
-
254
  class RealityShiftEngine:
255
  STAGE_CONFIGS = {
256
- Stage.STAGE_0: {
257
- "name": "THE DEATH STATE",
258
- "emotional_target": "Hopelessness with a whisper of potential",
259
- "visual_elements": [
260
- "visible structural damage or significant decay",
261
- "nature reclaiming elements โ€” weeds through cracks, mold on surfaces, rust on fixtures, wood rot on frames",
262
- "debris and evidence of long abandonment scattered across floors",
263
- "harsh unflattering lighting โ€” overcast or direct unflattering midday",
264
- "desaturated color palette dominated by greens, browns, and grays",
265
- "storytelling detail โ€” old newspaper, faded sign, abandoned personal item",
266
- "dust particles visible in any light beams entering the space",
267
- "cracked or missing window glass with cobwebs",
268
- "water damage stains spreading across ceiling and walls",
269
- "peeling paint and wallpaper curling away from walls"
270
- ]
271
- },
272
- Stage.STAGE_1: {
273
- "name": "THE TEARDOWN",
274
- "emotional_target": "Exciting destruction โ€” satisfying teardown energy",
275
- "visual_elements": [
276
- "workers in correct PPE โ€” hard hats, safety glasses, N95 dust masks, leather gloves, steel-toe boots",
277
- "dumpster or debris pile visible near exit",
278
- "partially demolished elements โ€” half-removed drywall exposing framing, torn flooring",
279
- "dust clouds in air catching beams of light",
280
- "correct tools visible โ€” sledgehammer, reciprocating saw, pry bars, utility knives",
281
- "plastic sheeting protecting areas not being demolished",
282
- "extension cords running to portable work lights on tripods",
283
- "debris bags accumulating on floor near work zone",
284
- "at least one worker actively swinging, pulling, or carrying demolition material",
285
- "exposed original layers โ€” old wallpaper, previous paint colors, original subfloor"
286
- ]
287
- },
288
- Stage.STAGE_2: {
289
- "name": "THE SKELETON",
290
- "emotional_target": "Respect for the craft โ€” hidden complexity revealed",
291
- "visual_elements": [
292
- "exposed wall framing โ€” 2x4 or 2x6 studs at 16 inch on-center spacing clearly visible",
293
- "electrical boxes mounted on studs with Romex wire pulled but not yet terminated",
294
- "PEX or copper plumbing lines stubbed out at future fixture locations",
295
- "HVAC ductwork partially installed in ceiling or floor cavities",
296
- "subfloor visible โ€” plywood sheets or concrete slab with markings",
297
- "inspector spray paint markings on framing members for authenticity",
298
- "blue painters tape marking layout reference lines on floor and walls",
299
- "stacks of drywall sheets leaning against far wall ready for next phase",
300
- "work lights on tripods providing harsh temporary lighting",
301
- "specific tradesperson visible โ€” electrician with wire strippers or plumber with torch"
302
- ]
303
- },
304
- Stage.STAGE_3: {
305
- "name": "THE SKIN",
306
- "emotional_target": "Anticipation โ€” you can see where this is going",
307
- "visual_elements": [
308
- "fresh drywall with visible mud and tape lines at seams being sanded smooth",
309
- "freshly painted walls with crisp clean edges where tape was removed",
310
- "flooring partially installed showing clear progression โ€” bare subfloor on one side transitioning to installed material",
311
- "blue painters tape still protecting trim pieces and window frames",
312
- "paint cans with drip marks, roller trays, and canvas drop cloths on floor",
313
- "trim pieces and baseboards leaning against walls sorted and ready for installation",
314
- "clean but clearly active work zone with organized material stacks",
315
- "bright work lighting creating slightly harsh even shadows across space",
316
- "absolutely no furniture, no decorations, no staging elements visible",
317
- "visible transformation creating strong anticipation for the final result"
318
- ]
319
- },
320
- Stage.STAGE_4: {
321
- "name": "THE CLEAN SHELL",
322
- "emotional_target": "Clean satisfaction โ€” calm before the beautiful storm",
323
- "visual_elements": [
324
- "every surface 100 percent complete and construction-clean",
325
- "light fixtures installed and turned ON emitting warm 2700-3000K glow",
326
- "all hardware installed โ€” door handles, cabinet pulls, faucets, towel bars gleaming",
327
- "windows cleaned spotless with zero tape residue visible anywhere",
328
- "floors spotless with fresh vacuum lines on carpet or clean mop sheen on hard floors",
329
- "countertops completely bare and gleaming under warm light",
330
- "ZERO furniture ZERO art ZERO plants ZERO towels ZERO accessories",
331
- "natural light streaming through clean windows โ€” golden hour light preferred",
332
- "the visual smell of new โ€” pristine untouched surfaces everywhere",
333
- "empty space highlighting quality of craftsmanship and material finish choices"
334
- ]
335
- },
336
- Stage.STAGE_5: {
337
- "name": "THE PARADISE",
338
- "emotional_target": "DESIRE โ€” viewer thinks I WANT to live there",
339
- "visual_elements": [
340
- "professional interior staging โ€” curated furniture, framed art, healthy plants, textured textiles, stacked books, lit candles",
341
- "golden hour or blue hour lighting creating warm directional atmosphere throughout",
342
- "depth layering โ€” foreground interest element, midground hero zone, background context depth",
343
- "strict color story โ€” maximum 3-color palette carried consistently through entire space",
344
- "texture variety โ€” minimum 4 different textures visible โ€” wood, stone, fabric, metal, glass, plant",
345
- "life indicators โ€” steam rising from coffee cup, book open face-down, fresh flowers in vase, candle flame flickering, cashmere throw casually draped",
346
- "intentional composition โ€” perfect symmetry OR deliberate asymmetrical golden-ratio balance",
347
- "reflective surfaces catching and multiplying light โ€” mirrors, glass, polished stone counters, brass fixtures",
348
- "one dominant scroll-stopping hero element โ€” statement pendant light, dramatic window view, showpiece material",
349
- "atmospheric depth โ€” subtle warm light rays or natural golden haze adding cinematic dimension"
350
- ]
351
- }
352
  }
353
 
354
  def __init__(self):
@@ -358,289 +173,116 @@ class RealityShiftEngine:
358
 
359
  def create_scene_lock(self, camera, space_desc):
360
  configs = {
361
- CameraProfile.DOCUMENTARY_WITNESS: ("24mm wide-angle", "5 feet chest level", "f/8 deep focus", "static documentary tripod centered composition"),
362
- CameraProfile.ARCHITECTURAL_DIGEST: ("24mm tilt-shift corrected", "4 feet low for dramatic ceiling", "f/11 razor-sharp", "editorial one-point perspective perfect verticals"),
363
- CameraProfile.CINEMATIC_STORYTELLER: ("35mm natural perspective", "4.5 feet slightly below eye level", "f/4 selective focus", "emotional framing emphasizing atmosphere"),
364
- CameraProfile.DRONE_GOD: ("24mm equivalent drone", "100-200 feet aerial", "f/4-f/5.6", "45-degree overview full property context"),
365
- CameraProfile.DETAIL_HUNTER: ("85mm portrait detail", "30-42 inches waist to table", "f/2.8 creamy bokeh", "tight composition emphasizing texture")
366
  }
367
  c = configs.get(camera, configs[CameraProfile.CINEMATIC_STORYTELLER])
368
- self.scene_lock = (
369
- f"SCENE LOCK: Static tripod-mounted camera. {c[0]} lens at {c[1]} height. "
370
- f"{c[2]}. {c[3]}. Camera position IDENTICAL across all 6 stages โ€” "
371
- f"same height, same angle, same lens, same framing. Shooting {space_desc}. "
372
- f"No camera movement, no angle drift, no focal length change."
373
- )
374
  return self.scene_lock
375
 
376
  def create_landmarks(self, space_type, niche):
377
  lib = {
378
- "kitchen": [
379
- Landmark("Window above sink", "center-left wall", "Window opening centered above sink location โ€” consistent in every stage"),
380
- Landmark("Ceiling beam or soffit", "running left to right", "Structural element that never moves โ€” horizontal reference"),
381
- Landmark("Floor transition point", "center floor", "Fixed floor point visible from subfloor through final flooring"),
382
- Landmark("Exterior view through window", "through primary window", "Same tree, fence, sky visible in every stage"),
383
- Landmark("Entry doorway", "right side of frame", "Door opening position and size constant throughout")
384
- ],
385
- "bathroom": [
386
- Landmark("Window position", "exterior wall", "Window opening identical โ€” only glass and frame change"),
387
- Landmark("Plumbing wall", "back wall", "The wall where plumbing concentrates โ€” marked by fixtures in later stages"),
388
- Landmark("Floor drain position", "center or offset", "Drain location visible from bare subfloor through finished tile"),
389
- Landmark("Ceiling junction box", "center ceiling", "Electrical box position visible through all phases"),
390
- Landmark("Door opening", "entry point", "Door frame position and size constant every stage")
391
- ],
392
- "exterior": [
393
- Landmark("Roofline silhouette", "top of frame", "Roof angle and ridgeline constant throughout"),
394
- Landmark("Front door position", "center or offset", "Door opening anchors composition every stage"),
395
- Landmark("Window pattern", "facade", "Window positions and sizes constant โ€” only glass and frames change"),
396
- Landmark("Foundation line", "base of structure", "Ground-to-structure transition constant"),
397
- Landmark("Mature tree", "foreground or side", "Existing tree persists through all stages")
398
- ],
399
- "vehicle": [
400
- Landmark("Wheel arch proportions", "all four corners", "Wheel well shapes define identity every stage"),
401
- Landmark("Windshield rake", "front upper", "Windshield angle constant throughout"),
402
- Landmark("Hood line profile", "front top", "Hood height and profile constant"),
403
- Landmark("Tail light openings", "rear", "Rear identity markers constant"),
404
- Landmark("Belt line", "side profile", "Character line running length of body")
405
- ]
406
  }
407
  nl = niche.lower()
408
  for key in lib:
409
  if key in nl or key in space_type.lower():
410
  self.landmarks = lib[key]
411
  return self.landmarks
412
- self.landmarks = lib.get("kitchen", [])
413
  return self.landmarks
414
 
415
  def generate_full_sequence(self, space_type, style, niche, camera, lighting, cost_estimate=""):
416
  parts = []
417
-
418
- # TITLES & KEYWORDS
419
  titles = self.tk_engine.generate_titles(space_type, style, niche, cost_estimate)
420
  keywords = self.tk_engine.generate_keywords(space_type, style, niche)
421
  parts.append(self.tk_engine.format_output(titles, keywords))
422
-
423
- # SCENE LOCK
424
  self.create_scene_lock(camera, space_type)
425
  parts.append(f"\n๐Ÿ”’ {self.scene_lock}\n")
426
-
427
- # LANDMARKS
428
  self.create_landmarks(space_type, niche)
429
  parts.append("๐Ÿ“ PERMANENT LANDMARKS:")
430
  for i, lm in enumerate(self.landmarks, 1):
431
  parts.append(f" {i}. {lm.name} โ€” {lm.position}: {lm.description}")
432
  parts.append("")
433
-
434
- # 6 IMAGE PROMPTS
435
  parts.append("=" * 60)
436
  parts.append("๐Ÿ“ธ IMAGE PROMPTS (6 STAGES)")
437
  parts.append("=" * 60)
438
-
439
- stages = [Stage.STAGE_0, Stage.STAGE_1, Stage.STAGE_2, Stage.STAGE_3, Stage.STAGE_4, Stage.STAGE_5]
440
- lighting_map = {
441
- Stage.STAGE_0: "overcast_noon", Stage.STAGE_1: "construction_work_lights",
442
- Stage.STAGE_2: "construction_work_lights", Stage.STAGE_3: "harsh_midday",
443
- Stage.STAGE_4: lighting, Stage.STAGE_5: lighting
444
- }
445
-
446
  for stage in stages:
447
- sl = lighting_map.get(stage, lighting)
448
  lc = LIGHTING_DATABASE.get(sl, LIGHTING_DATABASE["golden_hour"])
449
  sc = self.STAGE_CONFIGS[stage]
450
-
451
- desc_parts = [f"A photorealistic {sc['name'].lower()} view of a {space_type}."]
452
  for elem in sc["visual_elements"]:
453
- desc_parts.append(elem.capitalize() + ".")
454
  if stage in [Stage.STAGE_4, Stage.STAGE_5]:
455
- desc_parts.append(f"Design style: {style}. Every material and finish reflects this aesthetic.")
456
- description = " ".join(desc_parts)
457
-
458
- landmarks_str = " | ".join([f"{lm.name} ({lm.position})" for lm in self.landmarks[:5]])
459
  negative = generate_negative_prompt(stage.name, niche)
460
-
461
  parts.append(f"\n{'โ”€' * 60}")
462
  parts.append(f"๐Ÿ“ธ IMAGE โ€” {stage.name} | {sc['name']}")
463
  parts.append(f"{'โ”€' * 60}")
464
  parts.append(f"\n๐Ÿ”’ {self.scene_lock}")
465
- parts.append(f"\n๐Ÿ“ LANDMARKS: {landmarks_str}")
466
- parts.append(f"\n๐ŸŽฌ STAGE DESCRIPTION:\n{textwrap.fill(description, width=95)}")
467
- parts.append(f"\n๐Ÿ’ก LIGHTING: {lc['prompt_tokens']}. Color temp: {lc['color_temp']}. Shadows: {lc['shadow_quality']}.")
468
  parts.append(f"\n๐ŸŽจ MOOD: {sc['emotional_target']}")
469
  parts.append(f"\nโ›” NEGATIVE: {negative}\n")
470
-
471
- # 5 VIDEO PROMPTS
472
  parts.append("=" * 60)
473
  parts.append("๐ŸŽฅ VIDEO PROMPTS (5 TRANSITIONS)")
474
  parts.append("=" * 60)
475
-
476
- video_configs = [
477
- (1, "DEMOLITION BEGINS", Stage.STAGE_0, Stage.STAGE_1,
478
- f"Timelapse of initial demolition in the {space_type}. Workers in full PPE enter carrying tools. Sledgehammers swing into walls creating dust clouds. Debris carried out in bags and buckets. Old fixtures disconnected and removed. Space gradually opens as old materials stripped away layer by layer. Dust settles between activity bursts. Work lights set up as original lighting removed.",
479
- "Workers enter and exit frame naturally. Dust clouds billow and settle. Debris piles grow near exits. Sunlight shifts as hours pass. Shadow angles rotate indicating time passage.",
480
- "Represents 2-5 days of real work compressed"),
481
- (2, "ROUGH-IN WORK", Stage.STAGE_1, Stage.STAGE_2,
482
- f"Timelapse of mechanical electrical and plumbing rough-in in the {space_type}. Electricians pull Romex wire through framing and mount boxes. Plumbers run PEX supply lines and ABS drain lines. HVAC technicians install ductwork in ceiling cavities. Each trade works methodically with trade-specific tools. Wires appear along studs. Pipes emerge through floor plates. Ducts snake through joist spaces.",
483
- "Trade workers rotate through space. Wire coils unroll along framing. Pipe sections connect one by one. Duct sections lift into ceiling. Tools flash with purposeful movement. Inspector arrives with clipboard.",
484
- "Represents 1-3 weeks of trade work compressed"),
485
- (3, "SURFACES EMERGE", Stage.STAGE_2, Stage.STAGE_3,
486
- f"Timelapse of drywall hanging, mudding, sanding, painting, and finish work in the {space_type}. Drywall sheets lift up and screw into framing. Mud applied in passes โ€” tape then first coat then second then third. Sanding creates fine white dust. Primer rolls onto walls in even white strokes. Paint color appears in smooth roller passes. Flooring begins installation progressing from one side to the other.",
487
- "Drywall sheets rise to walls. Mud knives sweep in long passes. Sanding dust drifts gently. Paint rollers move in W-patterns. Floor planks click into place one by one progressing across room.",
488
- "Represents 2-4 weeks compressed"),
489
- (4, "FINAL INSTALL", Stage.STAGE_3, Stage.STAGE_4,
490
- f"Timelapse of final fixture installation and cleanup in the {space_type}. Light fixtures lifted to ceiling and wired. Cabinet hardware drilled and mounted piece by piece. Faucets installed with careful alignment. Switch plates and outlet covers snap into place. Touch-up paint with small brushes. Cleaning crew enters with vacuums mops and detail rags. Space transforms from work zone to pristine shell.",
491
- "Fixtures rise to final positions. Hardware appears along cabinets in sequence. Cleaning crew moves systematically. Windows polished to clarity. Floors get final clean. Last construction tool exits frame.",
492
- "Represents 3-7 days compressed"),
493
- (5, "STAGING TRANSFORMATION", Stage.STAGE_4, Stage.STAGE_5,
494
- f"Timelapse of professional staging in the {space_type}. Delivery workers carry wrapped furniture and carefully position each piece. Art hung on walls with precise leveling. Pillows and throws placed and fluffed. Plants positioned for visual impact. Books stacked on shelves. Candles placed. Final styling details adjusted by hand. Natural light shifts to golden hour as staging completes.",
495
- "Furniture slides into position on felt pads. Art lifts to walls. Textiles unfold and drape. Plants positioned and adjusted. Small accessories placed with precision. Staging team steps back reviews makes micro-adjustments then exits to reveal final result.",
496
- "Represents 4-8 hours of staging compressed")
497
  ]
498
-
499
- for num, name, fs, ts, action, motion, duration in video_configs:
500
- cam_note = "ABSOLUTELY no movement." if num < 5 else "Subtle 3-5 percent digital push-in allowed for final reveal."
501
  parts.append(f"\n{'โ”€' * 60}")
502
  parts.append(f"๐ŸŽฅ VIDEO {num} โ€” {name}")
503
  parts.append(f"{'โ”€' * 60}")
504
- parts.append(f"\nCAMERA: Static tripod. Same position as all image prompts. {cam_note}")
505
- parts.append(f"\nACTION:\n{textwrap.fill(action, width=95)}")
506
- parts.append(f"\nMOTION:\n{textwrap.fill(motion, width=95)}")
507
- parts.append(f"\nDURATION: {duration}")
508
- parts.append(f"\nโ›” FORBIDDEN: No cuts. No teleporting objects. No objects appearing from nowhere. No camera movement. No morphing. No flickering. Everything carried installed or placed by human hands.\n")
509
-
510
- # CTA
511
  parts.append("=" * 60)
512
- parts.append("โœ… GENERATE YOUR REALITY SHIFT SEQUENCE")
513
  parts.append("=" * 60)
514
  parts.append("\nโœ… Create IMAGE 1-6 on OpenArt โ†’ https://openart.ai/home")
515
  parts.append(" Then animate VIDEO 1-5 with frame-to-video!")
516
- parts.append("๐ŸŽฌ Want a different style? Change inputs and regenerate!")
517
-
518
  return "\n".join(parts)
519
 
520
- # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
521
- # MIND BREACH ENGINE
522
- # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
523
-
524
  class MindBreachEngine:
525
  def __init__(self):
526
  self.idea_counter = 0
527
  self.IDEA_LIBRARY = [
528
- {"dim": "Cross-Niche Fusion", "title": "POV: You're a Subway Tile Being Installed in a $60K Kitchen", "score": 9.2,
529
- "hook": "Camera IS the tile. Viewer sees hands picking them up and pressing into wall.",
530
- "concept": "Film entire kitchen backsplash installation from the PERSPECTIVE of the tile. Viewer experiences being picked from box, thinset spread, pressed into place, grouted, cleaned.",
531
- "why": "Perspective shift nobody has done + ASMR + satisfying completion + humor",
532
- "mode": "RESURRECT Detail Hunter", "platform": "TikTok primary, YouTube Shorts secondary", "timing": "Evergreen",
533
- "steps": ["Mount micro camera at tile perspective", "Generate close-up sequence from tile-level", "Record real ASMR audio", "Edit with POV text overlays", "Post with sound ON priority"],
534
- "keywords": ["kitchen backsplash installation", "POV renovation", "satisfying tiling", "subway tile timelapse", "kitchen ASMR"],
535
- "hashtags": ["#POVrenovation", "#subwaytile", "#satisfying", "#tileinstallation", "#kitchenrenovation", "#renovationASMR", "#oddlysatisfying", "#homeimprovement", "#DIYkitchen", "#beforeandafter"],
536
- "series": "POV You're the [Material] series โ€” hardwood, paint, countertop, light fixture",
537
- "engage": "What material should I be NEXT?", "unique": "Material-perspective POV is completely untouched in renovation."},
538
- {"dim": "Impossible Contrast", "title": "The WORST Room on the Internet โ†’ $100K Dream Space", "score": 9.4,
539
- "hook": "I found the most disgusting room online. Then I rebuilt it.",
540
- "concept": "Source extreme before-state and generate the most aspirational after. Maximum contrast delta.",
541
- "why": "Extreme contrast is THE most reliable viral mechanic",
542
- "mode": "PHANTOM Documentary Witness", "platform": "TikTok primary, YouTube Shorts secondary", "timing": "Evergreen",
543
- "steps": ["Design STAGE 0 at absolute worst", "Generate all 6 stages maximum contrast", "STAGE 5 magazine-cover aspirational", "Split-frame thumbnail", "Dramatic reveal pacing"],
544
- "keywords": ["worst room transformation", "extreme renovation", "before after renovation", "room makeover extreme", "unbelievable renovation"],
545
- "hashtags": ["#worstroom", "#extrememakeover", "#beforeandafter", "#renovation", "#transformation", "#unbelievable", "#satisfying", "#roomreveal", "#homerescue", "#dreamhome"],
546
- "series": "Worst to First weekly series", "engage": "Rate the BEFORE 1-10 and the AFTER 1-10",
547
- "unique": "Systematically finding worst spaces creates reliable content machine."},
548
- {"dim": "Format Innovation", "title": "I Renovated This Room in REVERSE โ€” Starting from Reveal", "score": 8.9,
549
- "hook": "You see the FINISHED room first. Now watch it get DESTROYED.",
550
- "concept": "Show stunning result FIRST then demolish backward through stages until original ruin revealed at END.",
551
- "why": "Subverts expected pattern. Enhanced contrast. High replay value.",
552
- "mode": "PHANTOM generate STAGE 5 first", "platform": "TikTok primary, Reels secondary", "timing": "Evergreen",
553
- "steps": ["Generate full 6-stage sequence", "Reverse the order in edit", "Add text This is AFTER Now watch", "Show destruction progression", "End with This was BEFORE on worst state"],
554
- "keywords": ["reverse renovation", "renovation backwards", "room transformation reverse", "unique renovation format", "creative renovation"],
555
- "hashtags": ["#reversereveal", "#renovation", "#transformation", "#backwards", "#beforeandafter", "#uniqueformat", "#mindblown", "#roomreveal", "#satisfying", "#creative"],
556
- "series": "REVERSE series for different room types", "engage": "Did reverse format hit different? Want more?",
557
- "unique": "Reverse reveal is virtually untouched in renovation content."},
558
- {"dim": "Trend Prediction", "title": "5 Renovation Trends Dominating 2026 โ€” You Heard It Here First", "score": 8.5,
559
- "hook": "In 6 months EVERYONE will do these. Right now almost nobody is.",
560
- "concept": "Visualize 5 emerging trends: textured walls, collected minimalism, revenue rooms, bold wallpaper revival, outdoor rooms.",
561
- "why": "Prediction content gets SAVED. Makes viewer feel AHEAD.",
562
- "mode": "PHANTOM + ARCHITECT one per trend", "platform": "YouTube primary, Instagram Carousel secondary", "timing": "TIME SENSITIVE post ASAP",
563
- "steps": ["Generate before/after for each trend", "Research WHY behind each", "Film prediction authority content", "Post YouTube + Instagram", "Reshare at 3 and 6 months"],
564
- "keywords": ["renovation trends 2026", "interior design trends", "home renovation predictions", "upcoming design trends", "trending home design"],
565
- "hashtags": ["#2026trends", "#renovationtrends", "#designtrends", "#limewash", "#texturedwalls", "#warmminimalism", "#outdoorroom", "#wallpaper", "#trendprediction", "#interiortrends"],
566
- "series": "Quarterly Trend Prediction + 6-Month Check Which Came True", "engage": "Which trend BIGGEST and which do you HATE?",
567
- "unique": "Most creators FOLLOW trends. You PREDICT them โ€” thought leader position."},
568
- {"dim": "Competition Gap", "title": "The Room NOBODY Renovates โ€” Your Home's Biggest Missed Opportunity", "score": 9.0,
569
- "hook": "One room you walk through EVERY DAY but never thought to renovate.",
570
- "concept": "The ENTRYWAY. First thing anyone sees. Most neglected in content. Full 6-stage transformation.",
571
- "why": "Competition gap โ€” almost NO good entryway content. Universal relatability.",
572
- "mode": "PHANTOM Documentary Witness INTERIOR macro", "platform": "Instagram Reels primary, Pinterest secondary", "timing": "Evergreen peaks spring and fall",
573
- "steps": ["Generate 6-stage entryway transformation", "Include storage solutions in STAGE 5", "Calculate 2-5K budget", "Split-frame thumbnail", "Your entryway is your homes handshake caption"],
574
- "keywords": ["entryway renovation", "mudroom makeover", "foyer transformation", "small entryway ideas", "entryway organization"],
575
- "hashtags": ["#entrywaymakeover", "#mudroom", "#foyer", "#firstimpression", "#smallspace", "#homeorganization", "#entrywaydesign", "#renovationtip", "#homeimprovement", "#beforeandafter"],
576
- "series": "Rooms Nobody Renovates โ€” hallway, garage entry, utility room, under stairs", "engage": "Show me your entryway RIGHT NOW no cleaning first",
577
- "unique": "Massive Pinterest search volume but ZERO quality timelapse content."},
578
- {"dim": "Psychological Trigger", "title": "I Designed 4 Rooms to Trigger 4 Different Emotions", "score": 8.8,
579
- "hook": "Science says your room makes you feel THIS way. I built 4 rooms to prove it.",
580
- "concept": "Using color psychology design 4 identical rooms differently โ€” anxiety relief, creativity boost, focus, romance.",
581
- "why": "Educational + visual + self-improvement angle + comparison format",
582
- "mode": "ARCHITECT Cinematic Storyteller", "platform": "YouTube primary, Instagram Carousel secondary", "timing": "Evergreen",
583
- "steps": ["Research color psychology studies", "Generate 1 empty room", "Generate 4 STAGE 5 versions", "Comparison with science annotations", "Which room do YOU need most poll"],
584
- "keywords": ["color psychology room", "room affects mood", "interior design psychology", "calm room design", "productivity room"],
585
- "hashtags": ["#colorpsychology", "#roomdesign", "#interiorpsychology", "#moodroom", "#calmspace", "#productivity", "#homedesignscience", "#emotionaldesign", "#transformation", "#designtips"],
586
- "series": "Science of Rooms โ€” ceiling height, restaurant psychology, hotel secrets", "engage": "Which emotion room do you need? Calm Creative Focus Romance?",
587
- "unique": "Nobody combines behavioral psychology with design visualization."},
588
- {"dim": "Nostalgia Mining", "title": "I Recreated My EXACT Childhood Kitchen โ€” With Adult Money", "score": 9.3,
589
- "hook": "The kitchen where I ate cereal for 15 years. Rebuilt from memory.",
590
- "concept": "Recreate childhood kitchen from memory then show modern renovation of same space. Double emotional impact.",
591
- "why": "Nostalgia is strongest sharing trigger. Everyone has kitchen memories.",
592
- "mode": "PHANTOM Cinematic Storyteller", "platform": "TikTok primary, Instagram secondary", "timing": "Evergreen bonus on holidays",
593
- "steps": ["Describe childhood kitchen from memory", "Generate recreation", "Generate modern renovation same layout", "Film emotional narration", "Post with nostalgic audio"],
594
- "keywords": ["childhood kitchen", "nostalgic renovation", "recreating childhood home", "kitchen decades", "memory renovation"],
595
- "hashtags": ["#childhoodmemories", "#nostalgia", "#kitchenmemories", "#thenandnow", "#childhood", "#renovation", "#kitchendesign", "#memoryLane", "#emotional", "#growinup"],
596
- "series": "Memory Lane Renovations every room in childhood home", "engage": "Describe YOUR childhood kitchen in one sentence",
597
- "unique": "Memory-based recreation barely exists in renovation space."},
598
- {"dim": "Controversy Debate", "title": "Open Concept is OVERRATED โ€” Here's the Proof", "score": 9.1,
599
- "hook": "Everyone rips out walls. What if that makes your house WORSE?",
600
- "concept": "Case AGAINST open concept with evidence: acoustics, smells, privacy, heating, storage. Show defined-room alternative.",
601
- "why": "Challenges dominant narrative. Everyone has opinion. Comments EXPLODE.",
602
- "mode": "ARCHITECT side-by-side comparison", "platform": "YouTube primary, TikTok clip secondary", "timing": "Evergreen",
603
- "steps": ["Generate open concept STAGE 5", "Generate defined-room STAGE 5 same footage", "Present evidence against open concept", "Show defined-room solution", "Poll to drive comments"],
604
- "keywords": ["open concept overrated", "rooms vs open concept", "closed floor plan", "renovation mistakes", "design debate"],
605
- "hashtags": ["#openconcept", "#unpopularopinion", "#renovationdebate", "#interiordesign", "#homedesign", "#floorplan", "#designmistakes", "#hottake", "#homerenovation", "#controversial"],
606
- "series": "Unpopular Renovation Opinions weekly", "engage": "Open concept or DEFINED ROOMS? War in comments",
607
- "unique": "Open concept backlash growing but nobody made definitive content."},
608
- {"dim": "Series Architecture", "title": "Same Room โ€” $500 vs $5K vs $50K vs $500K โ€” Which Worth It?", "score": 9.6,
609
- "hook": "4 budgets. Same room. Only ONE actually worth the money.",
610
- "concept": "Transform one room at 4 budget levels. Show what each gets you. Reveal best value per dollar.",
611
- "why": "Budget comparison is MOST engaging format. Creates massive debate. High save rate.",
612
- "mode": "PHANTOM 4 versions of STAGE 5", "platform": "YouTube primary, TikTok series secondary", "timing": "Evergreen",
613
- "steps": ["Generate one STAGE 0", "Generate 4 STAGE 5 at each budget", "List actual costs per element", "Reveal best value winner", "Multi-part series across platforms"],
614
- "keywords": ["renovation budget comparison", "kitchen cost breakdown", "renovation cost tiers", "how much renovation costs", "budget vs luxury"],
615
- "hashtags": ["#budgetcomparison", "#renovationcost", "#worthit", "#luxuryvsbudget", "#homevalue", "#renovation", "#costbreakdown", "#realtalk", "#homeimprovement", "#smartspending"],
616
- "series": "THE DOLLAR SERIES every room type โ€” 4-episode arcs", "engage": "Which budget would YOU choose? Which shocked you?",
617
- "unique": "True 4-tier budget comparison with real cost breakdowns never done properly."},
618
- {"dim": "Collaboration Catalyst", "title": "A Chef Designed This Kitchen. A Contractor Built It. You JUDGE.", "score": 9.0,
619
- "hook": "What happens when someone who USES a kitchen designs one vs someone who BUILDS them?",
620
- "concept": "Chef prioritizes function. Contractor prioritizes buildability. Show both. Audience decides.",
621
- "why": "Collaboration crosses audiences. Expert debate drives comments.",
622
- "mode": "ARCHITECT 2 competing STAGE 5 versions", "platform": "YouTube primary, TikTok clip secondary", "timing": "Evergreen",
623
- "steps": ["Define chef priorities vs contractor priorities", "Generate both kitchen designs", "Present expert reasoning", "Side-by-side comparison", "CHEF or CONTRACTOR who wins poll"],
624
- "keywords": ["chef designed kitchen", "professional kitchen", "kitchen design battle", "function vs form", "expert kitchen"],
625
- "hashtags": ["#chefskitchen", "#kitchendesign", "#designbattle", "#functionvsform", "#renovation", "#kitchengoals", "#expertopinion", "#whowins", "#foodie", "#homedesign"],
626
- "series": "Expert vs Expert โ€” artist bathroom, athlete gym, musician studio", "engage": "CHEF kitchen or CONTRACTOR kitchen? Pick side",
627
- "unique": "Cross-professional design battles untapped format."}
628
- ]
629
-
630
- self.OVERSATURATED = [
631
- "Basic before/after with no story", "Generic renovation with stock music",
632
- "Simple room tour no transformation", "All-white everything reveals",
633
- "Generic satisfying compilations", "Unedited raw footage", "All-gray everything"
634
  ]
 
635
 
636
  def generate_ideas(self, count=5):
637
  random.shuffle(self.IDEA_LIBRARY)
638
- ideas = []
639
- for i in range(min(count, len(self.IDEA_LIBRARY))):
640
- self.idea_counter += 1
641
- d = self.IDEA_LIBRARY[i]
642
- ideas.append(d)
643
- return ideas
644
 
645
  def format_ideas(self, ideas):
646
  parts = []
@@ -652,7 +294,6 @@ class MindBreachEngine:
652
  parts.append(f"\nโš ๏ธ AVOID THESE (Oversaturated):")
653
  for item in random.sample(self.OVERSATURATED, min(5, len(self.OVERSATURATED))):
654
  parts.append(f" โ€ข {item}")
655
-
656
  for i, d in enumerate(ideas, 1):
657
  parts.append(f"\n{'โ•' * 60}")
658
  parts.append(f"๐Ÿ’ก IDEA #{i} โ€” {d['dim']}")
@@ -661,91 +302,58 @@ class MindBreachEngine:
661
  parts.append(f"\n๐Ÿ”ฅ VIRAL SCORE: {d['score']}/10")
662
  parts.append(f"\n๐ŸŽฏ HOOK: {d['hook']}")
663
  parts.append(f"\n๐Ÿ“– CONCEPT:\n{textwrap.fill(d['concept'], 95)}")
664
- parts.append(f"\n๐Ÿง  WHY IT WORKS: {d['why']}")
665
  parts.append(f"\n๐ŸŽฌ MODE: {d['mode']}")
666
  parts.append(f"\n๐Ÿ“ฑ PLATFORM: {d['platform']}")
667
  parts.append(f"\nโฑ๏ธ TIMING: {d['timing']}")
668
- parts.append(f"\n๐Ÿ“ EXECUTION BLUEPRINT:")
669
- for j, step in enumerate(d['steps'], 1):
670
- parts.append(f" Step {j}: {step}")
671
  parts.append(f"\n๐Ÿท๏ธ KEYWORDS: {', '.join(d['keywords'])}")
672
  parts.append(f"\n#๏ธโƒฃ HASHTAGS: {' '.join(d['hashtags'])}")
673
  parts.append(f"\n๐Ÿ“บ SERIES: {d['series']}")
674
- parts.append(f"\n๐Ÿ’ฌ ENGAGEMENT: {d['engage']}")
675
  parts.append(f"\nโšก UNIQUE: {d['unique']}")
676
-
677
  parts.append(f"\n{'โ•' * 60}")
678
- parts.append("Click Generate again for completely NEW ideas!")
679
  parts.append("=" * 60)
680
  return "\n".join(parts)
681
 
682
  def generate_calendar(self, days=30):
683
- parts = []
684
- parts.append(f"{'โ•' * 60}")
685
- parts.append(f"๐Ÿ“… {days}-DAY CONTENT CALENDAR")
686
- parts.append(f"{'โ•' * 60}\n")
687
  start = datetime.now()
688
  for day in range(days):
689
  curr = start + timedelta(days=day)
690
  d = random.choice(self.IDEA_LIBRARY)
691
  parts.append(f"๐Ÿ“Œ Day {day+1} | {curr.strftime('%b %d')} ({curr.strftime('%A')})")
692
  parts.append(f" ๐Ÿ’ก {d['title']}")
693
- parts.append(f" ๐Ÿ“ฑ {d['platform']} | ๐Ÿ”ฅ Score: {d['score']}/10")
694
  parts.append(f" {'โ”€' * 50}")
695
  return "\n".join(parts)
696
 
697
- # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
698
- # GRADIO UI
699
- # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
700
-
701
- CAMERA_MAP = {
702
- "๐ŸŽฅ Cinematic Storyteller": CameraProfile.CINEMATIC_STORYTELLER,
703
- "๐Ÿ“ฐ Documentary Witness": CameraProfile.DOCUMENTARY_WITNESS,
704
- "๐Ÿ“ธ Architectural Digest": CameraProfile.ARCHITECTURAL_DIGEST,
705
- "๐Ÿš Drone God": CameraProfile.DRONE_GOD,
706
- "๐Ÿ” Detail Hunter": CameraProfile.DETAIL_HUNTER
707
- }
708
- LIGHTING_MAP = {
709
- "๐ŸŒ… Golden Hour": "golden_hour",
710
- "๐ŸŒ† Blue Hour": "blue_hour",
711
- "โ˜๏ธ Overcast": "overcast_noon",
712
- "โ˜€๏ธ Harsh Midday": "harsh_midday",
713
- "๐ŸŒ™ Night Interior": "night_interior",
714
- "๐Ÿ’ก Construction Lights": "construction_work_lights"
715
- }
716
  NICHE_OPTIONS = ["kitchen","bathroom","bedroom","living room","exterior","landscape","vehicle","road","pool","restaurant","garage","office","basement","entryway"]
717
-
718
- PRESETS = {
719
- "๐Ÿณ Kitchen โ†’ Modern Farmhouse": ("Small 1970s Galley Kitchen", "Modern Farmhouse Warm Minimalism", "kitchen", "65K"),
720
- "๐Ÿ› Bathroom โ†’ Japandi Spa": ("Dated 1990s Master Bathroom", "Luxury Japandi Spa Retreat", "bathroom", "42K"),
721
- "๐Ÿ  Exterior โ†’ Modern Craftsman": ("1960s Ranch House Facade", "Modern Craftsman Revival", "exterior", "95K"),
722
- "๐Ÿš— Mustang โ†’ Show Car": ("1969 Ford Mustang Barn Find", "Concours Show Quality", "vehicle", "80K"),
723
- "๐ŸŒฟ Yard โ†’ Resort Oasis": ("Empty Dirt Backyard", "Resort-Style Pool Oasis", "landscape", "120K"),
724
- "๐Ÿœ Warehouse โ†’ Ramen Bar": ("Raw Commercial Warehouse", "Japanese Ramen Restaurant", "restaurant", "150K"),
725
- "๐ŸŠ Dirt โ†’ Luxury Pool": ("Empty Flat Backyard", "Modern Resort Pool", "pool", "90K"),
726
- "๐Ÿ’ผ Spare Room โ†’ Pro Office": ("Empty Spare Bedroom", "Executive Home Office", "office", "25K"),
727
- }
728
 
729
  def fn_prompts(space, style, niche, cam, light, budget):
730
- if not space or not style: return "โŒ Fill in Space Type and Style first."
 
731
  e = RealityShiftEngine()
732
  return e.generate_full_sequence(space, style, niche or "kitchen", CAMERA_MAP.get(cam, CameraProfile.CINEMATIC_STORYTELLER), LIGHTING_MAP.get(light, "golden_hour"), budget or "")
733
 
734
  def fn_ideas(count):
735
  e = MindBreachEngine()
736
- ideas = e.generate_ideas(int(count))
737
- return e.format_ideas(ideas)
738
 
739
  def fn_calendar(days):
740
- e = MindBreachEngine()
741
- return e.generate_calendar(int(days))
742
 
743
  def fn_titles(space, style, niche):
744
- if not space or not style: return "โŒ Fill in Space and Style."
 
745
  e = TitleKeywordEngine()
746
- t = e.generate_titles(space, style, niche or "interior")
747
- k = e.generate_keywords(space, style, niche or "interior")
748
- return e.format_output(t, k)
749
 
750
  def fn_preset(name):
751
  if name in PRESETS:
@@ -753,14 +361,12 @@ def fn_preset(name):
753
  return d[0], d[1], d[2], d[3]
754
  return "", "", "", ""
755
 
756
- with gr.Blocks(title="Reality Shift + Mind Breach Engine", theme=gr.themes.Soft(primary_hue="orange", secondary_hue="blue")) as app:
757
 
758
- gr.HTML("""<div style="text-align:center;padding:20px;">
759
- <h1 style="font-size:2.2em;background:linear-gradient(90deg,#ff6b6b,#ffa500,#48dbfb);-webkit-background-clip:text;-webkit-text-fill-color:transparent;">
760
- ๐Ÿ”ฅ REALITY SHIFT + ๐Ÿง  MIND BREACH ENGINE</h1>
761
- <p style="color:#aaa;">Where AI ends and reality begins โ€” nobody can tell.</p>
762
- <p style="color:#666;font-size:0.85em;">6-Stage Prompts โ€ข Viral Ideas โ€ข Auto Titles & Keywords โ€ข Content Calendar</p></div>""")
763
 
 
 
764
  with gr.Tab("๐Ÿ“ธ Prompt Generator"):
765
  gr.Markdown("### Generate 6-Stage Transformation Prompts + Video Prompts")
766
  with gr.Row():
@@ -774,20 +380,18 @@ with gr.Blocks(title="Reality Shift + Mind Breach Engine", theme=gr.themes.Soft(
774
  inp_niche = gr.Dropdown(choices=NICHE_OPTIONS, label="๐Ÿ“‚ Niche", value="kitchen")
775
  inp_budget = gr.Textbox(label="๐Ÿ’ฐ Budget (optional)", placeholder="e.g. 65K")
776
  with gr.Row():
777
- inp_cam = gr.Dropdown(choices=list(CAMERA_MAP.keys()), label="๐Ÿ“ท Camera", value="๐ŸŽฅ Cinematic Storyteller")
778
- inp_light = gr.Dropdown(choices=list(LIGHTING_MAP.keys()), label="๐Ÿ’ก Lighting", value="๐ŸŒ… Golden Hour")
779
  gen_btn = gr.Button("๐Ÿ”ฅ GENERATE FULL 6-STAGE SEQUENCE", variant="primary", size="lg")
780
  out_prompts = gr.Textbox(label="Output", lines=45, show_copy_button=True)
781
  preset_btn.click(fn_preset, [preset_dd], [inp_space, inp_style, inp_niche, inp_budget])
782
  gen_btn.click(fn_prompts, [inp_space, inp_style, inp_niche, inp_cam, inp_light, inp_budget], [out_prompts])
783
-
784
  with gr.Tab("๐Ÿ’ก Viral Ideas"):
785
  gr.Markdown("### ๐Ÿง  Mind Breach โ€” Viral Content Ideas")
786
  idea_count = gr.Slider(1, 10, 5, step=1, label="How many ideas?")
787
  idea_btn = gr.Button("๐Ÿ’ก Generate Viral Ideas", variant="primary", size="lg")
788
  out_ideas = gr.Textbox(label="Ideas", lines=45, show_copy_button=True)
789
  idea_btn.click(fn_ideas, [idea_count], [out_ideas])
790
-
791
  with gr.Tab("๐Ÿท๏ธ Titles & Keywords"):
792
  gr.Markdown("### ๐Ÿท๏ธ Auto Title & Keyword Generator")
793
  with gr.Row():
@@ -797,41 +401,14 @@ with gr.Blocks(title="Reality Shift + Mind Breach Engine", theme=gr.themes.Soft(
797
  tk_btn = gr.Button("๐Ÿท๏ธ Generate", variant="primary")
798
  out_tk = gr.Textbox(label="Titles & Keywords", lines=30, show_copy_button=True)
799
  tk_btn.click(fn_titles, [tk_space, tk_style, tk_niche], [out_tk])
800
-
801
  with gr.Tab("๐Ÿ“… Content Calendar"):
802
  gr.Markdown("### ๐Ÿ“… Auto Content Calendar")
803
  cal_days = gr.Slider(7, 90, 30, step=1, label="Days")
804
  cal_btn = gr.Button("๐Ÿ“… Generate Calendar", variant="primary", size="lg")
805
  out_cal = gr.Textbox(label="Calendar", lines=45, show_copy_button=True)
806
  cal_btn.click(fn_calendar, [cal_days], [out_cal])
807
-
808
  with gr.Tab("โ“ How To Use"):
809
- gr.Markdown("""
810
- ### ๐Ÿš€ Quick Guide
811
-
812
- **๐Ÿ“ธ Prompt Generator:** Fill space + style โ†’ Click Generate โ†’ Copy prompts โ†’ Paste into OpenArt
813
-
814
- **๐Ÿ’ก Viral Ideas:** Click Generate โ†’ Get 5 unique ideas with execution blueprints
815
-
816
- **๐Ÿท๏ธ Titles & Keywords:** Fill space + style โ†’ Get 3 titles + 55 keywords instantly
817
-
818
- **๐Ÿ“… Calendar:** Pick days โ†’ Get complete posting plan
819
-
820
- ### ๐ŸŽฏ After Generating Prompts
821
- 1. Copy each IMAGE prompt
822
- 2. Go to [OpenArt](https://openart.ai/home)
823
- 3. Paste and generate IMAGE 1-6
824
- 4. Use frame-to-video to animate VIDEO 1-5
825
- 5. Copy titles and keywords for posting
826
-
827
- ### โšก Tips
828
- - Click Generate multiple times for different outputs
829
- - Use ๐Ÿ“‹ copy button for one-click copy
830
- - Try different cameras and lighting for variety
831
- - Presets save time โ€” load then customize
832
- """)
833
-
834
- gr.HTML("<div style='text-align:center;padding:25px 20px;border-top:1px solid #333;'><p style='color:#888;font-size:0.9em;'>๐Ÿ”ฅ <strong style='color:#ffa500;'>REALITY SHIFT ENGINE</strong> + ๐Ÿง  <strong style='color:#48dbfb;'>MIND BREACH ENGINE</strong></p><p style='color:#666;font-size:0.85em;margin:10px 0;'>Generate images on <a href='https://openart.ai/home' target='_blank' style='color:#ffa500;font-weight:bold;'>OpenArt</a> โ†’ Animate with frame-to-video โ†’ Post and go viral</p><div style='margin:15px auto;padding:15px;background:#111;border-radius:12px;border:1px solid #222;max-width:450px;'><p style='color:#ffa500;font-size:0.95em;margin:3px 0;font-weight:bold;'>โšก ADRON</p><p style='color:#888;font-size:0.8em;margin:2px 0;'>Creators Tool for Content Ideas</p><div style='display:flex;justify-content:center;gap:12px;margin-top:10px;flex-wrap:wrap;'><a href='https://instagram.com/adron.publishing' target='_blank' style='color:#E1306C;text-decoration:none;font-size:0.82em;'>๐Ÿ“ท adron.publishing</a> <a href='https://t.me/Adron_Media' target='_blank' style='color:#0088cc;text-decoration:none;font-size:0.82em;'>โœˆ๏ธ Telegram</a> <a href='https://discord.com/users/mradnan' target='_blank' style='color:#7289DA;text-decoration:none;font-size:0.82em;'>๐ŸŽฎ mradnan</a> <a href='mailto:bawalmedia7065@gmail.com' style='color:#ffa500;text-decoration:none;font-size:0.82em;'>โœ‰๏ธ Email</a></div></div><p style='color:#444;font-size:0.75em;margin-top:15px;font-style:italic;'>Let's make reality jealous. โœจ</p></div>")
835
-
836
 
837
  app.launch()
 
7
  from dataclasses import dataclass, field
8
  import gradio as gr
9
 
 
 
 
 
10
  class CameraProfile(Enum):
11
  DOCUMENTARY_WITNESS = "Documentary Witness (24mm, f/8, static)"
12
  ARCHITECTURAL_DIGEST = "Architectural Digest (24mm TS, f/11, editorial)"
 
41
  position: str
42
  description: str
43
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  @dataclass
45
  class TitleBlock:
46
  primary: str
 
55
  ai_platform_tags: List[str]
56
  metadata: List[str]
57
 
 
 
 
 
58
  LIGHTING_DATABASE = {
59
  "golden_hour": {
60
  "color_temp": "2500-3500K",
61
  "shadow_quality": "Long, warm, directional, soft edges",
62
+ "window_behavior": "Strong warm light shafts with visible dust particles",
63
  "prompt_tokens": "golden hour warm directional sunlight streaming through windows, long soft amber shadows, dust particles visible in light beams, color temperature 3000K, cinematic warm natural lighting"
64
  },
65
  "blue_hour": {
66
  "color_temp": "9000-15000K",
67
  "shadow_quality": "Very soft, almost shadowless, ethereal",
68
+ "window_behavior": "Cool ambient glow from outside, interior lights become primary",
69
+ "prompt_tokens": "blue hour twilight lighting, deep blue sky through windows, warm interior lights contrasting cool exterior, intimate atmospheric lighting"
70
  },
71
  "overcast_noon": {
72
  "color_temp": "6500-7500K",
73
+ "shadow_quality": "Extremely soft, diffused, minimal definition",
74
  "window_behavior": "Even flat light distribution throughout space",
75
+ "prompt_tokens": "soft overcast natural daylight, even diffused illumination, no harsh shadows, neutral color temperature"
76
  },
77
  "harsh_midday": {
78
  "color_temp": "5500-6000K",
79
+ "shadow_quality": "Short, hard, high contrast",
80
  "window_behavior": "Sharp geometric light patterns on floors and walls",
81
+ "prompt_tokens": "harsh direct midday sunlight, sharp geometric shadow patterns, high contrast, bright highlights, deep shadows"
82
  },
83
  "night_interior": {
84
  "color_temp": "2700-3000K",
85
+ "shadow_quality": "Multiple soft shadow directions from artificial sources",
86
  "window_behavior": "Windows appear as black mirrors reflecting interior",
87
+ "prompt_tokens": "nighttime interior warm artificial lighting 2700K, multiple light sources, windows reflecting interior, warm inviting atmospheric lighting"
88
  },
89
  "construction_work_lights": {
90
  "color_temp": "5000-6500K",
91
+ "shadow_quality": "Hard, multiple directions from temporary lights",
92
+ "window_behavior": "Combination of natural and artificial if daytime",
93
+ "prompt_tokens": "temporary construction work lights on tripods, harsh directional LED work lighting, multiple shadow directions, industrial unfinished environment"
94
  }
95
  }
96
 
 
 
 
 
97
  def generate_negative_prompt(stage, niche):
98
+ base = ["blurry","low quality","oversaturated","watermark","text overlay","logo","distorted proportions","extra limbs","floating objects","impossible shadows","AI artifacts","plastic texture","uncanny valley","teleporting objects","objects appearing from nowhere","snap installation"]
 
 
 
 
 
99
  stage_neg = {
100
+ "STAGE_0": ["clean surfaces","new materials","furniture","fresh paint"],
101
+ "STAGE_1": ["completed renovation","furniture","finished walls"],
102
+ "STAGE_2": ["finished drywall","paint","flooring installed","fixtures"],
103
+ "STAGE_3": ["furniture","decorative items","staging elements"],
104
+ "STAGE_4": ["furniture","art on walls","decorative items","construction tools"],
105
+ "STAGE_5": ["construction debris","unfinished elements","workers","tools","dust"]
106
  }
107
+ return ", ".join(base + stage_neg.get(stage, []))
 
 
 
 
 
108
 
109
  class TitleKeywordEngine:
110
+ EMOTIONAL_TRIGGERS = [("Abandoned","Stunning"),("Destroyed","Dream"),("Condemned","Magazine-Ready"),("Rusted","Reborn"),("Dead","Paradise"),("Forgotten","Unforgettable"),("Crumbling","Cinematic"),("Gutted","Gorgeous"),("Neglected","Luxurious"),("Wrecked","Worth a Fortune"),("Trashed","Transformed"),("Buried","Breathtaking")]
 
 
 
 
 
 
 
111
 
112
  def __init__(self):
113
  self.current_year = datetime.now().year
 
123
  alternate = f"{space_type} Renovation Timelapse โ€” {style} Before and After {self.current_year}"
124
  if len(alternate) > 100:
125
  alternate = alternate[:97] + "..."
126
+ short_options = ["Same Space. UNRECOGNIZABLE.",f"{trigger[0]} to {trigger[1]}.","The Glow-Up is INSANE.","Nobody Believed This.","Wait for the REVEAL."]
 
 
 
 
 
 
127
  short = random.choice(short_options)
128
  return TitleBlock(primary=primary, alternate=alternate, short=short)
129
 
130
  def generate_keywords(self, space_type, style, niche):
131
  sl = space_type.lower()
132
  stl = style.lower()
133
+ primary_seo = [f"{sl} renovation",f"{sl} remodel before after",f"{sl} transformation",f"{stl} {sl}",f"{sl} makeover timelapse"]
134
+ long_tail = [f"{sl} renovation before and after {self.current_year}",f"{stl} {sl} remodel ideas",f"how to renovate a {sl} step by step",f"{sl} renovation cost breakdown",f"best {sl} renovation timelapse"]
135
+ hashtags = [f"#{sl.replace(' ','')}renovation","#beforeandafter",f"#{sl.replace(' ','')}makeover",f"#{sl.replace(' ','')}design","#renovationtimelapse","#homerenovation","#fixerupper",f"#{stl.replace(' ','')}",f"#{stl.replace(' ','')}design","#warmminimalism","#homedesign","#interiordesign","#homedecor","#dreamhome","#satisfying","#transformation","#renovationjourney","#homeimprovement","#remodel","#makeover"]
136
+ ai_tags = ["architectural photography","interior design photography",f"photorealistic {sl}","8k resolution","professional interior photography","magazine quality","warm natural lighting",f"{stl} design","cinematic composition","hyperrealistic render","editorial interior","renovation before after","studio quality","luxury residential","construction documentation"]
137
+ metadata = [f"niche:{niche}",f"room:{sl.replace(' ','-')}",f"style:{stl.replace(' ','-')}","stages:6","type:transformation-sequence","mood:aspirational","lighting:golden-hour","camera:cinematic","audience:homeowners-designers","season:evergreen"]
138
+ return KeywordBlock(primary_seo=primary_seo,long_tail=long_tail,hashtags=hashtags[:20],ai_platform_tags=ai_tags[:15],metadata=metadata[:10])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139
 
140
  def format_output(self, titles, keywords):
141
  lines = []
 
156
  lines.append("\n" + "=" * 60)
157
  return "\n".join(lines)
158
 
 
 
 
 
159
  class RealityShiftEngine:
160
  STAGE_CONFIGS = {
161
+ Stage.STAGE_0: {"name":"THE DEATH STATE","emotional_target":"Hopelessness with a whisper of potential","visual_elements":["visible structural damage or significant decay","nature reclaiming elements โ€” weeds through cracks, mold on surfaces, rust on fixtures, wood rot","debris and evidence of long abandonment scattered across floors","harsh unflattering lighting โ€” overcast or direct unflattering midday","desaturated color palette dominated by greens, browns, and grays","storytelling detail โ€” old newspaper, faded sign, abandoned personal item","dust particles visible in any light beams entering the space","cracked or missing window glass with cobwebs","water damage stains spreading across ceiling and walls","peeling paint and wallpaper curling away from walls"]},
162
+ Stage.STAGE_1: {"name":"THE TEARDOWN","emotional_target":"Exciting destruction โ€” satisfying teardown energy","visual_elements":["workers in correct PPE โ€” hard hats, safety glasses, N95 dust masks, leather gloves, steel-toe boots","dumpster or debris pile visible near exit","partially demolished elements โ€” half-removed drywall exposing framing, torn flooring","dust clouds in air catching beams of light","correct tools โ€” sledgehammer, reciprocating saw, pry bars, utility knives","plastic sheeting protecting areas not being demolished","extension cords running to portable work lights on tripods","debris bags accumulating on floor near work zone","at least one worker actively swinging, pulling, or carrying material","exposed original layers โ€” old wallpaper, previous paint colors, original subfloor"]},
163
+ Stage.STAGE_2: {"name":"THE SKELETON","emotional_target":"Respect for the craft โ€” hidden complexity revealed","visual_elements":["exposed wall framing โ€” 2x4 or 2x6 studs at 16 inch on-center spacing","electrical boxes mounted on studs with Romex wire pulled not yet terminated","PEX or copper plumbing lines stubbed out at fixture locations","HVAC ductwork partially installed in ceiling or floor cavities","subfloor visible โ€” plywood sheets or concrete slab with markings","inspector spray paint markings on framing for authenticity","blue painters tape marking layout reference lines","stacks of drywall sheets leaning against far wall","work lights on tripods providing harsh temporary lighting","specific tradesperson visible with trade-appropriate tools"]},
164
+ Stage.STAGE_3: {"name":"THE SKIN","emotional_target":"Anticipation โ€” you can see where this is going","visual_elements":["fresh drywall with visible mud and tape lines being sanded smooth","freshly painted walls with crisp clean edges","flooring partially installed showing progression from bare subfloor to installed","blue painters tape protecting trim and window frames","paint cans with drip marks, roller trays, canvas drop cloths on floor","trim pieces and baseboards leaning against walls ready for install","clean but clearly active work zone with organized materials","bright work lighting creating slightly harsh even shadows","absolutely no furniture, no decorations, no staging elements","visible transformation creating strong anticipation"]},
165
+ Stage.STAGE_4: {"name":"THE CLEAN SHELL","emotional_target":"Clean satisfaction โ€” calm before the beautiful storm","visual_elements":["every surface 100 percent complete and construction-clean","light fixtures installed and ON emitting warm 2700-3000K glow","all hardware installed โ€” door handles, cabinet pulls, faucets gleaming","windows cleaned spotless zero tape residue anywhere","floors spotless with fresh vacuum lines or clean mop sheen","countertops completely bare and gleaming under warm light","ZERO furniture ZERO art ZERO plants ZERO accessories","natural light streaming through clean windows golden hour preferred","pristine untouched surfaces everywhere","empty space highlighting craftsmanship and material choices"]},
166
+ Stage.STAGE_5: {"name":"THE PARADISE","emotional_target":"DESIRE โ€” viewer thinks I WANT to live there","visual_elements":["professional staging โ€” curated furniture, art, plants, textiles, books, candles","golden hour or blue hour lighting creating warm directional atmosphere","depth layering โ€” foreground interest, midground hero, background context","strict 3-color palette carried consistently through entire space","texture variety โ€” wood, stone, fabric, metal, glass, plant minimum 4","life indicators โ€” steam from cup, open book, fresh flowers, candle flame, draped throw","intentional composition โ€” symmetry OR deliberate asymmetrical balance","reflective surfaces catching light โ€” mirrors, glass, polished stone, brass","one scroll-stopping hero element โ€” statement light, dramatic view, showpiece material","atmospheric depth โ€” subtle warm light rays or golden haze for cinematic dimension"]}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
167
  }
168
 
169
  def __init__(self):
 
173
 
174
  def create_scene_lock(self, camera, space_desc):
175
  configs = {
176
+ CameraProfile.DOCUMENTARY_WITNESS:("24mm wide-angle","5 feet chest level","f/8 deep focus","static documentary tripod centered"),
177
+ CameraProfile.ARCHITECTURAL_DIGEST:("24mm tilt-shift","4 feet low dramatic ceiling","f/11 razor-sharp","editorial one-point perspective"),
178
+ CameraProfile.CINEMATIC_STORYTELLER:("35mm natural","4.5 feet below eye level","f/4 selective focus","emotional framing atmosphere"),
179
+ CameraProfile.DRONE_GOD:("24mm drone","100-200 feet aerial","f/4-f/5.6","45-degree overview property"),
180
+ CameraProfile.DETAIL_HUNTER:("85mm detail","30-42 inches waist level","f/2.8 creamy bokeh","tight composition texture")
181
  }
182
  c = configs.get(camera, configs[CameraProfile.CINEMATIC_STORYTELLER])
183
+ self.scene_lock = f"SCENE LOCK: Static tripod. {c[0]} lens at {c[1]}. {c[2]}. {c[3]}. IDENTICAL across all 6 stages. Shooting {space_desc}. No movement no drift."
 
 
 
 
 
184
  return self.scene_lock
185
 
186
  def create_landmarks(self, space_type, niche):
187
  lib = {
188
+ "kitchen":[Landmark("Window above sink","center-left","Consistent every stage"),Landmark("Ceiling beam","left to right","Never moves"),Landmark("Floor transition","center","Visible all stages"),Landmark("Exterior through window","through window","Same view always"),Landmark("Entry doorway","right side","Constant size and position")],
189
+ "bathroom":[Landmark("Window","exterior wall","Opening identical always"),Landmark("Plumbing wall","back wall","Fixture locations marked"),Landmark("Floor drain","center","Visible all stages"),Landmark("Ceiling box","center ceiling","Position constant"),Landmark("Door opening","entry","Frame constant")],
190
+ "exterior":[Landmark("Roofline","top frame","Angle constant"),Landmark("Front door","center","Anchors composition"),Landmark("Window pattern","facade","Positions constant"),Landmark("Foundation line","base","Transition constant"),Landmark("Mature tree","foreground","Persists all stages")],
191
+ "vehicle":[Landmark("Wheel arches","four corners","Define identity"),Landmark("Windshield rake","front upper","Angle constant"),Landmark("Hood line","front top","Profile constant"),Landmark("Tail lights","rear","Identity markers"),Landmark("Belt line","side","Character line constant")]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
192
  }
193
  nl = niche.lower()
194
  for key in lib:
195
  if key in nl or key in space_type.lower():
196
  self.landmarks = lib[key]
197
  return self.landmarks
198
+ self.landmarks = lib.get("kitchen",[])
199
  return self.landmarks
200
 
201
  def generate_full_sequence(self, space_type, style, niche, camera, lighting, cost_estimate=""):
202
  parts = []
 
 
203
  titles = self.tk_engine.generate_titles(space_type, style, niche, cost_estimate)
204
  keywords = self.tk_engine.generate_keywords(space_type, style, niche)
205
  parts.append(self.tk_engine.format_output(titles, keywords))
 
 
206
  self.create_scene_lock(camera, space_type)
207
  parts.append(f"\n๐Ÿ”’ {self.scene_lock}\n")
 
 
208
  self.create_landmarks(space_type, niche)
209
  parts.append("๐Ÿ“ PERMANENT LANDMARKS:")
210
  for i, lm in enumerate(self.landmarks, 1):
211
  parts.append(f" {i}. {lm.name} โ€” {lm.position}: {lm.description}")
212
  parts.append("")
 
 
213
  parts.append("=" * 60)
214
  parts.append("๐Ÿ“ธ IMAGE PROMPTS (6 STAGES)")
215
  parts.append("=" * 60)
216
+ stages = [Stage.STAGE_0,Stage.STAGE_1,Stage.STAGE_2,Stage.STAGE_3,Stage.STAGE_4,Stage.STAGE_5]
217
+ lmap = {Stage.STAGE_0:"overcast_noon",Stage.STAGE_1:"construction_work_lights",Stage.STAGE_2:"construction_work_lights",Stage.STAGE_3:"harsh_midday",Stage.STAGE_4:lighting,Stage.STAGE_5:lighting}
 
 
 
 
 
 
218
  for stage in stages:
219
+ sl = lmap.get(stage, lighting)
220
  lc = LIGHTING_DATABASE.get(sl, LIGHTING_DATABASE["golden_hour"])
221
  sc = self.STAGE_CONFIGS[stage]
222
+ dp = [f"A photorealistic {sc['name'].lower()} view of a {space_type}."]
 
223
  for elem in sc["visual_elements"]:
224
+ dp.append(elem.capitalize() + ".")
225
  if stage in [Stage.STAGE_4, Stage.STAGE_5]:
226
+ dp.append(f"Design style: {style}. Every material and finish reflects this aesthetic.")
227
+ description = " ".join(dp)
228
+ lmstr = " | ".join([f"{l.name} ({l.position})" for l in self.landmarks[:5]])
 
229
  negative = generate_negative_prompt(stage.name, niche)
 
230
  parts.append(f"\n{'โ”€' * 60}")
231
  parts.append(f"๐Ÿ“ธ IMAGE โ€” {stage.name} | {sc['name']}")
232
  parts.append(f"{'โ”€' * 60}")
233
  parts.append(f"\n๐Ÿ”’ {self.scene_lock}")
234
+ parts.append(f"\n๐Ÿ“ LANDMARKS: {lmstr}")
235
+ parts.append(f"\n๐ŸŽฌ DESCRIPTION:\n{textwrap.fill(description, 95)}")
236
+ parts.append(f"\n๐Ÿ’ก LIGHTING: {lc['prompt_tokens']}. Temp: {lc['color_temp']}. Shadows: {lc['shadow_quality']}.")
237
  parts.append(f"\n๐ŸŽจ MOOD: {sc['emotional_target']}")
238
  parts.append(f"\nโ›” NEGATIVE: {negative}\n")
 
 
239
  parts.append("=" * 60)
240
  parts.append("๐ŸŽฅ VIDEO PROMPTS (5 TRANSITIONS)")
241
  parts.append("=" * 60)
242
+ vids = [
243
+ (1,"DEMOLITION BEGINS",f"Timelapse of demolition in {space_type}. Workers in PPE enter with tools. Sledgehammers swing into walls creating dust. Debris carried out. Fixtures removed. Space opens as materials stripped layer by layer.","Workers enter exit naturally. Dust billows settles. Debris piles grow. Shadows rotate showing time.","2-5 days compressed"),
244
+ (2,"ROUGH-IN WORK",f"Timelapse of electrical plumbing HVAC rough-in in {space_type}. Electricians pull wire mount boxes. Plumbers run supply drain lines. HVAC ducts installed in cavities. Each trade works with specific tools.","Trade workers rotate. Wire unrolls along framing. Pipes connect one by one. Ducts lift into ceiling. Inspector arrives.","1-3 weeks compressed"),
245
+ (3,"SURFACES EMERGE",f"Timelapse of drywall mudding sanding painting flooring in {space_type}. Sheets lift screw into framing. Mud applied in passes. Sanding creates dust. Primer then paint in roller passes. Flooring clicks into place progressing across room.","Drywall rises to walls. Mud knives sweep. Dust drifts. Rollers move W-patterns. Planks click one by one across floor.","2-4 weeks compressed"),
246
+ (4,"FINAL INSTALL",f"Timelapse of fixtures hardware cleanup in {space_type}. Light fixtures wired to ceiling. Cabinet hardware mounted. Faucets installed. Switch plates snap on. Touch-up paint. Cleaning crew with vacuums mops rags transforms space to pristine.","Fixtures rise to positions. Hardware appears in sequence. Cleaning moves systematically. Windows polished. Last tool exits.","3-7 days compressed"),
247
+ (5,"STAGING MAGIC",f"Timelapse of professional staging in {space_type}. Furniture carried in positioned carefully. Art hung with leveling. Pillows throws placed fluffed. Plants positioned. Books stacked. Candles placed. Light shifts to golden hour as staging completes.","Furniture slides on felt pads. Art lifts to walls. Textiles drape naturally. Plants adjusted. Team steps back reviews exits revealing final result.","4-8 hours compressed")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
248
  ]
249
+ for num,name,action,motion,dur in vids:
250
+ cn = "Zero movement." if num < 5 else "Subtle 3-5 percent push-in for reveal."
 
251
  parts.append(f"\n{'โ”€' * 60}")
252
  parts.append(f"๐ŸŽฅ VIDEO {num} โ€” {name}")
253
  parts.append(f"{'โ”€' * 60}")
254
+ parts.append(f"\nCAMERA: Static tripod same as images. {cn}")
255
+ parts.append(f"\nACTION:\n{textwrap.fill(action, 95)}")
256
+ parts.append(f"\nMOTION:\n{textwrap.fill(motion, 95)}")
257
+ parts.append(f"\nDURATION: {dur}")
258
+ parts.append(f"\nโ›” FORBIDDEN: No cuts. No teleporting. No objects appearing from nowhere. No camera movement. No morphing. Everything placed by human hands.\n")
 
 
259
  parts.append("=" * 60)
260
+ parts.append("โœ… GENERATE YOUR SEQUENCE")
261
  parts.append("=" * 60)
262
  parts.append("\nโœ… Create IMAGE 1-6 on OpenArt โ†’ https://openart.ai/home")
263
  parts.append(" Then animate VIDEO 1-5 with frame-to-video!")
 
 
264
  return "\n".join(parts)
265
 
 
 
 
 
266
  class MindBreachEngine:
267
  def __init__(self):
268
  self.idea_counter = 0
269
  self.IDEA_LIBRARY = [
270
+ {"dim":"Cross-Niche Fusion","title":"POV: You're a Subway Tile Being Installed in a $60K Kitchen","score":9.2,"hook":"Camera IS the tile. Viewer sees hands picking them up pressing into wall.","concept":"Film entire backsplash installation from tile PERSPECTIVE. Viewer experiences being picked from box, thinset spread, pressed into place, grouted, cleaned.","why":"Perspective shift nobody has done + ASMR + satisfying completion + humor","mode":"RESURRECT Detail Hunter","platform":"TikTok primary, YouTube Shorts secondary","timing":"Evergreen","steps":["Mount micro camera at tile perspective","Generate close-ups from tile-level","Record real ASMR audio","Edit with POV text overlays","Post with sound ON"],"keywords":["kitchen backsplash","POV renovation","satisfying tiling","subway tile timelapse","kitchen ASMR"],"hashtags":["#POVrenovation","#subwaytile","#satisfying","#tileinstallation","#kitchenrenovation","#renovationASMR","#oddlysatisfying","#homeimprovement","#DIYkitchen","#beforeandafter"],"series":"POV You're the [Material] series","engage":"What material should I be NEXT?","unique":"Material-perspective POV completely untouched in renovation."},
271
+ {"dim":"Impossible Contrast","title":"The WORST Room on the Internet โ†’ $100K Dream Space","score":9.4,"hook":"Found the most disgusting room online. Then rebuilt it.","concept":"Source extreme before-state generate most aspirational after. Maximum contrast delta between first and last frame.","why":"Extreme contrast is THE most reliable viral mechanic","mode":"PHANTOM Documentary Witness","platform":"TikTok primary, Shorts secondary","timing":"Evergreen","steps":["Design STAGE 0 absolute worst","Generate all 6 stages max contrast","STAGE 5 magazine-cover level","Split-frame thumbnail","Dramatic reveal pacing"],"keywords":["worst room transformation","extreme renovation","before after","room makeover extreme","unbelievable renovation"],"hashtags":["#worstroom","#extrememakeover","#beforeandafter","#renovation","#transformation","#unbelievable","#satisfying","#roomreveal","#homerescue","#dreamhome"],"series":"Worst to First weekly series","engage":"Rate BEFORE 1-10 and AFTER 1-10","unique":"Systematically finding worst spaces creates reliable content machine."},
272
+ {"dim":"Format Innovation","title":"I Renovated This Room in REVERSE โ€” Starting from Reveal","score":8.9,"hook":"You see FINISHED room first. Now watch it get DESTROYED.","concept":"Show stunning result FIRST then demolish backward through stages until original ruin revealed at END.","why":"Subverts expected pattern. Enhanced contrast. High replay value.","mode":"PHANTOM generate STAGE 5 first","platform":"TikTok primary, Reels secondary","timing":"Evergreen","steps":["Generate full 6-stage sequence","Reverse order in edit","Add text This is AFTER Now watch","Show destruction progression","End with This was BEFORE"],"keywords":["reverse renovation","renovation backwards","room transformation reverse","unique format","creative renovation"],"hashtags":["#reversereveal","#renovation","#transformation","#backwards","#beforeandafter","#uniqueformat","#mindblown","#roomreveal","#satisfying","#creative"],"series":"REVERSE series different rooms","engage":"Did reverse format hit different?","unique":"Reverse reveal virtually untouched in renovation content."},
273
+ {"dim":"Trend Prediction","title":"5 Renovation Trends Dominating 2026 โ€” Heard It Here First","score":8.5,"hook":"In 6 months EVERYONE does these. Right now almost nobody is.","concept":"Visualize 5 emerging trends: textured walls, collected minimalism, revenue rooms, bold wallpaper, outdoor rooms.","why":"Prediction content gets SAVED. Makes viewer feel AHEAD.","mode":"PHANTOM + ARCHITECT one per trend","platform":"YouTube primary, Carousel secondary","timing":"TIME SENSITIVE post ASAP","steps":["Generate before/after each trend","Research WHY behind each","Film prediction authority content","Post YouTube + Instagram","Reshare at 3 and 6 months"],"keywords":["renovation trends 2026","interior design trends","home predictions","upcoming design trends","trending home design"],"hashtags":["#2026trends","#renovationtrends","#designtrends","#limewash","#texturedwalls","#warmminimalism","#outdoorroom","#wallpaper","#trendprediction","#interiortrends"],"series":"Quarterly Trend Prediction series","engage":"Which trend BIGGEST which you HATE?","unique":"Most creators FOLLOW trends. You PREDICT them."},
274
+ {"dim":"Competition Gap","title":"The Room NOBODY Renovates โ€” Home's Biggest Missed Opportunity","score":9.0,"hook":"One room you walk through EVERY DAY but never thought to renovate.","concept":"The ENTRYWAY. First thing anyone sees. Most neglected in content. Full 6-stage transformation with storage solutions.","why":"Competition gap โ€” almost NO good entryway content. Universal relatability.","mode":"PHANTOM Documentary Witness","platform":"Reels primary, Pinterest secondary","timing":"Evergreen peaks spring fall","steps":["Generate 6-stage entryway transformation","Include storage in STAGE 5","Calculate 2-5K budget","Split-frame thumbnail","Entryway is your homes handshake caption"],"keywords":["entryway renovation","mudroom makeover","foyer transformation","small entryway ideas","entryway organization"],"hashtags":["#entrywaymakeover","#mudroom","#foyer","#firstimpression","#smallspace","#homeorganization","#entrywaydesign","#renovationtip","#homeimprovement","#beforeandafter"],"series":"Rooms Nobody Renovates series","engage":"Show me your entryway RIGHT NOW no cleaning","unique":"Massive Pinterest search but ZERO quality timelapse content."},
275
+ {"dim":"Psychological Trigger","title":"I Designed 4 Rooms to Trigger 4 Different Emotions","score":8.8,"hook":"Science says your room makes you feel THIS way. Built 4 rooms to prove it.","concept":"Using color psychology design 4 identical rooms differently โ€” anxiety relief, creativity, focus, romance.","why":"Educational + visual + self-improvement + comparison format","mode":"ARCHITECT Cinematic Storyteller","platform":"YouTube primary, Carousel secondary","timing":"Evergreen","steps":["Research color psychology","Generate 1 empty room","Generate 4 STAGE 5 versions","Comparison with science","Which room do YOU need poll"],"keywords":["color psychology room","room affects mood","interior psychology","calm room design","productivity room"],"hashtags":["#colorpsychology","#roomdesign","#interiorpsychology","#moodroom","#calmspace","#productivity","#designscience","#emotionaldesign","#transformation","#designtips"],"series":"Science of Rooms series","engage":"Which emotion room? Calm Creative Focus Romance?","unique":"Nobody combines psychology with design visualization."},
276
+ {"dim":"Nostalgia Mining","title":"I Recreated My EXACT Childhood Kitchen โ€” With Adult Money","score":9.3,"hook":"Kitchen where I ate cereal 15 years. Rebuilt from memory.","concept":"Recreate childhood kitchen from memory then modern renovation same space. Double emotional impact.","why":"Nostalgia strongest sharing trigger. Everyone has kitchen memories.","mode":"PHANTOM Cinematic Storyteller","platform":"TikTok primary, Instagram secondary","timing":"Evergreen bonus holidays","steps":["Describe childhood kitchen from memory","Generate recreation","Generate modern renovation","Film emotional narration","Post nostalgic audio"],"keywords":["childhood kitchen","nostalgic renovation","recreating childhood home","kitchen decades","memory renovation"],"hashtags":["#childhoodmemories","#nostalgia","#kitchenmemories","#thenandnow","#childhood","#renovation","#kitchendesign","#memoryLane","#emotional","#growinup"],"series":"Memory Lane Renovations series","engage":"Describe YOUR childhood kitchen one sentence","unique":"Memory-based recreation barely exists."},
277
+ {"dim":"Controversy Debate","title":"Open Concept is OVERRATED โ€” Here's the Proof","score":9.1,"hook":"Everyone rips out walls. What if that makes house WORSE?","concept":"Case AGAINST open concept: acoustics, smells, privacy, heating, storage. Show defined-room alternative.","why":"Challenges dominant narrative. Comments EXPLODE.","mode":"ARCHITECT side-by-side","platform":"YouTube primary, TikTok secondary","timing":"Evergreen","steps":["Generate open concept STAGE 5","Generate defined-room same size","Present evidence","Show solution","Poll for comments"],"keywords":["open concept overrated","rooms vs open","closed floor plan","renovation mistakes","design debate"],"hashtags":["#openconcept","#unpopularopinion","#renovationdebate","#interiordesign","#homedesign","#floorplan","#designmistakes","#hottake","#homerenovation","#controversial"],"series":"Unpopular Opinions weekly","engage":"Open concept or ROOMS? War incoming","unique":"Backlash growing nobody made definitive content."},
278
+ {"dim":"Series Architecture","title":"Same Room โ€” $500 vs $5K vs $50K vs $500K","score":9.6,"hook":"4 budgets. Same room. Only ONE worth the money.","concept":"Transform one room at 4 budget levels. Show what each gets. Reveal best value.","why":"Budget comparison MOST engaging. Massive debate. High saves.","mode":"PHANTOM 4 STAGE 5 versions","platform":"YouTube primary, TikTok secondary","timing":"Evergreen","steps":["Generate one STAGE 0","Generate 4 STAGE 5 budgets","List costs per element","Reveal best value","Multi-part series"],"keywords":["renovation budget comparison","cost breakdown","cost tiers","how much renovation costs","budget vs luxury"],"hashtags":["#budgetcomparison","#renovationcost","#worthit","#luxuryvsbudget","#homevalue","#renovation","#costbreakdown","#realtalk","#homeimprovement","#smartspending"],"series":"THE DOLLAR SERIES every room","engage":"Which budget? Which shocked you?","unique":"True 4-tier comparison never done properly."},
279
+ {"dim":"Collaboration","title":"Chef Designed Kitchen vs Contractor Built It โ€” You JUDGE","score":9.0,"hook":"Someone who USES kitchen designs one vs someone who BUILDS them.","concept":"Chef prioritizes function. Contractor prioritizes build. Show both. Audience decides.","why":"Crosses audiences. Expert debate drives comments.","mode":"ARCHITECT 2 STAGE 5 versions","platform":"YouTube primary, TikTok secondary","timing":"Evergreen","steps":["Define chef vs contractor priorities","Generate both designs","Present reasoning","Side-by-side","Who wins poll"],"keywords":["chef kitchen","professional kitchen","design battle","function vs form","expert kitchen"],"hashtags":["#chefskitchen","#kitchendesign","#designbattle","#functionvsform","#renovation","#kitchengoals","#expert","#whowins","#foodie","#homedesign"],"series":"Expert vs Expert series","engage":"CHEF or CONTRACTOR pick side","unique":"Cross-professional battles untapped."}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
280
  ]
281
+ self.OVERSATURATED = ["Basic before/after no story","Generic renovation stock music","Simple room tour no transformation","All-white reveals","Generic satisfying compilations","Unedited raw footage","All-gray everything"]
282
 
283
  def generate_ideas(self, count=5):
284
  random.shuffle(self.IDEA_LIBRARY)
285
+ return self.IDEA_LIBRARY[:min(count, len(self.IDEA_LIBRARY))]
 
 
 
 
 
286
 
287
  def format_ideas(self, ideas):
288
  parts = []
 
294
  parts.append(f"\nโš ๏ธ AVOID THESE (Oversaturated):")
295
  for item in random.sample(self.OVERSATURATED, min(5, len(self.OVERSATURATED))):
296
  parts.append(f" โ€ข {item}")
 
297
  for i, d in enumerate(ideas, 1):
298
  parts.append(f"\n{'โ•' * 60}")
299
  parts.append(f"๐Ÿ’ก IDEA #{i} โ€” {d['dim']}")
 
302
  parts.append(f"\n๐Ÿ”ฅ VIRAL SCORE: {d['score']}/10")
303
  parts.append(f"\n๐ŸŽฏ HOOK: {d['hook']}")
304
  parts.append(f"\n๐Ÿ“– CONCEPT:\n{textwrap.fill(d['concept'], 95)}")
305
+ parts.append(f"\n๐Ÿง  WHY: {d['why']}")
306
  parts.append(f"\n๐ŸŽฌ MODE: {d['mode']}")
307
  parts.append(f"\n๐Ÿ“ฑ PLATFORM: {d['platform']}")
308
  parts.append(f"\nโฑ๏ธ TIMING: {d['timing']}")
309
+ parts.append(f"\n๐Ÿ“ BLUEPRINT:")
310
+ for j, s in enumerate(d['steps'], 1):
311
+ parts.append(f" Step {j}: {s}")
312
  parts.append(f"\n๐Ÿท๏ธ KEYWORDS: {', '.join(d['keywords'])}")
313
  parts.append(f"\n#๏ธโƒฃ HASHTAGS: {' '.join(d['hashtags'])}")
314
  parts.append(f"\n๐Ÿ“บ SERIES: {d['series']}")
315
+ parts.append(f"\n๐Ÿ’ฌ ENGAGE: {d['engage']}")
316
  parts.append(f"\nโšก UNIQUE: {d['unique']}")
 
317
  parts.append(f"\n{'โ•' * 60}")
318
+ parts.append("Click Generate again for NEW ideas!")
319
  parts.append("=" * 60)
320
  return "\n".join(parts)
321
 
322
  def generate_calendar(self, days=30):
323
+ parts = [f"{'โ•' * 60}", f"๐Ÿ“… {days}-DAY CONTENT CALENDAR", f"{'โ•' * 60}\n"]
 
 
 
324
  start = datetime.now()
325
  for day in range(days):
326
  curr = start + timedelta(days=day)
327
  d = random.choice(self.IDEA_LIBRARY)
328
  parts.append(f"๐Ÿ“Œ Day {day+1} | {curr.strftime('%b %d')} ({curr.strftime('%A')})")
329
  parts.append(f" ๐Ÿ’ก {d['title']}")
330
+ parts.append(f" ๐Ÿ“ฑ {d['platform']} | ๐Ÿ”ฅ {d['score']}/10")
331
  parts.append(f" {'โ”€' * 50}")
332
  return "\n".join(parts)
333
 
334
+ CAMERA_MAP = {"Cinematic Storyteller":CameraProfile.CINEMATIC_STORYTELLER,"Documentary Witness":CameraProfile.DOCUMENTARY_WITNESS,"Architectural Digest":CameraProfile.ARCHITECTURAL_DIGEST,"Drone God":CameraProfile.DRONE_GOD,"Detail Hunter":CameraProfile.DETAIL_HUNTER}
335
+ LIGHTING_MAP = {"Golden Hour":"golden_hour","Blue Hour":"blue_hour","Overcast":"overcast_noon","Harsh Midday":"harsh_midday","Night Interior":"night_interior","Construction Lights":"construction_work_lights"}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
336
  NICHE_OPTIONS = ["kitchen","bathroom","bedroom","living room","exterior","landscape","vehicle","road","pool","restaurant","garage","office","basement","entryway"]
337
+ PRESETS = {"Kitchen โ†’ Modern Farmhouse":("Small 1970s Galley Kitchen","Modern Farmhouse Warm Minimalism","kitchen","65K"),"Bathroom โ†’ Japandi Spa":("Dated 1990s Master Bathroom","Luxury Japandi Spa Retreat","bathroom","42K"),"Exterior โ†’ Modern Craftsman":("1960s Ranch House Facade","Modern Craftsman Revival","exterior","95K"),"Mustang โ†’ Show Car":("1969 Ford Mustang Barn Find","Concours Show Quality","vehicle","80K"),"Yard โ†’ Resort Oasis":("Empty Dirt Backyard","Resort-Style Pool Oasis","landscape","120K"),"Warehouse โ†’ Ramen Bar":("Raw Commercial Warehouse","Japanese Ramen Restaurant","restaurant","150K"),"Dirt โ†’ Luxury Pool":("Empty Flat Backyard","Modern Resort Pool","pool","90K"),"Spare Room โ†’ Pro Office":("Empty Spare Bedroom","Executive Home Office","office","25K")}
 
 
 
 
 
 
 
 
 
 
338
 
339
  def fn_prompts(space, style, niche, cam, light, budget):
340
+ if not space or not style:
341
+ return "โŒ Fill Space Type and Style first."
342
  e = RealityShiftEngine()
343
  return e.generate_full_sequence(space, style, niche or "kitchen", CAMERA_MAP.get(cam, CameraProfile.CINEMATIC_STORYTELLER), LIGHTING_MAP.get(light, "golden_hour"), budget or "")
344
 
345
  def fn_ideas(count):
346
  e = MindBreachEngine()
347
+ return e.format_ideas(e.generate_ideas(int(count)))
 
348
 
349
  def fn_calendar(days):
350
+ return MindBreachEngine().generate_calendar(int(days))
 
351
 
352
  def fn_titles(space, style, niche):
353
+ if not space or not style:
354
+ return "โŒ Fill Space and Style."
355
  e = TitleKeywordEngine()
356
+ return e.format_output(e.generate_titles(space, style, niche or "interior"), e.generate_keywords(space, style, niche or "interior"))
 
 
357
 
358
  def fn_preset(name):
359
  if name in PRESETS:
 
361
  return d[0], d[1], d[2], d[3]
362
  return "", "", "", ""
363
 
364
+ HEADER_HTML = "<div style='text-align:center;padding:30px 20px 10px 20px;'><span style='font-size:3.5em;filter:drop-shadow(0 0 15px rgba(255,165,0,0.6));'>๐Ÿ”ฅ</span><h1 style='font-size:2.4em;margin:0;letter-spacing:1px;background:linear-gradient(90deg,#ff6b6b,#ffa500,#48dbfb);-webkit-background-clip:text;-webkit-text-fill-color:transparent;'>REALITY SHIFT ENGINE</h1><p style='color:#ffa500;font-size:1.15em;margin:5px 0;font-weight:600;'>+ ๐Ÿง  MIND BREACH ENGINE</p><p style='color:#888;font-size:0.95em;margin:5px 0;font-style:italic;'>Where AI ends and reality begins โ€” nobody can tell.</p><div style='margin:15px 0;display:flex;justify-content:center;gap:8px;flex-wrap:wrap;'><span style='background:#1a1a2e;color:#ffa500;padding:5px 14px;border-radius:20px;font-size:0.8em;border:1px solid #333;'>๐Ÿ“ธ 6-Stage Prompts</span><span style='background:#1a1a2e;color:#48dbfb;padding:5px 14px;border-radius:20px;font-size:0.8em;border:1px solid #333;'>๐Ÿ’ก Viral Ideas</span><span style='background:#1a1a2e;color:#ff6b6b;padding:5px 14px;border-radius:20px;font-size:0.8em;border:1px solid #333;'>๐Ÿท๏ธ Auto SEO</span><span style='background:#1a1a2e;color:#7bed9f;padding:5px 14px;border-radius:20px;font-size:0.8em;border:1px solid #333;'>๐Ÿ“… Content Calendar</span></div><div style='margin:15px auto;padding:12px 20px;background:linear-gradient(135deg,#1a1a2e,#16213e);border-radius:12px;border:1px solid #333;max-width:500px;'><p style='color:#ffa500;font-size:1em;margin:3px 0;font-weight:bold;'>โšก Built by ADRON</p><p style='color:#aaa;font-size:0.85em;margin:3px 0;'>Creators Tool for Content Ideas</p><div style='display:flex;justify-content:center;gap:15px;margin-top:10px;flex-wrap:wrap;'><a href='https://instagram.com/adron.publishing' target='_blank' style='color:#E1306C;text-decoration:none;font-size:0.85em;font-weight:500;'>๐Ÿ“ท Instagram</a><a href='https://t.me/Adron_Media' target='_blank' style='color:#0088cc;text-decoration:none;font-size:0.85em;font-weight:500;'>โœˆ๏ธ Telegram</a><a href='https://discord.com/users/mradnan' target='_blank' style='color:#7289DA;text-decoration:none;font-size:0.85em;font-weight:500;'>๐ŸŽฎ Discord</a><a href='mailto:bawalmedia7065@gmail.com' style='color:#ffa500;text-decoration:none;font-size:0.85em;font-weight:500;'>โœ‰๏ธ Email</a></div></div></div>"
365
 
366
+ FOOTER_HTML = "<div style='text-align:center;padding:25px 20px;border-top:1px solid #333;'><p style='color:#888;font-size:0.9em;'>๐Ÿ”ฅ <strong style='color:#ffa500;'>REALITY SHIFT ENGINE</strong> + ๐Ÿง  <strong style='color:#48dbfb;'>MIND BREACH ENGINE</strong></p><p style='color:#666;font-size:0.85em;margin:10px 0;'>Generate on <a href='https://openart.ai/home' target='_blank' style='color:#ffa500;font-weight:bold;'>OpenArt</a> โ†’ Animate with frame-to-video โ†’ Go viral</p><div style='margin:15px auto;padding:15px;background:#111;border-radius:12px;border:1px solid #222;max-width:450px;'><p style='color:#ffa500;font-size:0.95em;margin:3px 0;font-weight:bold;'>โšก ADRON</p><p style='color:#888;font-size:0.8em;margin:2px 0;'>Creators Tool for Content Ideas</p><div style='display:flex;justify-content:center;gap:12px;margin-top:10px;flex-wrap:wrap;'><a href='https://instagram.com/adron.publishing' target='_blank' style='color:#E1306C;text-decoration:none;font-size:0.82em;background:#1a1a1a;padding:4px 10px;border-radius:15px;border:1px solid #333;'>๐Ÿ“ท adron.publishing</a><a href='https://t.me/Adron_Media' target='_blank' style='color:#0088cc;text-decoration:none;font-size:0.82em;background:#1a1a1a;padding:4px 10px;border-radius:15px;border:1px solid #333;'>โœˆ๏ธ Telegram</a><a href='https://discord.com/users/mradnan' target='_blank' style='color:#7289DA;text-decoration:none;font-size:0.82em;background:#1a1a1a;padding:4px 10px;border-radius:15px;border:1px solid #333;'>๐ŸŽฎ mradnan</a><a href='mailto:bawalmedia7065@gmail.com' style='color:#ffa500;text-decoration:none;font-size:0.82em;background:#1a1a1a;padding:4px 10px;border-radius:15px;border:1px solid #333;'>โœ‰๏ธ Email</a></div></div><p style='color:#444;font-size:0.75em;margin-top:15px;font-style:italic;'>Let's make reality jealous. โœจ</p></div>"
 
 
 
 
367
 
368
+ with gr.Blocks(title="Reality Shift + Mind Breach Engine", theme=gr.themes.Soft(primary_hue="orange", secondary_hue="blue")) as app:
369
+ gr.HTML(HEADER_HTML)
370
  with gr.Tab("๐Ÿ“ธ Prompt Generator"):
371
  gr.Markdown("### Generate 6-Stage Transformation Prompts + Video Prompts")
372
  with gr.Row():
 
380
  inp_niche = gr.Dropdown(choices=NICHE_OPTIONS, label="๐Ÿ“‚ Niche", value="kitchen")
381
  inp_budget = gr.Textbox(label="๐Ÿ’ฐ Budget (optional)", placeholder="e.g. 65K")
382
  with gr.Row():
383
+ inp_cam = gr.Dropdown(choices=list(CAMERA_MAP.keys()), label="๐Ÿ“ท Camera", value="Cinematic Storyteller")
384
+ inp_light = gr.Dropdown(choices=list(LIGHTING_MAP.keys()), label="๐Ÿ’ก Lighting", value="Golden Hour")
385
  gen_btn = gr.Button("๐Ÿ”ฅ GENERATE FULL 6-STAGE SEQUENCE", variant="primary", size="lg")
386
  out_prompts = gr.Textbox(label="Output", lines=45, show_copy_button=True)
387
  preset_btn.click(fn_preset, [preset_dd], [inp_space, inp_style, inp_niche, inp_budget])
388
  gen_btn.click(fn_prompts, [inp_space, inp_style, inp_niche, inp_cam, inp_light, inp_budget], [out_prompts])
 
389
  with gr.Tab("๐Ÿ’ก Viral Ideas"):
390
  gr.Markdown("### ๐Ÿง  Mind Breach โ€” Viral Content Ideas")
391
  idea_count = gr.Slider(1, 10, 5, step=1, label="How many ideas?")
392
  idea_btn = gr.Button("๐Ÿ’ก Generate Viral Ideas", variant="primary", size="lg")
393
  out_ideas = gr.Textbox(label="Ideas", lines=45, show_copy_button=True)
394
  idea_btn.click(fn_ideas, [idea_count], [out_ideas])
 
395
  with gr.Tab("๐Ÿท๏ธ Titles & Keywords"):
396
  gr.Markdown("### ๐Ÿท๏ธ Auto Title & Keyword Generator")
397
  with gr.Row():
 
401
  tk_btn = gr.Button("๐Ÿท๏ธ Generate", variant="primary")
402
  out_tk = gr.Textbox(label="Titles & Keywords", lines=30, show_copy_button=True)
403
  tk_btn.click(fn_titles, [tk_space, tk_style, tk_niche], [out_tk])
 
404
  with gr.Tab("๐Ÿ“… Content Calendar"):
405
  gr.Markdown("### ๐Ÿ“… Auto Content Calendar")
406
  cal_days = gr.Slider(7, 90, 30, step=1, label="Days")
407
  cal_btn = gr.Button("๐Ÿ“… Generate Calendar", variant="primary", size="lg")
408
  out_cal = gr.Textbox(label="Calendar", lines=45, show_copy_button=True)
409
  cal_btn.click(fn_calendar, [cal_days], [out_cal])
 
410
  with gr.Tab("โ“ How To Use"):
411
+ gr.Markdown("### ๐Ÿš€ Quick Guide\n\n**๐Ÿ“ธ Prompt Generator:** Fill space + style โ†’ Click Generate โ†’ Copy prompts โ†’ Paste into OpenArt\n\n**๐Ÿ’ก Viral Ideas:** Click Generate โ†’ Get unique ideas with execution blueprints\n\n**๐Ÿท๏ธ Titles & Keywords:** Fill space + style โ†’ Get 3 titles + 55 keywords\n\n**๐Ÿ“… Calendar:** Pick days โ†’ Get complete posting plan\n\n### After Generating Prompts\n1. Copy each IMAGE prompt\n2. Go to [OpenArt](https://openart.ai/home)\n3. Paste and generate IMAGE 1-6\n4. Use frame-to-video to animate VIDEO 1-5\n5. Copy titles and keywords for posting\n\n### Tips\n- Click Generate multiple times for different outputs\n- Use copy button for one-click copy\n- Try different cameras and lighting\n- Presets save time")
412
+ gr.HTML(FOOTER_HTML)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
413
 
414
  app.launch()