A model's information now has three layers, the user's first: <model>.anomalous.json (written only by the model editor), the scan result (<model>.info, or another tool's .civitai.info with Civitai ids; id -1 = inferred from the file) and the file itself. get_metadata reads the user layer last, so it wins (an emptied field stays empty), and reports info_source (civitai / local / "") and user_fields. Edits saved by earlier versions in .civitai.info keep working. - The editor writes .anomalous.json (atomically) instead of mixing edits into .civitai.info, which other tools rewrite. - scan_info_path: a .civitai.info holding only old edits is not a scan result. Editing a never-scanned model used to make scans skip it for good. - Covers: a cover is Civitai's only while byte-identical to <model>.civitai_bak.*; any other cover is the user's and is never replaced. "Fetch again" updates only Civitai's own cover, keeps names, notes and covers, and asks before starting. - A scan no longer downloads covers and model pages again for models whose information is already on disk (it did for every model, every scan). - The earlier "keep the editor's name" change in the scraper is reverted: editor names never lived in .info; the CHANGELOG entry is corrected. - .anomalous.json moves and goes to the Recycle Bin with its model. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
17 lines
715 B
Python
17 lines
715 B
Python
"""Shared model catalog, media, and recovery constants."""
|
|
|
|
MEDIA_EXTENSIONS = ('.png', '.jpg', '.jpeg', '.webp', '.gif', '.avif', '.mp4', '.webm', '.mov', '.avi')
|
|
MODEL_EXTENSIONS = ('.safetensors', '.ckpt', '.pt', '.bin')
|
|
PREVIEW_SUFFIXES = tuple(f'.preview{ext}' for ext in MEDIA_EXTENSIONS)
|
|
CIVITAI_BACKUP_SUFFIXES = tuple(f'.civitai_bak{ext}' for ext in MEDIA_EXTENSIONS)
|
|
SIDECAR_SUFFIXES = (
|
|
'.info', '.civitai.info', '.anomalous.json', '.json', '.txt', '.yaml',
|
|
*MEDIA_EXTENSIONS,
|
|
*PREVIEW_SUFFIXES,
|
|
*CIVITAI_BACKUP_SUFFIXES,
|
|
)
|
|
RESOLVABLE_MODEL_TYPES = (
|
|
'checkpoints', 'loras', 'unet', 'diffusion_models', 'controlnet',
|
|
'vae', 'vae_approx', 'clip', 'text_encoders', 'clip_vision',
|
|
)
|