updates UI
This commit is contained in:
@@ -2444,6 +2444,57 @@ def _get_grouped_wireframes(wireframe_dir: str) -> dict:
|
||||
"frames": data["frames"]
|
||||
})
|
||||
|
||||
# Find last used wireframe filenames from DB
|
||||
last_used = []
|
||||
try:
|
||||
conn = database.get_db_connection()
|
||||
cur = conn.cursor()
|
||||
try:
|
||||
cur.execute("""
|
||||
SELECT source_refs
|
||||
FROM person
|
||||
WHERE archived IS NOT TRUE
|
||||
AND filename LIKE '%_sc_%'
|
||||
AND source_refs IS NOT NULL
|
||||
ORDER BY filename DESC
|
||||
""")
|
||||
rows = cur.fetchall()
|
||||
seen_refs = set()
|
||||
for (source_refs_raw,) in rows:
|
||||
try:
|
||||
refs = json.loads(source_refs_raw) if source_refs_raw else []
|
||||
except Exception:
|
||||
refs = []
|
||||
for r in refs:
|
||||
if r.startswith("wireframe:"):
|
||||
wf_name = r[len("wireframe:"):]
|
||||
if wf_name and wf_name not in seen_refs:
|
||||
seen_refs.add(wf_name)
|
||||
last_used.append(wf_name)
|
||||
finally:
|
||||
cur.close()
|
||||
database._put_db_connection(conn)
|
||||
except Exception as db_err:
|
||||
print(f"[wireframe] Failed to query last used scenes: {db_err}")
|
||||
|
||||
last_used_map = {name: idx for idx, name in enumerate(last_used)}
|
||||
|
||||
def standalone_sort_key(img):
|
||||
fpath = os.path.join(wireframe_dir, img)
|
||||
mtime = 0.0
|
||||
try:
|
||||
if os.path.exists(fpath):
|
||||
mtime = os.path.getmtime(fpath)
|
||||
except Exception:
|
||||
pass
|
||||
if img in last_used_map:
|
||||
return (0, last_used_map[img], -mtime)
|
||||
else:
|
||||
return (1, 0, -mtime)
|
||||
|
||||
standalone_images.sort(key=standalone_sort_key)
|
||||
standalone_images = standalone_images[:60]
|
||||
|
||||
return {
|
||||
"videos": videos,
|
||||
"groups": groups,
|
||||
@@ -4071,6 +4122,7 @@ def _scenery_worker(job_id: str, model_filename: str, scene_pil: Image.Image,
|
||||
sort_order=next_order,
|
||||
source_refs=json.dumps(refs))
|
||||
_update_cached_file_meta(out_name, exists=True)
|
||||
_metadata_executor.submit(_process_image_for_metadata, out_name)
|
||||
except Exception as db_err:
|
||||
print(f"[scenery] DB error: {db_err}")
|
||||
jobs[job_id]["latest_output"] = out_name
|
||||
@@ -4149,6 +4201,7 @@ def generate_scenery(req: SceneryRequest):
|
||||
@app.get("/scenery/library")
|
||||
def scenery_library():
|
||||
"""Return all scenery images grouped by source video reference."""
|
||||
output_dir = _load_output_dir()
|
||||
conn = database.get_db_connection()
|
||||
cur = conn.cursor()
|
||||
try:
|
||||
@@ -4168,6 +4221,11 @@ def scenery_library():
|
||||
by_video: dict[str, list] = {}
|
||||
ungrouped: list = []
|
||||
for filename, group_id, source_refs_raw in rows:
|
||||
# Filter out files that don't exist on disk (avoid broken links)
|
||||
exists, _ = _get_cached_file_meta(filename, output_dir)
|
||||
if not exists:
|
||||
continue
|
||||
|
||||
try:
|
||||
refs = json.loads(source_refs_raw) if source_refs_raw else []
|
||||
except Exception:
|
||||
|
||||
Reference in New Issue
Block a user