Add semantic tagging, search, favourite/NSFW filtering, and LLM job queue
Replaces old list-format tags (which duplicated prompt content) with structured dict tags per category (origin_series, outfit_type, participants, style_type, scene_type, etc.). Tags are now purely organizational metadata — removed from the prompt pipeline entirely. Adds is_favourite and is_nsfw columns to all 8 resource models. Favourite is DB-only (user preference); NSFW is mirrored in JSON tags for rescan persistence. All library pages get filter controls and favourites-first sorting. Introduces a parallel LLM job queue (_enqueue_task + _llm_queue_worker) for background tag regeneration, with the same status polling UI as ComfyUI jobs. Fixes call_llm() to use has_request_context() fallback for background threads. Adds global search (/search) across resources and gallery images, with navbar search bar. Adds gallery image sidecar JSON for per-image favourite/NSFW metadata. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
14
app.py
14
app.py
@@ -119,6 +119,20 @@ if __name__ == '__main__':
|
||||
else:
|
||||
print(f"Migration settings note ({col_name}): {e}")
|
||||
|
||||
# Migration: Add is_favourite and is_nsfw columns to all resource tables
|
||||
_tag_tables = ['character', 'look', 'outfit', 'action', 'style', 'scene', 'detailer', 'checkpoint']
|
||||
for _tbl in _tag_tables:
|
||||
for _col, _type in [('is_favourite', 'BOOLEAN DEFAULT 0'), ('is_nsfw', 'BOOLEAN DEFAULT 0')]:
|
||||
try:
|
||||
db.session.execute(text(f'ALTER TABLE {_tbl} ADD COLUMN {_col} {_type}'))
|
||||
db.session.commit()
|
||||
print(f"Added {_col} column to {_tbl} table")
|
||||
except Exception as e:
|
||||
if 'duplicate column name' in str(e).lower() or 'already exists' in str(e).lower():
|
||||
pass
|
||||
else:
|
||||
print(f"Migration note ({_tbl}.{_col}): {e}")
|
||||
|
||||
# Ensure settings exist
|
||||
if not Settings.query.first():
|
||||
db.session.add(Settings())
|
||||
|
||||
Reference in New Issue
Block a user