"""Style registry — maps style names to LoRA sources. Each style can point to a local .safetensors file or a HuggingFace Hub repo. pipe.load_lora_weights() handles both transparently. """ STYLES = { "Sunset Coastal Drive": { "source": "samuelsattler/warm-sunset-lora", "weight_name": "pytorch_lora_weights.safetensors", "weight": 1.0, "trigger": "sks", "description": "Golden hour warmth, sun flares, silhouettes, warm color grading", "quality_suffix": "8K, cinematic, golden hour glow, warm volumetric light, lens flare, shallow depth of field", "image_prompt_guidance": ( "SETTING — Coastal sunset drive:\n" "The shared world is a drive along a coastal highway as the sun " "sets. All scenes take place in or around this journey — a car " "cruising along cliffs above the ocean, waves crashing against " "rocks below, wind whipping through open windows, palm trees " "swaying overhead, the sun sinking into the sea on the horizon. " "No humans visible — focus on the car, the road, the ocean, " "and the landscape. Every shot must have motion: wheels turning, " "waves rolling, sun flares shifting, clouds drifting." ), }, "Rainy City Night": { "source": "artificialguybr/filmgrain-redmond-filmgrain-lora-for-sdxl", "weight_name": "FilmGrainRedmond-FilmGrain-FilmGrainAF.safetensors", "weight": 0.8, "trigger": "FilmGrainAF", "description": "35mm film grain, moody color grading, cinematic lighting", "quality_suffix": "8K, cinematic, shot on 35mm film, dramatic rim lighting, high contrast, shallow depth of field", "image_prompt_guidance": ( "SETTING — Rainy city at night:\n" "The shared world is a walk through a rain-soaked city after dark. " "All scenes take place on these streets — rain streaking through " "streetlights, puddles reflecting neon signs, steam rising from " "grates, traffic passing with blurred headlights, wet umbrellas, " "rain hammering awnings, water streaming down windows. " "No humans visible — focus on the environment, the rain, the " "reflections, and the city itself. Every shot must have motion: " "rain falling, cars passing, lights flickering, water flowing " "through gutters." ), }, "Cyberpunk": { "source": "jbilcke-hf/sdxl-cyberpunk-2077", "weight_name": "pytorch_lora_weights.safetensors", "weight": 0.9, "trigger": "cyberpunk-2077", "description": "Neon-lit cityscapes, dark futuristic vibes, glowing signs", "quality_suffix": "8K, cinematic, neon-drenched, volumetric fog, sharp details, high contrast, dramatic lighting", "image_prompt_guidance": ( "SETTING — Cyberpunk nightlife cityscape:\n" "The shared world is a futuristic megacity at night. All scenes " "take place in this neon-drenched urban sprawl — holographic " "billboards flickering on skyscrapers, flying vehicles streaking " "between towers, neon signs buzzing and glitching, rain falling " "through laser grids, steam erupting from vents, LED-lit market " "stalls with flickering displays. " "No humans visible — focus on the city, the machines, the neon, " "and the architecture. Every shot must have motion: vehicles " "flying, signs flickering, rain falling, smoke drifting, lights " "pulsing." ), }, "Watercolour Harbour": { "source": "ostris/watercolor_style_lora_sdxl", "weight_name": "watercolor_v1_sdxl.safetensors", "weight": 1.4, "trigger": "", "description": "Soft watercolor painting style, fluid washes, gentle blending", "quality_suffix": "8K, watercolor painting, soft painterly washes, fluid blending, delicate brushstrokes, atmospheric", "image_prompt_guidance": ( "SETTING — Stormy harbour village:\n" "The shared world is a coastal fishing village during a storm. " "All scenes take place in and around this harbour — waves " "crashing against stone sea walls, fishing boats rocking and " "pulling at their moorings, rain sweeping across the harbour " "in sheets, wind tearing through flags and sails, seabirds " "wheeling against dark clouds, lanterns swinging on posts, " "water pouring off rooftops into cobblestone streets. " "No humans visible — focus on the sea, the boats, the storm, " "and the village. Every shot must have motion: waves surging, " "boats swaying, rain lashing, flags snapping in the wind." ), }, } def get_style(name: str) -> dict: """Look up a style by name. Raises KeyError if not found.""" return STYLES[name] def style_names() -> list[str]: """Return list of available style names for UI dropdowns.""" return list(STYLES.keys())