diff --git a/app/api/assets_routes.py b/app/api/assets_routes.py index 3c3ea5d25..6bb0ed77e 100644 --- a/app/api/assets_routes.py +++ b/app/api/assets_routes.py @@ -483,6 +483,26 @@ async def delete_asset_tags(request: web.Request) -> web.Response: return web.json_response(result.model_dump(mode="json"), status=200) +@ROUTES.post("/api/assets/scan/seed") +async def seed_assets(request: web.Request) -> web.Response: + try: + payload = await request.json() + except Exception: + payload = {} + + try: + body = schemas_in.ScheduleAssetScanBody.model_validate(payload) + except ValidationError as ve: + return _validation_error_response("INVALID_BODY", ve) + + try: + await assets_scanner.sync_seed_assets(body.roots) + except Exception: + LOGGER.exception("sync_seed_assets failed for roots=%s", body.roots) + return _error_response(500, "INTERNAL", "Unexpected server error.") + return web.json_response({"synced": True, "roots": body.roots}, status=200) + + @ROUTES.post("/api/assets/scan/schedule") async def schedule_asset_scan(request: web.Request) -> web.Response: try: diff --git a/main.py b/main.py index db0ee04f5..18c97e5e1 100644 --- a/main.py +++ b/main.py @@ -283,7 +283,7 @@ async def setup_database(): await init_db_engine() if not args.disable_assets_autoscan: - await sync_seed_assets(["models", "input", "output"]) + await sync_seed_assets(["models"]) def start_comfyui(asyncio_loop=None): diff --git a/server.py b/server.py index c3a688a75..ddd188ebc 100644 --- a/server.py +++ b/server.py @@ -629,7 +629,7 @@ class PromptServer(): @routes.get("/object_info") async def get_object_info(request): - await sync_seed_assets(["models", "input", "output"]) + await sync_seed_assets(["models"]) with folder_paths.cache_helper: out = {} for x in nodes.NODE_CLASS_MAPPINGS: diff --git a/tests-assets/conftest.py b/tests-assets/conftest.py index 9ee1fa86b..7d1ea5acb 100644 --- a/tests-assets/conftest.py +++ b/tests-assets/conftest.py @@ -272,7 +272,7 @@ async def autoclean_unit_test_assets(http: aiohttp.ClientSession, api_base: str) async def trigger_sync_seed_assets(session: aiohttp.ClientSession, base_url: str) -> None: """Force a fast sync/seed pass by calling the ComfyUI '/object_info' endpoint.""" - async with session.get(base_url + "/object_info") as r: + async with session.post(base_url + "/api/assets/scan/seed", json={"roots": ["models", "input", "output"]}) as r: await r.read() await asyncio.sleep(0.1) # tiny yield to the event loop to let any final DB commits flush