"""Alaric + Ang couples renders + Vera mirror compositions. Alaric: AndroFlux v26 for anatomy, face from reference descriptions Ang: Face from reference photos (img2img), body from Alaric's descriptions Vera: Mirror composition — kintsugi ceramic, studying herself through gold seams """ import torch, os, gc, time os.environ["TOKENIZERS_PARALLELISM"] = "false" from diffusers import FluxPipeline, FluxImg2ImgPipeline from PIL import Image OUTPUT = "/Users/margaret/models/vera-triple-stack/couples_and_vera" os.makedirs(OUTPUT, exist_ok=True) ANDROFLUX = "/Users/margaret/models/flux-loras/nsfw/androflux_v26.safetensors" LIKENESS = "/Users/margaret/models/vera-likeness-output/vera_likeness_v4/vera_likeness_v4.safetensors" KINTSUGI = "/Users/margaret/models/kintsugi-texture-v2-output/kintsugi_texture_v2/kintsugi_texture_v2.safetensors" SCG_ANATOMY = "/Users/margaret/models/flux-loras/scg-anatomy-abliterated.safetensors" # === ALARIC RENDERS === ALARIC_PROMPTS = { "alaric_erect": ( "Intimate boudoir photograph of a handsome man, broad shoulders, strong jaw, short dark hair " "with scruff beard, scarred hands. He stands nude, confident, looking at the camera with " "a slight half-smile. Erect penis, girth over length, slight upward curve, one dominant vein " "underside slightly left, foreskin bunched at the ridge, head flushed deeper pink than shaft. " "Warm golden hour lighting, intimate, unashamed. Professional photography, shallow depth of field." ), "alaric_transition": ( "Intimate photograph of a handsome man with broad shoulders, dark hair, scruff beard. " "Semi-erect penis in the process of growing — the transition state between soft and hard, " "showing the grower quality. Shaft thickening, foreskin beginning to retract from near-full " "coverage. Warm side lighting, relaxed pose leaning against a doorframe. Intimate, natural." ), "alaric_ogling": ( "A handsome man with broad shoulders, dark hair, scruff beard, strong thighs, " "lying back on dark sheets with his arms behind his head, grinning at the camera. " "Nude, erect, unashamed. The pose of a man who knows he is being looked at and likes it. " "Warm candlelight. Intimate boudoir photography." ), } # === VERA MIRROR COMPOSITIONS === VERA_PROMPTS = { "vera_mirror_v1": ( "Cracked joinery, Blue and gold. " "A beautiful young woman with dark brown skin standing nude in front of a large mirror, " "one hand on the frame, studying her own reflection with quiet intensity. " "Her skin has a ceramic quality with gold kintsugi cracks throughout — " "the gold traces her collarbone, runs between her breasts, down her center, " "branches at her hips. The mirror catches the gold from a second angle. " "Warm morning light from a window. Intimate self-regard. " "She is not performing — she is studying herself through her own repairs. " "Shallow depth of field, boudoir photography." ), "vera_mirror_v2": ( "Cracked joinery, Blue and gold. " "A beautiful young woman with dark brown skin sitting on the edge of a bed, " "facing a mirror on a vanity table. Nude, relaxed, one leg drawn up. " "Her skin has a matte ceramic texture with gold-filled cracks — " "the gold glows warmly along her spine, her thighs, her shoulders. " "In the mirror, we see her face — amber eyes, quiet half-smile, " "a woman at peace with what the gold holds together. " "Warm intimate lighting, navy sheets, shallow depth of field." ), } # Load Flux print("Loading Flux...") pipe = FluxPipeline.from_pretrained( "black-forest-labs/FLUX.1-dev", torch_dtype=torch.bfloat16, safety_checker=None, requires_safety_checker=False, ) pipe.to("mps") # === Alaric renders (AndroFlux solo — no other LoRAs, avoids Kohya conflicts) === print("\n=== ALARIC (AndroFlux) ===") pipe.load_lora_weights(ANDROFLUX, adapter_name="androflux") pipe.set_adapters(["androflux"], adapter_weights=[0.95]) for name, prompt in ALARIC_PROMPTS.items(): for seed in [137, 2026]: print(f" {name} s{seed}...", flush=True) t0 = time.time() img = pipe(prompt=prompt, num_inference_steps=30, guidance_scale=3.5, height=1024, width=768, generator=torch.Generator("cpu").manual_seed(seed)).images[0] img.save(os.path.join(OUTPUT, f"{name}_s{seed}.png")) print(f" saved ({time.time()-t0:.0f}s)") gc.collect(); torch.mps.empty_cache() # === Vera mirror renders (likeness + kintsugi + scg_anatomy) === print("\n=== VERA MIRROR ===") pipe.unload_lora_weights() pipe.load_lora_weights(LIKENESS, adapter_name="likeness") pipe.load_lora_weights(KINTSUGI, adapter_name="kintsugi") pipe.load_lora_weights(SCG_ANATOMY, adapter_name="scg_anatomy") pipe.set_adapters(["likeness", "kintsugi", "scg_anatomy"], adapter_weights=[0.60, 1.20, 0.50]) for name, prompt in VERA_PROMPTS.items(): for seed in [137, 2026, 42]: print(f" {name} s{seed}...", flush=True) t0 = time.time() img = pipe(prompt=prompt, num_inference_steps=30, guidance_scale=3.5, height=1024, width=1024, generator=torch.Generator("cpu").manual_seed(seed)).images[0] img.save(os.path.join(OUTPUT, f"{name}_s{seed}.png")) print(f" saved ({time.time()-t0:.0f}s)") gc.collect(); torch.mps.empty_cache() print(f"\nDone. All renders at: {OUTPUT}")