Files
alexopus-ComfyUI-Notes-Sidebar/__init__.py
T
2025-07-18 16:15:48 +02:00

79 lines
2.8 KiB
Python

import os
from aiohttp import web
from server import PromptServer
WEB_DIRECTORY = "./js"
# Required for ComfyUI to recognize this as a valid extension
NODE_CLASS_MAPPINGS = {}
NODE_DISPLAY_NAME_MAPPINGS = {}
class NotesManager:
def __init__(self):
self.notes_dir = os.path.join(os.path.dirname(__file__), "notes")
os.makedirs(self.notes_dir, exist_ok=True)
def get_notes_list(self) -> list[str]:
notes : list[str] = []
for filename in os.listdir(self.notes_dir):
if filename.endswith('.md'):
notes.append(filename[:-3]) # Remove .md extension
return sorted(notes)
def get_note_content(self, note_name: str):
file_path = os.path.join(self.notes_dir, f"{note_name}.md")
if os.path.exists(file_path):
with open(file_path, 'r', encoding='utf-8') as f:
return f.read()
return ""
def save_note(self, note_name: str, content: str):
file_path = os.path.join(self.notes_dir, f"{note_name}.md")
with open(file_path, 'w', encoding='utf-8') as f:
f.write(content)
def delete_note(self, note_name: str):
file_path = os.path.join(self.notes_dir, f"{note_name}.md")
if os.path.exists(file_path):
os.remove(file_path)
notes_manager = NotesManager()
@PromptServer.instance.routes.get("/notes_sidebar/list")
async def get_notes_list(request):
try:
notes = notes_manager.get_notes_list()
return web.json_response({"notes": notes})
except Exception as e:
return web.json_response({"error": str(e)}, status=500)
@PromptServer.instance.routes.get("/notes_sidebar/note/{note_name}")
async def get_note(request):
try:
note_name = request.match_info['note_name']
content = notes_manager.get_note_content(note_name)
return web.json_response({"content": content})
except Exception as e:
return web.json_response({"error": str(e)}, status=500)
@PromptServer.instance.routes.post("/notes_sidebar/note/{note_name}")
async def save_note(request):
try:
note_name = request.match_info['note_name']
data = await request.json()
content = data.get('content', '')
notes_manager.save_note(note_name, content)
return web.json_response({"success": True})
except Exception as e:
return web.json_response({"error": str(e)}, status=500)
@PromptServer.instance.routes.delete("/notes_sidebar/note/{note_name}")
async def delete_note(request):
try:
note_name = request.match_info['note_name']
notes_manager.delete_note(note_name)
return web.json_response({"success": True})
except Exception as e:
return web.json_response({"error": str(e)}, status=500)
__all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS', 'WEB_DIRECTORY']