Spaces:
Sleeping
Sleeping
Adnan commited on
Update app.py
Browse files
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
|
| 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
|
| 98 |
-
"prompt_tokens": "blue hour twilight lighting, deep blue sky
|
| 99 |
},
|
| 100 |
"overcast_noon": {
|
| 101 |
"color_temp": "6500-7500K",
|
| 102 |
-
"shadow_quality": "Extremely soft, diffused, minimal
|
| 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
|
| 105 |
},
|
| 106 |
"harsh_midday": {
|
| 107 |
"color_temp": "5500-6000K",
|
| 108 |
-
"shadow_quality": "Short, hard, high contrast
|
| 109 |
"window_behavior": "Sharp geometric light patterns on floors and walls",
|
| 110 |
-
"prompt_tokens": "harsh direct midday sunlight, sharp geometric shadow patterns, high contrast
|
| 111 |
},
|
| 112 |
"night_interior": {
|
| 113 |
"color_temp": "2700-3000K",
|
| 114 |
-
"shadow_quality": "Multiple soft shadow directions from
|
| 115 |
"window_behavior": "Windows appear as black mirrors reflecting interior",
|
| 116 |
-
"prompt_tokens": "nighttime interior
|
| 117 |
},
|
| 118 |
"construction_work_lights": {
|
| 119 |
"color_temp": "5000-6500K",
|
| 120 |
-
"shadow_quality": "Hard, multiple directions from temporary lights
|
| 121 |
-
"window_behavior": "
|
| 122 |
-
"prompt_tokens": "temporary construction work lights on tripods, harsh directional LED work lighting, multiple shadow directions, industrial unfinished
|
| 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",
|
| 139 |
-
"STAGE_1": ["completed renovation",
|
| 140 |
-
"STAGE_2": ["finished drywall",
|
| 141 |
-
"STAGE_3": ["furniture",
|
| 142 |
-
"STAGE_4": ["furniture",
|
| 143 |
-
"STAGE_5": ["construction debris",
|
| 144 |
}
|
| 145 |
-
|
| 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 |
-
|
| 191 |
-
|
| 192 |
-
]
|
| 193 |
-
|
| 194 |
-
|
| 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 |
-
|
| 258 |
-
|
| 259 |
-
|
| 260 |
-
|
| 261 |
-
|
| 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:
|
| 362 |
-
CameraProfile.ARCHITECTURAL_DIGEST:
|
| 363 |
-
CameraProfile.CINEMATIC_STORYTELLER:
|
| 364 |
-
CameraProfile.DRONE_GOD:
|
| 365 |
-
CameraProfile.DETAIL_HUNTER:
|
| 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 |
-
|
| 380 |
-
|
| 381 |
-
|
| 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 |
-
|
| 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 =
|
| 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 |
-
|
| 454 |
if stage in [Stage.STAGE_4, Stage.STAGE_5]:
|
| 455 |
-
|
| 456 |
-
description = " ".join(
|
| 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: {
|
| 466 |
-
parts.append(f"\n๐ฌ
|
| 467 |
-
parts.append(f"\n๐ก LIGHTING: {lc['prompt_tokens']}.
|
| 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 |
-
|
| 477 |
-
(
|
| 478 |
-
|
| 479 |
-
|
| 480 |
-
|
| 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 |
-
|
| 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
|
| 505 |
-
parts.append(f"\nACTION:\n{textwrap.fill(action,
|
| 506 |
-
parts.append(f"\nMOTION:\n{textwrap.fill(motion,
|
| 507 |
-
parts.append(f"\nDURATION: {
|
| 508 |
-
parts.append(f"\nโ FORBIDDEN: No cuts. No teleporting
|
| 509 |
-
|
| 510 |
-
# CTA
|
| 511 |
parts.append("=" * 60)
|
| 512 |
-
parts.append("โ
GENERATE YOUR
|
| 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":
|
| 529 |
-
|
| 530 |
-
|
| 531 |
-
|
| 532 |
-
|
| 533 |
-
|
| 534 |
-
|
| 535 |
-
|
| 536 |
-
|
| 537 |
-
|
| 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 |
-
|
| 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
|
| 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๐
|
| 669 |
-
for j,
|
| 670 |
-
parts.append(f" Step {j}: {
|
| 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๐ฌ
|
| 675 |
parts.append(f"\nโก UNIQUE: {d['unique']}")
|
| 676 |
-
|
| 677 |
parts.append(f"\n{'โ' * 60}")
|
| 678 |
-
parts.append("Click Generate again for
|
| 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']} | ๐ฅ
|
| 694 |
parts.append(f" {'โ' * 50}")
|
| 695 |
return "\n".join(parts)
|
| 696 |
|
| 697 |
-
|
| 698 |
-
|
| 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:
|
|
|
|
| 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 |
-
|
| 737 |
-
return e.format_ideas(ideas)
|
| 738 |
|
| 739 |
def fn_calendar(days):
|
| 740 |
-
|
| 741 |
-
return e.generate_calendar(int(days))
|
| 742 |
|
| 743 |
def fn_titles(space, style, niche):
|
| 744 |
-
if not space or not style:
|
|
|
|
| 745 |
e = TitleKeywordEngine()
|
| 746 |
-
|
| 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 |
-
|
| 757 |
|
| 758 |
-
|
| 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="
|
| 778 |
-
inp_light = gr.Dropdown(choices=list(LIGHTING_MAP.keys()), label="๐ก Lighting", value="
|
| 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 |
-
|
| 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()
|