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']