Files
mudknight 1a79f40ba7 Refactored node profile extension (closes #34)
It now saves settings by node type, replacing the settings on found
nodes. Detailer nodes are found based on their selected bbox model and
the model is displayed under the node type in the UI.
2026-01-09 22:32:13 -08:00

78 lines
2.4 KiB
Python

import json
import server
from aiohttp import web
from . import common
CONFIG_DIR = common.CONFIG_DIR
PROFILES_FILE = CONFIG_DIR / "node_profiles.json"
def load_profiles():
if not PROFILES_FILE.exists():
return {}
try:
with open(PROFILES_FILE, 'r', encoding='utf-8') as f:
return json.load(f)
except Exception as e:
print(f"Error loading profiles: {e}")
return {}
def save_profiles(profiles):
try:
CONFIG_DIR.mkdir(parents=True, exist_ok=True)
with open(PROFILES_FILE, 'w', encoding='utf-8') as f:
json.dump(profiles, f, indent=2, ensure_ascii=False)
return True
except Exception as e:
print(f"Error saving profiles: {e}")
return False
@server.PromptServer.instance.routes.get('/node_profiles')
async def get_profiles(request):
return web.json_response(load_profiles())
@server.PromptServer.instance.routes.get('/node_profiles/{name}')
async def get_profile(request):
name = request.match_info['name']
profiles = load_profiles()
if name not in profiles:
return web.json_response({"error": "Not found"}, status=404)
return web.json_response(profiles[name])
@server.PromptServer.instance.routes.post('/node_profiles/{name}')
async def save_profile(request):
name = request.match_info['name']
data = await request.json()
profiles = load_profiles()
profiles[name] = data
if save_profiles(profiles):
return web.json_response({"success": True})
return web.json_response({"error": "Save failed"}, status=500)
@server.PromptServer.instance.routes.delete('/node_profiles/{name}')
async def delete_profile(request):
name = request.match_info['name']
profiles = load_profiles()
if name in profiles:
del profiles[name]
save_profiles(profiles)
return web.json_response({"success": True})
return web.json_response({"error": "Not found"}, status=404)
@server.PromptServer.instance.routes.post('/node_profiles/rename')
async def rename_profile(request):
data = await request.json()
old_n, new_n = data.get('oldName'), data.get('newName')
profiles = load_profiles()
if old_n in profiles:
profiles[new_n] = profiles.pop(old_n)
save_profiles(profiles)
return web.json_response({"success": True})
return web.json_response({"error": "Not found"}, status=404)