<!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>프로젝트 뷰어 (자동 분류 및 URL 변환)</title> <style> body { font-family: Arial, sans-serif; margin: 0; padding: 0; background-color: #f4f4f9; color: #333; } .github-link { text-align: center; padding: 8px; background-color: #24292e; color: #fff; font-size: 14px; } .github-link a { color: #fff; text-decoration: none; } .filter-group { padding: 10px; background-color: #fff; border-bottom: 1px solid #eee; text-align: center; overflow-x: auto; white-space: nowrap; } .filter-group .toggle-button { padding: 6px 12px; margin: 5px; border: 1px solid #ddd; border-radius: 15px; background-color: #fff; font-size: 13px; cursor: pointer; display: inline-block; } .filter-group .toggle-button.active { background-color: #2196f3; border-color: #2196f3; color: #fff; } .main-container { display: flex; height: calc(100vh - 100px); /* 상단 영역 제외 전체 높이 */ } #sidebar { width: 25%; border-right: 1px solid #ccc; overflow-y: auto; padding: 10px; } #sidebar ul { list-style: none; padding: 0; margin: 0; } #sidebar li { margin: 5px 0; padding: 8px; background-color: #fff; border: 1px solid #ddd; border-radius: 4px; cursor: pointer; display: flex; align-items: center; justify-content: space-between; } #sidebar li:hover { background-color: #f0f0f0; } #sidebar li button { margin-left: 8px; padding: 4px 8px; cursor: pointer; font-size: 12px; border-radius: 4px; border: 1px solid #ccc; background-color: #fafafa; } #embed-container { flex: 1; padding: 0; margin: 0; background-color: #fff; } #embed-container iframe { width: 100%; height: 100%; border: none; display: block; } </style> </head> <body> <div class="github-link"> <a href="https://discord.gg/openfreeai" target="_blank">Community</a> </div> <!-- 필터 버튼 영역 --> <div class="filter-group" id="filter-group"> <!-- JavaScript로 동적으로 버튼 생성 --> </div> <div class="main-container"> <div id="sidebar"></div> <div id="embed-container"> <iframe id="embed-frame" src=""></iframe> </div> </div> <script> // 1. 프로젝트 URL 목록: 프로젝트 이름 -> URL const projectList = { "ginipick/spaces-research-korea": "https://huggingface.co/spaces/ginipick/spaces-research-korea", "openfree/Datasets-Convertor": "https://huggingface.co/spaces/openfree/Datasets-Convertor", "VIDraft/mouse-Visual-Chat": "https://huggingface.co/spaces/VIDraft/mouse-Visual-Chat", "VIDraft/mouse-file-chat": "https://huggingface.co/spaces/VIDraft/mouse-file-chat", "openfree/Parquet-CSV-Convertor": "https://huggingface.co/spaces/openfree/Parquet-CSV-Convertor", "ginigen/FLUX-Eternity": "https://huggingface.co/spaces/ginigen/FLUX-Eternity", "ginipick/live-detect-pose": "https://huggingface.co/spaces/ginipick/live-detect-pose", "ginigen/OmniParser-v2-pro": "https://huggingface.co/spaces/ginigen/OmniParser-v2-pro", "ginigen/Celebrity": "https://huggingface.co/spaces/ginigen/Celebrity", "ginigen/Fashion-Pose-Control": "https://huggingface.co/spaces/ginigen/Fashion-Pose-Control", "ginigen/zonos-longform": "https://huggingface.co/spaces/ginigen/zonos-longform", "ginigen/Ovis2-8B": "https://huggingface.co/spaces/ginigen/Ovis2-8B", "ginigen/Workflow-Canvas": "https://huggingface.co/spaces/ginigen/Workflow-Canvas", "ginigen/Design": "https://huggingface.co/spaces/ginigen/Design", "ginigen/Diagram": "https://huggingface.co/spaces/ginigen/Diagram", "ginigen/Mockup": "https://huggingface.co/spaces/ginigen/Mockup", "ginigen/Infographic": "https://huggingface.co/spaces/ginigen/Infographic", "ginigen/Flowchart": "https://huggingface.co/spaces/ginigen/Flowchart", "aiqcamp/FLUX-Vision": "https://huggingface.co/spaces/aiqcamp/FLUX-Vision", "ginigen/VoiceClone-TTS": "https://huggingface.co/spaces/ginigen/VoiceClone-TTS", "fantos/Panorama": "https://huggingface.co/spaces/fantos/Panorama", "ginigen/Multi-LoRAgen": "https://huggingface.co/spaces/ginigen/Multi-LoRAgen", "ginigen/canvas-studio": "https://huggingface.co/spaces/ginigen/canvas-studio", "ginipick/Fashion-Stylegen": "https://huggingface.co/spaces/ginipick/Fashion-Style", "ginipick/Time-Stream": "https://huggingface.co/spaces/ginipick/Time-Stream", "ginipick/AccuVision-Diffusion": "https://huggingface.co/spaces/ginipick/AccuVision-Diffusion", "fantos/Magic-Drawings": "https://huggingface.co/spaces/fantos/Magic-Drawings", "ginigen/Lumina-Image-PLUS": "https://huggingface.co/spaces/ginigen/Lumina-Image-PLUS", "fantaxy/fantasy-novel": "https://huggingface.co/spaces/fantaxy/fantasy-novel", "fantaxy/eros": "https://huggingface.co/spaces/fantaxy/eros", "fantaxy/adult-novel": "https://huggingface.co/spaces/fantaxy/adult-novel", "fantaxy/kungfu-novel": "https://huggingface.co/spaces/fantaxy/kungfu-novel", "fantaxy/love-novel": "https://huggingface.co/spaces/fantaxy/love-novel", "VIDraft/mouse-webgen": "https://huggingface.co/spaces/VIDraft/mouse-webgen", "immunobiotech/MUSIC-Jukebox": "https://huggingface.co/spaces/immunobiotech/MUSIC-Jukebox", "seawolf2357/Flowise-AI": "https://huggingface.co/spaces/seawolf2357/Flowise-AI", "ginigen/Flux-LayerDiffuse": "https://huggingface.co/spaces/ginigen/Flux-LayerDiffuse", "VIDraft/Portrait-Animation": "https://huggingface.co/spaces/VIDraft/Portrait-Animation", "VIDraft/Deepseek-Multimodal": "https://huggingface.co/spaces/VIDraft/Deepseek-Multimodal", "VIDraft/BLIP2": "https://huggingface.co/spaces/VIDraft/BLIP2", "ginigen/text3d-r1": "https://huggingface.co/spaces/ginigen/text3d-r1", "immunobiotech/drug-discovery": "https://huggingface.co/spaces/immunobiotech/drug-discovery", "openfree/VisionOCR-Chat": "https://huggingface.co/spaces/openfree/VisionOCR-Chat", "immunobiotech/MICHELIN": "https://huggingface.co/spaces/immunobiotech/MICHELIN", "immunobiotech/MICHELIN-korea": "https://huggingface.co/spaces/immunobiotech/MICHELIN-korea", "immunobiotech/MICHELIN-japan": "https://huggingface.co/spaces/immunobiotech/MICHELIN-japan", "immunobiotech/MICHELIN-china": "https://huggingface.co/spaces/immunobiotech/MICHELIN-china", "VIDraft/money-radar-korea": "https://huggingface.co/spaces/VIDraft/money-radar-korea", "VIDraft/money-radar": "https://huggingface.co/spaces/VIDraft/money-radar", "ginipick/PharmAI-Korea": "https://huggingface.co/spaces/ginipick/PharmAI-Korea", "ginigen/MagicFace-V3": "https://huggingface.co/spaces/ginigen/MagicFace-V3", "aiqcamp/MindMap": "https://huggingface.co/spaces/aiqcamp/MindMap", "ginigen/3D-LLAMA": "https://huggingface.co/spaces/ginigen/3D-LLAMA", "openfree/VectorFlow": "https://huggingface.co/spaces/openfree/VectorFlow", "openfree/webtoon-gen": "https://huggingface.co/spaces/openfree/webtoon-gen", "VIDraft/topic-prediction": "https://huggingface.co/spaces/VIDraft/topic-prediction", "VIDraft/PapersImpact": "https://huggingface.co/spaces/VIDraft/PapersImpact", "VIDraft/EveryRAG": "https://huggingface.co/spaces/VIDraft/EveryRAG", "VIDraft/korea-president-DJ": "https://huggingface.co/spaces/VIDraft/korea-president-DJ", "VIDraft/korea-president-PARK": "https://huggingface.co/spaces/VIDraft/korea-president-PARK", "openfree/image-to-vector": "https://huggingface.co/spaces/openfree/image-to-vector", "ginipick/QR-Canvas-plus": "https://huggingface.co/spaces/ginipick/QR-Canvas-plus", "ginigen/text3d-R1": "https://huggingface.co/spaces/ginigen/text3d-R1", "openfree/MagicFace-V3": "https://huggingface.co/spaces/openfree/MagicFace-V3", "ginipick/DeepSeekR1-LIVE": "https://huggingface.co/spaces/ginipick/DeepSeekR1-LIVE", "ginigen/ColPali-multi": "https://huggingface.co/spaces/ginigen/ColPali-multi", "ginigen/Janus-Pro-7B": "https://huggingface.co/spaces/ginigen/Janus-Pro-7B", "ginigen/Animagine": "https://huggingface.co/spaces/ginigen/Animagine", "openfree/PDF-RAG": "https://huggingface.co/spaces/openfree/PDF-RAG", "fantos/Ranking-Tracker": "https://huggingface.co/spaces/fantos/Ranking-Tracker", "aiqcamp/Multilingual-Images": "https://huggingface.co/spaces/aiqcamp/Multilingual-Images", "aiqcamp/Gemini2-Flash-Thinking": "https://huggingface.co/spaces/aiqcamp/Gemini2-Flash-Thinking", "openfree/pepe": "https://huggingface.co/spaces/openfree/pepe", "openfree/korea-president-yoon": "https://huggingface.co/spaces/openfree/korea-president-yoon", "openfree/CryptoVision": "https://huggingface.co/spaces/openfree/CryptoVision", "fantos/VoiceClone": "https://huggingface.co/spaces/fantos/VoiceClone", "seawolf2357/ocrlatex": "https://huggingface.co/spaces/seawolf2357/ocrlatex", "seawolf2357/img2vid": "https://huggingface.co/spaces/seawolf2357/img2vid", "seawolf2357/sd-prompt-gen": "https://huggingface.co/spaces/seawolf2357/sd-prompt-gen", "openfree/tarotcard": "https://huggingface.co/spaces/openfree/tarotcard", "aiqcamp/Polaroid": "https://huggingface.co/spaces/aiqcamp/Polaroid", "ginigen/cartoon": "https://huggingface.co/spaces/ginigen/cartoon", "ginigen/Book-Cover": "https://huggingface.co/spaces/ginigen/Book-Cover", "aiqcamp/fash": "https://huggingface.co/spaces/aiqcamp/fash", "gunship999/Korea-Daily-News": "https://huggingface.co/spaces/gunship999/Korea-Daily-News", "immunobiotech/ChicagoGallery": "https://huggingface.co/spaces/immunobiotech/ChicagoGallery", "immunobiotech/MetropolitanMuseum": "https://huggingface.co/spaces/immunobiotech/MetropolitanMuseum", "immunobiotech/opensky": "https://huggingface.co/spaces/immunobiotech/opensky", "aiqtech/FLUX-military": "https://huggingface.co/spaces/aiqtech/FLUX-military", "fantaxy/Rolls-Royce": "https://huggingface.co/spaces/fantaxy/Rolls-Royce", "seawolf2357/flux-korea-hanbok-lora": "https://huggingface.co/spaces/seawolf2357/flux-korea-hanbok-lora", "seawolf2357/flux-korea-palace-lora": "https://huggingface.co/spaces/seawolf2357/flux-korea-palace-lora", "aiqcamp/flux-cat-lora": "https://huggingface.co/spaces/aiqcamp/flux-cat-lora", "gunship999/SexyImages": "https://huggingface.co/spaces/gunship999/SexyImages", "aiqtech/flux-claude-monet-lora": "https://huggingface.co/spaces/aiqtech/flux-claude-monet-lora", "seawolf2357/3D-Avatar-Generator": "https://huggingface.co/spaces/seawolf2357/3D-Avatar-Generator", "fantaxy/playground25": "https://huggingface.co/spaces/fantaxy/playground25", "openfree/ultpixgen": "https://huggingface.co/spaces/openfree/ultpixgen", "seawolf2357/REALVISXL-V5": "https://huggingface.co/spaces/seawolf2357/REALVISXL-V5", "fantos/flxcontrol": "https://huggingface.co/spaces/fantos/flxcontrol", "fantos/textcutobject": "https://huggingface.co/spaces/fantos/textcutobject", "ginipick/FLUX-Prompt-Generator": "https://huggingface.co/spaces/ginipick/FLUX-Prompt-Generator", "fantaxy/flxloraexp": "https://huggingface.co/spaces/fantaxy/flxloraexp", "fantos/flxloraexp": "https://huggingface.co/spaces/fantos/flxloraexp", "seawolf2357/flxloraexp": "https://huggingface.co/spaces/seawolf2357/flxloraexp", "ginipick/flxloraexp": "https://huggingface.co/spaces/ginipick/flxloraexp", "aiqcamp/imagemagic": "https://huggingface.co/spaces/aiqcamp/imagemagic", "openfree/ColorRevive": "https://huggingface.co/spaces/openfree/ColorRevive", "VIDraft/RAGOndevice": "https://huggingface.co/spaces/VIDraft/RAGOndevice", "aiqcamp/AudioLlama": "https://huggingface.co/spaces/aiqcamp/AudioLlama", "ginigen/FLUXllama-Multilingual": "https://huggingface.co/spaces/ginigen/FLUXllama-Multilingual", "ginipick/FitGen": "https://huggingface.co/spaces/ginipick/FitGen", "fantaxy/FLUX-Animations": "https://huggingface.co/spaces/fantaxy/FLUX-Animations", "fantaxy/Remove-Video-Background": "https://huggingface.co/spaces/fantaxy/Remove-Video-Background", "fantaxy/ofai-flx-logo": "https://huggingface.co/spaces/fantaxy/ofai-flx-logo", "fantaxy/flx-pulid": "https://huggingface.co/spaces/fantaxy/flx-pulid", "fantaxy/flx-upscale": "https://huggingface.co/spaces/fantaxy/flx-upscale", "aiqcamp/Fashion-FLUX": "https://huggingface.co/spaces/aiqcamp/Fashion-FLUX", "fantos/x-mas": "https://huggingface.co/spaces/fantos/x-mas", "openfree/Korean-Leaderboard": "https://huggingface.co/spaces/openfree/Korean-Leaderboard", "ginipick/FLUXllama": "https://huggingface.co/spaces/ginipick/FLUXllama", "fantaxy/Sound-AI-SFX": "https://huggingface.co/spaces/fantaxy/Sound-AI-SFX", "fantos/flx8lora": "https://huggingface.co/spaces/fantos/flx8lora", "openfree/trending-board": "https://huggingface.co/spaces/openfree/trending-board", "ginipick/Realtime-FLUX": "https://huggingface.co/spaces/ginipick/Realtime-FLUX", "aiqtech/kofaceid": "https://huggingface.co/spaces/aiqtech/kofaceid", "fantaxy/fastvideogena": "https://huggingface.co/spaces/fantaxy/fastvideogen", "fantos/flxfashmodel": "https://huggingface.co/spaces/fantos/flxfashmodel", "fantos/kolcontrl": "https://huggingface.co/spaces/fantos/kolcontrl", "aiqtech/cinevid": "https://huggingface.co/spaces/aiqtech/cinevid", "aiqtech/FLUX-Ghibli-Studio-LoRA": "https://huggingface.co/spaces/aiqtech/FLUX-Ghibli-Studio-LoRA", "aiqtech/flxgif": "https://huggingface.co/spaces/aiqtech/flxgif", "aiqtech/imaginpaint": "https://huggingface.co/spaces/aiqtech/imaginpaint" }; // 2. 별도 객체: 프로젝트의 개별 카테고리 지정 (없으면 기본값 "Image Gen" 사용) const customCategories = { "ginipick/spaces-research-korea": "Productivity", "openfree/Datasets-Convertor": "Utility", "VIDraft/mouse-Visual-Chat": "Productivity", "VIDraft/mouse-file-chat": "Productivity", "openfree/Parquet-CSV-Convertor": "Utility", "ginigen/FLUX-Eternity": "Image Gen", "ginipick/live-detect-pose": "Productivity", "ginigen/OmniParser-v2-pro": "Vision", "ginigen/Celebrity": "Image Gen", "ginigen/Fashion-Pose-Control": "Productivity", "ginigen/zonos-longform": "Audio", "ginigen/Ovis2-8B": "Vision", "ginigen/Workflow-Canvas": "Productivity", "ginigen/Design": "Productivity", "ginigen/Diagram": "Productivity", "ginigen/Mockup": "Productivity", "ginigen/Infographic": "Productivity", "ginigen/Flowchart": "Productivity", "aiqcamp/FLUX-Vision ": "Productivity", "ginigen/VoiceClone-TTS": "Audio", "fantos/Panorama": "Image Gen", "ginigen/Multi-LoRAgen": "Image Gen", "ginigen/canvas-studio": "Image Edit", "ginipick/Fashion-Stylegen": "Productivity", "ginipick/Time-Stream": "Video", "ginipick/AccuVision-Diffusion": "Image Gen", "fantos/Magic-Drawings": "Image Edit", "ginigen/Lumina-Image-PLUS": "Image Gen", "fantaxy/fantasy-novel": "Text", "fantaxy/eros": "Text", "fantaxy/adult-novel": "Text", "fantaxy/kungfu-novel": "Text", "fantaxy/love-novel": "Text", "VIDraft/mouse-webgen": "Productivity", "immunobiotech/MUSIC-Jukebox": "Audio", "seawolf2357/Flowise-AI": "Productivity", "ginigen/Flux-LayerDiffuse": "Image Gen", "VIDraft/Portrait-Animation": "Video", "VIDraft/Deepseek-Multimodal": "Vision", "VIDraft/BLIP2": "Image Gen", "ginigen/text3d-r1": "Image Gen", "immunobiotech/drug-discovery": "Productivity", "openfree/VisionOCR-Chat": "Vision", "immunobiotech/MICHELIN": "Productivity", "immunobiotech/MICHELIN-korea": "Productivity", "immunobiotech/MICHELIN-japan": "Productivity", "immunobiotech/MICHELIN-china": "Productivity", "VIDraft/money-radar-korea": "Productivity", "VIDraft/money-radar": "Productivity", "ginipick/PharmAI-Korea": "Productivity", "ginigen/MagicFace-V3": "Image Gen", "aiqcamp/MindMap": "Image Gen", "ginigen/3D-LLAMA": "Productivity", "openfree/VectorFlow": "Image Edit", "openfree/webtoon-gen": "Image Gen", "VIDraft/topic-prediction": "Text", "VIDraft/PapersImpact": "Productivity", "VIDraft/EveryRAG": "Text", "VIDraft/korea-president-DJ": "Image Gen", "VIDraft/korea-president-PARK": "Image Gen", "openfree/image-to-vector": "Image Edit", "ginipick/QR-Canvas-plus": "Productivity", "ginigen/text3d-R1": "Image Gen", "openfree/MagicFace-V3": "Image Edit", "ginipick/DeepSeekR1-LIVE": "Text", "ginigen/ColPali-multi": "Text", "ginigen/Janus-Pro-7B": "Vision", "ginigen/Animagine": "Image Gen", "openfree/PDF-RAG": "Productivity", "fantos/Ranking-Tracker": "Utility", "aiqcamp/Multilingual-Images": "Image Gen", "aiqcamp/Gemini2-Flash-Thinking": "Text", "openfree/pepe": "Image Gen", "openfree/korea-president-yoon": "Image Gen", "openfree/CryptoVision": "Utility", "fantos/VoiceClone": "Audio", "seawolf2357/ocrlatex": "Utility", "seawolf2357/img2vid": "Video", "seawolf2357/sd-prompt-gen": "Text", "openfree/tarotcard": "Utility", "aiqcamp/Polaroid": "Image Gen", "ginigen/cartoon": "Image Gen", "ginigen/Book-Cover": "Image Gen", "aiqcamp/fash": "Productivity", "gunship999/Korea-Daily-News": "Utility", "immunobiotech/ChicagoGallery": "Utility", "immunobiotech/MetropolitanMuseum": "Utility", "immunobiotech/opensky": "Utility", "VIDraft/eum": "Text", "aiqtech/FLUX-military": "Image Gen", "fantaxy/Rolls-Royce": "Image Gen", "seawolf2357/flux-korea-hanbok-lora": "Image Gen", "seawolf2357/flux-korea-palace-lora": "Image Gen", "aiqcamp/flux-cat-lora": "Image Gen", "gunship999/SexyImages": "Image Gen", "aiqtech/flux-claude-monet-lora": "Image Gen", "seawolf2357/3D-Avatar-Generator": "Utility", "fantaxy/playground25": "Image Gen", "openfree/ultpixgen": "Image Gen", "seawolf2357/REALVISXL-V5": "Image Gen", "fantos/flxcontrol": "Image Edit", "fantos/textcutobject": "Image Edit", "ginipick/FLUX-Prompt-Generator": "Text", "fantaxy/flxloraexp": "Image Gen", "fantos/flxloraexp": "Image Gen", "seawolf2357/flxloraexp": "Image Gen", "ginipick/flxloraexp": "Image Gen", "aiqcamp/imagemagic": "Image Edit", "openfree/ColorRevive": "Image Edit", "VIDraft/RAGOndevice": "Productivity", "aiqcamp/AudioLlama": "Audio", "ginigen/FLUXllama-Multilingual": "Image Gen", "ginipick/FitGen": "Image Gen", "fantaxy/FLUX-Animations": "Image Gen", "fantaxy/Remove-Video-Background": "Image Edit", "fantaxy/ofai-flx-logo": "Image Gen", "fantaxy/flx-pulid": "Image Gen", "fantaxy/flx-upscale": "Image Edit", "aiqcamp/Fashion-FLUX": "Image Gen", "fantos/x-mas": "Image Gen", "openfree/Korean-Leaderboard": "Utility", "ginipick/FLUXllama": "Image Gen", "fantaxy/Sound-AI-SFX": "Audio", "fantos/flx8lora": "Image Gen", "openfree/trending-board": "Utility", "ginipick/Realtime-FLUX": "Image Gen", "aiqtech/kofaceid": "Image Gen", "fantaxy/fastvideogena": "Video", "fantos/cogvidx": "Video", "fantos/flxfashmodel": "Image Gen", "fantos/kolcontrl": "Image Edit", "aiqtech/cinevid": "Video", "aiqtech/FLUX-Ghibli-Studio-LoRA": "Image Gen", "aiqtech/flxgif": "Image Gen", "aiqtech/imaginpaint": "Image Edit" }; const newProjects = [ "ginigen/OmniParser-v2-pro", "ginigen/Celebrity", "ginigen/Fashion-Pose-Control", "openfree/Parquet-CSV-Convertor", "ginigen/zonos-longform", "ginigen/Ovis2-8B", "ginigen/Design", "ginigen/Diagram", "ginigen/Mockup", "ginigen/Infographic", "ginigen/Flowchart", "aiqcamp/FLUX-Vision", "fantos/Panorama", "ginigen/Multi-LoRAgen", "ginigen/canvas-studio", "ginipick/Fashion-Stylegen", "ginipick/Time-Stream", "ginipick/AccuVision-Diffusion", "fantos/Magic-Drawings", "ginigen/Lumina-Image-PLUS", "fantaxy/fantasy-novel", "fantaxy/eros", "fantaxy/adult-novel", "fantaxy/kungfu-novel", "fantaxy/love-novel", "VIDraft/mouse-webgen", "immunobiotech/MUSIC-Jukebox", "seawolf2357/Flowise-AI", "ginigen/Flux-LayerDiffuse", "VIDraft/Portrait-Animation", "VIDraft/Deepseek-Multimodal", "VIDraft/BLIP2", "ginigen/text3d-r1", "immunobiotech/drug-discovery", "openfree/VisionOCR-Chat", "immunobiotech/MICHELIN", "immunobiotech/MICHELIN-korea", "immunobiotech/MICHELIN-japan", "immunobiotech/MICHELIN-china", "VIDraft/money-radar-korea", "VIDraft/money-radar", "ginipick/PharmAI-Korea", "ginigen/MagicFace-V3", "aiqcamp/MindMap", "ginigen/3D-LLAMA", "openfree/VectorFlow", "openfree/webtoon-gen", "VIDraft/topic-prediction", "VIDraft/PapersImpact", "VIDraft/EveryRAG", "VIDraft/korea-president-DJ", "VIDraft/korea-president-PARK", "openfree/image-to-vector", "ginipick/QR-Canvas-plus", "openfree/MagicFace-V3", "ginipick/DeepSeekR1-LIVE", "ginigen/ColPali-multi", "ginigen/Janus-Pro-7B", "ginigen/Animagine", "openfree/PDF-RAG", "fantos/Ranking-Tracker", "aiqcamp/Multilingual-Images", "aiqcamp/Gemini2-Flash-Thinking", "openfree/pepe", "openfree/korea-president-yoon", "openfree/CryptoVision", "fantos/VoiceClone", "seawolf2357/ocrlatex", "seawolf2357/img2vid", "seawolf2357/sd-prompt-gen", "openfree/tarotcard", "aiqcamp/Polaroid", "ginigen/cartoon", "ginigen/Book-Cover" ]; const bestProjects = [ "ginipick/spaces-research-korea", "VIDraft/mouse-Visual-Chat", "VIDraft/mouse-file-chat", "openfree/Datasets-Convertor", "ginipick/live-detect-pose", "ginigen/FLUX-Eternity", "ginigen/Workflow-Canvas", "ginigen/VoiceClone-TTS", "openfree/VisionOCR-Chat", "ginigen/3D-LLAMA", "fantos/Ranking-Tracker", "openfree/trending-board", "openfree/Korean-Leaderboard", "fantos/Panorama", "ginigen/Multi-LoRAgen", "ginigen/canvas-studio", "fantaxy/adult-novel", "VIDraft/mouse-webgen", "ginigen/text3d-r1", "immunobiotech/MICHELIN-korea", "VIDraft/money-radar-korea", "ginipick/PharmAI-Korea", "VIDraft/PapersImpact", "aiqcamp/MindMap", "VIDraft/EveryRAG", "openfree/MagicFace-V3", "ginigen/Animagine", "openfree/PDF-RAG", "aiqcamp/Multilingual-Images", "aiqcamp/Gemini2-Flash-Thinking", "openfree/CryptoVision", "fantos/VoiceClone", "seawolf2357/ocrlatex", "ginigen/cartoon", "ginigen/Book-Cover", "aiqcamp/fash", "seawolf2357/REALVISXL-V5", "aiqcamp/AudioLlama", "ginigen/FLUXllama-Multilingual", "ginipick/FitGen" ]; // 4. URL 변환 함수 function transformUrl(url) { const prefix = "https://huggingface.co/spaces/"; if (url.startsWith(prefix)) { const rest = url.substring(prefix.length); return "https://" + rest.replace("/", "-") + ".hf.space"; } return url; } // 5. 프로젝트 배열 생성 const keys = Object.keys(projectList); const projects = keys.map(key => { const primaryCategory = customCategories[key] || "Image Gen"; let categories = [primaryCategory]; if (newProjects.includes(key)) categories.push("NEW"); if (bestProjects.includes(key)) categories.push("BEST"); return { name: primaryCategory + "/" + key.split("/")[1], url: transformUrl(projectList[key]), categories: categories }; }); // 6. 카테고리별 그룹화 const grouped = {}; projects.forEach(proj => { proj.categories.forEach(cat => { if (!grouped[cat]) grouped[cat] = []; grouped[cat].push(proj); }); }); // 7. 필터 버튼 생성 const fixedGroups = ["NEW", "BEST", "Text", "Image Gen", "Image Edit", "Audio", "Video", "Productivity", "Utility", "Vision"]; const filterGroupDiv = document.getElementById("filter-group"); const allButton = document.createElement("button"); allButton.className = "toggle-button active"; allButton.setAttribute("data-filter", "all"); allButton.textContent = "All"; filterGroupDiv.appendChild(allButton); fixedGroups.forEach(category => { const btn = document.createElement("button"); btn.className = "toggle-button"; btn.setAttribute("data-filter", category); btn.textContent = category; filterGroupDiv.appendChild(btn); }); // 8. 사이드바 갱신 함수 function updateSidebar(filter) { const sidebar = document.getElementById("sidebar"); sidebar.innerHTML = ""; let items = (filter === "all") ? projects : projects.filter(p => p.categories.includes(filter)); const ul = document.createElement("ul"); items.forEach(item => { const li = document.createElement("li"); // 이름 표시 const nameSpan = document.createElement("span"); nameSpan.textContent = item.name; li.appendChild(nameSpan); // "링크 클릭" 버튼 const linkButton = document.createElement("button"); linkButton.textContent = "링크 클릭"; linkButton.addEventListener("click", (event) => { event.stopPropagation(); // li 클릭 이벤트와 구분 window.open(item.url, "_blank"); // 새 탭(창) 열기 }); li.appendChild(linkButton); // li 자체 클릭하면 iframe 변경 li.addEventListener("click", () => { document.getElementById("embed-frame").src = item.url; }); ul.appendChild(li); }); sidebar.appendChild(ul); if (items.length > 0) { document.getElementById("embed-frame").src = items[0].url; } else { document.getElementById("embed-frame").src = ""; } } // 9. 버튼 클릭 이벤트 document.querySelectorAll(".toggle-button").forEach(button => { button.addEventListener("click", function() { document.querySelectorAll(".toggle-button").forEach(b => b.classList.remove("active")); this.classList.add("active"); updateSidebar(this.getAttribute("data-filter")); }); }); // 10. 페이지 로드 시 All 필터 updateSidebar("all"); </script> </body> </html>