Civitai's image CDN is a Cloudflare edge cache: the rendition redirect is
stored for 48 h and the blob for 1 h, so the same URL set is about 2.3x
faster on a second visit (measured 2.82 vs 6.6 req/s at concurrency 6).
The harness reused one URL set across modes and repeats, so the first mode
through it paid every cold miss while later modes looked faster.
- Resolve each tree's exact URLs with that tree's own builder (in a
subprocess, so the old and new modules cannot alias), warm them before
timing, then probe a sample and record the edge hit ratio per run.
- Print a per-run table and report cache_clean_runs; warn instead of
silently mixing cold runs into the medians.
- Pin the rendition width in the sandbox settings so the warm-up and the
server agree even when the user's own settings differ.
- Skip models outside folder_paths roots: their sidecars resolve alongside
the model file, so the old tree cannot read them and silently processed
them as failed. --any-root opts back in.
- Add reverify: populate the sandbox examples tree and time a library-wide
Re-process All (--force) or Download Missing (--no-force) pass in
ms/model, with --global to mirror the UI's global entry.
- Default the old worktree under --workdir.
- Add a --full benchmark mode that selects the UI's 987-model default set
(lora/checkpoint/embedding) and copies the complete sidecar tree, plus a
longer poll timeout for full-library runs.
- Record the full run: 894.7 s versus the 1,164 s baseline (-23.1%), 7,404
files / 995.3 MB, 46 failed models, zero 429s, two probe steps.
- Record the 80-model / 729-image new-only comparison: pipeline -28.5% and
AIMD -49.4% versus new-serial, zero 429s. Document that the old serial
medium run was aborted after stalling on stale metadata at 13/80 models.
- Run a bounded model pipeline over the shared media limiter so model
preparation and failure bookkeeping overlap the previous model's tail.
New example_images_model_concurrency defaults to 2 (1 restores serial),
and metadata refreshes are serialized while media continues.
- Let the AIMD limiter probe one slot at a time above its base after a longer
success streak, up to example_images_download_max_concurrency (default 8).
A 429 still halves the limit below the base before recovery.
- Cache Civitai rendition -> blob redirects in Downloader.download_to_memory
for one hour (2048 entries, invalidated on 404), so retries skip the 301.
- Add scripts/benchmark_example_images.py, a reproducible old-vs-new A/B
harness that selects one cache/sidecar subset and runs serial, new-serial,
pipeline and aimd modes against the same temporary examples path.
- Document the measured results (19 models / 185 images, 3 repeats):
pipeline -23.4% vs new-serial, AIMD -22.2% vs pipeline, no 429s.
start_server.py computed the project root three levels up from scripts/,
assuming it lived under .agents/skills/<skill>/scripts/. After moving to
scripts/e2e/ that resolved to the ComfyUI root, so the launcher failed
with "can't open file 'standalone.py'".
Both restore_suffixed_filenames.py and migrate_legacy_metadata.py
hardcoded Path.home() / '.config' / APP_NAME for finding settings.json,
which only works on Linux. On Windows this resolves to the wrong path
(~/.config/ instead of %LOCALAPPDATA%).
Replace the hand-rolled fallback with platformdirs.user_config_dir(),
which correctly resolves to the OS-appropriate config directory on all
platforms (Windows: %%LOCALAPPDATA%%, macOS: ~/Library/Application Support,
Linux: ~/.config). The portable mode check (settings.json in repo root
with use_portable_settings: true) is preserved unchanged.
- Add scripts/update_supporters.py to generate supporter list from JSON
- Set up GitHub Action to auto-update README.md on supporters.json change
- Update README.md with placeholders and personalized gratitude message
- Add cache entry validator service for data integrity checks
- Add cache health monitor service for periodic health checks
- Enhance model cache and scanner with validation support
- Update websocket manager for health status broadcasting
- Add initialization banner service for cache health alerts
- Add comprehensive test coverage for new services
- Update translations across all locales
- Refactor sync translation keys script