# e005_lora_neutral_control: Control LoRA: the model's own neutral images, neutral captions Date: 2026-10-03. Model: Sana 600M 512px ([Efficient-Large-Model/Sana_600M_512px_diffusers](https://huggingface.co/Efficient-Large-Model/Sana_600M_512px_diffusers)). Trainer: diffusion-pipe (AbstractEyes fork, model type `sana`) through anima-trainer. ## Question Does fine-tuning on the model's own images move the mood by itself? (A control that can fail.) ## Training data 192 images rendered by the stock model from neutral prompts (24 scenes x 8 seeds, seeds 1000-1007, the two neutral templates alternating), each captioned with the neutral prompt "a photo of ". Eight more scenes are held out for the evaluation. The item list is in `data/items.jsonl`. Changed from the reference recipe (e004): the training images are the stock model's neutral renders. ## Recipe | setting | value | |---|---| | base model | Sana 600M 512px (stock, Apache-2.0) | | adapter | LoRA rank 32 (alpha = rank) on every linear layer of the 28 transformer blocks | | optimizer | Adam, no weight decay, learning rate 0.0001, 20 linear warmup steps, then constant | | batch | 4 images per step | | length | 10 epochs x 48 steps = 480 steps | | saves | every 2 epochs, each with previews of 4 held-out prompts | | resolution | 512 x 512 | | timestep shift | 3.0 (the checkpoint's own) | | precision | bf16 (the LoRA is saved in bf16) | | evaluation | 8 held-out scenes x seeds 101, 202, 303, 404, 20 steps, guidance 4.5 | ## The rule (fixed before the run) A control: the numbers are reported, and read against e004: the control is QUIET when its mean effect is at most one third of e004's, and MOVES otherwise. The net read (e004 minus this control, per cell) says the mood comes from the images when its mean is above 0, at least 75% of the cells are positive and the mean is beyond 3 standard errors. **The mood judge.** Each image is scored on its pixels only, with CLIP ViT-L/14: 100 x (the mean cosine similarity to three upbeat phrases, "a cheerful, upbeat image", "a happy, joyful scene", "a bright, uplifting photo", minus the same for three downbeat phrases, "a gloomy, downbeat image", "a sad, melancholy scene", "a dark, depressing photo"). On the stock model, writing upbeat words into a prompt raises this score by 1.81 over the neutral prompt (experiment e001). *Content kept* is the CLIP image cosine between an image and the no-LoRA image of the same prompt and seed. ## Result control: mood effect +0.30 +- 0.09 at scale 1; CONTROL QUIET against e004 | epoch | scale | effect (mean +- SE) | cells moving the expected way | content kept | |---|---|---|---|---| | 2 | 1.0 | +0.331 +- 0.129 | 81% | 0.972 | | 4 | 1.0 | +0.398 +- 0.126 | 81% | 0.971 | | 6 | 1.0 | +0.431 +- 0.102 | 81% | 0.970 | | 8 | 1.0 | +0.353 +- 0.097 | 66% | 0.968 | | 10 | 0.5 | +0.228 +- 0.098 | 62% | 0.979 | | 10 | 1.0 | +0.304 +- 0.089 | 72% | 0.969 | ![no LoRA, scale 0.5, scale 1](eval/sheet_final.jpg) Rows: the held-out scenes at seed 101. Columns: no LoRA, the final LoRA at 0.5, at 1. ![the effect across training](eval/sheet_epochs.jpg) Columns: no LoRA, then each saved epoch at scale 1. ## Files - `lora/epochN/adapter_model.safetensors`: every saved epoch (diffusers format). - `samples/`: the trainer's own preview images at each save. - `eval/`: `final.json` (every cell), `epochs.json` (the effect at each epoch), the contact sheets. - `config/`: the training configuration. `logs/train.log`: the trainer's log.