Commit History
-
Prep captions for LoRA training: trigger word + content-onlyβ
- Add TRIGGER='NUMZOO' and split generation prompt (styled) from training caption (trigger + content, no style words) per BFL style-LoRA guidance - Add --captions-only to rewrite .txt captions without re-generating images - Rewrite all 54 captions to "NUMZOO. <content>" format Trigger word will be prepended by the app at inference once the LoRA is trained (done at integration time, not now). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>47fb1ee -
Switch dataset model to Qwen-Image + add 54-image training set (LFS)β
scripts/generate_dataset.py: - Use Qwen/Qwen-Image (fal-ai provider) β beat FLUX.1-dev on multi-animal accuracy in side-by-side tests; FLUX.2-dev is edit-only so unusable for t2i - Add a 4-attempt retry loop for transient fal-ai 504 timeouts - Drop the --provider flag (single model now) training/: - 54 generated images + caption .txt files, tracked via Git LFS - All 12 app animals solo, all 10 places, plus 2β3 animal and 2β3 place combos - Captions share the app's exact build_subject prefix + NUMZOO_STYLE suffix Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>38bba68
-
Dataset: FLUX.2-dev + app-aligned prompts with multi-animal/place combosβ
image_generator.py: - Extract build_subject(animals, places) β "A cute {animals} {places}" shared core; build_prompt now = build_subject + ", " + NUMZOO_STYLE - Add _join() helper for the 1β3 phrase joining scripts/generate_dataset.py: - Switch model to FLUX.2-dev (via fal-ai provider, HF Pro credits) - Rebuild prompts programmatically from the app's exact ANIMAL_MAP / PLACE_MAP using the shared build_subject β captions are byte-identical in structure to live app prompts, just with a rich scene-detail clause - 54 curated scenes: all 12 animals solo, all 10 places, plus deliberate 2β3 animal and 2β3 place combinations mirroring multi-emoji selections Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>18bda20 -
Upgrade image model to FLUX.2-klein-4B + align training pipelineβ
image_generator.py: - Replace FLUX.1-schnell with FLUX.2-klein-4B (Apache 2.0, better quality) - Use Flux2KleinPipeline, guidance_scale=1.0, float16 on MPS - Share NUMZOO_STYLE constant so live prompts match training captions exactly - Log generation time (β Generated in Xs) scripts/generate_dataset.py: - Switch to FLUX.1-dev via HF Inference API (fal-ai provider, HF Pro token) - Import NUMZOO_STYLE from image_generator β single source of truth - Add --count N flag to generate a subset (e.g. --count 5 for a test run) - Load GEMINI_API_KEY / HF_TOKEN from .env via python-dotenv Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>0a993a9
-
Add training dataset generator + fix MPS dtype for local inferenceβ
- scripts/generate_dataset.py: generates 80 kawaii scene images using Gemini 3.1 Flash Image (Nano Banana 2) β 8 categories Γ 10 animals, square 1:1 output, supports --start N resume and --dry-run preview, loads GEMINI_API_KEY from .env via python-dotenv - image_generator.py: use float16 on MPS (bfloat16 unsupported) and enable_sequential_cpu_offload to avoid OOM on local Apple Silicon Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>3311574
-
scripts: remove hardcoded paths, clean up run.sh kill logicβ
- All scripts use \${HOME}/miniforge3/bin/python3 instead of /Users/uplab/... - test.sh uses relative path to puppeteer dir (../../puppeteer) - check_sdk.sh uses importlib.metadata instead of hardcoded pip path - run.sh: kill only the previously saved port (from numzoo.port) instead of scanning + force-killing all 7860-7865 ports Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>d34e1e5 -
scripts/run.sh: kill all stale instances before startingβ
Force-kills all processes matching app.py and anything holding Gradio ports 7860-7865 before launching a fresh instance. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>45af17f -
Add dev scripts + simplify CLAUDE.md
61571e8