Files
PozzettiAndrea-ComfyUI-Geom…/__init__.py
T
PozzettiAndreaandClaude Opus 4.8 b5fb441e3e Load Mesh Batch: folder-path autocomplete via own /gpack/getpath route
Inspired by VHS Load Video (Path), but GeometryPack-owned: register
/gpack/getpath in __init__ (main process, after PromptServer exists) to
list directory contents, and a web_src widget that replaces folder_path
with an <input>+<datalist> showing live FOLDER suggestions.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 14:58:36 +02:00

67 lines
2.2 KiB
Python

import logging
log = logging.getLogger("geometrypack")
log.info("loading...")
from comfy_env import register_nodes
log.info("calling register_nodes")
NODE_CLASS_MAPPINGS, NODE_DISPLAY_NAME_MAPPINGS = register_nodes()
# /gpack/getpath -- directory listing for path-autocomplete widgets (e.g. Load
# Mesh Batch's folder picker). Registered here (main process, __init__ runs in
# init_extra_nodes AFTER PromptServer exists; prestartup is too early). Returns
# directory entries: folders as "<name>/", files filtered by ?extensions=a,b,c.
def _register_gpack_routes():
import os
try:
from server import PromptServer
from aiohttp import web
except Exception as e:
log.warning("[GeomPack] route deps unavailable: %s", e)
return
inst = getattr(PromptServer, "instance", None)
if inst is None or getattr(inst, "_gpack_getpath_registered", False):
return
@inst.routes.get("/gpack/getpath")
async def _gpack_getpath(request):
q = request.rel_url.query
if "path" not in q:
return web.Response(status=204)
p = os.path.abspath(os.path.expanduser(q.get("path") or "."))
if not os.path.isdir(p):
p = os.path.dirname(p)
if not os.path.isdir(p):
return web.json_response([])
exts = q.get("extensions")
ext_set = {e.lower().lstrip(".") for e in exts.split(",")} if exts else None
items = []
try:
for it in os.scandir(p):
try:
if it.is_dir():
items.append(it.name + "/")
elif ext_set is None or it.name.rsplit(".", 1)[-1].lower() in ext_set:
items.append(it.name)
except OSError:
pass
except OSError:
return web.json_response([])
items.sort()
return web.json_response(items)
inst._gpack_getpath_registered = True
log.info("[GeomPack] /gpack/getpath route registered")
try:
_register_gpack_routes()
except Exception as e:
log.warning("[GeomPack] could not register /gpack/getpath: %s", e)
WEB_DIRECTORY = "./web"
__all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS', 'WEB_DIRECTORY']