Spaces:
Sleeping
Sleeping
| import os, random, textwrap, math | |
| from datetime import datetime, timedelta | |
| from enum import Enum | |
| from typing import List, Dict | |
| from dataclasses import dataclass | |
| import gradio as gr | |
| class CameraProfile(Enum): | |
| DOCUMENTARY_WITNESS = "Documentary Witness (24mm, f/8, static)" | |
| ARCHITECTURAL_DIGEST = "Architectural Digest (24mm TS, f/11, editorial)" | |
| CINEMATIC_STORYTELLER = "Cinematic Storyteller (35-50mm, f/2.8-4)" | |
| DRONE_GOD = "Drone God (24mm aerial, epic scale)" | |
| DETAIL_HUNTER = "Detail Hunter (50-100mm, f/2.8, tactile)" | |
| class Landmark: | |
| name: str | |
| position: str | |
| description: str | |
| class TitleBlock: | |
| primary: str | |
| alternate: str | |
| short: str | |
| class KeywordBlock: | |
| primary_seo: List[str] | |
| long_tail: List[str] | |
| hashtags: List[str] | |
| ai_platform_tags: List[str] | |
| metadata: List[str] | |
| LANGUAGES = { | |
| "English":{"title":"TITLE","keywords":"KEYWORDS","seo":"PRIMARY SEO","longtail":"LONG-TAIL","hash":"HASHTAGS","aitags":"AI TAGS","meta":"METADATA","scene":"SCENE LOCK","landmarks":"LANDMARKS","image":"IMAGE","video":"VIDEO","desc":"DESCRIPTION","light":"LIGHTING","mood":"MOOD","neg":"NEGATIVE","cam":"CAMERA","action":"ACTION","motion":"MOTION","duration":"DURATION","forbidden":"FORBIDDEN","generate":"GENERATE","cta":"Create images on OpenArt then animate videos","idea":"IDEA","hook":"HOOK","concept":"CONCEPT","why":"WHY IT WORKS","blueprint":"BLUEPRINT","engage":"ENGAGEMENT","unique":"UNIQUE","avoid":"AVOID THESE","calendar":"CONTENT CALENDAR","stage":"STAGE","of":"of"}, | |
| "Hindi":{"title":"शीर्षक","keywords":"कीवर्ड","seo":"प्राथमिक SEO","longtail":"लॉन्ग-टेल","hash":"हैशटैग","aitags":"AI टैग","meta":"मेटाडाटा","scene":"सीन लॉक","landmarks":"लैंडमार्क","image":"इमेज","video":"वीडियो","desc":"विवरण","light":"लाइटिंग","mood":"मूड","neg":"नेगेटिव","cam":"कैमरा","action":"एक्शन","motion":"मोशन","duration":"अवधि","forbidden":"वर्जित","generate":"जनरेट करें","cta":"OpenArt पर इमेज बनाएं फिर वीडियो एनिमेट करें","idea":"आइडिया","hook":"हुक","concept":"कॉन्सेप्ट","why":"क्यों काम करेगा","blueprint":"ब्लूप्रिंट","engage":"एंगेजमेंट","unique":"यूनीक","avoid":"इनसे बचें","calendar":"कंटेंट कैलेंडर","stage":"चरण","of":"का"}, | |
| "Urdu":{"title":"عنوان","keywords":"کلیدی الفاظ","seo":"بنیادی SEO","longtail":"لانگ ٹیل","hash":"ہیش ٹیگ","aitags":"AI ٹیگ","meta":"میٹا ڈیٹا","scene":"سین لاک","landmarks":"لینڈ مارکس","image":"تصویر","video":"ویڈیو","desc":"تفصیل","light":"روشنی","mood":"موڈ","neg":"منفی","cam":"کیمرہ","action":"ایکشن","motion":"حرکت","duration":"دورانیہ","forbidden":"ممنوع","generate":"بنائیں","cta":"OpenArt پر تصاویر بنائیں پھر ویڈیو اینیمیٹ کریں","idea":"آئیڈیا","hook":"ہک","concept":"تصور","why":"کیوں کام کرے گا","blueprint":"بلیو پرنٹ","engage":"مصروفیت","unique":"منفرد","avoid":"ان سے بچیں","calendar":"مواد کیلنڈر","stage":"مرحلہ","of":"کا"}, | |
| "Spanish":{"title":"TÍTULO","keywords":"PALABRAS CLAVE","seo":"SEO PRIMARIO","longtail":"COLA LARGA","hash":"HASHTAGS","aitags":"ETIQUETAS AI","meta":"METADATOS","scene":"BLOQUEO ESCENA","landmarks":"PUNTOS REF","image":"IMAGEN","video":"VIDEO","desc":"DESCRIPCIÓN","light":"ILUMINACIÓN","mood":"ÁNIMO","neg":"NEGATIVO","cam":"CÁMARA","action":"ACCIÓN","motion":"MOVIMIENTO","duration":"DURACIÓN","forbidden":"PROHIBIDO","generate":"GENERA","cta":"Crea imágenes en OpenArt luego anima videos","idea":"IDEA","hook":"GANCHO","concept":"CONCEPTO","why":"POR QUÉ","blueprint":"PLAN","engage":"ENGAGEMENT","unique":"ÚNICO","avoid":"EVITA","calendar":"CALENDARIO","stage":"ETAPA","of":"de"}, | |
| "Chinese":{"title":"标题","keywords":"关键词","seo":"主要SEO","longtail":"长尾","hash":"标签","aitags":"AI标签","meta":"元数据","scene":"场景锁定","landmarks":"地标","image":"图片","video":"视频","desc":"描述","light":"灯光","mood":"情绪","neg":"负面","cam":"摄像机","action":"动作","motion":"运动","duration":"时长","forbidden":"禁止","generate":"生成","cta":"在OpenArt创建图片然后动画视频","idea":"创意","hook":"钩子","concept":"概念","why":"为什么有效","blueprint":"蓝图","engage":"互动","unique":"独特","avoid":"避免","calendar":"内容日历","stage":"阶段","of":"的"}, | |
| "Vietnamese":{"title":"TIÊU ĐỀ","keywords":"TỪ KHÓA","seo":"SEO CHÍNH","longtail":"TỪ KHÓA DÀI","hash":"HASHTAG","aitags":"THẺ AI","meta":"METADATA","scene":"KHÓA CẢNH","landmarks":"MỐC","image":"HÌNH","video":"VIDEO","desc":"MÔ TẢ","light":"ÁNH SÁNG","mood":"TÂM TRẠNG","neg":"PHỦ ĐỊNH","cam":"MÁY QUAY","action":"HÀNH ĐỘNG","motion":"CHUYỂN ĐỘNG","duration":"THỜI LƯỢNG","forbidden":"CẤM","generate":"TẠO","cta":"Tạo hình trên OpenArt rồi animate video","idea":"Ý TƯỞNG","hook":"MỒI","concept":"KHÁI NIỆM","why":"TẠI SAO","blueprint":"KẾ HOẠCH","engage":"TƯƠNG TÁC","unique":"ĐỘC ĐÁO","avoid":"TRÁNH","calendar":"LỊCH","stage":"GIAI ĐOẠN","of":"của"}, | |
| "Khmer":{"title":"ចំណងជើង","keywords":"ពាក្យគន្លឹះ","seo":"SEO ចម្បង","longtail":"ពាក្យវែង","hash":"ហាសថេក","aitags":"ស្លាក AI","meta":"មេតាដាតា","scene":"ចាក់សោឈុត","landmarks":"ចំណុចថេរ","image":"រូបភាព","video":"វីដេអូ","desc":"ការពិពណ៌នា","light":"ពន្លឺ","mood":"អារម្មណ៍","neg":"អវិជ្ជមាន","cam":"កាមេរ៉ា","action":"សកម្មភាព","motion":"ចលនា","duration":"រយៈពេល","forbidden":"ហាមឃាត់","generate":"បង្កើត","cta":"បង្កើតរូបនៅ OpenArt រួចធ្វើវីដេអូ","idea":"គំនិត","hook":"ទាក់ទាញ","concept":"គោលគំនិត","why":"ហេតុអ្វី","blueprint":"ផែនការ","engage":"អន្តរកម្ម","unique":"ពិសេស","avoid":"ជៀសវាង","calendar":"ប្រតិទិន","stage":"ដំណាក់កាល","of":"នៃ"}, | |
| "French":{"title":"TITRE","keywords":"MOTS-CLÉS","seo":"SEO PRIMAIRE","longtail":"LONGUE TRAÎNE","hash":"HASHTAGS","aitags":"TAGS AI","meta":"MÉTADONNÉES","scene":"VERROUILLAGE","landmarks":"REPÈRES","image":"IMAGE","video":"VIDÉO","desc":"DESCRIPTION","light":"ÉCLAIRAGE","mood":"AMBIANCE","neg":"NÉGATIF","cam":"CAMÉRA","action":"ACTION","motion":"MOUVEMENT","duration":"DURÉE","forbidden":"INTERDIT","generate":"GÉNÉRER","cta":"Créez les images sur OpenArt puis animez les vidéos","idea":"IDÉE","hook":"ACCROCHE","concept":"CONCEPT","why":"POURQUOI","blueprint":"PLAN","engage":"ENGAGEMENT","unique":"UNIQUE","avoid":"ÉVITER","calendar":"CALENDRIER","stage":"ÉTAPE","of":"de"}, | |
| "Arabic":{"title":"العنوان","keywords":"الكلمات المفتاحية","seo":"SEO أساسي","longtail":"كلمات طويلة","hash":"هاشتاق","aitags":"علامات AI","meta":"بيانات وصفية","scene":"قفل المشهد","landmarks":"معالم","image":"صورة","video":"فيديو","desc":"الوصف","light":"الإضاءة","mood":"المزاج","neg":"سلبي","cam":"الكاميرا","action":"الحركة","motion":"الحركة","duration":"المدة","forbidden":"ممنوع","generate":"إنشاء","cta":"أنشئ الصور على OpenArt ثم حرك الفيديو","idea":"فكرة","hook":"جذب","concept":"المفهوم","why":"لماذا ينجح","blueprint":"الخطة","engage":"التفاعل","unique":"فريد","avoid":"تجنب","calendar":"تقويم المحتوى","stage":"مرحلة","of":"من"}, | |
| "Portuguese":{"title":"TÍTULO","keywords":"PALAVRAS-CHAVE","seo":"SEO PRIMÁRIO","longtail":"CAUDA LONGA","hash":"HASHTAGS","aitags":"TAGS AI","meta":"METADADOS","scene":"BLOQUEIO","landmarks":"MARCOS","image":"IMAGEM","video":"VÍDEO","desc":"DESCRIÇÃO","light":"ILUMINAÇÃO","mood":"HUMOR","neg":"NEGATIVO","cam":"CÂMERA","action":"AÇÃO","motion":"MOVIMENTO","duration":"DURAÇÃO","forbidden":"PROIBIDO","generate":"GERAR","cta":"Crie imagens no OpenArt depois anime os vídeos","idea":"IDEIA","hook":"GANCHO","concept":"CONCEITO","why":"POR QUÊ","blueprint":"PLANO","engage":"ENGAJAMENTO","unique":"ÚNICO","avoid":"EVITAR","calendar":"CALENDÁRIO","stage":"ETAPA","of":"de"} | |
| } | |
| LIGHTING_DB = { | |
| "golden_hour":{"temp":"2500-3500K","shadow":"Long warm directional soft","tokens":"golden hour warm directional sunlight, long amber shadows, dust particles in light beams, 3000K, cinematic warm"}, | |
| "blue_hour":{"temp":"9000-15000K","shadow":"Very soft ethereal","tokens":"blue hour twilight, deep blue sky, warm interior vs cool exterior, intimate atmospheric"}, | |
| "overcast":{"temp":"6500-7500K","shadow":"Extremely soft diffused","tokens":"soft overcast daylight, even diffused illumination, no harsh shadows, neutral temperature"}, | |
| "harsh_midday":{"temp":"5500-6000K","shadow":"Short hard high contrast","tokens":"harsh midday sunlight, sharp geometric shadows, high contrast, bright highlights, deep shadows"}, | |
| "night":{"temp":"2700-3000K","shadow":"Multiple soft from artificial","tokens":"nighttime warm artificial 2700K, multiple sources, windows as mirrors, warm inviting"}, | |
| "work_lights":{"temp":"5000-6500K","shadow":"Hard multiple directions","tokens":"construction work lights on tripods, harsh LED, multiple shadows, industrial unfinished"} | |
| } | |
| MASTER_PHASES = [ | |
| {"name":"ABANDONED DECAY","pct":0,"mood":"Hopelessness with whisper of potential","elements":["visible structural damage decay","nature reclaiming — weeds mold rust rot","debris abandonment evidence","harsh unflattering lighting","desaturated greens browns grays","storytelling detail — old item faded sign","dust particles in light beams","cracked missing glass cobwebs","water damage stains ceiling walls","peeling paint curling wallpaper"],"neg_add":["clean surfaces","new materials","furniture"],"lighting":"overcast"}, | |
| {"name":"INITIAL ASSESSMENT","pct":3,"mood":"Evaluating the challenge ahead","elements":["inspector or contractor with clipboard examining space","flashlight beams cutting through darkness","measuring tape extended along walls","notes being written on clipboard","PPE worn — hard hat glasses","test holes cut in walls revealing hidden conditions","moisture meter pressed against surfaces","camera documenting existing conditions","red spray paint marking problem areas","ladder leaning against wall for ceiling inspection"],"neg_add":["renovation started","new materials"],"lighting":"work_lights"}, | |
| {"name":"HAZMAT AND TESTING","pct":6,"mood":"Uncovering hidden dangers","elements":["hazmat suited workers with respirators","asbestos test samples being collected","lead paint test kits on windowsills","mold remediation barriers going up","negative air pressure machines with HEPA filters","warning tape cordoning off areas","sample bags labeled and sealed","containment plastic sheeting on walls","air quality monitoring equipment","workers in full Tyvek suits"],"neg_add":["demolition started","clean areas"],"lighting":"work_lights"}, | |
| {"name":"UTILITY DISCONNECT","pct":9,"mood":"Cutting the old lifelines","elements":["electrician at breaker panel labeling circuits","main water shut-off being turned","gas line being capped and tagged","HVAC system being powered down","old wiring being identified and marked","plumber capping water lines","temporary power panel being set up","generator running outside for temporary power","utility locate marks on exterior walls","meters being noted and documented"],"neg_add":["new fixtures","finished surfaces"],"lighting":"work_lights"}, | |
| {"name":"PROTECTION SETUP","pct":12,"mood":"Preparing the battlefield","elements":["floor protection — ram board or heavy paper being rolled out","plastic sheeting taped over doorways creating dust barriers","tape and poly covering fixtures that remain","plywood protecting surfaces not being renovated","dust containment zipper doors installed","HEPA air scrubbers positioned and running","temporary lighting strings being hung","tool staging area organized near entry","dumpster being delivered and positioned outside","portable toilet arriving on site"],"neg_add":["demolition debris","finished work"],"lighting":"work_lights"}, | |
| {"name":"SOFT DEMOLITION","pct":15,"mood":"First satisfying destruction","elements":["workers removing trim and molding carefully with pry bars","cabinet doors being unscrewed and stacked","countertops being pried loose and carried out","fixtures disconnected — sinks toilets lights removed","flooring being pulled up starting at edges","wallpaper being steamed and scraped off walls","drop ceiling tiles being removed revealing structure above","old carpet being cut into strips and rolled","appliances being dollied out through doorways","tile being chipped off walls with hammer and chisel"],"neg_add":["new materials installed","clean surfaces"],"lighting":"work_lights"}, | |
| {"name":"HEAVY DEMOLITION","pct":20,"mood":"Full destruction energy — satisfying chaos","elements":["sledgehammers swinging into drywall creating dust explosions","reciprocating saw cutting through framing members","pry bars leveraging out stubborn materials","dust clouds filling air catching light beams","debris pile growing near exit — drywall chunks wood scraps nails","workers in full PPE — hard hats N95 masks safety glasses gloves","wheelbarrow loads being dumped into dumpster","crowbar splitting apart old built-in cabinets","old bathtub being broken apart with sledge","exposed layers visible — old wallpaper paint colors subfloor"],"neg_add":["new construction","finished elements"],"lighting":"work_lights"}, | |
| {"name":"STRUCTURAL DEMOLITION","pct":24,"mood":"Opening up possibilities","elements":["load bearing wall assessment with engineer marks","temporary shoring posts supporting ceiling during wall removal","header beam ready for installation — LVL or steel","saw cutting through wall opening with dust extraction","removed wall section revealing new open space","support columns being installed permanently","structural engineer inspection marks on framing","jack posts holding load while permanent beam installed","debris from wall removal being hauled out","new spatial relationship visible for first time"],"neg_add":["finished drywall","paint","fixtures"],"lighting":"work_lights"}, | |
| {"name":"DEBRIS REMOVAL AND CLEAN","pct":27,"mood":"Clean slate emerging","elements":["workers shoveling debris into heavy contractor bags","broom sweeping subfloor clean of dust and nails","shop vacuum cleaning fine debris from corners","dumpster nearly full being swapped for empty one","subfloor being inspected after debris cleared","nail heads being pulled or pounded flat","remaining structure being evaluated for soundness","clean swept space showing bones of room","work lights illuminating clean empty shell","fresh air flowing through opened windows"],"neg_add":["new materials","construction in progress"],"lighting":"work_lights"}, | |
| {"name":"SUBFLOOR REPAIR","pct":30,"mood":"Building on solid ground","elements":["rotted subfloor sections being cut out with circular saw","new plywood being measured cut and fitted into gaps","subfloor screws being driven into joists below","floor leveling compound being mixed and poured","self-leveling compound flowing across low spots","squeaky floor sections being re-screwed to joists","moisture barrier being rolled out over concrete","crack repair in concrete slab with epoxy fill","sanding high spots on subfloor with belt sander","level being placed across floor showing improved flatness"],"neg_add":["finished flooring","furniture"],"lighting":"work_lights"}, | |
| {"name":"FRAMING AND STRUCTURE","pct":33,"mood":"Bones of the new design taking shape","elements":["new wall framing going up — studs at 16 inch on center","top and bottom plates being nailed to ceiling and floor","door and window openings being framed with headers","blocking being installed between studs for mounting points","corner framing using proper three-stud assembly","metal framing brackets and hurricane ties visible","plumb bob or laser level checking wall straightness","framing nailer driving nails into studs rapidly","lumber stacks organized by size near work area","pencil marks and measurements visible on framing"],"neg_add":["drywall","paint","fixtures"],"lighting":"work_lights"}, | |
| {"name":"WINDOW AND DOOR INSTALLATION","pct":36,"mood":"Light begins to enter properly","elements":["new window being lifted into rough opening","shims being placed to level and plumb window frame","window flashing tape being applied — sill pan first then sides then head","spray foam being applied around window perimeter in thin bead","new exterior door being hung on hinges and adjusted","weather stripping being applied to door frame","door hardware rough-in — drilling holes for handle and deadbolt","temporary cardboard protection placed over new glass","window operation being tested — open close lock","natural light flooding through new clean glass"],"neg_add":["finished trim","curtains","staged furniture"],"lighting":"work_lights"}, | |
| {"name":"ELECTRICAL ROUGH-IN","pct":40,"mood":"Invisible power network emerging","elements":["electrician drilling holes through studs for wire runs","Romex cable being pulled through framing members","new electrical boxes nailed to studs at correct heights — outlets 12-16 inches switches 48 inches","wire nuts connecting circuits in junction boxes","new breaker panel being mounted and wired","dedicated circuits being run for kitchen appliances","recessed light cans being positioned in ceiling","low voltage runs — ethernet CAT6 speaker wire smart home","wire labels identifying each circuit at panel","inspector marks on framing — rough inspection passed"],"neg_add":["finished outlets","light fixtures","drywall covering"],"lighting":"work_lights"}, | |
| {"name":"PLUMBING ROUGH-IN","pct":43,"mood":"Water pathways being carved","elements":["PEX supply lines being run in red and blue — hot and cold","copper sweat fittings being soldered with torch","ABS or PVC drain lines being glued and fitted","toilet flange being set at correct height for finished floor","shower valve rough-in being installed in wall — hot on left","water supply lines stubbed out at sink and fixture locations","drain lines sloping correctly — quarter inch per foot","pressure test being performed — gauge showing holding pressure","plumber with pipe wrench tightening connections","vent pipes running up through roof penetration"],"neg_add":["finished fixtures","faucets","toilets installed"],"lighting":"work_lights"}, | |
| {"name":"HVAC ROUGH-IN","pct":46,"mood":"Climate control infrastructure","elements":["sheet metal ductwork being assembled and hung in ceiling","flexible duct runs connecting to main trunk line","new supply registers being positioned in floor or ceiling","return air duct being sized and installed","HVAC technician sealing duct joints with mastic","new furnace or air handler being positioned","refrigerant lines being run for AC unit","thermostat wire being pulled to central location","exhaust fan duct being run to exterior","dampers being installed in branch ducts for zone control"],"neg_add":["finished registers","thermostats mounted","drywall covering"],"lighting":"work_lights"}, | |
| {"name":"ROUGH INSPECTION","pct":49,"mood":"Official validation checkpoint","elements":["building inspector with clipboard examining framing","inspector checking electrical box fills and wire routing","plumbing pressure test gauge being verified by inspector","fire blocking being checked between floors","inspector marking approved items with spray paint or sticker","contractor discussing code compliance at specific points","inspection card being signed and posted","photos being taken of hidden work before close-up","any corrections being noted and addressed","green sticker or approval tag visible on permit board"],"neg_add":["drywall installed","finished surfaces"],"lighting":"work_lights"}, | |
| {"name":"INSULATION","pct":52,"mood":"Wrapping the space in comfort","elements":["fiberglass batt insulation being pressed between studs","spray foam being applied in wall cavities expanding to fill gaps","rigid foam board being cut and fitted in specific areas","vapor barrier poly sheeting being stapled over insulation","insulation being carefully fitted around electrical boxes","sound insulation batts in interior walls for privacy","attic insulation being blown in above ceiling","insulation inspector verifying R-values and coverage","unfaced batts in interior walls for sound control","clean cuts around pipes and wires maintaining continuous barrier"],"neg_add":["drywall","paint","finished surfaces"],"lighting":"work_lights"}, | |
| {"name":"DRYWALL HANGING","pct":55,"mood":"Walls taking solid form","elements":["drywall sheets being lifted and screwed to ceiling first","wall sheets going up — horizontal seams 4 feet from floor","drywall screws being driven just below paper surface","T-square guiding utility knife cuts for outlets and switches","drywall lift holding ceiling panels while being screwed","stagger pattern on joints for strength","sheets being measured and scored and snapped to fit","cutouts being made around electrical boxes with rotozip","dust from cutting filling air","stacks of unused sheets leaning against far wall"],"neg_add":["mud tape","paint","finished walls"],"lighting":"work_lights"}, | |
| {"name":"DRYWALL TAPING AND FIRST COAT","pct":58,"mood":"Seams beginning to disappear","elements":["paper tape being bedded into joint compound on flat seams","mesh tape applied to butt joints and corners","first coat of mud applied over tape with 6-inch knife","inside corners being finished with corner tool","outside corner bead being mudded with first coat","screw dimples getting first fill of compound","mud being mixed to correct consistency — like thick peanut butter","hawk and trowel being used for larger areas","excess mud being scraped back into bucket","visible tape lines under thin first coat still showing through"],"neg_add":["smooth walls","paint","sanded finish"],"lighting":"work_lights"}, | |
| {"name":"DRYWALL SECOND COAT","pct":60,"mood":"Surfaces smoothing out","elements":["second wider coat with 10-inch knife feathering edges outward","more mud building up over tape creating smoother surface","corner bead getting second coat with wider feather","butt joints getting extra attention with wider swipe","screw fills getting second pass","compound drying to lighter color as moisture evaporates","sanding screen touching up high spots between coats","dust being vacuumed before next coat","worker running hand across surface feeling for ridges","smooth progression visible compared to first coat"],"neg_add":["final smooth","paint ready"],"lighting":"work_lights"}, | |
| {"name":"DRYWALL FINAL COAT AND SAND","pct":63,"mood":"Glass-smooth surfaces emerging","elements":["third finish coat with 12-inch knife creating wide feathered edges","fine sanding with 120-grit sanding screen on pole sander","fine white sanding dust coating everything","worker wearing dust mask and goggles during sanding","shop light held at angle to check for imperfections","small touch-ups being applied with 6-inch knife","sanding between coats creating powder-fine dust","vacuum being run along baseplate area","walls approaching smooth paintable surface","critical eye inspection with raking light revealing any remaining flaws"],"neg_add":["paint","primer","finished"],"lighting":"work_lights"}, | |
| {"name":"PRIMING","pct":66,"mood":"The blank canvas appears","elements":["PVA primer being rolled onto raw drywall with 9-inch roller","primer sealing drywall compound creating uniform absorption","brush cutting in primer at ceiling line and corners","roller extension pole reaching ceiling areas","even white coating transforming patchy drywall to uniform surface","primer drying from wet sheen to flat matte","drips being caught and back-rolled immediately","primer revealing any remaining imperfections for final touch-up","blue painters tape being applied at transitions before primer","drop cloths protecting subfloor from drips"],"neg_add":["color paint","finished walls","furniture"],"lighting":"work_lights"}, | |
| {"name":"PAINTING — CEILING FIRST","pct":68,"mood":"Color transformation beginning from above","elements":["ceiling paint being rolled in one direction for uniform finish","cutting in with brush where ceiling meets wall — steady hand on line","flat white ceiling paint creating clean bright overhead surface","extension roller covering ceiling in overlapping W-patterns","paint tray on step ladder platform","drips being caught before they dry","second coat going on after first coat dried — sheen evening out","ceiling appearing fresh and new — bright clean white","edges crisp where ceiling meets wall line","visible transformation — dingy to bright overhead"],"neg_add":["wall color","trim paint","furniture"],"lighting":"work_lights"}, | |
| {"name":"PAINTING — WALLS","pct":71,"mood":"The design vision materializing in color","elements":["wall color being rolled on in smooth even passes","brush cutting in at ceiling line with steady precise strokes","W-pattern roller technique creating even coverage","first coat showing slightly uneven — roller marks visible","second coat evening everything out to smooth uniform finish","blue painters tape being pulled revealing crisp paint lines","color transforming the space — matching the design vision","paint can label showing the specific color choice","roller tray with rich pigmented paint","visible before-after on same wall — primed vs painted section"],"neg_add":["furniture","staging","trim installed"],"lighting":"harsh_midday"}, | |
| {"name":"TRIM PAINTING","pct":73,"mood":"Defining the details","elements":["baseboards being painted on sawhorses before installation — brush strokes along grain","door casings being painted with smooth brush technique","window frames getting careful coat of trim paint","semi-gloss or satin finish creating subtle sheen on trim pieces","painter taping off walls where trim will meet","small detail brush painting around hardware areas","trim pieces laid out in order drying on saw horses","white or accent color trim contrasting wall color","careful hand cutting edges where trim meets wall","final touch-ups on trim with small artist brush for precision"],"neg_add":["furniture","staging","unfinished trim"],"lighting":"harsh_midday"}, | |
| {"name":"TILE WORK — FLOOR","pct":76,"mood":"Permanent surface transformation underway","elements":["thinset mortar being spread with notched trowel creating uniform ridges","tiles being pressed into thinset one by one with slight twist to set","tile spacers maintaining consistent grout joint width","level being checked across multiple tiles for flatness","tile cutter scoring and snapping cuts for edges and corners","wet saw making precise cuts for complex shapes around obstacles","tiles progressing across floor from far corner toward door","partial installation showing subfloor transitioning to tiled surface","consistent pattern emerging — straight lines, aligned grout joints","worker on knee pads pressing tiles methodically"],"neg_add":["grout","furniture","staging"],"lighting":"harsh_midday"}, | |
| {"name":"TILE WORK — WALLS AND BACKSPLASH","pct":78,"mood":"Vertical surfaces getting their armor","elements":["wall tile being set from bottom ledger board working upward","backsplash tile being installed above countertop area","pattern alignment being checked with level and straight edge","notched trowel spreading thinset on wall surface","tiles being pressed firmly and wiggled slightly into position","accent tiles or decorative pattern being carefully placed","niche or shelf area being tiled with precision cuts","edge pieces or bullnose being installed at transitions","worker standing on step stool reaching upper courses","tile progression visible — bottom rows set, upper rows in progress"],"neg_add":["grout","staging","complete"],"lighting":"harsh_midday"}, | |
| {"name":"GROUTING","pct":80,"mood":"Lines defining the pattern","elements":["grout being mixed to thick peanut butter consistency","rubber float pushing grout diagonally across tile joints","excess grout being wiped with damp sponge in circular motion","grout joints filling completely — no voids or gaps","color of grout complementing tile selection","second pass with clean sponge refining joint lines","grout haze drying on tile surface","final wipe with dry cloth buffing away remaining haze","sealed grout joints creating uniform finished appearance","transformation visible — tiles unified by consistent grout lines"],"neg_add":["dirty grout","unfinished joints"],"lighting":"harsh_midday"}, | |
| {"name":"FLOORING INSTALLATION","pct":82,"mood":"Ground-level transformation spreading","elements":["hardwood or LVP planks clicking together progressing across room","spacers maintaining expansion gap at walls","planks being measured and cut on miter saw for end pieces","stagger pattern maintaining random natural appearance","tapping block and mallet seating planks together tightly","pull bar used for last row against wall","underlayment visible at leading edge of installation","transition strips being placed at doorway thresholds","floor material progressing — bare subfloor on one side finished floor on other","worker on knees installing planks methodically left to right"],"neg_add":["furniture","staging","baseboards"],"lighting":"harsh_midday"}, | |
| {"name":"CABINET INSTALLATION","pct":84,"mood":"Storage and function arriving","elements":["level line marked on wall for upper cabinet alignment","French cleat rail being screwed through drywall into studs","upper cabinets being lifted to rail and secured","base cabinets being positioned leveled and shimmed","cabinets being screwed together through face frames","filler strips cut and installed at wall transitions","corner cabinet being installed with special pull-out hardware","crown molding or light rail being attached to cabinet tops/bottoms","cabinet doors being hung and adjusted for alignment","soft-close hinges being calibrated for smooth operation"],"neg_add":["countertops","hardware","staging"],"lighting":"golden_hour"}, | |
| {"name":"COUNTERTOP INSTALLATION","pct":86,"mood":"The hero surface arriving","elements":["stone slab being carried in by two workers — heavy and careful","countertop being lowered onto base cabinets precisely","level being checked across surface","seam being aligned and joined with color-matched epoxy","sink cutout area being finished","countertop being shimmed for perfect level","silicone adhesive being applied at cabinet contact points","backsplash piece being set against wall","overhang being checked for consistent reveal","first light catching the polished surface — material beauty visible"],"neg_add":["accessories","staging","dirty surface"],"lighting":"golden_hour"}, | |
| {"name":"TRIM AND BASEBOARD INSTALL","pct":88,"mood":"Clean lines framing the space","elements":["baseboards being positioned and nailed with finish nailer","nail gun popping as brad nails secure trim to wall","caulk being run along top edge of baseboard — smooth finger wipe","door casings being mitered and nailed creating clean frames","window trim being installed with reveals","shoe molding being added at floor-baseboard transition","nail holes being filled with color-matched putty","crown molding being cut at precise angles on miter saw","scarf joints connecting long runs of trim seamlessly","the satisfying moment trim creates defined clean lines everywhere"],"neg_add":["paint touch-up needed","unfinished areas"],"lighting":"golden_hour"}, | |
| {"name":"FIXTURE INSTALLATION — PLUMBING","pct":90,"mood":"Function meeting beauty","elements":["faucet being mounted through countertop holes and tightened below","sink being dropped in or mounted from below","supply lines being connected to shut-off valves hand-tight then wrench","drain assembly being connected — P-trap aligned","toilet being set on new wax ring and bolted down","shower head being threaded onto arm and tightened","towel bars and toilet paper holder being drilled and mounted","water being turned on — testing each fixture for leaks","garbage disposal being mounted under sink and connected","every fixture being checked — hot on left cold on right confirmed"],"neg_add":["leaks","construction mess","unfinished"],"lighting":"golden_hour"}, | |
| {"name":"FIXTURE INSTALLATION — ELECTRICAL","pct":92,"mood":"Light and power coming alive","elements":["light fixtures being mounted to ceiling boxes and wired","pendant lights being hung at correct height over island or table","recessed trim rings being snapped into ceiling cans","dimmer switches being installed and tested","outlet covers and switch plates being snapped into place","under-cabinet LED strips being adhered and connected","bathroom vanity light being mounted and leveled","all circuits being tested with outlet tester","smart home devices being connected to WiFi","the moment all lights turn on for the first time — warm glow filling space"],"neg_add":["exposed wiring","construction lighting"],"lighting":"golden_hour"}, | |
| {"name":"HARDWARE INSTALLATION","pct":93,"mood":"Jewelry on the space","elements":["cabinet pulls being drilled with template and mounted","door handles being installed — measuring for consistent height","hinges being adjusted for perfect door alignment","drawer slides being checked for smooth operation","towel rings and robe hooks being mounted at correct heights","mirror being hung with french cleat — level checked","window hardware and locks being tested","all hardware matching in finish — consistent throughout","the satisfying click of a soft-close drawer","each piece of hardware adding refinement and function"],"neg_add":["missing hardware","construction tools"],"lighting":"golden_hour"}, | |
| {"name":"TOUCH-UP AND CAULKING","pct":95,"mood":"Perfection in the details","elements":["caulk gun running smooth bead along all transitions — tub to tile, counter to wall, trim to wall","finger or caulk tool smoothing caulk lines to perfect concave profile","touch-up paint applied with small brush on nail holes and scuffs","painter checking all edges and corners for missed spots","cleaning adhesive residue from new fixtures","removing protective films from appliances and glass","checking every door and drawer for smooth operation","testing all plumbing connections one final time","final walk-through with punch list being checked off","the space approaching finished perfection"],"neg_add":["visible caulk gaps","paint misses"],"lighting":"golden_hour"}, | |
| {"name":"CONSTRUCTION CLEAN","pct":97,"mood":"Revealing the finished work beneath the dust","elements":["professional cleaning crew arriving with equipment","vacuum cleaning every surface floor to ceiling","windows being cleaned to crystal clarity inside and out","all surfaces wiped down removing construction dust","floors getting final mop or vacuum showing true finish","light fixtures cleaned of dust — full brightness revealed","hardware polished and fingerprints removed","construction debris hauled away — space cleared","final sweep of exterior and entry area","the moment clean space is revealed — pristine and new"],"neg_add":["dust","debris","dirty windows"],"lighting":"golden_hour"}, | |
| {"name":"EMPTY FINISHED SHELL","pct":98,"mood":"Clean perfection — calm before staging","elements":["every surface 100% complete and clean","light fixtures ON emitting warm 2700-3000K glow","all hardware installed and gleaming","windows spotless zero residue","floors spotless — vacuum lines or mop sheen","countertops bare and gleaming","ZERO furniture ZERO art ZERO accessories","natural golden hour light streaming in","pristine untouched surfaces everywhere","empty space showing pure craftsmanship quality"],"neg_add":["furniture","art","decorative items","tools"],"lighting":"golden_hour"}, | |
| {"name":"STAGING AND STYLING","pct":99,"mood":"Life and aspiration filling the space","elements":["furniture being carried in and positioned on felt pads","art being hung with precise leveling — measuring tape and laser","throw pillows and blankets placed and fluffed artfully","plants and greenery positioned for maximum visual impact","books stacked on shelves and coffee tables","candles placed at key positions","styling team making micro-adjustments to every element","color story visible — cohesive 3-color palette throughout","texture variety — wood stone fabric metal glass plant","life indicators — open book, fresh flowers, folded throw"],"neg_add":["empty space","construction","tools"],"lighting":"golden_hour"}, | |
| {"name":"THE PARADISE — HERO SHOT","pct":100,"mood":"DESIRE — viewer must think I WANT this","elements":["professional staging complete — curated furniture art plants textiles","golden hour light creating warm directional atmosphere","depth layering — foreground interest midground hero background context","strict 3-color palette consistent throughout","minimum 4 textures — wood stone fabric metal glass plant","life indicators — steam from cup, open book, flowers, candle, throw","intentional composition — symmetry or golden ratio","reflective surfaces catching multiplying light","one scroll-stopping hero element — statement light dramatic view showpiece","atmospheric depth — subtle warm rays golden haze cinematic dimension"],"neg_add":["construction","workers","tools","dust","debris"],"lighting":"golden_hour"} | |
| ] | |
| def get_stages_for_count(count): | |
| count = max(4, min(count, 120)) | |
| if count <= len(MASTER_PHASES): | |
| indices = [0] | |
| inner_count = count - 2 | |
| if inner_count > 0: | |
| step = (len(MASTER_PHASES) - 2) / (inner_count) | |
| for i in range(inner_count): | |
| idx = int(round(1 + i * step)) | |
| idx = min(idx, len(MASTER_PHASES) - 2) | |
| if idx not in indices: | |
| indices.append(idx) | |
| else: | |
| for alt in range(idx+1, len(MASTER_PHASES)-1): | |
| if alt not in indices: | |
| indices.append(alt) | |
| break | |
| indices.append(len(MASTER_PHASES) - 1) | |
| indices = sorted(list(set(indices)))[:count] | |
| while len(indices) < count: | |
| for candidate in range(len(MASTER_PHASES)): | |
| if candidate not in indices: | |
| indices.append(candidate) | |
| indices = sorted(indices) | |
| if len(indices) >= count: | |
| break | |
| return [MASTER_PHASES[i] for i in indices[:count]] | |
| else: | |
| result = list(MASTER_PHASES) | |
| extra = count - len(MASTER_PHASES) | |
| for i in range(extra): | |
| base = MASTER_PHASES[i % (len(MASTER_PHASES) - 2) + 1] | |
| variant = dict(base) | |
| variant["name"] = f"{base['name']} — DETAIL {i+1}" | |
| variant["mood"] = f"Extended detail view: {base['mood']}" | |
| result.insert(-1, variant) | |
| return result[:count] | |
| def gen_neg(stage_name, niche): | |
| base = ["blurry","low quality","oversaturated","watermark","text overlay","logo","distorted proportions","floating objects","impossible shadows","AI artifacts","teleporting objects"] | |
| for ph in MASTER_PHASES: | |
| if ph["name"] in stage_name: | |
| return ", ".join(base + ph.get("neg_add",[])) | |
| return ", ".join(base) | |
| class TitleKeywordEngine: | |
| T = [("Abandoned","Stunning"),("Destroyed","Dream"),("Condemned","Magazine-Ready"),("Rusted","Reborn"),("Dead","Paradise"),("Forgotten","Unforgettable"),("Gutted","Gorgeous"),("Neglected","Luxurious"),("Trashed","Transformed")] | |
| def __init__(self): self.yr = datetime.now().year | |
| def gen_titles(self, space, style, niche, cost=""): | |
| t = random.choice(self.T) | |
| p = f"{t[0]} {space} → ${cost} {style} {t[1]}" if cost else f"{t[0]} {space} → {style} {t[1]}" | |
| if len(p)>80: p=p[:77]+"..." | |
| a = f"{space} Timelapse — {style} Before After {self.yr}" | |
| if len(a)>100: a=a[:97]+"..." | |
| s = random.choice(["Same Space. UNRECOGNIZABLE.","The Glow-Up is INSANE.","Wait for REVEAL.",f"{t[0]} to {t[1]}."]) | |
| return TitleBlock(p,a,s) | |
| def gen_keywords(self, space, style, niche): | |
| sl,stl=space.lower(),style.lower() | |
| return KeywordBlock([f"{sl} transformation",f"{sl} before after",f"{sl} timelapse",f"{stl} {sl}",f"{sl} makeover"],[f"{sl} transformation {self.yr}",f"{stl} {sl} ideas",f"how to create {sl}",f"{sl} content tips",f"best {sl} timelapse"],[f"#{sl.replace(' ','')}","#beforeandafter","#transformation","#timelapse","#viral","#trending",f"#{stl.replace(' ','')}","#contentcreator","#satisfying","#cinematic","#fyp","#explore","#creator","#filmmaking","#storytelling","#makeover","#renovation","#trending2026","#content","#creative"],["cinematic photography","photorealistic","8k","professional","magazine quality","dramatic lighting",f"{stl}","cinematic composition","hyperrealistic","editorial","studio quality","high production","film quality","ultra detailed","broadcast quality"],[f"niche:{niche}",f"type:{sl.replace(' ','-')}",f"style:{stl.replace(' ','-')}","content:transformation","mood:cinematic","quality:ultra","audience:creators","platform:multi","season:evergreen","format:timelapse"]) | |
| def format_output(self, titles, kw, lang="English"): | |
| L = LANGUAGES.get(lang, LANGUAGES["English"]) | |
| return "\n".join(["="*60,f"🏷️ {L['title']}","="*60,f"\n▸ PRIMARY: {titles.primary}",f"▸ ALTERNATE: {titles.alternate}",f"▸ SHORT: {titles.short}",f"\n{'='*60}",f"🔑 {L['keywords']}","="*60,f"\n🔍 {L['seo']}:\n{', '.join(kw.primary_seo)}",f"\n🎯 {L['longtail']}:\n{', '.join(kw.long_tail)}",f"\n#️⃣ {L['hash']}:\n{' '.join(kw.hashtags)}",f"\n🤖 {L['aitags']}:\n{', '.join(kw.ai_platform_tags)}",f"\n📊 {L['meta']}:\n{' | '.join(kw.metadata)}","\n"+"="*60]) | |
| class PromptEngine: | |
| def __init__(self): | |
| self.tk = TitleKeywordEngine() | |
| self.scene_lock = "" | |
| self.landmarks = [] | |
| def make_scene_lock(self, cam, desc): | |
| c = {CameraProfile.DOCUMENTARY_WITNESS:("24mm","5ft","f/8","static centered"),CameraProfile.ARCHITECTURAL_DIGEST:("24mm TS","4ft","f/11","editorial perspective"),CameraProfile.CINEMATIC_STORYTELLER:("35mm","4.5ft","f/4","emotional atmosphere"),CameraProfile.DRONE_GOD:("24mm drone","150ft","f/5.6","aerial overview"),CameraProfile.DETAIL_HUNTER:("85mm","36in","f/2.8","tight texture")}.get(cam,("35mm","4.5ft","f/4","emotional")) | |
| self.scene_lock = f"SCENE LOCK: Static tripod. {c[0]} at {c[1]}. {c[2]}. {c[3]}. IDENTICAL all stages. Shooting {desc}. No movement." | |
| return self.scene_lock | |
| def make_landmarks(self, space, niche): | |
| lib = {"kitchen":[Landmark("Window","center-left","Consistent"),Landmark("Ceiling beam","horizontal","Fixed"),Landmark("Floor point","center","All stages"),Landmark("Exterior view","through window","Same"),Landmark("Doorway","right","Constant")],"bathroom":[Landmark("Window","exterior wall","Identical"),Landmark("Plumbing wall","back","Fixtures"),Landmark("Floor drain","center","All stages"),Landmark("Ceiling box","center","Constant"),Landmark("Door","entry","Constant")],"exterior":[Landmark("Roofline","top","Constant"),Landmark("Front door","center","Anchor"),Landmark("Windows","facade","Constant"),Landmark("Foundation","base","Constant"),Landmark("Tree","foreground","Persists")],"vehicle":[Landmark("Wheel arches","corners","Identity"),Landmark("Windshield","front","Constant"),Landmark("Hood","top","Constant"),Landmark("Tail lights","rear","Markers"),Landmark("Belt line","side","Constant")],"default":[Landmark("Key feature 1","left","Anchor"),Landmark("Key feature 2","center","Reference"),Landmark("Key feature 3","right","Constant"),Landmark("Background","back","Visible"),Landmark("Foreground","front","Frame")]} | |
| for k in lib: | |
| if k in niche.lower() or k in space.lower(): | |
| self.landmarks = lib[k]; return | |
| self.landmarks = lib["default"] | |
| def generate(self, space, style, niche, cam, light, cost, stage_count, lang): | |
| L = LANGUAGES.get(lang, LANGUAGES["English"]) | |
| stages = get_stages_for_count(stage_count) | |
| p = [] | |
| t = self.tk.gen_titles(space, style, niche, cost) | |
| kw = self.tk.gen_keywords(space, style, niche) | |
| p.append(self.tk.format_output(t, kw, lang)) | |
| p.append(f"\n📊 Total Stages: {len(stages)} | Total Videos: {max(len(stages)-1,1)}\n") | |
| self.make_scene_lock(cam, space) | |
| p.append(f"🔒 {self.scene_lock}\n") | |
| self.make_landmarks(space, niche) | |
| p.append(f"📍 {L['landmarks']}:") | |
| for i, l in enumerate(self.landmarks, 1): | |
| p.append(f" {i}. {l.name} — {l.position}: {l.description}") | |
| p.append("\n" + "="*60) | |
| p.append(f"📸 {L['image']} PROMPTS ({len(stages)} STAGES)") | |
| p.append("="*60) | |
| lmstr = " | ".join([f"{l.name} ({l.position})" for l in self.landmarks[:5]]) | |
| for idx, st in enumerate(stages): | |
| sl = st.get("lighting", light) | |
| lc = LIGHTING_DB.get(sl, LIGHTING_DB["golden_hour"]) | |
| dp = [f"A photorealistic {st['name'].lower()} view of a {space}."] | |
| for e in st["elements"]: | |
| dp.append(e.capitalize() + ".") | |
| if st["pct"] >= 85: | |
| dp.append(f"Design style: {style}.") | |
| desc = " ".join(dp) | |
| neg = gen_neg(st["name"], niche) | |
| pct = st["pct"] | |
| p.append(f"\n{'─'*60}") | |
| p.append(f"📸 {L['image']} {idx+1} {L['of']} {len(stages)} | {st['name']} [{pct}%]") | |
| p.append(f"{'─'*60}") | |
| p.append(f"\n🔒 {self.scene_lock}") | |
| p.append(f"📍 {L['landmarks']}: {lmstr}") | |
| p.append(f"\n🎬 {L['desc']}:\n{textwrap.fill(desc, 95)}") | |
| p.append(f"\n💡 {L['light']}: {lc['tokens']}. Temp: {lc['temp']}. Shadows: {lc['shadow']}.") | |
| p.append(f"\n🎨 {L['mood']}: {st['mood']}") | |
| p.append(f"\n⛔ {L['neg']}: {neg}\n") | |
| vid_count = max(len(stages) - 1, 1) | |
| p.append("="*60) | |
| p.append(f"🎥 {L['video']} PROMPTS ({vid_count} TRANSITIONS)") | |
| p.append("="*60) | |
| for v in range(vid_count): | |
| s1 = stages[v] | |
| s2 = stages[min(v+1, len(stages)-1)] | |
| cn = "Zero movement." if v < vid_count-1 else "Subtle 3-5% push-in for final reveal." | |
| act = f"Timelapse transition in {space}. Moving from {s1['name']} state to {s2['name']} state. " + " ".join(s2["elements"][:5]) + "." | |
| mot = "Workers and materials move naturally. Time passage visible through shadow rotation and lighting changes. Every change happens through physical human action." | |
| p.append(f"\n{'─'*60}") | |
| p.append(f"🎥 {L['video']} {v+1} {L['of']} {vid_count} | {s1['name']} → {s2['name']}") | |
| p.append(f"{'─'*60}") | |
| p.append(f"\n{L['cam']}: Static tripod same as images. {cn}") | |
| p.append(f"\n{L['action']}:\n{textwrap.fill(act, 95)}") | |
| p.append(f"\n{L['motion']}: {mot}") | |
| p.append(f"\n⛔ {L['forbidden']}: No cuts. No teleporting. No objects from nowhere. No camera movement. Everything by human hands.\n") | |
| p.append("="*60) | |
| p.append(f"✅ {L['generate']}") | |
| p.append("="*60) | |
| p.append(f"\n✅ {L['cta']}") | |
| p.append("👉 https://openart.ai/home") | |
| return "\n".join(p) | |
| class IdeaEngine: | |
| def __init__(self): | |
| self.LIB = [ | |
| {"cat":"🎬 Restoration","title":"POV: You're a Tile Being Installed","score":9.2,"hook":"Camera IS the tile.","concept":"Film installation from tile perspective.","why":"Perspective shift + ASMR","mode":"RESURRECT","platform":"TikTok, Shorts","timing":"Evergreen","steps":["Mount cam at tile level","Close-ups","ASMR audio","POV overlays","Sound ON"],"keywords":["POV renovation","satisfying tiling"],"hashtags":["#POVrenovation","#satisfying","#tileinstallation","#oddlysatisfying","#renovation"],"series":"POV Material series","engage":"What material next?","unique":"Material POV untouched."}, | |
| {"cat":"🎬 Restoration","title":"WORST Room → $100K Dream Space","score":9.4,"hook":"Most disgusting room rebuilt.","concept":"Extreme before to aspirational after.","why":"Extreme contrast = viral","mode":"PHANTOM","platform":"TikTok, Shorts","timing":"Evergreen","steps":["Worst STAGE 0","Max contrast all stages","Magazine final","Split thumbnail","Dramatic pacing"],"keywords":["worst room","extreme renovation"],"hashtags":["#worstroom","#extrememakeover","#beforeandafter","#transformation","#satisfying"],"series":"Worst to First","engage":"Rate BEFORE and AFTER","unique":"Worst spaces = content machine."}, | |
| {"cat":"🎬 Restoration","title":"Room Renovated in REVERSE","score":8.9,"hook":"FINISHED first. Watch DESTROYED.","concept":"Show result first then demolish backward.","why":"Pattern disruption + replay","mode":"PHANTOM reverse","platform":"TikTok, Reels","timing":"Evergreen","steps":["Generate stages","Reverse order","Text overlays","Destruction progression","Before at end"],"keywords":["reverse renovation","backwards"],"hashtags":["#reversereveal","#backwards","#transformation","#mindblown","#satisfying"],"series":"REVERSE series","engage":"Did reverse hit different?","unique":"Reverse untouched."}, | |
| {"cat":"👻 Horror","title":"Hidden Room Found During Renovation","score":9.5,"hook":"Demo crew broke through found THIS.","concept":"Hidden room discovery during renovation. Document eerie exploration.","why":"Mystery + renovation + horror crossover","mode":"PHANTOM + horror","platform":"TikTok, YouTube","timing":"Evergreen, Oct peak","steps":["Stage hidden space","Film discovery","Eerie items inside","Suspense lighting","Horror music"],"keywords":["hidden room","renovation discovery","horror"],"hashtags":["#hiddenroom","#scary","#discovery","#horror","#creepy","#abandoned","#renovation"],"series":"What We Found","engage":"What would YOU do?","unique":"Horror + renovation crossover rare."}, | |
| {"cat":"👻 Horror","title":"Abandoned Hospital Untouched 40 Years","score":9.3,"hook":"Nobody entered since 1985. Until now.","concept":"Explore abandoned building with cinematic horror atmosphere.","why":"Exploration + storytelling + horror","mode":"PHANTOM Stage 0","platform":"YouTube, TikTok","timing":"Evergreen","steps":["Research history","Cinematic walkthrough","Night lighting","Narrate history","Restoration hook ending"],"keywords":["abandoned hospital","urban exploration","creepy"],"hashtags":["#abandoned","#urbanexploration","#creepy","#horror","#haunted","#exploring"],"series":"Abandoned Places","engage":"Should we RESTORE this?","unique":"Exploration to restoration pipeline."}, | |
| {"cat":"🎬 Short Film","title":"The Last Craftsman — 3min Short","score":9.0,"hook":"His hands built 500 homes. Nobody learns anymore.","concept":"Cinematic short about aging craftsman with disappearing skills.","why":"Emotional + craftsmanship + shareable","mode":"DIRECTOR","platform":"YouTube, Instagram","timing":"Evergreen","steps":["3-min script","8-shot storyboard","Hands and details","Emotional narration","Cinematic grade"],"keywords":["short film","craftsman","dying trade"],"hashtags":["#shortfilm","#craftsman","#documentary","#handmade","#filmmaking","#cinema"],"series":"The Last [Trade]","engage":"Know someone keeping craft alive?","unique":"Micro-documentary = emotional gold."}, | |
| {"cat":"🎬 Short Film","title":"72 Hours — Room Transforms While She Sleeps","score":9.1,"hook":"Slept in broken room. Woke in paradise.","concept":"Person sleeps while renovation happens around them. Wake-up reveal.","why":"Narrative + transformation + payoff","mode":"PHANTOM + DIRECTOR","platform":"YouTube, Reels","timing":"Evergreen","steps":["Script concept","Generate stages with sleeper","Workers around sleeper","Golden hour wake-up","Reaction shot"],"keywords":["surprise renovation","transformation short"],"hashtags":["#surpriserenovation","#shortfilm","#transformation","#emotional","#reveal"],"series":"While You Sleep","engage":"Tag someone who DESERVES this","unique":"Sleeping-through-renovation never done."}, | |
| {"cat":"📰 News","title":"Building Codes 2026 Will Cost Thousands More","score":8.7,"hook":"Your renovation just got 40% more expensive.","concept":"Break down new codes and costs visually. Make regulations simple.","why":"Practical + urgent + affects everyone","mode":"STRATEGY","platform":"YouTube, TikTok","timing":"TIME SENSITIVE","steps":["Research code changes","Visual comparisons","Cost impact examples","Urgency timeline","Action steps"],"keywords":["building codes 2026","renovation cost increase"],"hashtags":["#buildingnews","#renovationcost","#homeowner","#construction","#2026update"],"series":"Renovation News weekly","engage":"Did you know? Comment if affected","unique":"Code content made visual."}, | |
| {"cat":"📰 News","title":"AI Designing Homes — Architects Worried?","score":9.0,"hook":"This house designed entirely by AI.","concept":"AI architecture tools. AI vs human design comparison.","why":"AI trending + design expertise + debate","mode":"ARCHITECT comparison","platform":"YouTube, LinkedIn","timing":"Trending","steps":["Generate AI room","Generate architect room","Side by side","Discuss pros cons","Poll audience"],"keywords":["AI architecture","AI home design","future of design"],"hashtags":["#AIdesign","#architecture","#futureofdesign","#AIvsHuman","#technology"],"series":"AI vs Human Design","engage":"Can you tell which is AI?","unique":"AI comparison from builder perspective."}, | |
| {"cat":"💰 Finance","title":"Tracked Every Dollar of $80K Renovation","score":9.4,"hook":"Nobody tells you where money ACTUALLY goes.","concept":"Complete transparent cost breakdown every receipt every surprise.","why":"Financial transparency = massive saves","mode":"STRATEGY + PHANTOM","platform":"YouTube, Pinterest","timing":"Evergreen","steps":["Document every cost","Visual breakdowns","Surprise costs highlighted","Quoted vs actual","Saving tips per category"],"keywords":["renovation cost breakdown","real costs"],"hashtags":["#renovationcost","#budgetbreakdown","#moneytips","#realtalk","#savemoney"],"series":"Real Cost series","engage":"Guess TOTAL before reveal","unique":"Radical cost transparency."}, | |
| {"cat":"💰 Finance","title":"5 Renovations That MAKE Money (5 That Lose)","score":9.2,"hook":"Stop wasting on renovations that decrease value.","concept":"Data-backed ROI analysis which renovations are investments vs money pits.","why":"Saves money + authority + debate","mode":"PHANTOM comparisons","platform":"YouTube, Instagram","timing":"Evergreen","steps":["Research ROI data","Generate good investments","Generate bad investments","Show percentages","Rank best to worst"],"keywords":["renovation ROI","home investment","home value"],"hashtags":["#renovationROI","#homeinvestment","#homevalue","#smartmoney","#investment"],"series":"Money or Mistake","engage":"Which SHOCKED you?","unique":"Data-driven renovation investment."}, | |
| {"cat":"😂 Comedy","title":"Contractor Says vs Actually Means","score":9.3,"hook":"Two more weeks means TWO MORE MONTHS.","concept":"Comedic sketch translating contractor phrases with timelapse punchlines.","why":"Relatable + shareable + renovation audience","mode":"DIRECTOR comedy","platform":"TikTok, Reels","timing":"Evergreen","steps":["10 phrases + translations","Split screen format","Timelapse punchline","Comedic timing","Most relatable last"],"keywords":["contractor humor","renovation funny"],"hashtags":["#contractorhumor","#funny","#relatable","#comedy","#renovation","#constructionlife"],"series":"What They Say vs Reality","engage":"Drop WORST contractor quote","unique":"Comedy with actual timelapse punchlines."}, | |
| {"cat":"😂 Comedy","title":"Wife's Pinterest vs Our Budget","score":9.5,"hook":"Pinterest board. Then bank account.","concept":"Dream Pinterest vs budget reality. Twist: budget version great too.","why":"Universal + couples humor + satisfying","mode":"ARCHITECT comparison","platform":"TikTok, Reels","timing":"Evergreen","steps":["Luxury Pinterest images","Budget alternatives","Reaction format","Side by side","Budget is great reveal"],"keywords":["Pinterest vs reality","budget renovation"],"hashtags":["#Pinterestvsreality","#budget","#couplescomedy","#funny","#renovation","#DIY"],"series":"Pinterest vs Bank Account","engage":"Show partner RIGHT NOW","unique":"Pinterest comedy with solutions."}, | |
| {"cat":"🎨 Animation","title":"How House Gets Built — 60sec Animated","score":8.8,"hook":"Every house starts as dirt.","concept":"Beautiful animation of entire construction process. Each trade visualized.","why":"Educational + satisfying + shareable","mode":"DIRECTOR animation","platform":"YouTube, TikTok","timing":"Evergreen","steps":["Script sequence","Animated style frames","Each trade animated","Satisfying sound design","Speed ramp moments"],"keywords":["construction animation","how house built"],"hashtags":["#animation","#construction","#howitsbuilt","#educational","#satisfying"],"series":"How It's Built animated","engage":"Which step surprised you?","unique":"Animated construction rare and satisfying."}, | |
| {"cat":"🎨 Animation","title":"Floor Plan Comes to Life — 3D Walkthrough","score":9.0,"hook":"Flat blueprint transforms into living home.","concept":"2D floor plan walls rise materials appear furniture fills camera walks through.","why":"Mesmerizing + architectural + tech showcase","mode":"ARCHITECT + animation","platform":"YouTube, Instagram","timing":"Evergreen","steps":["Start 2D blueprint","Animate walls rising","Add materials","Furniture populates","Cinematic walkthrough"],"keywords":["floor plan 3D","architectural animation"],"hashtags":["#3Dwalkthrough","#floorplan","#architecture","#animation","#visualization"],"series":"Blueprint to Reality","engage":"Would you live here?","unique":"Blueprint-to-3D is mesmerizing."}, | |
| {"cat":"👶 Kids","title":"Ghar Banayenge — Construction Rhyme","score":8.5,"hook":"Ek do teen char! Educational building rhyme.","concept":"Animated kids rhyme about construction. Each verse = phase. Multi-language.","why":"Massive reach + educational + parents share","mode":"DIRECTOR kids","platform":"YouTube Kids, Reels","timing":"Evergreen","steps":["Write rhyme","Colorful animation","Each verse = phase","Catchy melody","Multi-language versions"],"keywords":["kids rhyme","construction poem","educational"],"hashtags":["#kidsrhyme","#educational","#nurseryrhyme","#construction","#children"],"series":"Building Rhymes 10 Languages","engage":"Which language next?","unique":"Construction kids content multi-language."}, | |
| {"cat":"👶 Kids","title":"Where Does House Come From — Kids Explainer","score":8.6,"hook":"Your house didn't always exist.","concept":"Kid-friendly animated explainer. Trees become lumber. Sand becomes glass.","why":"Educational + parental sharing + evergreen","mode":"DIRECTOR animation","platform":"YouTube Kids, TikTok","timing":"Evergreen","steps":["Script kid-friendly","Materials in nature","Animate transformation","Workers assemble","Completed house"],"keywords":["kids education","how house built for kids"],"hashtags":["#kidseducation","#learning","#howitsbuilt","#animation","#educational"],"series":"Where Does It Come From","engage":"What else should we explain?","unique":"Construction for children wide open."}, | |
| {"cat":"🎵 Music","title":"Beat From ONLY Construction Sounds","score":9.4,"hook":"Hammers. Saws. Drills. This is a BANGER.","concept":"Real construction sounds arranged into beat. Show recording and final track over timelapse.","why":"Creative + satisfying + music crossover","mode":"RESURRECT audio","platform":"TikTok, YouTube","timing":"Evergreen","steps":["Record 20+ sounds","Arrange in DAW","Film recording","Layer over timelapse","Release as track"],"keywords":["construction beat","creative music"],"hashtags":["#constructionbeat","#musicproduction","#creative","#satisfying","#beats"],"series":"Sounds of [Industry]","engage":"Should this be on Spotify?","unique":"Construction music = rare viral gold."}, | |
| {"cat":"🎵 Music","title":"Most Satisfying Renovation Sounds — ASMR","score":8.9,"hook":"Put headphones on. You're welcome.","concept":"Pure ASMR of renovation sounds. Paint roller. Tile clicking. Sanding wood.","why":"ASMR audience + renovation crossover","mode":"DETAIL HUNTER audio","platform":"YouTube, TikTok","timing":"Evergreen","steps":["Record HQ construction ASMR","Best 10-15 sounds","Extreme close-up visuals","No music no talking","Binaural audio"],"keywords":["renovation ASMR","satisfying sounds"],"hashtags":["#ASMR","#satisfying","#renovation","#sounds","#relaxing","#oddlysatisfying"],"series":"Renovation ASMR weekly","engage":"Most satisfying sound? Timestamp it","unique":"Dedicated renovation ASMR untapped."}, | |
| {"cat":"🏠 Real Estate","title":"Room NOBODY Renovates — Biggest Opportunity","score":9.0,"hook":"Room you walk through daily never thought to renovate.","concept":"ENTRYWAY. Most neglected. Full transformation.","why":"Gap — zero quality content. Universal.","mode":"PHANTOM","platform":"Reels, Pinterest","timing":"Evergreen","steps":["Full transformation","Storage in final","2-5K budget","Split thumbnail","Handshake caption"],"keywords":["entryway renovation","mudroom makeover"],"hashtags":["#entrywaymakeover","#mudroom","#firstimpression","#renovation","#beforeandafter"],"series":"Rooms Nobody Renovates","engage":"Show entryway no cleaning","unique":"Massive search zero content."}, | |
| {"cat":"💰 Budget","title":"Same Room — $500 vs $5K vs $50K vs $500K","score":9.6,"hook":"4 budgets. Same room. ONE worth it.","concept":"One room 4 budgets. Cost breakdown. Best value.","why":"Most engaging format. Massive debate.","mode":"PHANTOM 4 versions","platform":"YouTube, TikTok","timing":"Evergreen","steps":["One worst state","4 final versions","Costs per element","Best value reveal","Series"],"keywords":["budget comparison","cost breakdown"],"hashtags":["#budgetcomparison","#renovationcost","#worthit","#luxuryvsbudget","#smartmoney"],"series":"DOLLAR SERIES","engage":"Which budget? What shocked?","unique":"4-tier comparison never done."} | |
| ] | |
| self.OVR = ["Basic before/after no story","Generic stock music","Room tour no transformation","All-white reveals","Generic compilations","Unedited footage","All-gray everything","Copying mega-creators"] | |
| def gen(self, count=5, cat="All"): | |
| lib = self.LIB if cat=="All" else [i for i in self.LIB if cat.lower() in i["cat"].lower()] | |
| if not lib: lib = self.LIB | |
| random.shuffle(lib) | |
| return lib[:min(count, len(lib))] | |
| def fmt(self, ideas, lang="English"): | |
| L = LANGUAGES.get(lang, LANGUAGES["English"]) | |
| p = ["="*60,"🧠 MIND BREACH ENGINE — ACTIVATED","="*60,f"\n📅 {datetime.now().strftime('%A %B %d %Y')}",f"\n⚠️ {L['avoid']}:"] | |
| for x in random.sample(self.OVR, min(5,len(self.OVR))): | |
| p.append(f" • {x}") | |
| for i,d in enumerate(ideas,1): | |
| p.append(f"\n{'═'*60}") | |
| p.append(f"💡 {L['idea']} #{i} [{d['cat']}] — {d['title']}") | |
| p.append(f"{'═'*60}") | |
| p.append(f"🔥 Score: {d['score']}/10") | |
| p.append(f"🎯 {L['hook']}: {d['hook']}") | |
| p.append(f"📖 {L['concept']}: {d['concept']}") | |
| p.append(f"🧠 {L['why']}: {d['why']}") | |
| p.append(f"🎬 Mode: {d['mode']} | 📱 {d['platform']} | ⏱️ {d['timing']}") | |
| p.append(f"📐 {L['blueprint']}:") | |
| for j,s in enumerate(d['steps'],1): p.append(f" {j}. {s}") | |
| p.append(f"🏷️ {', '.join(d['keywords'])}") | |
| p.append(f"#️⃣ {' '.join(d['hashtags'])}") | |
| p.append(f"📺 Series: {d['series']}") | |
| p.append(f"💬 {L['engage']}: {d['engage']}") | |
| p.append(f"⚡ {L['unique']}: {d['unique']}") | |
| p.append(f"\n{'═'*60}\nGenerate again for NEW ideas!") | |
| return "\n".join(p) | |
| def cal(self, days=30, lang="English"): | |
| L = LANGUAGES.get(lang, LANGUAGES["English"]) | |
| p = ["═"*60,f"📅 {L['calendar']} — {days} DAYS","═"*60,""] | |
| s = datetime.now() | |
| for d in range(days): | |
| c = s + timedelta(days=d) | |
| i = random.choice(self.LIB) | |
| p.append(f"📌 Day {d+1} | {c.strftime('%b %d %A')}") | |
| p.append(f" [{i['cat']}] {i['title']}") | |
| p.append(f" 📱 {i['platform']} | 🔥 {i['score']}/10") | |
| p.append(f" {'─'*50}") | |
| return "\n".join(p) | |
| CAM_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} | |
| LIGHT_MAP = {"Golden Hour":"golden_hour","Blue Hour":"blue_hour","Overcast":"overcast","Harsh Midday":"harsh_midday","Night Interior":"night","Construction Lights":"work_lights"} | |
| NICHES = ["kitchen","bathroom","bedroom","living room","exterior","landscape","vehicle","road","pool","restaurant","garage","office","basement","entryway","horror set","film set","music studio","kids room","animation studio","commercial"] | |
| CATS = ["All","Restoration","Horror","Short Film","News","Finance","Comedy","Animation","Kids","Music","Real Estate","Budget"] | |
| LANGS = list(LANGUAGES.keys()) | |
| PRESETS = {"Kitchen → Farmhouse":("1970s Galley Kitchen","Modern Farmhouse","kitchen","65K"),"Bathroom → Japandi":("1990s Bathroom","Japandi Spa","bathroom","42K"),"Exterior → Craftsman":("1960s Ranch","Modern Craftsman","exterior","95K"),"Car → Show Quality":("1969 Mustang Barn Find","Show Quality","vehicle","80K"),"Yard → Resort":("Empty Backyard","Resort Pool Oasis","landscape","120K"),"Warehouse → Restaurant":("Raw Warehouse","Japanese Ramen Bar","restaurant","150K"),"Horror → Hospital":("Abandoned Hospital","Restored Center","horror set","200K"),"Garage → Studio":("Empty Garage","Music Studio","music studio","35K")} | |
| def fn_p(space,style,niche,cam,light,budget,stages,lang): | |
| if not space or not style: return "❌ Fill Space and Style." | |
| return PromptEngine().generate(space,style,niche or "kitchen",CAM_MAP.get(cam,CameraProfile.CINEMATIC_STORYTELLER),LIGHT_MAP.get(light,"golden_hour"),budget or "",int(stages),lang or "English") | |
| def fn_i(count,cat,lang): | |
| e = IdeaEngine() | |
| return e.fmt(e.gen(int(count),cat or "All"),lang or "English") | |
| def fn_c(days,lang): | |
| return IdeaEngine().cal(int(days),lang or "English") | |
| def fn_t(space,style,niche,lang): | |
| if not space or not style: return "❌ Fill Space and Style." | |
| e = TitleKeywordEngine() | |
| return e.format_output(e.gen_titles(space,style,niche or "interior"),e.gen_keywords(space,style,niche or "interior"),lang or "English") | |
| def fn_pr(name): | |
| if name in PRESETS: | |
| d = PRESETS[name]; return d[0],d[1],d[2],d[3] | |
| return "","","","" | |
| H = "<div style='text-align:center;padding:25px 15px 8px;'><img src='https://i.postimg.cc/gnZ4QH0W/logo.png' width='70' style='border-radius:14px;filter:drop-shadow(0 0 10px rgba(255,165,0,0.5));' onerror=\"this.style.display='none'\"><h1 style='font-size:2.2em;margin:5px 0;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.05em;margin:3px 0;font-weight:600;'>+ 🧠 MIND BREACH ENGINE</p><p style='color:#888;font-size:0.88em;font-style:italic;'>Where AI ends and reality begins — nobody can tell.</p><div style='margin:10px 0;display:flex;justify-content:center;gap:5px;flex-wrap:wrap;'><span style='background:#1a1a2e;color:#ffa500;padding:3px 10px;border-radius:18px;font-size:0.75em;border:1px solid #333;'>📸 4-100+ Stages</span><span style='background:#1a1a2e;color:#48dbfb;padding:3px 10px;border-radius:18px;font-size:0.75em;border:1px solid #333;'>💡 12 Categories</span><span style='background:#1a1a2e;color:#ff6b6b;padding:3px 10px;border-radius:18px;font-size:0.75em;border:1px solid #333;'>🏷️ Auto SEO</span><span style='background:#1a1a2e;color:#7bed9f;padding:3px 10px;border-radius:18px;font-size:0.75em;border:1px solid #333;'>📅 Calendar</span><span style='background:#1a1a2e;color:#a29bfe;padding:3px 10px;border-radius:18px;font-size:0.75em;border:1px solid #333;'>🌍 10 Languages</span></div><div style='margin:10px auto;padding:10px 15px;background:linear-gradient(135deg,#1a1a2e,#16213e);border-radius:10px;border:1px solid #333;max-width:460px;'><p style='color:#ffa500;font-size:0.92em;margin:2px 0;font-weight:bold;'>⚡ Built by ADRON</p><p style='color:#aaa;font-size:0.8em;'>Creators Tool for Content Ideas</p><div style='display:flex;justify-content:center;gap:12px;margin-top:6px;flex-wrap:wrap;'><a href='https://instagram.com/adron.publishing' target='_blank' style='color:#E1306C;text-decoration:none;font-size:0.8em;'>📷 Instagram</a><a href='https://t.me/Adron_Media' target='_blank' style='color:#0088cc;text-decoration:none;font-size:0.8em;'>✈️ Telegram</a><a href='https://discord.com/users/mradnan' target='_blank' style='color:#7289DA;text-decoration:none;font-size:0.8em;'>🎮 Discord</a><a href='mailto:bawalmedia7065@gmail.com' style='color:#ffa500;text-decoration:none;font-size:0.8em;'>✉️ Email</a></div></div></div>" | |
| F = "<div style='text-align:center;padding:18px;border-top:1px solid #333;'><p style='color:#888;font-size:0.82em;'>🔥 <b style='color:#ffa500;'>REALITY SHIFT</b> + 🧠 <b style='color:#48dbfb;'>MIND BREACH</b></p><p style='color:#666;font-size:0.78em;'>Generate on <a href='https://openart.ai/home' target='_blank' style='color:#ffa500;'>OpenArt</a> → Animate → Go viral</p><div style='margin:10px auto;padding:10px;background:#111;border-radius:10px;border:1px solid #222;max-width:400px;'><p style='color:#ffa500;font-size:0.88em;font-weight:bold;'>⚡ ADRON</p><p style='color:#888;font-size:0.75em;'>Creators Tool for Content Ideas</p><div style='display:flex;justify-content:center;gap:8px;margin-top:6px;flex-wrap:wrap;'><a href='https://instagram.com/adron.publishing' target='_blank' style='color:#E1306C;text-decoration:none;font-size:0.75em;background:#1a1a1a;padding:3px 8px;border-radius:12px;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.75em;background:#1a1a1a;padding:3px 8px;border-radius:12px;border:1px solid #333;'>✈️ Telegram</a><a href='https://discord.com/users/mradnan' target='_blank' style='color:#7289DA;text-decoration:none;font-size:0.75em;background:#1a1a1a;padding:3px 8px;border-radius:12px;border:1px solid #333;'>🎮 mradnan</a><a href='mailto:bawalmedia7065@gmail.com' style='color:#ffa500;text-decoration:none;font-size:0.75em;background:#1a1a1a;padding:3px 8px;border-radius:12px;border:1px solid #333;'>✉️ Email</a></div></div><p style='color:#444;font-size:0.68em;margin-top:8px;font-style:italic;'>Let's make reality jealous. ✨</p></div>" | |
| with gr.Blocks(title="Reality Shift + Mind Breach", theme=gr.themes.Soft(primary_hue="orange",secondary_hue="blue")) as app: | |
| gr.HTML(H) | |
| with gr.Tab("📸 Prompts"): | |
| gr.Markdown("### Generate Dynamic Stage Prompts (4 to 100+)") | |
| with gr.Row(): | |
| pr_dd = gr.Dropdown(choices=list(PRESETS.keys()),label="⚡ Presets") | |
| pr_btn = gr.Button("📋 Load",variant="secondary") | |
| p_lang = gr.Dropdown(choices=LANGS,label="🌍 Language",value="English") | |
| with gr.Row(): | |
| with gr.Column(): | |
| i_space = gr.Textbox(label="🏠 Space Type",placeholder="e.g. 1970s Kitchen") | |
| i_style = gr.Textbox(label="🎨 Style",placeholder="e.g. Modern Farmhouse") | |
| with gr.Column(): | |
| i_niche = gr.Dropdown(choices=NICHES,label="📂 Niche",value="kitchen") | |
| i_budget = gr.Textbox(label="💰 Budget",placeholder="e.g. 65K") | |
| with gr.Row(): | |
| i_cam = gr.Dropdown(choices=list(CAM_MAP.keys()),label="📷 Camera",value="Cinematic Storyteller") | |
| i_light = gr.Dropdown(choices=list(LIGHT_MAP.keys()),label="💡 Lighting",value="Golden Hour") | |
| i_stages = gr.Slider(4,100,6,step=1,label="📸 Number of Stages") | |
| gr.Markdown("*Slide to choose 4, 6, 8, 10, 20, 50, 100+ stages — more stages = more micro-detail in construction process*") | |
| g_btn = gr.Button("🔥 GENERATE PROMPTS",variant="primary",size="lg") | |
| o_p = gr.Textbox(label="Output",lines=50,show_copy_button=True) | |
| pr_btn.click(fn_pr,[pr_dd],[i_space,i_style,i_niche,i_budget]) | |
| g_btn.click(fn_p,[i_space,i_style,i_niche,i_cam,i_light,i_budget,i_stages,p_lang],[o_p]) | |
| with gr.Tab("💡 Ideas"): | |
| gr.Markdown("### 🧠 Viral Ideas — 12 Categories") | |
| with gr.Row(): | |
| ic = gr.Slider(1,10,5,step=1,label="Count") | |
| icat = gr.Dropdown(choices=CATS,label="📂 Category",value="All") | |
| il = gr.Dropdown(choices=LANGS,label="🌍 Language",value="English") | |
| ib = gr.Button("💡 Generate Ideas",variant="primary",size="lg") | |
| oi = gr.Textbox(label="Ideas",lines=50,show_copy_button=True) | |
| ib.click(fn_i,[ic,icat,il],[oi]) | |
| with gr.Tab("🏷️ Titles"): | |
| gr.Markdown("### 🏷️ Auto Titles & Keywords") | |
| with gr.Row(): | |
| ts = gr.Textbox(label="🏠 Space",placeholder="Kitchen") | |
| tst = gr.Textbox(label="🎨 Style",placeholder="Modern Farmhouse") | |
| tn = gr.Dropdown(choices=NICHES,label="Niche",value="kitchen") | |
| tl = gr.Dropdown(choices=LANGS,label="🌍",value="English") | |
| tb = gr.Button("🏷️ Generate",variant="primary") | |
| ot = gr.Textbox(label="Output",lines=30,show_copy_button=True) | |
| tb.click(fn_t,[ts,tst,tn,tl],[ot]) | |
| with gr.Tab("📅 Calendar"): | |
| gr.Markdown("### 📅 Content Calendar") | |
| with gr.Row(): | |
| cd = gr.Slider(7,90,30,step=1,label="Days") | |
| cl = gr.Dropdown(choices=LANGS,label="🌍",value="English") | |
| cb = gr.Button("📅 Generate",variant="primary",size="lg") | |
| oc = gr.Textbox(label="Calendar",lines=50,show_copy_button=True) | |
| cb.click(fn_c,[cd,cl],[oc]) | |
| with gr.Tab("❓ Help"): | |
| gr.Markdown("### 🚀 Guide\n\n**📸 Prompts:** Select 4 to 100+ stages → Fill details → Generate → Copy → Paste into OpenArt\n\n**Stage Slider:**\n- **4 stages** = Quick overview (abandoned → demo → finished → staged)\n- **6 stages** = Standard (adds skeleton + skin phases)\n- **10 stages** = Detailed (adds rough-in, surfaces, fixtures)\n- **20 stages** = Very detailed (individual trade phases)\n- **50+ stages** = Ultra-micro (every single construction step)\n- **100 stages** = Maximum detail (each screw, each brush stroke)\n\n**💡 Ideas:** 12 categories — Restoration, Horror, Short Film, News, Finance, Comedy, Animation, Kids, Music, Trends, Real Estate, Budget\n\n**🌍 Languages:** English, Hindi, Urdu, Spanish, Chinese, Vietnamese, Khmer, French, Arabic, Portuguese\n\n**📅 Calendar:** 7-90 day plans with daily ideas\n\n### After Generating\n1. Copy prompts → [OpenArt](https://openart.ai/home)\n2. Generate each IMAGE\n3. Frame-to-video for each VIDEO\n4. Use titles & keywords for posting") | |
| gr.HTML(F) | |
| app.launch() | |