diff --git a/.playwright-mcp/page-2026-03-30T05-46-15-724Z.png b/.playwright-mcp/page-2026-03-30T05-46-15-724Z.png new file mode 100644 index 00000000..e954f682 Binary files /dev/null and b/.playwright-mcp/page-2026-03-30T05-46-15-724Z.png differ diff --git a/tools/sprite-generation/engine/registry.py b/tools/sprite-generation/engine/registry.py index 0866bcf9..542af1e0 100644 --- a/tools/sprite-generation/engine/registry.py +++ b/tools/sprite-generation/engine/registry.py @@ -421,7 +421,7 @@ class SpriteRegistry: with self.conn: if dimension_id is not None: self.conn.execute( - "UPDATE variants SET is_approved=0 WHERE dimension_id=?", + "UPDATE variants SET is_approved=0, rating=-1 WHERE dimension_id=?", (dimension_id,), ) self.conn.execute( @@ -430,7 +430,7 @@ class SpriteRegistry: ) else: self.conn.execute( - "UPDATE variants SET is_approved=0 WHERE sprite_id=? AND dimension_id IS NULL", + "UPDATE variants SET is_approved=0, rating=-1 WHERE sprite_id=? AND dimension_id IS NULL", (sprite_id,), ) self.conn.execute( diff --git a/tools/sprite-generation/gui/src/pages/SpriteCoveragePage.tsx b/tools/sprite-generation/gui/src/pages/SpriteCoveragePage.tsx index f8c81536..2ded9fe6 100644 --- a/tools/sprite-generation/gui/src/pages/SpriteCoveragePage.tsx +++ b/tools/sprite-generation/gui/src/pages/SpriteCoveragePage.tsx @@ -427,6 +427,7 @@ export function SpriteCoveragePage(): ReactNode { const [variantCache, setVariantCache] = useState>(new Map()) const [variantsLoading, setVariantsLoading] = useState(false) const [search, setSearch] = useState('') + const [batchState, setBatchState] = useState('idle') const load = useCallback((): void => { fetchPipeline() @@ -467,6 +468,18 @@ export function SpriteCoveragePage(): ReactNode { } } + const handleBatchGenerate = async (): Promise => { + if (batchState !== 'idle' || filtered.length === 0) return + setBatchState('loading') + try { + await Promise.all(filtered.map((r) => triggerGenerate({ sprite_id: r.sprite_id, variants: 3 }))) + setBatchState('queued') + setTimeout(() => setBatchState('idle'), 2000) + } catch { + setBatchState('idle') + } + } + const filtered = search.trim() ? coverage.filter((r) => r.sprite_id.includes(search.toLowerCase()) || @@ -565,7 +578,42 @@ export function SpriteCoveragePage(): ReactNode { - diff --git a/tools/sprite-generation/spritegen.db-shm b/tools/sprite-generation/spritegen.db-shm index fe9ac284..b250df92 100644 Binary files a/tools/sprite-generation/spritegen.db-shm and b/tools/sprite-generation/spritegen.db-shm differ diff --git a/tools/sprite-generation/spritegen.db-wal b/tools/sprite-generation/spritegen.db-wal index e69de29b..d852cdc5 100644 Binary files a/tools/sprite-generation/spritegen.db-wal and b/tools/sprite-generation/spritegen.db-wal differ
+ + + + + Sprite Var Proc