Files
PozzettiAndrea 19487d73b1 Remove save-preview route/button; batch preview passes TRIMESH through; add Get Mesh From Batch
- Drop /gpack/save_preview and the VTK viewer's "Save Mesh" button (added one
  commit ago): previews are temp exports, and persisting a mesh is what the
  SaveMesh nodes are for. The textured viewer's "Save GLB" stays -- it is a
  pure client-side download, no route.
- Preview Mesh Batch (VTK) now outputs the TRIMESH batch (is_output_list),
  same passthrough pattern as Preview Mesh Multi, so it can sit mid-graph.
- New GeomPackGetMeshFromBatch (nodes/io/get_mesh_from_batch.py): extract one
  mesh from a TRIMESH batch by index (clamped), logging the source file_name
  when present. Registered in nodes/io/__init__.py.
2026-08-14 13:51:37 +02:00

69 lines
2.4 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)
# Frontend assets are declared in pyproject.toml ([tool.comfy] web = "javascript"),
# served at /extensions/comfyui-geometrypack/. No WEB_DIRECTORY attribute (it would
# double-register the dir under a second mount key).
__all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS']