1<!doctype html> 2<html 3 lang="en" 4 style=" 5 margin: 0; 6 padding: 0; 7 min-height: 100%; 8 display: flex; 9 flex-direction: column; 10 " 11> 12 <head> 13 <meta charset="utf-8" /> 14 <meta 15 name="viewport" 16 content="width=device-width, initial-scale=1, shrink-to-fit=no" 17 /> 18 <meta property="og:title" content="Gradio" /> 19 <meta property="og:type" content="website" /> 20 <meta property="og:url" content="{url}" /> 21 <meta property="og:description" content="Click to try out the app!" /> 22 <meta 23 property="og:image" 24 content="https://raw.githubusercontent.com/gradio-app/gradio/main/js/_website/src/lib/assets/img/header-image.jpg" 25 /> 26 <meta name="twitter:card" content="summary_large_image" /> 27 <meta name="twitter:creator" content="@Gradio" /> 28 <meta name="twitter:title" content="Gradio" /> 29 <meta name="twitter:description" content="Click to try out the app!" /> 30 <meta 31 name="twitter:image" 32 content="https://raw.githubusercontent.com/gradio-app/gradio/main/js/_website/src/lib/assets/img/header-image.jpg" 33 /> 34 35 <style> 36 :root { 37 --bg: white; 38 --col: #27272a; 39 --bg-dark: #0f0f11; 40 --col-dark: #f4f4f5; 41 } 42 43 44 body { 45 background: var(--bg); 46 color: var(--col); 47 font-family: Arial, Helvetica, sans-serif; 48 } 49 50 @media (prefers-color-scheme: dark) { 51 body { 52 background: var(--bg-dark); 53 color: var(--col-dark); 54 } 55 } 56 </style> 57 58 <meta property="og:url" content="https://gradio.app/" /> 59 <meta property="og:type" content="website" /> 60 <meta property="og:image" content="" /> 61 <meta property="og:title" content="AI íë¡í ì¬ì§ · Connect AI LAB" /> 62 <meta 63 property="og:description" 64 content="" 65 /> 66 <meta name="twitter:card" content="summary_large_image" /> 67 <meta name="twitter:creator" content="@teamGradio" /> 68 <meta name="twitter:title" content="AI íë¡í ì¬ì§ · Connect AI LAB" /> 69 <meta 70 name="twitter:description" 71 content="" 72 /> 73 <meta name="twitter:image" content="" /> 74 75
75<script>window.gradio_config = {"version":"6.17.3","api_prefix":"/gradio_api","mode":"blocks","app_id":17634833700219892252,"dev_mode":false,"vibe_mode":false,"analytics_enabled":true,"components":[{"id":1,"type":"textbox","props":{"value":"[]","type":"text","lines":1,"show_label":false,"container":false,"min_width":160,"visible":true,"elem_id":"hidden-images-b64","autofocus":false,"autoscroll":true,"elem_classes":["hidden-input"],"preserved_by_key":["value"],"rtl":false,"buttons":[],"submit_btn":false,"stop_btn":false,"name":"textbox","_selectable":false},"skip_api":false,"component_class_id":"0fc9c4cad71d1ab8599f7d2f997c7cf3bcabb4ea624a2db880c7fe38ffd613d7","key":null,"api_info":{"type":"string"},"api_info_as_input":{"type":"string"},"api_info_as_output":{"type":"string"},"example_inputs":"Hello!!"},{"id":2,"type":"textbox","props":{"value":"","type":"text","lines":1,"show_label":false,"container":false,"min_width":160,"visible":true,"elem_id":"prompt-gradio-input","autofocus":false,"autoscroll":true,"elem_classes":["hidden-input"],"preserved_by_key":["value"],"rtl":false,"buttons":[],"submit_btn":false,"stop_btn":false,"name":"textbox","_selectable":false},"skip_api":false,"component_class_id":"0fc9c4cad71d1ab8599f7d2f997c7cf3bcabb4ea624a2db880c7fe38ffd613d7","key":null,"api_info":{"type":"string"},"api_info_as_input":{"type":"string"},"api_info_as_output":{"type":"string"},"example_inputs":"Hello!!"},{"id":3,"type":"dropdown","props":{"choices":[["Multiple-Angles","Multiple-Angles"],["Photo-to-Anime","Photo-to-Anime"],["Anime-V2","Anime-V2"],["Light-Migration","Light-Migration"],["Upscaler","Upscaler"],["Style-Transfer","Style-Transfer"],["Manga-Tone","Manga-Tone"],["Anything2Real","Anything2Real"],["Fal-Multiple-Angles","Fal-Multiple-Angles"],["Polaroid-Photo","Polaroid-Photo"],["Unblur-Anything","Unblur-Anything"],["Midnight-Noir-Eyes-Spotlight","Midnight-Noir-Eyes-Spotlight"],["Hyper-Realistic-Portrait","Hyper-Realistic-Portrait"],["Ultra-Realistic-Portrait","Ultra-Realistic-Portrait"],["Pixar-Inspired-3D","Pixar-Inspired-3D"],["Noir-Comic-Book","Noir-Comic-Book"],["Any-light","Any-light"],["Studio-DeLight","Studio-DeLight"],["Cinematic-FlatLog","Cinematic-FlatLog"]],"value":"Hyper-Realistic-Portrait","type":"value","allow_custom_value":false,"filterable":true,"show_label":false,"container":false,"min_width":160,"visible":true,"elem_id":"gradio-lora","elem_classes":["hidden-input"],"preserved_by_key":["value"],"buttons":[],"name":"dropdown","_selectable":false},"skip_api":false,"component_class_id":"d806107f105ee5d039611f55ea03696f0982a8e0a21facb914536be3d41a2664","key":null,"api_info":{"type":"string","enum":["Multiple-Angles","Photo-to-Anime","Anime-V2","Light-Migration","Upscaler","Style-Transfer","Manga-Tone","Anything2Real","Fal-Multiple-Angles","Polaroid-Photo","Unblur-Anything","Midnight-Noir-Eyes-Spotlight","Hyper-Realistic-Portrait","Ultra-Realistic-Portrait","Pixar-Inspired-3D","Noir-Comic-Book","Any-light","Studio-DeLight","Cinematic-FlatLog"]},"api_info_as_input":{"type":"string","enum":["Multiple-Angles","Photo-to-Anime","Anime-V2","Light-Migration","Upscaler","Style-Transfer","Manga-Tone","Anything2Real","Fal-Multiple-Angles","Polaroid-Photo","Unblur-Anything","Midnight-Noir-Eyes-Spotlight","Hyper-Realistic-Portrait","Ultra-Realistic-Portrait","Pixar-Inspired-3D","Noir-Comic-Book","Any-light","Studio-DeLight","Cinematic-FlatLog"]},"api_info_as_output":{"type":"string","enum":["Multiple-Angles","Photo-to-Anime","Anime-V2","Light-Migration","Upscaler","Style-Transfer","Manga-Tone","Anything2Real","Fal-Multiple-Angles","Polaroid-Photo","Unblur-Anything","Midnight-Noir-Eyes-Spotlight","Hyper-Realistic-Portrait","Ultra-Realistic-Portrait","Pixar-Inspired-3D","Noir-Comic-Book","Any-light","Studio-DeLight","Cinematic-FlatLog"]},"example_inputs":"Multiple-Angles"},{"id":4,"type":"slider","props":{"minimum":0,"maximum":2147483647,"value":0,"step":1,"show_label":false,"container":false,"min_width":160,"visible":true,"elem_id":"gradio-seed","elem_classes":["hidden-input"],"preserved_by_key":["value"],"name":"slider","_selectable":false},"skip_api":false,"component_class_id":"390a95edbee85fb6202194179cdf2f8
75c67c6552ff26c02a3bb3298f6f221fb0c","key":null,"api_info":{"type":"number","description":"numeric value between 0 and 2147483647"},"api_info_as_input":{"type":"number","description":"numeric value between 0 and 2147483647"},"api_info_as_output":{"type":"number","description":"numeric value between 0 and 2147483647"},"example_inputs":0},{"id":5,"type":"checkbox","props":{"value":true,"show_label":false,"container":false,"min_width":160,"visible":true,"elem_id":"gradio-randomize","elem_classes":["hidden-input"],"preserved_by_key":["value"],"buttons":[],"name":"checkbox","_selectable":false},"skip_api":false,"component_class_id":"8315fb025ed928bf225e0ead17c361a3653163da6b97250a1b0c411dceebd6b9","key":null,"api_info":{"type":"boolean"},"api_info_as_input":{"type":"boolean"},"api_info_as_output":{"type":"boolean"},"example_inputs":true},{"id":6,"type":"slider","props":{"minimum":1.0,"maximum":10.0,"value":1.0,"step":0.1,"show_label":false,"container":false,"min_width":160,"visible":true,"elem_id":"gradio-guidance","elem_classes":["hidden-input"],"preserved_by_key":["value"],"name":"slider","_selectable":false},"skip_api":false,"component_class_id":"390a95edbee85fb6202194179cdf2f8c67c6552ff26c02a3bb3298f6f221fb0c","key":null,"api_info":{"type":"number","description":"numeric value between 1.0 and 10.0"},"api_info_as_input":{"type":"number","description":"numeric value between 1.0 and 10.0"},"api_info_as_output":{"type":"number","description":"numeric value between 1.0 and 10.0"},"example_inputs":1.0},{"id":7,"type":"slider","props":{"minimum":1,"maximum":50,"value":4,"step":1,"show_label":false,"container":false,"min_width":160,"visible":true,"elem_id":"gradio-steps","elem_classes":["hidden-input"],"preserved_by_key":["value"],"name":"slider","_selectable":false},"skip_api":false,"component_class_id":"390a95edbee85fb6202194179cdf2f8c67c6552ff26c02a3bb3298f6f221fb0c","key":null,"api_info":{"type":"number","description":"numeric value between 1 and 50"},"api_info_as_input":{"type":"number","description":"numeric value between 1 and 50"},"api_info_as_output":{"type":"number","description":"numeric value between 1 and 50"},"example_inputs":1},{"id":8,"type":"image","props":{"streamable":false,"format":"png","image_mode":"RGB","sources":["upload","webcam","clipboard"],"type":"numpy","show_label":false,"buttons":["download","share","fullscreen"],"container":false,"min_width":160,"visible":true,"streaming":false,"elem_id":"gradio-result","elem_classes":["hidden-input"],"preserved_by_key":["value"],"webcam_options":{"mirror":true,"constraints":null},"watermark":{"watermark":null,"position":"bottom-right"},"name":"image","_selectable":false},"skip_api":false,"component_class_id":"cf34c74b52d93e528ef734415997d3d347fae6292f8b225082ce22677e6bdbad","key":null,"api_info":{"properties":{"path":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Path to a local file","title":"Path"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Publicly available url or base64 encoded image","title":"Url"},"size":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Size of image in bytes","title":"Size"},"orig_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Original filename","title":"Orig Name"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"mime type of image","title":"Mime Type"},"is_stream":{"default":false,"description":"Can always be set to False","title":"Is Stream","type":"boolean"},"meta":{"additionalProperties":true,"default":{"_type":"gradio.FileData"},"title":"Meta","type":"object"}},"title":"ImageData","type":"object","additional_description":"A local filepath or publicly available URL."},"api_info_as_input":{"properties":{"path":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Path to a local file","title":"Path"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Publicly available url or base64 encoded image","title":"Url"},"size":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Size of image in bytes","title":"Size"},"orig_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Original filename","title":"Orig Name"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}
75],"default":null,"description":"mime type of image","title":"Mime Type"},"is_stream":{"default":false,"description":"Can always be set to False","title":"Is Stream","type":"boolean"},"meta":{"additionalProperties":true,"default":{"_type":"gradio.FileData"},"title":"Meta","type":"object"}},"title":"ImageData","type":"object","additional_description":"A local filepath or publicly available URL."},"api_info_as_output":{"properties":{"path":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Path to a local file","title":"Path"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Publicly available url or base64 encoded image","title":"Url"},"size":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Size of image in bytes","title":"Size"},"orig_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Original filename","title":"Orig Name"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"mime type of image","title":"Mime Type"},"is_stream":{"default":false,"description":"Can always be set to False","title":"Is Stream","type":"boolean"},"meta":{"additionalProperties":true,"default":{"_type":"gradio.FileData"},"title":"Meta","type":"object"}},"title":"ImageData","type":"object","additional_description":"A local filepath or publicly available URL."},"example_inputs":{"path":"https://raw.githubusercontent.com/gradio-app/gradio/main/test/test_files/bus.png","meta":{"_type":"gradio.FileData"},"orig_name":"bus.png","url":"https://raw.githubusercontent.com/gradio-app/gradio/main/test/test_files/bus.png"}},{"id":9,"type":"textbox","props":{"value":"","type":"text","lines":1,"show_label":false,"container":false,"min_width":160,"visible":true,"elem_id":"example-idx-input","autofocus":false,"autoscroll":true,"elem_classes":["hidden-input"],"preserved_by_key":["value"],"rtl":false,"buttons":[],"submit_btn":false,"stop_btn":false,"name":"textbox","_selectable":false},"skip_api":false,"component_class_id":"0fc9c4cad71d1ab8599f7d2f997c7cf3bcabb4ea624a2db880c7fe38ffd613d7","key":null,"api_info":{"type":"string"},"api_info_as_input":{"type":"string"},"api_info_as_output":{"type":"string"},"example_inputs":"Hello!!"},{"id":10,"type":"textbox","props":{"value":"","type":"text","lines":1,"show_label":false,"container":false,"min_width":160,"visible":true,"elem_id":"example-result-data","autofocus":false,"autoscroll":true,"elem_classes":["hidden-input"],"preserved_by_key":["value"],"rtl":false,"buttons":[],"submit_btn":false,"stop_btn":false,"name":"textbox","_selectable":false},"skip_api":false,"component_class_id":"0fc9c4cad71d1ab8599f7d2f997c7cf3bcabb4ea624a2db880c7fe38ffd613d7","key":null,"api_info":{"type":"string"},"api_info_as_input":{"type":"string"},"api_info_as_output":{"type":"string"},"example_inputs":"Hello!!"},{"id":11,"type":"button","props":{"value":"Load Example","variant":"secondary","size":"lg","link_target":"_self","visible":true,"interactive":true,"elem_id":"example-load-btn","elem_classes":[],"preserved_by_key":["value"],"name":"button","_selectable":false},"skip_api":true,"component_class_id":"9802f23c83089d1c7f880af56b1493552cad2509ae4bf55adfb8ed1e639a4a8d","key":null},{"id":12,"type":"html","props":{"_retryable":false,"_undoable":false,"likeable":false,"streamable":false,"value":"\u003cstyle\u003e.gh-btn,.gh-btn:hover{background:#ff0000!important;border-color:#ff0000!important;}.gh-btn svg{fill:#fff!important;}.gh-btn span{color:#fff!important;-webkit-text-fill-color:#fff!important;}.lora-selector-card{display:none!important;}.app-logo{box-shadow:0 0 20px rgba(57,255,20,.6),inset 0 0 8px rgba(255,255,255,.25)!important;}.app-title{text-shadow:0 0 14px rgba(57,255,20,.45);letter-spacing:.3px;}.app-badge.fast{background:linear-gradient(135deg,#12b981,#39ff14)!important;color:#04140b!important;font-weight:800!important;box-shadow:0 0 12px rgba(57,255,20,.4);}.app-shell{box-shadow:0 0 80px -24px rgba(57,255,20,.35)!important;}.btn-run{box-shadow:0 6px 24px rgba(57,255,20,.3)!important;letter-spacing:.5px;}.suggestion-chip{transition:all .15s ease;}.suggestion-chip:hover{box-shadow:0 0 14px rgba(57,255,20,.35);}\u003c/style\u003e","html_template":"${value}","css_template":"","js_on_load":"element.addEventListener(\u0027click\u0027, function() { trigger(\u0027click\u0027) });","apply_default_css":true,"show_label":false,"visible":true,"elem_classes":[],"preserved_by_key":["value"],"container":false,"padding":false,"autoscroll":false,"buttons":[],"props":{},"name":"html","_selectable":false,"component_class_name":"HTML"},"skip_api":false,"component_class_id":"470d374173809727c94172a54261a1d855e76f7da7ed9381ddbd63d6390c332c","key":null,"api_info":{"type":"string"},"api_info_as_input":{"type":"string"},"api_info_as_output":{"type":"string"},"example_inputs":"\u003cp\u003eHello\u003c/p\u003e"},{"id":13,"type":"html","props":{"_retryable":false,"_undoable":false,"likeable":false,"streamable":false,"value":"\n \u003cdiv class=\"app-shell\"\u003e\n\n \u003c!-- Header --\u003e\n \u003cdiv class=\"app-header\"\u003e\n \u003cdiv class=\"app-header-left\"\u003e\n \u003cdiv class=\"app-logo\"\u003e\u003csvg viewBox=\"0 0 24 24\" fill=\"white\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n \u003cpath d=\"M12 2C12 2 7 6.5 7 13c0 1.4.3 2.7.8 3.9L5 19.7l1.4 1.4 2.8-2.8c1.2.5 2.5.7 3.8.7s2.6-.2 3.8-.7l2.8 2.8 1.4-1.4-2.8-2.8c.5-1.2.8-2.5.8-3.9 0-6.5-5-11-5-11z\"/\u003e\n \u003ccircle cx=\"12\" cy=\"13\" r=\"2\"/\u003e\n \u003cpath d=\"M9 21c0 1.1.9 2 2 2h2c1.1 0 2-.9 2-2v-1H9v1z\"/\u003e\n\u003c/svg\u003e\u003c/div\u003e\n \u003cspan class=\"app-title\"\u003eAI íë¡í ì¬ì§\u003c/span\u003e\n \u003cspan class=\"app-badge\"\u003eCONNECT AI LAB\u003c/span\u003e\n \u003cspan class=\"app-badge fast\"\u003eâ¡ 4ì¤í
ì´ê³ ì\u003c/span\u003e\n \u003c/div\u003e\n\n \u003c!-- GitHub button: highlighted orange, same in light \u0026 dark --\u003e\n \u003ca href=\"https://www.youtube.com/@CONNECT-AI-LAB\"\n target=\"_blank\"\n class=\"gh-btn\"\u003e\n \u003csvg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\u003cpath fill=\"#ffffff\" d=\"M23.5 6.2a3 3 0 0 0-2.1-2.1C19.5 3.5 12 3.5 12 3.5s-7.5 0-9.4.6A3 3 0 0 0 .5 6.2 31 31 0 0 0 0 12a31 31 0 0 0 .5 5.8 3 3 0 0 0 2.1 2.1c1.9.6 9.4.6 9.4.6s7.5 0 9.4-.6a3 3 0 0 0 2.1-2.1A31 31 0 0 0 24 12a31 31 0 0 0-.5-5.8zM9.5 15.5v-7l6.5 3.5-6.5 3.5z\"/\u003e\u003c/svg\u003e\n \u003cspan\u003e구ë
\u003c/span\u003e\n \u003c/a\u003e\n \u003c/div\u003e\n\n \u003c!-- Toolbar --\u003e\n \u003cdiv class=\"app-toolbar\"\u003e\n \u003cbutton id=\"tb-upload\" class=\"modern-tb-btn\" title=\"ì¬ì§ ì¬ë¦¬ê¸°\"\u003e\n \u003csvg class=\"tb-svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpath d=\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4\"/\u003e\u003cpolyline points=\"17 8 12 3 7 8\"/\u003e\u003cline x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\"/\u003e\u003c/svg\u003e\u003cspan class=\"tb-label\"\u003eì¬ë¦¬ê¸°\u003c/span\u003e\n \u003c/button\u003e\n \u003cbutton id=\"tb-remove\" class=\"modern-tb-btn\" title=\"ì í ì¬ì§ ìì \"\u003e\n \u003csvg class=\"tb-svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"10\"/\u003e\u003cline x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"/\u003e\u003cline x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"/\u003e\u003c/svg\u003e\u003cspan class=\"tb-label\"\u003eìì \u003c/span\u003e\n \u003c/button\u003e\n \u003cbutton id=\"tb-clear\" class=\"modern-tb-btn\" title=\"ì ì²´ ìì \"\u003e\n \u003csvg class=\"tb-svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpolyline points=\"3 6 5 6 21 6\"/\u003e\u003cpath d=\"M19 6v14a2 2 0 01-2 2H7a2 2 0 01-2-2V6m3 0V4a2 2 0 012-2h4a2 2 0 012 2v2\"/\u003e\u003cline x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"/\u003e\u003cline x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"/\u003e\u003c/svg\u003e\u003cspan class=\"tb-label\"\u003eì ì²´ìì \u003c/span\u003e\n \u003c/button\u003e\n \u003cdiv class=\"tb-sep\"\u003e\u003c/div\u003e\n \u003cspan id=\"tb-image-count\" class=\"tb-info\"\u003eNo images\u003c/span\u003e\n \u003c/div\u003e\n\n \u003c!-- Main row --\u003e\n \u003cdiv class=\"app-main-row\"\u003e\n\n \u003c!-- Left --\u003e\n \u003cdiv class=\"app-main-left\"\u003e\n\n \u003cdiv id=\"gallery-drop-zone\"\u003e\n \u003cdiv id=\"upload-prompt\" class=\"upload-prompt-modern\"\u003e\n \u003cdiv id=\"upload-click-area\" class=\"upload-click-area\"\u003e\n \u003csvg viewBox=\"0 0 80 80\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n \u003crect x=\"8\" y=\"14\" width=\"64\" height=\"52\" rx=\"6\" fill=\"none\"\n stroke=\"#12b981\" stroke-width=\"2\" stroke-dasharray=\"4 3\"/\u003e\n \u003cpolygon points=\"12,62 30,40 42,50 54,34 68,62\"\n fill=\"rgba(57,255,20,0.12)\" stroke=\"#12b981\" stroke-width=\"1.5\"/\u003e\n \u003ccircle cx=\"28\" cy=\"30\" r=\"6\"\n fill=\"rgba(57,255,20,0.18)\" stroke=\"#12b981\" stroke-width=\"1.5\"/\u003e\n \u003c/svg\u003e\n \u003cspan class=\"upload-main-text\"\u003eì
카를 ì¬ê¸°ì ì¬ë¦¬ì¸ì\u003c/span\u003e\n \u003cspan class=\"upload-sub-text\"\u003eì 면·ë°ì ì
ì¹´ í ì¥ì´ë©´ ì¶©ë¶í´ì (ì¬ë¬ ì¥ë ê°ë¥)\u003c/span\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003cinput id=\"custom-file-input\" type=\"file\" accept=\"image/*\" multiple style=\"display:none;\" /\u003e\n \u003cdiv id=\"image-gallery-grid\" class=\"image-gallery-grid\" style=\"display:none;\"\u003e\u003c/div\u003e\n \u003c/div\u003e\n\n \u003cdiv class=\"hint-bar\"\u003e\n \u003cb\u003e1.\u003c/b\u003e ì
ì¹´ ì¬ë¦¬ê¸° \u0026nbsp;\u0026middot;\u0026nbsp; \u003cb\u003e2.\u003c/b\u003e ìë ì¤íì¼ í´ë¦ \u0026nbsp;\u0026middot;\u0026nbsp;\n \u003cb\u003e3.\u003c/b\u003e ì¤ë¥¸ìª½ \u003cb\u003eíë¡í ë§ë¤ê¸°\u003c/b\u003e \u0026nbsp;\u0026middot;\u0026nbsp; ì¼êµ´ì ê·¸ëë¡ ì ì§ë¼ì\n \u003c/div\u003e\n\n \u003cdiv class=\"suggestions-section\"\u003e\n \u003cdiv class=\"suggestions-title\"\u003eì¤íì¼ \u
750026mdash; í´ë¦íë©´ ìë ì
ë ¥ë¼ì\u003c/div\u003e\n \u003cdiv class=\"suggestions-wrap\"\u003e\n \u003cbutton class=\"suggestion-chip\" onclick=\"window.__setPrompt(\u0027Turn this photo into a professional corporate headshot, dark business suit, plain neutral studio background, soft lighting. Keep the face and identity exactly the same.\u0027); window.__setLora(\u0027Hyper-Realistic-Portrait\u0027)\"\u003eð¼ ì ì¥ íë¡í\u003c/button\u003e\n \u003cbutton class=\"suggestion-chip\" onclick=\"window.__setPrompt(\u0027Turn this photo into a professional studio headshot, soft rim lighting, dark grey gradient background, editorial style. Keep the face and identity exactly the same.\u0027); window.__setLora(\u0027Hyper-Realistic-Portrait\u0027)\"\u003eð¬ ì¤íëì¤\u003c/button\u003e\n \u003cbutton class=\"suggestion-chip\" onclick=\"window.__setPrompt(\u0027Turn this photo into a neat ID-style portrait, plain white background, formal attire, front-facing, even lighting. Keep the face and identity exactly the same.\u0027); window.__setLora(\u0027Hyper-Realistic-Portrait\u0027)\"\u003eð ì´ë ¥ì ë°ëª
í¨\u003c/button\u003e\n \u003cbutton class=\"suggestion-chip\" onclick=\"window.__setPrompt(\u0027Turn this photo into a professional outdoor headshot, softly blurred office background, natural daylight, warm tone. Keep the face and identity exactly the same.\u0027); window.__setLora(\u0027Hyper-Realistic-Portrait\u0027)\"\u003eð¤ï¸ ì¼ì¸ ìì°ê´\u003c/button\u003e\n \u003cbutton class=\"suggestion-chip\" onclick=\"window.__setPrompt(\u0027Unblur and upscale to high resolution. Keep the same face.\u0027); window.__setLora(\u0027Upscaler\u0027)\"\u003e⨠ëë ·íê²(ì
ì¤ì¼ì¼)\u003c/button\u003e\n \u003cbutton class=\"suggestion-chip\" onclick=\"window.__setPrompt(\u0027Neutral uniform studio lighting. Preserve identity and composition.\u0027); window.__setLora(\u0027Studio-DeLight\u0027)\"\u003eð¡ ì¡°ëª
ë³´ì \u003c/button\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n\n \u003cdiv class=\"examples-section\"\u003e\n \u003cdiv class=\"examples-title\"\u003eð¡ í\u003c/div\u003e\n \u003cdiv class=\"hint-bar\" style=\"margin-top:8px\"\u003e\n ì 면·ë°ì ì
ì¹´ì¼ìë¡ ê²°ê³¼ê° ì¢ìì \u0026nbsp;\u0026middot;\u0026nbsp; ê²°ê³¼ê° ìì¬ì°ë©´ \u003cb\u003eì§ì ê°ë\u003c/b\u003e를 ë®ì¶° ì¼êµ´ì ë ì´ë¦¬ì¸ì \u0026nbsp;\u0026middot;\u0026nbsp;\n â ï¸ íë¡í·ì´ë ¥ìì© (ì¬ê¶Â·ê´ê³µì ì ì¶ ë¶ê°)\n \u003c/div\u003e\n \u003c/div\u003e\n\n \u003c/div\u003e\u003c!-- /left --\u003e\n\n \u003c!-- Right --\u003e\n \u003cdiv class=\"app-main-right\"\u003e\n\n \u003cdiv class=\"panel-card\"\u003e\n \u003cdiv class=\"panel-card-title\"\u003eí¸ì§ ì§ì\u003c/div\u003e\n \u003cdiv class=\"panel-card-body\"\u003e\n \u003clabel class=\"modern-label\" for=\"custom-prompt-input\"\u003eì§ì문 (ëë ì ì¤íì¼ ë²í¼ í´ë¦)\u003c/label\u003e\n \u003ctextarea id=\"custom-prompt-input\" class=\"modern-textarea\" rows=\"3\"\n placeholder=\"ì: ì ì¥ ì
ì íë¡í ì¬ì§ì¼ë¡. ì¼êµ´ì ê·¸ëë¡.\"\u003e\u003c/textarea\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n\n \u003cdiv class=\"lora-selector-card\"\u003e\n \u003cdiv class=\"lora-selector-body\"\u003e\n \u003cdiv class=\"lora-select-label\"\u003eí¸ì§ ì¤íì¼(LoRA) \u0026mdash; íë¡íì Hyper-Realistic-Portrait\u003c/div\u003e\n \u003cselect id=\"custom-lora-select\" class=\"lora-native-select\"\u003e\n \u003coption value=\"Multiple-Angles\"\u003eMultiple-Angles\u003c/option\u003e\n\u003coption value=\"Photo-to-Anime\"\u003ePhoto-to-Anime\u003c/option\u003e\n\u003coption value=\"Anime-V2\"\u003eAnime-V2\u003c/option\u003e\n\u003coption value=\"Light-Migration\"\u003eLight-Migration\u003c/option\u003e\n\u003coption value=\"Upscaler\"\u003eUpscaler\u003c/option\u003e\n\u003coption value=\"Style-Transfer\"\u003eStyle-Transfer\u003c/option\u003e\n\u003coption value=\"Manga-Tone\"\u003eManga-Tone\u003c/option\u003e\n\u003coption value=\"Anything2Real\"\u003eAnything2Real\u003c/option\u003e\n\u003coption value=\"Fal-Multiple-Angles\"\u003eFal-Multiple-Angles\u003c/option\u003e\n\u003coption value=\"Polaroid-Photo\"\u003ePolaroid-Photo\u003c/option\u003e\n\u003coption value=\"Unblur-Anything\"\u003eUnblur-Anything\u003c/option\u003e\n\u003coption value=\"Midnight-Noir-Eyes-Spotlight\"\u003eMidnight-Noir-Eyes-Spotlight\u003c/option\u003e\n\u003coption value=\"Hyper-Realistic-Portrait\" selected\u003eHyper-Realistic-Portrait\u003c/option\u003e\n\u003coption value=\"Ultra-Realistic-Portrait\"\u003eUltra-Realistic-Portrait\u003c/option\u003e\n\u003coption value=\"Pixar-Inspired-3D\"\u003ePixar-Inspired-3D\u003c/option\u003e\n\u003coption value=\"Noir-Comic-Book\"\u003eNoir-Comic-Book\u003c/option\u003e\n\u003coption value=\"Any-light\"\u003eAny-light\u003c/option\u003e\n\u003coption value=\"Studio-DeLight\"\u003eStudio-DeLight\u003c/option\u003e\n\u003coption value=\"Cinematic-FlatLog\"\u003eCinematic-FlatLog\u003c/option\u003e\n \u003c/select\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n\n \u003cdiv style=\"padding:14px 18px 6px;\"\u003e\n \u003cbutton id=\"custom-run-btn\" class=\"btn-run\"\u003e\n \u003csvg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n \u003cpath d=\"M12 2C12 2 7 6.5 7 13c0 1.4.3 2.7.8 3.9L5 19.7l1.4 1.4 2.8-2.8c1.2.5 2.5.7 3.8.7s2.6-.2 3.8-.7l2.8 2.8 1.4-1.4-2.8-2.8c.5-1.2.8-2.5.8-3.9 0-6.5-5-11-5-11z\"/\u003e\n \u003ccircle cx=\"12\" cy=\"13\" r=\"2\"/\u003e\n \u003c/svg\u003e\n \u003cspan id=\"run-btn-label\"\u003eð¸ íë¡í ë§ë¤ê¸°\u003c/span\u003e\n \u003c/button\u003e\n \u003c/div\u003e\n\n \u003cdiv class=\"output-frame\" style=\"flex:1\"\u003e\n \u003cdiv class=\"out-title\"\u003e\n \u003cspan\u003eê²°ê³¼\u003c/span\u003e\n \u003cspan id=\"dl-btn-output\" class=\"out-download-btn\" title=\"ì ì¥\"\u003e\n \u003csvg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\u003cpath d=\"M12 16l-5-5h3V4h4v7h3l-5 5z\" fill=\"currentColor\"/\u003e\u003cpath d=\"M20 18H4v2h16v-2z\" fill=\"currentColor\"/\u003e\u003c/svg\u003e ì ì¥\n \u003c/span\u003e\n \u003c/div\u003e\n \u003cdiv class=\"out-body\" id=\"output-image-container\"\u003e\n \u003cdiv class=\"modern-loader\" id=\"output-loader\"\u003e\n \u003cdiv class=\"loader-spinner\"\u003e\u003c/div\u003e\n \u003cdiv class=\"loader-text\"\u003eAIê° ë§ëë ì¤â¦\u003c/div\u003e\n \u003cdiv class=\"loader-bar-track\"\u003e\u003cdiv class=\"loader-bar-fill\"\u003e\u003c/div\u003e\u003c/div\u003e\n \u003c/div\u003e\n \u003cdiv class=\"out-placeholder\" id=\"output-placeholder\"\u003eì¬ê¸°ì ê²°ê³¼ê° ëìµëë¤\u003c/div\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n\n \u003cdiv class=\"settings-group\"\u003e\n \u003cdiv class=\"settings-group-title\"\u003eì¸ë¶ ì¤ì \u003c/div\u003e\n \u003cdiv class=\"settings-group-body\"\u003e\n \u003cdiv class=\"slider-row\"\u003e\n \u003clabel\u003eìë\u003c/label\u003e\n \u003cinput type=\"range\" id=\"custom-seed\" min=\"0\" max=\"2147483647\" step=\"1\" value=\"0\"\u003e\n \u003cspan class=\"slider-val\" id=\"custom-seed-val\"\u003e0\u003c/span\u003e\n \u003c/div\u003e\n \u003cdiv class=\"checkbox-row\"\u003e\n \u003cinput type=\"checkbox\" id=\"custom-randomize\" checked\u003e\n \u003clabel for=\"custom-randomize\"\u003eìë ëë¤\u003c/label\u003e\n \u003c/div\u003e\n \u003cdiv class=\"slider-row\"\u003e\n \u003clabel\u003eì§ì ê°ë\u003c/label\u003e\n \u003cinput type=\"range\" id=\"custom-guidance\" min=\"1\" max=\"10\" step=\"0.1\" value=\"1.0\"\u003e\n \u003cspan class=\"slider-val\" id=\"custom-guidance-val\"\u003e1.0\u003c/span\u003e\n \u003c/div\u003e\n \u003cdiv class=\"slider-row\"\u003e\n \u003clabel\u003eì¤í
\u003c/label\u003e\n \u003cinput type=\"range\" id=\"custom-steps\" min=\"1\" max=\"50\" step=\"1\" value=\"4\"\u003e\n \u003cspan class=\"slider-val\" id=\"custom-steps-val\"\u003e4\u003c/span\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n\n \u003c/div\u003e\u003c!-- /right --\u003e\n \u003c/div\u003e\u003c!-- /main-row --\u003e\n\n \u003cdiv class=\"exp-note\"\u003e\n \u003cb\u003eConnect AI LAB\u003c/b\u003e \u0026middot; ì¤íìì¤ \u003ca href=\"https://huggingface.co/Qwen/Qwen-Image-Edit-2511\" target=\"_blank\"\u003eQwen-Image-Edit\u003c/a\u003e 기ë°\n \u0026middot; ì íë¸ \u003ca href=\"https://www.youtube.com/@CONNECT-AI-LAB\" target=\"_blank\"\u003e@CONNECT-AI-LAB\u003c/a\u003e 구ë
\n \u003c/div\u003e\n\n \u003cdiv class=\"app-statusbar\"\u003e\n \u003cdiv class=\"sb-section\" id=\"sb-image-count\"\u003eì¬ì§ì ì¬ë ¤ì£¼ì¸ì\u003c/div\u003e\n \u003cdiv class=\"sb-section sb-fixed\"\u003eì¤ë¹ë¨\u003c/div\u003e\n \u003c/div\u003e\n\n \u003c/div\u003e\u003c!-- /app-shell --\u003e\n ","html_template":"${value}","css_template":"","js_on_load":"element.addEventListener(\u0027click\u0027, function() { trigger(\u0027click\u0027) });","apply_default_css":true,"show_label":false,"visible":true,"elem_classes":[],"preserved_by_key":["value"],"container":false,"padding":false,"autoscroll":false,"buttons":[],"props":{},"name":"html","_selectable":false,"component_class_name":"HTML"},"skip_api":false,"component_class_id":"470d374173809727c94172a54261a1d855e76f7da7ed9381ddbd63d6390c332c","key":null,"api_info":{"type":"string"},"api_info_as_input":{"type":"string"},"api_info_as_output":{"type":"string"},"example_inputs":"\u003cp\u003eHello\u003c/p\u003e"},{"id":14,"type":"button","props":{"value":"Run","variant":"secondary","size":"lg","link_target":"_self","visible":true,"interactive":true,"elem_id":"gradio-run-btn","elem_classes":[],"preserved_by_key":["value"],"name":"button","_selectable":false},"skip_api":true,"component_class_id":"9802f23c83089d1c7f880af56b1493552cad2509ae4bf55adfb8ed1e639a4a8d","key":null}],"css":"\n@import url(\u0027https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800\u0026family=JetBrains+Mono:wght@400;500;600\u0026display=swap\u0027);\n\n*{box-sizing:border-box;margin:0;padding:0}\n\n:root{\n --or: #12b981;\n --or-dim: #0e8f63;\n --or-bright:#39ff14;\n --or-glow: rgba(57,255,20,.28);\n --or-soft: rgba(57,255,20,.12);\n --or-xsoft: rgba(57,255,20,.06);\n --bg: #0d0d0f;\n --bg1: #141416;\n --bg2: #1a1a1d;\n --bg3: #222226;\n --border: #2a2a2e;\n --border2: #333338;\n --text: #e8e8ec;\n --text2: #9898a8;\n --text3: #555560;\n --mono: \u0027JetBrains Mono\u0027, monospace;\n}\n\nhtml, body, .gradio-container {\n color-scheme: dark !important;\n background: #0d0d0f !important;\n}\n\nbody, .gradio-container {\n font-family: \u0027Inter\u0027, system-ui, -apple-system, sans-serif !important;\n font-size: 14px !important;\n color: #e8e8ec !important;\n min-height: 100vh;\n background: #0d0d0f !important;\n}\n\nfooter { display: none !important; }\n.hidden-input { display:none!important;height:0!important;overflow:hidden!important;margin:0!important;padding:0!important; }\n\n#example-load-btn, #gradio-run-btn {\n position: absolute !important;\n left: -9999px !important;\n top: -9999px !important;\n width: 1px !important;\n height: 1px !important;\n opacity: .01 !important;\n pointer-events: none !important;\n overflow: hidden !important;\n}\n\n/* ââ App shell âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */\n.app-shell {\n background: #141416 !important;\n border: 1px solid #2a2a2e !important;\n border-radius: 18px;\n margin: 12px auto;\n max-width: 1440px;\n overflow: hidden;\n box-shadow:\n 0 32px 64px -16px rgba(0,0,0,.8),\n 0 0 0 1px rgba(255,255,255,.03),\n 0 0 60px -20px rgba(57,255,20,.2);\n}\n\n/* ââ Header ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */\n.app-header {\n background: #1a1a1d !important;\n border-bottom: 1px solid #2a2a2e !important;\n padding: 14px 24px;\n display: flex;
75\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 12px;\n}\n.app-header-left { display:flex; align-items:center; gap:12px; }\n.app-logo {\n width: 38px; height: 38px;\n background: linear-gradient(135deg, #12b981, #39ff14);\n border-radius: 11px;\n display: flex; align-items: center; justify-content: center;\n box-shadow: 0 4px 14px rgba(57,255,20,.3);\n flex-shrink: 0;\n}\n.app-logo svg { width:22px; height:22px; fill:#fff; }\n.app-title {\n font-size: 18px; font-weight: 800; letter-spacing: -.4px;\n background: linear-gradient(135deg, #fff, #aaa);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n font-family: \u0027Inter\u0027, sans-serif;\n}\n.app-badge {\n font-size: 11px; font-weight: 700; padding: 3px 10px;\n border-radius: 20px; letter-spacing: .3px;\n background: rgba(57,255,20,.12);\n color: #39ff14 !important;\n -webkit-text-fill-color: #39ff14 !important;\n border: 1px solid rgba(57,255,20,.3);\n font-family: \u0027Inter\u0027, sans-serif;\n}\n.app-badge.fast {\n background: rgba(34,197,94,.1);\n color: #4ade80 !important;\n -webkit-text-fill-color: #4ade80 !important;\n border: 1px solid rgba(34,197,94,.25);\n}\n\n/* ââ GitHub button - highlighted, always same in light \u0026 dark ââââââââââââââ */\n.gh-btn {\n display: inline-flex !important;\n align-items: center !important;\n gap: 7px !important;\n padding: 7px 14px !important;\n border-radius: 8px !important;\n text-decoration: none !important;\n font-family: \u0027Inter\u0027, sans-serif !important;\n font-size: 13px !important;\n font-weight: 700 !important;\n letter-spacing: .1px !important;\n /* Fixed colors - never change with theme */\n background: #12b981 !important;\n color: #ffffff !important;\n -webkit-text-fill-color: #ffffff !important;\n border: 1px solid rgba(255,255,255,.15) !important;\n box-shadow:\n 0 2px 8px rgba(57,255,20,.4),\n 0 1px 0 rgba(255,255,255,.1) inset !important;\n transition: transform .15s ease, box-shadow .15s ease, background .15s ease !important;\n cursor: pointer !important;\n flex-shrink: 0 !important;\n}\n.gh-btn:hover {\n background: #39ff14 !important;\n color: #ffffff !important;\n -webkit-text-fill-color: #ffffff !important;\n transform: translateY(-1px) !important;\n box-shadow:\n 0 4px 16px rgba(57,255,20,.55),\n 0 1px 0 rgba(255,255,255,.12) inset !important;\n}\n.gh-btn:active {\n background: #0e8f63 !important;\n transform: translateY(0) !important;\n box-shadow: 0 1px 4px rgba(57,255,20,.3) !important;\n}\n.gh-btn svg {\n fill: #ffffff !important;\n flex-shrink: 0;\n width: 15px !important;\n height: 15px !important;\n}\n.gh-btn span {\n color: #ffffff !important;\n -webkit-text-fill-color: #ffffff !important;\n}\n\n/* Lock GitHub button against ANY browser/OS theme override */\n@media (prefers-color-scheme: light) {\n .gh-btn {\n background: #12b981 !important;\n color: #ffffff !important;\n -webkit-text-fill-color: #ffffff !important;\n border-color: rgba(255,255,255,.15) !important;\n }\n .gh-btn:hover {\n background: #39ff14 !important;\n color: #ffffff !important;\n -webkit-text-fill-color: #ffffff !important;\n }\n .gh-btn svg { fill: #ffffff !important; }\n .gh-btn span { color: #ffffff !important; -webkit-text-fill-color: #ffffff !important; }\n}\n@media (prefers-color-scheme: dark) {\n .gh-btn {\n background: #12b981 !important;\n color: #ffffff !important;\n -webkit-text-fill-color: #ffffff !important;\n }\n .gh-btn:hover { background: #39ff14 !important; }\n .gh-btn svg { fill: #ffffff !important; }\n .gh-btn span { color: #ffffff !important; -webkit-text-fill-color: #ffffff !important; }\n}\n\n/* ââ Toolbar âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */\n.app-toolbar {\n background: #141416 !important;\n border-bottom: 1px solid #2a2a2e !important;\n padding: 7px 16px;\n display: flex; gap: 4px; align-items: center; flex-wrap: wrap;\n}\n.tb-sep { width:1px; height:28px; background:#2a2a2e; margin:0 8px; }\n.modern-tb-btn {\n display: inline-flex; align-items: center; justify-content: center; gap: 6px;\n min-width: 32px; height: 34px;\n background: transparent; border: 1px solid transparent;\n border-radius: 8px; cursor: pointer;\n font-size: 13px; font-weight: 700; padding: 0 12px;\n font-family: \u0027Inter\u0027, sans-serif;\n color: #ffffff !important;\n -webkit-text-fill-color: #ffffff !important;\n transition: all .15s ease;\n}\n.modern-tb-btn:hover { background: rgba(57,255,20,.12); border-color: rgba(57,255,20,.4); }\n.modern-tb-btn:active { background: rgba(57,255,20,.22); border-color: #12b981; }\n.modern-tb-btn .tb-label { font-size:13px; color:#fff!important; -webkit-text-fill-color:#fff!important; font-weight:700; }\n.modern-tb-btn .tb-svg { width:15px; height:15px; flex-shrink:0; }\n.modern-tb-btn .tb-svg, .modern-tb-btn .tb-svg * { stroke:#fff!important; fill:none!important; }\n.tb-info { font-family:var(--mono); font-size:12px; color:#555560; padding:0 8px; display:flex; align-items:center; }\n\n@media (prefers-color-scheme: light) {\n .modern-tb-btn { color:#fff!important; -webkit-text-fill-color:#fff!important; }\n .modern-tb-btn .tb-label { color:#fff!important; -webkit-text-fill-color:#fff!important; }\n .modern-tb-btn .tb-svg, .modern-tb-btn .tb-svg * { stroke:#fff!important; }\n}\n\n/* ââ Main layout âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */\n.app-main-row { display:flex; gap:0; flex:1; overflow:hidden; }\n.app-main-left { flex:1; display:flex; flex-direction:column; min-width:0; border-right:1px solid #2a2a2e; }\n.app-main-right { width:440px; display:flex; flex-direction:column; flex-shrink:0; background:#141416!important; }\n\n/* ââ Drop zone âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */\n#gallery-drop-zone { position:relative; background:#09090b!important; min-height:440px; overflow:auto; }\n#gallery-drop-zone.drag-over { outline:2px solid #12b981; outline-offset:-2px; background:rgba(57,255,20,.05)!important; }\n\n.upload-prompt-modern { position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); z-index:20; }\n.upload-click-area {\n display:flex; flex-direction:column; align-items:center; justify-content:center;\n cursor:pointer; padding:36px 52px; border:2px dashed #333338; border-radius:16px;\n background:rgba(57,255,20,.05); transition:all .2s ease; gap:8px;\n}\n.upload-click-area:hover { background:rgba(57,255,20,.1); border-color:#12b981; transform:scale(1.03); }\n.upload-click-area:active { background:rgba(57,255,20,.15); transform:scale(.98); }\n.upload-click-area svg { width:80px; height:80px; }\n.upload-main-text { color:#9898a8; font-size:14px; font-weight:600; margin-top:4px; font-family:\u0027Inter\u0027,sans-serif; }\n.upload-sub-text { color:#555560; font-size:12px; font-weight:400; text-align:center; max-width:280px; line-height:1.5; font-family:\u0027Inter\u0027,sans-serif; }\n\n/* ââ Gallery grid ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */\n.image-gallery-grid {\n display:grid; grid-template-columns:repeat(auto-fill,minmax(140px,1fr));\n gap:12px; padding:16px; align-content:start;\n}\n.gallery-thumb {\n position:relative; aspect-ratio:1; border-radius:10px; overflow:hidden;\n cursor:pointer; border:2px solid #2a2a2e; transition:all .2s ease; background:#1a1a1d;\n}\n.gallery-thumb:hover { border-color:#333338; transform:translateY(-2px); box-shadow:0 4px 12px rgba(0,0,0,.4); }\n.gallery-thumb.selected { border-color:#12b981!important; box-shadow:0 0 0 3px rgba(57,255,20,.25); }\n.gallery-thumb img { width:100%; height:100%; object-fit:cover; }\n.thumb-badge {\n position:absolute; top:6px; left:6px; background:#12b981; color:#fff;\n padding:2px 8px; border-radius:4px; font-family:var(--mono); font-size:11px; font-weight:600;\n}\n.thumb-remove {\n position:absolute; top:6px; right:6px; width:24px; height:24px;\n background:rgba(0,0,0,.75); color:#fff; border:1px solid rgba(255,255,255,.15);\n border-radius:50%; cursor:pointer; display:none;
75\n align-items:center; justify-content:center; font-size:12px; transition:all .15s; line-height:1;\n}\n.gallery-thumb:hover .thumb-remove { display:flex; }\n.thumb-remove:hover { background:#12b981; border-color:#12b981; }\n.gallery-add-card {\n aspect-ratio:1; border-radius:10px; border:2px dashed #333338;\n display:flex; flex-direction:column; align-items:center; justify-content:center;\n cursor:pointer; transition:all .2s ease; background:rgba(57,255,20,.05); gap:4px;\n}\n.gallery-add-card:hover { border-color:#12b981; background:rgba(57,255,20,.1); }\n.gallery-add-card .add-icon { font-size:28px; color:#555560; font-weight:300; }\n.gallery-add-card .add-text { font-size:12px; color:#555560; font-weight:600; font-family:\u0027Inter\u0027,sans-serif; }\n\n/* ââ Hint bar ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */\n.hint-bar {\n background: rgba(57,255,20,.05) !important;\n border-top:1px solid #2a2a2e; border-bottom:1px solid #2a2a2e;\n padding:10px 20px; font-size:13px; color:#9898a8; line-height:1.7;\n font-weight:400; font-family:\u0027Inter\u0027,sans-serif;\n}\n.hint-bar b { color:#39ff14; font-weight:700; }\n.hint-bar kbd {\n display:inline-block; padding:1px 6px; background:#222226;\n border:1px solid #333338; border-radius:4px;\n font-family:var(--mono); font-size:11px; color:#9898a8;\n}\n\n/* ââ Suggestions âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */\n.suggestions-section { border-top:1px solid #2a2a2e; padding:12px 16px; background:#141416!important; }\n.suggestions-title, .examples-title {\n font-size:11px; font-weight:700; color:#555560;\n text-transform:uppercase; letter-spacing:1px; margin-bottom:10px;\n font-family:\u0027Inter\u0027,sans-serif;\n}\n.suggestions-wrap { display:flex; flex-wrap:wrap; gap:6px; }\n.suggestion-chip {\n display:inline-flex; align-items:center; gap:4px; padding:5px 13px;\n background:rgba(57,255,20,.1); border:1px solid rgba(57,255,20,.25); border-radius:20px;\n color:#39ff14; font-size:12px; font-weight:600; font-family:\u0027Inter\u0027,sans-serif;\n cursor:pointer; transition:all .15s; white-space:nowrap;\n}\n.suggestion-chip:hover { background:rgba(57,255,20,.2); border-color:#12b981; color:#fff; transform:translateY(-1px); }\n\n/* ââ Examples ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */\n.examples-section { border-top:1px solid #2a2a2e; padding:14px 16px 18px; background:#141416!important; }\n.examples-scroll { display:flex; gap:10px; overflow-x:auto; padding-bottom:10px; padding-top:2px; }\n.examples-scroll::-webkit-scrollbar { height:5px; }\n.examples-scroll::-webkit-scrollbar-track { background:#0d0d0f; border-radius:3px; }\n.examples-scroll::-webkit-scrollbar-thumb { background:#333338; border-radius:3px; }\n.examples-scroll::-webkit-scrollbar-thumb:hover { background:#0e8f63; }\n.example-card {\n flex-shrink:0; width:220px; background:#1a1a1d!important; border:1px solid #2a2a2e;\n border-radius:12px; overflow:hidden; cursor:pointer; transition:all .2s ease;\n}\n.example-card:hover { border-color:#12b981; transform:translateY(-3px); box-shadow:0 6px 20px rgba(57,255,20,.22); }\n.example-card.loading { opacity:.5; pointer-events:none; }\n.example-thumbs { display:flex; height:115px; overflow:hidden; background:#222226!important; }\n.example-thumbs img { flex:1; object-fit:cover; min-width:0; }\n.example-thumb-placeholder {\n flex:1; display:flex; align-items:center; justify-content:center;\n background:#222226!important; color:#555560; font-size:11px; min-width:0;\n}\n.example-meta { padding:7px 10px 3px; display:flex; align-items:center; gap:5px; flex-wrap:wrap; }\n.example-badge {\n display:inline-flex; padding:2px 7px; background:rgba(57,255,20,.1); border-radius:4px;\n font-size:10px; font-weight:700; color:#39ff14; font-family:var(--mono);\n white-space:nowrap; border:1px solid rgba(57,255,20,.2);\n}\n.example-lora-badge {\n display:inline-flex; padding:2px 7px; background:rgba(255,255,255,.06); border-radius:4px;\n font-size:10px; font-weight:600; color:#9898a8; font-family:var(--mono);\n white-space:nowrap; border:1px solid #2a2a2e;\n max-width:120px; overflow:hidden; text-overflow:ellipsis;\n}\n.example-prompt-text {\n padding:2px 10px 10px; font-size:11.5px; color:#9898a8; line-height:1.45;\n display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical;\n overflow:hidden; font-weight:400; font-family:\u0027Inter\u0027,sans-serif;\n}\n\n/* ââ Right panel âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */\n.panel-card { border-bottom:1px solid #2a2a2e; background:#141416!important; }\n.panel-card-title {\n padding:11px 20px; font-size:11px; font-weight:700; color:#555560;\n text-transform:uppercase; letter-spacing:1px;\n border-bottom:1px solid rgba(42,42,46,.6);\n background:#141416!important; font-family:\u0027Inter\u0027,sans-serif;\n}\n.panel-card-body { padding:14px 18px; display:flex; flex-direction:column; gap:8px; background:#141416!important; }\n.modern-label { font-size:13px; font-weight:600; color:#9898a8; margin-bottom:4px; display:block; font-family:\u0027Inter\u0027,sans-serif; }\n.modern-textarea {\n width:100%; background:#09090b!important; border:1px solid #2a2a2e; border-radius:8px;\n padding:10px 14px; font-family:\u0027Inter\u0027,sans-serif; font-size:14px;\n color:#e8e8ec!important; -webkit-text-fill-color:#e8e8ec!important;\n resize:vertical; outline:none; min-height:44px; transition:border-color .2s; font-weight:400;\n}\n.modern-textarea:focus { border-color:#12b981; box-shadow:0 0 0 3px rgba(57,255,20,.22); }\n.modern-textarea::placeholder { color:#555560!important; -webkit-text-fill-color:#555560!important; }\n.modern-textarea.error-flash {\n border-color:#ef4444!important;\n box-shadow:0 0 0 3px rgba(239,68,68,.2)!important;\n animation:shake .4s ease;\n}\n@keyframes shake {\n 0%,100%{transform:translateX(0)}\n 20%,60%{transform:translateX(-4px)}\n 40%,80%{transform:translateX(4px)}\n}\n\n/* ââ LoRA selector - always dark âââââââââââââââââââââââââââââââââââââââââââââ */\n.lora-selector-card { border-bottom:1px solid #2a2a2e!important; background:#0d0d0f!important; }\n.lora-selector-body { padding:12px 18px!important; background:#0d0d0f!important; }\n.lora-select-label {\n font-size:11px!important; font-weight:700!important;\n color:#555560!important; -webkit-text-fill-color:#555560!important;\n text-transform:uppercase!important; letter-spacing:1px!important;\n margin-bottom:8px!important; display:flex!important; align-items:center!important;\n gap:6px!important; font-family:\u0027Inter\u0027,sans-serif!important;\n}\n.lora-select-label::before {\n content:\u0027\u0027; display:inline-block; width:8px; height:8px;\n background:#12b981; border-radius:50%; flex-shrink:0;\n}\n.lora-native-select {\n width:100%!important; background:#09090b!important;\n border:1px solid #333338!important; border-radius:8px!important;\n padding:9px 36px 9px 14px!important;\n font-family:\u0027Inter\u0027,sans-serif!important;\n font-size:13px!important; font-weight:600!important;\n color:#e8e8ec!important; -webkit-text-fill-color:#e8e8ec!important;\n outline:none!important; appearance:none!important; -webkit-appearance:none!important;\n background-image:url(\"data:image/svg+xml,%3Csvg xmlns=\u0027http://www.w3.org/2000/svg\u0027 width=\u002712\u0027 height=\u002712\u0027 viewBox=\u00270 0 12 12\u0027%3E%3Cpath fill=\u0027%2312b981\u0027 d=\u0027M6 8L1 3h10z\u0027/%3E%3C/svg%3E\")!important;\n background-repeat:no-repeat!important; background-position:right 12px center!important;\n cursor:pointer!important; transition:border-color .2s!important; color-scheme:dark!important;\n}\n.lora-native-select:focus { border-color:#12b981!important; box-shadow:0 0 0 3px rgba(57,255,20,.22)!important; }\n.lora-native-select option { background:#1a1a1d!important; color:#e8e8ec!important; }\n\n@media (prefers-color-scheme: light) {\n .lora-selector-card { background:#0d0d0f!important; }\n .lora-selector-body { background:#0d0d0f!important; }\n .lora-select-label { color:#555560!important; -webkit-text-fill-color:#555560!important; }\n .lora-native-select {\n background:#09090b!important; color:#e8e8ec!important;\n -webkit-text-fill-color:#e8e8ec!important;\n border-color:#333338!important; color-scheme:dark!important;\n }\n .lora-native-select option { background:#1a1a1d!important; color:#e8e8ec!important; }\n}\n\n/* ââ Toast âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */\n.toast-notification {\n position:fixed; top:24px; left:50%;\n transform:translateX(-50%) translateY(-120%);\n z-index:9999; padding:10px 24px; border-radius:10px;\n font-family:\u0027Inter\u0027,sans-serif; font-size:14px; font-weight:700;\n display:flex; align-items:center; gap:8px;\n box-shadow:0 8px 24px rgba(0,0,0,.5);\n transition:transform .35s cubic-bezier(.34,1.56,.64,1),opacity .35s ease;\n opacity:0; pointer-events:none;\n}\n.toast-notification.visible { transform:translateX(-50%) translateY(0); opacity:1; pointer-events:auto; }\n.toast-notification.error { background:linear-gradient(135deg,#dc2626,#b91c1c); color:#fff; border:1px solid rgba(255,255,255,.15); }\n.toast-notification.warning { background:linear-gradient(135deg,#12b981,#0e8f63); color:#fff; border:1px solid rgba(255,255,255,.15); }\n.toast-notification.info { background:linear-gradient(135deg,#2563eb,#1d4ed8); color:#fff; border:1px solid rgba(255,255,255,.15); }\n\n/* ââ Run button ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */\n.btn-run {\n display:flex; align-items:center; justify-content:center; gap:8px; width:100%;\n background:linear-gradient(135deg,#12b981,#0e8f63); border:none; border-radius:10px;\n padding:13px 24px; cursor:pointer; font-size:15px; font-weight:800;\n font-family:\u0027Inter\u0027,sans-serif;\n color:#fff!important; -webkit-text-fill-color:#fff!important;\n transition:all .2s ease; letter-spacing:.2px;\n box-shadow:0 4px 20px rgba(57,255,20,.28),inset 0 1px 0 rgba(255,255,255,.12);\n}\n.btn-run:hover {\n background:linear-gradient(135deg,#39ff14,#12b981); transform:translateY(-1px);\n box-shadow:0 8px 28px rgba(57,255,20,.45),inset 0 1px 0 rgba(255,255,255,.15);\n}\n.btn-run:active { transform:translateY(0); box-shadow:0 2px 10px rgba(57,255,20,.28); }\n.btn-run svg { width:18px; height:18px; fill:#fff!important; }\n#custom-run-btn, #custom-run-btn *, #run-btn-label, .btn-run, .btn-run * {\n color:#fff!important; -webkit-text-fill-color:#fff!important; fill:#fff!important;\n}\n\n/* ââ Output ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */\n.output-frame { border-bottom:1px solid #2a2a2e; display:flex; flex-direction:column; position:relative; }\n.out-title {\n padding:10px 20px; font-size:11px; font-weight:700;\n color:#fff!important; -webkit-text-fill-color:#fff!important;\n text-transform:uppercase; letter-spacing:1px;\n border-bottom:1px solid rgba(42,42,46,.6);\n display:flex; align-items:center; justify-content:space-between;\n background:#141416!important; font-family:\u0027Inter\u0027,sans-serif;\n}\n.out-body {\n flex:1; background:#09090b!important;\n display:flex; align-items:center; justify-content:center;\n overflow:hidden; min-height:240px; position:relative;\n}\n.out-body img { max-width:100%; max-height:460px; image-rendering:auto; }\n.out-placeholder { color:#555560; font-size:13px; text-align:center; padding:20px; font-weight:500; font-family:\u0027Inter\u0027,sans-serif; }\n.out-download-btn {\n display:none; align-items:center; justify-content:center;\n background:rgba(57,255,20,.12); border:1px solid rgba(57,255,20,.28); border-radius:6px;\n cursor:pointer; padding:3px 10px; font-size:11px; font-weight:700;\n color:#39ff14!important; -webkit-text-fill-color:#39ff14!important;\n gap:4px; height:24px; transition:all .15s; font-family:\u0027Inter\u0027,sans-serif;\n}\n.out-download-btn:hover {\n background:#12b981; border-color:#12b981;\n color:#fff!important; -webkit-text-fill-color:#fff!important;\n}\n.out-download-btn.visible { display:inline-flex; }\n.out-download-btn svg { width:12px; height:12px; fill:#39ff14; }\n.out-download-btn:hover svg { fill:#fff; }\n\n/* ââ Loader ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */\n.modern-loader {\n display:none; position:absolute; top:0; left:0; right:0; bottom:0;\n background:rgba(9,9,11,.93); z-index:15;\n flex-direction:column; align-items:center; justify-content:center;\n gap:16px; backdrop-filter:blur(4px);\n}\n.modern-loader.active { display:flex; }\n.modern-loader .loader-spinner {\n width:36px; height:36px; border:3px solid #2a2a2e;\n border-top-color:#12b981; border-radius:50%; animation:spin .8s linear infinite;\n}\n@keyframes spin { to{transform:rotate(360deg)} }\n.modern-loader .loader-text { font-size:13px; color:#9898a8; font-weight:600; font-family:\u0027Inter\u0027,sans-serif; }
75\n.loader-bar-track { width:200px; height:4px; background:#2a2a2e; border-radius:2px; overflow:hidden; }\n.loader-bar-fill {\n height:100%; background:linear-gradient(90deg,#12b981,#39ff14,#12b981);\n background-size:200% 100%; animation:shimmer 1.5s ease-in-out infinite; border-radius:2px;\n}\n@keyframes shimmer { 0%{background-position:200% 0} 100%{background-position:-200% 0} }\n\n/* ââ Settings ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */\n.settings-group { border:1px solid #2a2a2e; border-radius:10px; margin:12px 16px; padding:0; overflow:hidden; background:#141416!important; }\n.settings-group-title {\n font-size:11px; font-weight:700; color:#555560; text-transform:uppercase; letter-spacing:1px;\n padding:9px 16px; border-bottom:1px solid #2a2a2e;\n background:rgba(26,26,29,.5)!important; font-family:\u0027Inter\u0027,sans-serif;\n}\n.settings-group-body { padding:14px 16px; display:flex; flex-direction:column; gap:12px; background:#141416!important; }\n.slider-row { display:flex; align-items:center; gap:10px; min-height:28px; }\n.slider-row label { font-size:13px; font-weight:600; color:#9898a8; min-width:72px; flex-shrink:0; font-family:\u0027Inter\u0027,sans-serif; }\n.slider-row input[type=\"range\"] {\n flex:1; -webkit-appearance:none; appearance:none;\n height:5px; background:#333338; border-radius:3px; outline:none; min-width:0;\n}\n.slider-row input[type=\"range\"]::-webkit-slider-thumb {\n -webkit-appearance:none; width:16px; height:16px;\n background:linear-gradient(135deg,#12b981,#0e8f63);\n border-radius:50%; cursor:pointer;\n box-shadow:0 2px 6px rgba(57,255,20,.28); transition:transform .15s;\n}\n.slider-row input[type=\"range\"]::-webkit-slider-thumb:hover { transform:scale(1.2); }\n.slider-row input[type=\"range\"]::-moz-range-thumb {\n width:16px; height:16px; background:linear-gradient(135deg,#12b981,#0e8f63);\n border-radius:50%; cursor:pointer; border:none; box-shadow:0 2px 6px rgba(57,255,20,.28);\n}\n.slider-row .slider-val {\n min-width:52px; text-align:right; font-family:var(--mono); font-size:12px;\n font-weight:500; padding:3px 8px; background:#09090b; border:1px solid #2a2a2e;\n border-radius:6px; color:#9898a8; flex-shrink:0;\n}\n.checkbox-row { display:flex; align-items:center; gap:8px; font-size:13px; color:#9898a8; }\n.checkbox-row input[type=\"checkbox\"] { accent-color:#12b981; width:16px; height:16px; cursor:pointer; }\n.checkbox-row label { color:#9898a8; font-size:13px; cursor:pointer; font-weight:500; font-family:\u0027Inter\u0027,sans-serif; }\n\n/* ââ Status bar ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */\n.app-statusbar {\n background:#141416!important; border-top:1px solid #2a2a2e;\n padding:6px 20px; display:flex; gap:12px; height:34px; align-items:center; font-size:12px;\n}\n.app-statusbar .sb-section {\n padding:0 12px; flex:1; display:flex; align-items:center;\n font-family:var(--mono); font-size:12px; color:#555560;\n overflow:hidden; white-space:nowrap;\n}\n.app-statusbar .sb-section.sb-fixed {\n flex:0 0 auto; min-width:90px; text-align:center; justify-content:center;\n padding:3px 12px; background:rgba(57,255,20,.1); border-radius:6px;\n color:#39ff14; font-weight:700; border:1px solid rgba(57,255,20,.2);\n}\n\n/* ââ Footer ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */\n.exp-note {\n padding:10px 20px; font-size:12px; color:#555560;\n border-top:1px solid #2a2a2e; text-align:center; font-weight:500;\n background:#141416!important; font-family:\u0027Inter\u0027,sans-serif;\n}\n.exp-note a { color:#39ff14!important; -webkit-text-fill-color:#39ff14!important; text-decoration:none; }\n.exp-note a:hover { text-decoration:underline;
75 color:#fff!important; -webkit-text-fill-color:#fff!important; }\n\n/* ââ Scrollbars ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */\n::-webkit-scrollbar { width:7px; height:7px; }\n::-webkit-scrollbar-track { background:#09090b; }\n::-webkit-scrollbar-thumb { background:#333338; border-radius:4px; }\n::-webkit-scrollbar-thumb:hover { background:#0e8f63; }\n\n/* ââ Responsive ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */\n@media(max-width:860px){\n .app-main-row { flex-direction:column; }\n .app-main-right { width:100%; }\n .app-main-left { border-right:none; border-bottom:1px solid #2a2a2e; }\n}\n","connect_heartbeat":false,"js":null,"head":null,"title":"AI íë¡í ì¬ì§ · Connect AI LAB","space_id":"WeonJeong/ai-profile","enable_queue":true,"show_error":true,"footer_links":["api","gradio","settings"],"is_colab":false,"max_file_size":null,"stylesheets":[],"theme":"default","protocol":"sse_v3","body_css":{"body_background_fill":"white","body_text_color":"#27272a","body_background_fill_dark":"#0f0f11","body_text_color_dark":"#f4f4f5"},"fill_height":false,"fill_width":false,"theme_hash":"8ad6f9b14414574fe6c6d9b4362dcdd63dfdc66d8c34cbef0982888dfc44ff04","pwa":true,"pages":[["","Home",true]],"page":{"":{"layout":{"id":0,"children":[{"id":1},{"id":2},{"id":3},{"id":4},{"id":5},{"id":6},{"id":7},{"id":8},{"id":9},{"id":10},{"id":11},{"id":12,"children":[]},{"id":13,"children":[]},{"id":14}]},"components":[1,2,3,4,5,6,7,8,9,10,11,12,13,14],"dependencies":[0,1,2,3]}},"mcp_server":true,"i18n_translations":null,"dependencies":[{"id":0,"targets":[[0,"load"]],"inputs":[],"outputs":[],"backend_fn":false,"js":"\n() =\u003e {\nfunction init() {\n if (window.__qwenInitDone) return;\n\n const galleryGrid = document.getElementById(\u0027image-gallery-grid\u0027);\n const dropZone = document.getElementById(\u0027gallery-drop-zone\u0027);\n const uploadPrompt = document.getElementById(\u0027upload-prompt\u0027);\n const uploadClick = document.getElementById(\u0027upload-click-area\u0027);\n const fileInput = document.getElementById(\u0027custom-file-input\u0027);\n const btnUpload = document.getElementById(\u0027tb-upload\u0027);\n const btnRemove = document.getElementById(\u0027tb-remove\u0027);\n const btnClear = document.getElementById(\u0027tb-clear\u0027);\n const promptInput = document.getElementById(\u0027custom-prompt-input\u0027);\n const loraSelect = document.getElementById(\u0027custom-lora-select\u0027);\n const runBtnEl = document.getElementById(\u0027custom-run-btn\u0027);\n const imgCountTb = document.getElementById(\u0027tb-image-count\u0027);\n const imgCountSb = document.getElementById(\u0027sb-image-count\u0027);\n\n if (!galleryGrid || !fileInput || !dropZone) { setTimeout(init, 250); return; }\n window.__qwenInitDone = true;\n\n let images = [];\n window.__uploadedImages = images;\n let selectedIdx = -1;\n let toastTimer = null;\n\n /* ââ Force dark styles on elements that browsers may override ââ */\n function enforceDarkStyles() {\n /* LoRA card */\n const loraCard = document.querySelector(\u0027.lora-selector-card\u0027);\n const loraBody = document.querySelector(\u0027.lora-selector-body\u0027);\n const loraLabel = document.querySelector(\u0027.lora-select-label\u0027);\n const loraEl = document.getElementById(\u0027custom-lora-select\u0027);\n if (loraCard) { loraCard.style.setProperty(\u0027background\u0027,\u0027#0d0d0f\u0027,\u0027important\u0027); }\n if (loraBody) { loraBody.style.setProperty(\u0027background\u0027,\u0027#0d0d0f\u0027,\u0027important\u0027); }\n if (loraLabel) {\n loraLabel.style.setProperty(\u0027color\u0027,\u0027#555560\u0027,\u0027important\u0027);\n loraLabel.style.setProperty(\u0027-webkit-text-fill-color\u0027,\u0027#555560\u0027,\u0027important\u0027);\n }\n if (loraEl) {\n loraEl.style.setProperty(\u0027background-color\u0027,\u0027#09090b\u0027,\u0027important\u0027);\n loraEl.style.setProperty(\u0027color\u0027,\u0027#e8e8ec\u0027,\u0027important\u0027);\n loraEl.style.setProperty(\u0027-webkit-text-fill-color\u0027,\u0027#e8e8ec\u0027,\u0027important\u0027);\n loraEl.style.setProperty(\u0027border-color\u0027,\u0027#333338\u0027,\u0027important\u0027);\n }\n\n /* GitHub button */\n const ghBtn = document.querySelector(\u0027.gh-btn\u0027);\n if (ghBtn) {\n ghBtn.style.setProperty(\u0027background\u0027,\u0027#12b981\u0027,\u0027important\u0027);\n ghBtn.style.setProperty(\u0027color\u0027,\u0027#ffffff\u0027,\u0027important\u0027);\n ghBtn.style.setProperty(\u0027-webkit-text-fill-color\u0027,\u0027#ffffff\u0027,\u0027important\u0027);\n ghBtn.style.setProperty(\u0027border-color\u0027,\u0027rgba(255,255,255,.15)\u0027,\u0027important\u0027);
75\n ghBtn.style.setProperty(\u0027box-shadow\u0027,\u00270 2px 8px rgba(57,255,20,.4)\u0027,\u0027important\u0027);\n const svg = ghBtn.querySelector(\u0027svg\u0027);\n if (svg) svg.style.setProperty(\u0027fill\u0027,\u0027#ffffff\u0027,\u0027important\u0027);\n const span = ghBtn.querySelector(\u0027span\u0027);\n if (span) {\n span.style.setProperty(\u0027color\u0027,\u0027#ffffff\u0027,\u0027important\u0027);\n span.style.setProperty(\u0027-webkit-text-fill-color\u0027,\u0027#ffffff\u0027,\u0027important\u0027);\n }\n }\n\n /* Shell sections */\n const shell = document.querySelector(\u0027.app-shell\u0027);\n const header = document.querySelector(\u0027.app-header\u0027);\n const toolbar = document.querySelector(\u0027.app-toolbar\u0027);\n if (shell) shell.style.setProperty(\u0027background\u0027,\u0027#141416\u0027,\u0027important\u0027);\n if (header) header.style.setProperty(\u0027background\u0027,\u0027#1a1a1d\u0027,\u0027important\u0027);\n if (toolbar) toolbar.style.setProperty(\u0027background\u0027,\u0027#141416\u0027,\u0027important\u0027);\n }\n\n enforceDarkStyles();\n setInterval(enforceDarkStyles, 800);\n\n /* GitHub button hover interaction */\n const ghBtn = document.querySelector(\u0027.gh-btn\u0027);\n if (ghBtn) {\n ghBtn.addEventListener(\u0027mouseenter\u0027, () =\u003e {\n ghBtn.style.setProperty(\u0027background\u0027,\u0027#39ff14\u0027,\u0027important\u0027);\n ghBtn.style.setProperty(\u0027color\u0027,\u0027#ffffff\u0027,\u0027important\u0027);\n ghBtn.style.setProperty(\u0027-webkit-text-fill-color\u0027,\u0027#ffffff\u0027,\u0027important\u0027);\n ghBtn.style.setProperty(\u0027transform\u0027,\u0027translateY(-1px)\u0027,\u0027important\u0027);\n ghBtn.style.setProperty(\u0027box-shadow\u0027,\u00270 4px 16px rgba(57,255,20,.55)\u0027,\u0027important\u0027);\n });\n ghBtn.addEventListener(\u0027mouseleave\u0027, () =\u003e {\n ghBtn.style.setProperty(\u0027background\u0027,\u0027#12b981\u0027,\u0027important\u0027);\n ghBtn.style.setProperty(\u0027color\u0027,\u0027#ffffff\u0027,\u0027important\u0027);\n ghBtn.style.setProperty(\u0027-webkit-text-fill-color\u0027,\u0027#ffffff\u0027,\u0027important\u0027);\n ghBtn.style.setProperty(\u0027transform\u0027,\u0027translateY(0)\u0027,\u0027important\u0027);\n ghBtn.style.setProperty(\u0027box-shadow\u0027,\u00270 2px 8px rgba(57,255,20,.4)\u0027,\u0027important\u0027);\n });\n ghBtn.addEventListener(\u0027mousedown\u0027, () =\u003e {\n ghBtn.style.setProperty(\u0027background\u0027,\u0027#0e8f63\u0027,\u0027important\u0027);\n ghBtn.style.setProperty(\u0027transform\u0027,\u0027translateY(0)\u0027,\u0027important\u0027);\n });\n ghBtn.addEventListener(\u0027mouseup\u0027, () =\u003e {\n ghBtn.style.setProperty(\u0027background\u0027,\u0027#39ff14\u0027,\u0027important\u0027);\n });\n }\n\n function showToast(message, type) {\n let toast = document.getElementById(\u0027app-toast\u0027);\n if (!toast) {\n toast = document.createElement(\u0027div\u0027);\n toast.id = \u0027app-toast\u0027;\n toast.className = \u0027toast-notification\u0027;\n toast.innerHTML = \u0027\u003cspan class=\"toast-icon\"\u003e\u003c/span\u003e\u003cspan class=\"toast-text\"\u003e\u003c/span\u003e\u0027;\n document.body.appendChild(toast);\n }\n const icon = toast.querySelector(\u0027.toast-icon\u0027);\n const text = toast.querySelector(\u0027.toast-text\u0027);\n toast.className = \u0027toast-notification \u0027 + (type || \u0027error\u0027);\n icon.textContent = type === \u0027warning\u0027 ? \u0027\\u26A0\u0027 : type === \u0027info\u0027 ? \u0027\\u2139\u0027 : \u0027\\u2717\u0027;\n text.textContent = message;\n if (toastTimer) clearTimeout(toastTimer);\n void toast.offsetWidth;\n toast.classList.add(\u0027visible\u0027);\n toastTimer = setTimeout(() =\u003e toast.classList.remove(\u0027visible\u0027), 3500);\n }\n window.__showToast = showToast;\n\n function flashPromptError() {\n if (!promptInput) return;\n promptInput.classList.add(\u0027error-flash\u0027);\n promptInput.focus();\n setTimeout(() =\u003e promptInput.classList.remove(\u0027error-flash\u0027), 800);\n }\n\n function setGradioValue(containerId, value) {\n const container = document.getElementById(containerId);\n if (!container) return;\n container.querySelectorAll(\u0027input, textarea\u0027).forEac
75h(el =\u003e {\n if (el.type === \u0027file\u0027 || el.type === \u0027range\u0027 || el.type === \u0027checkbox\u0027) return;\n const proto = el.tagName === \u0027TEXTAREA\u0027 ? HTMLTextAreaElement.prototype : HTMLInputElement.prototype;\n const ns = Object.getOwnPropertyDescriptor(proto, \u0027value\u0027);\n if (ns \u0026\u0026 ns.set) {\n ns.set.call(el, value);\n el.dispatchEvent(new Event(\u0027input\u0027, {bubbles:true, composed:true}));\n el.dispatchEvent(new Event(\u0027change\u0027, {bubbles:true, composed:true}));\n }\n });\n }\n window.__setGradioValue = setGradioValue;\n\n function syncImagesToGradio() {\n window.__uploadedImages = images;\n const b64Array = images.map(img =\u003e img.b64);\n setGradioValue(\u0027hidden-images-b64\u0027, JSON.stringify(b64Array));\n updateCounts();\n }\n function syncPromptToGradio() {\n if (promptInput) setGradioValue(\u0027prompt-gradio-input\u0027, promptInput.value);\n }\n function syncLoraToGradio() {\n if (!loraSelect) return;\n const container = document.getElementById(\u0027gradio-lora\u0027);\n if (!container) return;\n container.querySelectorAll(\u0027input\u0027).forEach(el =\u003e {\n const ns = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, \u0027value\u0027);\n if (ns \u0026\u0026 ns.set) {\n ns.set.call(el, loraSelect.value);\n el.dispatchEvent(new Event(\u0027input\u0027, {bubbles:true, composed:true}));\n el.dispatchEvent(new Event(\u0027change\u0027, {bubbles:true, composed:true}));\n }\n });\n }\n\n function updateCounts() {\n const n = images.length;\n const txt = n \u003e 0 ? n + \u0027ì¥\u0027 : \u0027ì¬ì§ ìì\u0027;\n if (imgCountTb) imgCountTb.textContent = txt;\n if (imgCountSb) imgCountSb.textContent = n \u003e 0 ? txt + \u0027 ì¬ë¦¼\u0027 : \u0027ì¬ì§ì ì¬ë ¤ì£¼ì¸ì\u0027;\n }\n\n function addImage(b64, name) {\n images.push({id: Date.now() + Math.random(), b64, name});\n renderGallery(); syncImagesToGradio();\n }\n window.__addImage = addImage;\n\n function removeImage(idx) {\n images.splice(idx, 1);\n if (selectedIdx === idx) selectedIdx = -1;\n else if (selectedIdx \u003e idx) selectedIdx--;\n renderGallery(); syncImagesToGradio();\n }\n\n function clearAll() {\n images = []; window.__uploadedImages = images; selectedIdx = -1;\n renderGallery(); syncImagesToGradio();\n }\n window.__clearAll = clearAll;\n\n function renderGallery() {\n if (images.length === 0) {\n galleryGrid.innerHTML = \u0027\u0027; galleryGrid.style.display = \u0027none\u0027;\n if (uploadPrompt) uploadPrompt.style.display = \u0027\u0027;\n return;\n }\n if (uploadPrompt) uploadPrompt.style.display = \u0027none\u0027;\n galleryGrid.style.display = \u0027grid\u0027;\n let html = \u0027\u0027;\n images.forEach((img, i) =\u003e {\n const sel = i === selectedIdx ? \u0027 selected\u0027 : \u0027\u0027;\n html += \u0027\u003cdiv class=\"gallery-thumb\u0027 + sel + \u0027\" data-idx=\"\u0027 + i + \u0027\"\u003e\u0027\n + \u0027\u003cimg src=\"\u0027 + img.b64 + \u0027\" alt=\"\u0027 + (img.name||\u0027image\u0027) + \u0027\"\u003e\u0027\n + \u0027\u003cspan class=\"thumb-badge\"\u003e#\u0027 + (i+1) + \u0027\u003c/span\u003e\u0027\n + \u0027\u003cbutton class=\"thumb-remove\" data-remove=\"\u0027 + i + \u0027\"\u003e\\u2715\u003c/button\u003e\u0027\n + \u0027\u003c/div\u003e\u0027;\n });\n html += \u0027\u003cdiv class=\"gallery-add-card\" id=\"gallery-add-card\"\u003e\u003cspan class=\"add-icon\"\u003e+\u003c/span\u003e\u003cspan class=\"add-text\"\u003eì¶ê°\u003c/span\u003e\u003c/div\u003e\u0027;\n galleryGrid.innerHTML = html;\n galleryGrid.querySelectorAll(\u0027.gallery-thumb\u0027).forEac
75h(thumb =\u003e {\n thumb.addEventListener(\u0027click\u0027, (e) =\u003e {\n if (e.target.closest(\u0027.thumb-remove\u0027)) return;\n selectedIdx = (selectedIdx === parseInt(thumb.dataset.idx)) ? -1 : parseInt(thumb.dataset.idx);\n renderGallery();\n });\n });\n galleryGrid.querySelectorAll(\u0027.thumb-remove\u0027).forEach(btn =\u003e {\n btn.addEventListener(\u0027click\u0027, (e) =\u003e { e.stopPropagation(); removeImage(parseInt(btn.dataset.remove)); });\n });\n const addCard = document.getElementById(\u0027gallery-add-card\u0027);\n if (addCard) addCard.addEventListener(\u0027click\u0027, () =\u003e fileInput.click());\n }\n\n function processFiles(files) {\n Array.from(files).forEach(file =\u003e {\n if (!file.type.startsWith(\u0027image/\u0027)) return;\n const reader = new FileReader();\n reader.onload = (e) =\u003e addImage(e.target.result, file.name);\n reader.readAsDataURL(file);\n });\n }\n\n fileInput.addEventListener(\u0027change\u0027, (e) =\u003e { processFiles(e.target.files); e.target.value = \u0027\u0027; });\n if (uploadClick) uploadClick.addEventListener(\u0027click\u0027, () =\u003e fileInput.click());\n if (btnUpload) btnUpload.addEventListener(\u0027click\u0027, () =\u003e fileInput.click());\n if (btnRemove) btnRemove.addEventListener(\u0027click\u0027, () =\u003e { if (selectedIdx \u003e= 0) removeImage(selectedIdx); });\n if (btnClear) btnClear.addEventListener(\u0027click\u0027, clearAll);\n\n dropZone.addEventListener(\u0027dragover\u0027, (e) =\u003e { e.preventDefault(); dropZone.classList.add(\u0027drag-over\u0027); });\n dropZone.addEventListener(\u0027dragleave\u0027, (e) =\u003e { e.preventDefault(); dropZone.classList.remove(\u0027drag-over\u0027); });\n dropZone.addEventListener(\u0027drop\u0027, (e) =\u003e {\n e.preventDefault(); dropZone.classList.remove(\u0027drag-over\u0027);\n if (e.dataTransfer.files.length) processFiles(e.dataTransfer.files);\n });\n\n if (promptInput) promptInput.addEventListener(\u0027input\u0027, syncPromptToGradio);\n if (loraSelect) loraSelect.addEventListener(\u0027change\u0027, syncLoraToGradio);\n\n window.__setPrompt = function(text) { if (promptInput) { promptInput.value = text; syncPromptToGradio(); } };\n window.__setLora = function(lora) {\n if (loraSelect) {\n loraSelect.value = lora;\n loraSelect.dispatchEvent(new Event(\u0027change\u0027, {bubbles:true}));\n syncLoraToGradio();\n }\n };\n\n document.querySelectorAll(\u0027.example-card[data-idx]\u0027).forEach(card =\u003e {\n card.addEventListener(\u0027click\u0027, () =\u003e {\n const idx = card.getAttribute(\u0027data-idx\u0027);\n document.querySelectorAll(\u0027.example-card.loading\u0027).forEach(c =\u003e c.classList.remove(\u0027loading\u0027));\n card.classList.add(\u0027loading\u0027);\n showToast(\u0027Loading example\\u2026\u0027, \u0027info\u0027);\n setGradioValue(\u0027example-result-data\u0027, \u0027\u0027);\n setGradioValue(\u0027example-idx-input\u0027, idx);\n setTimeout(() =\u003e {\n const btn = document.getElementById(\u0027example-load-btn\u0027);\n if (btn) { const b = btn.querySelector(\u0027button\u0027); if (b) b.click(); else btn.click(); }\n }, 150);\n setTimeout(() =\u003e card.classList.remove(\u0027loading\u0027), 12000);\n });\n });\n\n function syncSlider(customId, gradioId) {\n const slider = document.getElementById(customId);\n const valSpan = document.getElementById(customId + \u0027-val\u0027);\n if (!slider) return;\n slider.addEventListener(\u0027input\u0027, () =\u003e {\n if (valSpan) valSpan.textContent = slider.value;\n const container = document.getElementById(gradioId);\n if (!container) return;\n container.querySelectorAll(\u0027input[type=\"range\"],input[type=\"number\"]\u0027).forEac
75h(el =\u003e {\n const ns = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, \u0027value\u0027);\n if (ns \u0026\u0026 ns.set) {\n ns.set.call(el, slider.value);\n el.dispatchEvent(new Event(\u0027input\u0027, {bubbles:true, composed:true}));\n el.dispatchEvent(new Event(\u0027change\u0027, {bubbles:true, composed:true}));\n }\n });\n });\n }\n syncSlider(\u0027custom-seed\u0027, \u0027gradio-seed\u0027);\n syncSlider(\u0027custom-guidance\u0027, \u0027gradio-guidance\u0027);\n syncSlider(\u0027custom-steps\u0027, \u0027gradio-steps\u0027);\n\n const randCheck = document.getElementById(\u0027custom-randomize\u0027);\n if (randCheck) {\n randCheck.addEventListener(\u0027change\u0027, () =\u003e {\n const container = document.getElementById(\u0027gradio-randomize\u0027);\n if (!container) return;\n const cb = container.querySelector(\u0027input[type=\"checkbox\"]\u0027);\n if (cb \u0026\u0026 cb.checked !== randCheck.checked) cb.click();\n });\n }\n\n function showLoader() {\n const l = document.getElementById(\u0027output-loader\u0027);\n if (l) l.classList.add(\u0027active\u0027);\n const sb = document.querySelector(\u0027.sb-fixed\u0027);\n if (sb) sb.textContent = \u0027ë§ëë ì¤\\u2026\u0027;\n }\n function hideLoader() {\n const l = document.getElementById(\u0027output-loader\u0027);\n if (l) l.classList.remove(\u0027active\u0027);\n const sb = document.querySelector(\u0027.sb-fixed\u0027);\n if (sb) sb.textContent = \u0027Done\u0027;\n }\n window.__showLoader = showLoader;\n window.__hideLoader = hideLoader;\n\n function validateBeforeRun() {\n const promptVal = promptInput ? promptInput.value.trim() : \u0027\u0027;\n const hasImages = images.length \u003e 0;\n if (!hasImages \u0026\u0026 !promptVal) { showToast(\u0027ì¬ì§ì ì¬ë¦¬ê³ ì¤íì¼ì 골ë¼ì£¼ì¸ì\u0027, \u0027error\u0027); flashPromptError(); return false; }\n if (!hasImages) { showToast(\u0027ì¬ì§ì 먼ì ì¬ë ¤ì£¼ì¸ì\u0027, \u0027error\u0027); return false; }\n if (!promptVal) { showToast(\u0027ì¤íì¼ì ê³ ë¥´ê±°ë ì§ì문ì ì
ë ¥íì¸ì\u0027, \u0027warning\u0027); flashPromptError(); return false; }\n return true;\n }\n\n window.__clickGradioRunBtn = function() {\n if (!validateBeforeRun()) return;\n syncPromptToGradio(); syncImagesToGradio(); syncLoraToGradio(); showLoader();\n setTimeout(() =\u003e {\n const gradioBtn = document.getElementById(\u0027gradio-run-btn\u0027);\n if (!gradioBtn) return;\n const btn = gradioBtn.querySelector(\u0027button\u0027);\n if (btn) btn.click(); else gradioBtn.click();\n }, 200);\n };\n\n if (runBtnEl) runBtnEl.addEventListener(\u0027click\u0027, () =\u003e window.__clickGradioRunBtn());\n\n renderGallery();\n updateCounts();\n}\ninit();\n}\n","queue":false,"api_name":"js_fn","api_description":null,"scroll_to_output":false,"show_progress":"full","show_progress_on":null,"batch":false,"max_batch_size":4,"cancels":[],"types":{"generator":false,"cancel":false},"collects_event_data":false,"trigger_after":null,"trigger_only_on_success":false,"trigger_only_on_failure":false,"trigger_mode":"once","api_visibility":"private","rendered_in":null,"render_id":null,"connection":"sse","time_limit":null,"stream_every":0.5,"event_specific_args":null,"component_prop_inputs":[],"js_implementation":null},{"id":1,"targets":[[0,"load"]],"inputs":[],"outputs":[],"backend_fn":false,"js":"\n() =\u003e {\nfunction watchOutputs() {\n const resultContainer = document.getElementById(\u0027gradio-result\u0027);\n const outBody = document.getElementById(\u0027output-image-container\u0027);\n const outPh = document.getElementById(\u0027output-placeholder\u0027);\n const dlBtn = document.getElementById(\u0027dl-btn-output\u0027);\n\n if (!resultContainer || !outBody) { setTimeout(watchOutputs, 500); return; }\n\n if (dlBtn) {\n dlBtn.addEventListener(\u0027click\u0027, (e) =\u003e {\n e.stopPropagation();\n const img = outBody.querySelector(\u0027img.modern-out-img\u0027);\n if (img \u0026\u0026 img.src) {\n const a = document.createElement(\u0027a\u0027);\n a.href = img.src; a.download = \u0027qwen_edit_output.png\u0027;\n document.body.appendChild(a); a.click(); document.body.removeChild(a);\n }\n });\n }\n\n function syncImage() {\n const resultImg = resultContainer.querySelector(\u0027img\u0027);\n if (resultImg \u0026\u0026 resultImg.src) {\n if (outPh) outPh.style.display = \u0027none\u0027;\n let existing = outBody.querySelector(\u0027img.modern-out-img\u0027);\n if (!existing) {\n existing = document.createElement(\u0027img\u0027);\n existing.className = \u0027modern-out-img\u0027;\n outBody.appendChild(existing);\n }\n if (existing.src !== resultImg.src) {\n existing.src = resultImg.src;\n if (dlBtn) dlBtn.classList.add(\u0027visible\u0027);\n if (window.__hideLoader) window.__hideLoader();\n }\n }\n }\n const observer = new MutationObserver(syncImage);\n observer.observe(resultContainer, {childList:true, subtree:true, attributes:true, attributeFilter:[\u0027src\u0027]});\n setInterval(syncImage, 800);\n}\nwatchOutputs();
75\n\nfunction watchSeed() {\n const seedContainer = document.getElementById(\u0027gradio-seed\u0027);\n const seedSlider = document.getElementById(\u0027custom-seed\u0027);\n const seedVal = document.getElementById(\u0027custom-seed-val\u0027);\n if (!seedContainer || !seedSlider) { setTimeout(watchSeed, 500); return; }\n function sync() {\n const el = seedContainer.querySelector(\u0027input[type=\"range\"],input[type=\"number\"]\u0027);\n if (el \u0026\u0026 el.value) { seedSlider.value = el.value; if (seedVal) seedVal.textContent = el.value; }\n }\n const obs = new MutationObserver(sync);\n obs.observe(seedContainer, {childList:true, subtree:true, attributes:true, attributeFilter:[\u0027value\u0027]});\n setInterval(sync, 1000);\n}\nwatchSeed();\n\nfunction watchExampleResults() {\n const container = document.getElementById(\u0027example-result-data\u0027);\n if (!container) { setTimeout(watchExampleResults, 500); return; }\n let lastProcessed = \u0027\u0027;\n\n function checkResult() {\n const el = container.querySelector(\u0027textarea\u0027) || container.querySelector(\u0027input\u0027);\n if (!el) return;\n const val = el.value;\n if (!val || val === lastProcessed || val.length \u003c 20) return;\n try {\n const data = JSON.parse(val);\n if (data.status === \u0027ok\u0027 \u0026\u0026 data.images \u0026\u0026 data.images.length \u003e 0) {\n lastProcessed = val;\n if (window.__clearAll) window.__clearAll();\n if (window.__setPrompt \u0026\u0026 data.prompt) window.__setPrompt(data.prompt);\n if (window.__setLora \u0026\u0026 data.lora) window.__setLora(data.lora);\n data.images.forEach((b64, i) =\u003e {\n if (b64 \u0026\u0026 window.__addImage) {\n const name = (data.names \u0026\u0026 data.names[i]) ? data.names[i] : (\u0027example_\u0027+(i+1)+\u0027.jpg\u0027);\n window.__addImage(b64, name);\n }\n });\n document.querySelectorAll(\u0027.example-card.loading\u0027).forEach(c =\u003e c.classList.remove(\u0027loading\u0027));\n if (window.__showToast) window.__showToast(\u0027Example loaded \\u2014 \u0027 + data.images.length + \u0027 image(s)\u0027, \u0027info\u0027);\n } else if (data.status === \u0027error\u0027) {\n document.querySelectorAll(\u0027.example-card.loading\u0027).forEach(c =\u003e c.classList.remove(\u0027loading\u0027));\n if (window.__showToast) window.__showToast(\u0027ë¶ë¬ì¤ì§ 못íì´ì\u0027, \u0027error\u0027);\n }\n } catch(e) { console.error(\u0027Example parse error:\u0027, e); }\n }\n\n const obs = new MutationObserver(checkResult);\n obs.observe(container, {childList:true, subtree:true, characterData:true, attributes:true});\n setInterval(checkResult, 500);\n}\nwatchExampleResults();\n}\n","queue":false,"api_name":"js_fn_1","api_description":null,"scroll_to_output":false,"show_progress":"full","show_progress_on":null,"batch":false,"max_batch_size":4,"cancels":[],"types":{"generator":false,"cancel":false},"collects_event_data":false,"trigger_after":null,"trigger_only_on_success":false,"trigger_only_on_failure":false,"trigger_mode":"once","api_visibility":"private","rendered_in":null,"render_id":null,"connection":"sse","time_limit":null,"stream_every":0.5,"event_specific_args":null,"component_prop_inputs":[],"js_implementation":null},{"id":2,"targets":[[14,"click"]],"inputs":[1,2,3,4,5,6,7],"outputs":[8,4],"backend_fn":true,"js":"(imgs, p, la, s, rs, gs, st) =\u003e {\n const images = window.__uploadedImages || [];\n const b64Array = images.map(img =\u003e img.b64);\n const imgsJson = JSON.stringify(b64Array);\n const promptEl = document.getElementById(\u0027custom-prompt-input\u0027);\n const loraEl = document.getElementById(\u0027custom-lora-select\u0027);\n const promptVal = promptEl ? promptEl.value : p;\n const loraVal = loraEl ? loraEl.value : la;\n return [imgsJson, promptVal, loraVal, s, rs, gs, st];\n }","queue":true,"api_name":"infer","api_description":null,"scroll_to_output":false,"show_progress":"full","show_progress_on":null,"batch":false,"max_batch_size":4,"cancels":[],"types":{"generator":false,"cancel":false},"collects_event_data":false,"trigger_after":null,"trigger_only_on_success":false,"trigger_only_on_failure":false,"trigger_mode":"once","api_visibility":"public","rendered_in":null,"render_id":null,"connection":"sse","time_limit":null,"stream_every":0.5,"event_specific_args":null,"component_prop_input
75s":[],"js_implementation":null},{"id":3,"targets":[[11,"click"]],"inputs":[9],"outputs":[10],"backend_fn":true,"js":null,"queue":false,"api_name":"load_example_data","api_description":null,"scroll_to_output":false,"show_progress":"full","show_progress_on":null,"batch":false,"max_batch_size":4,"cancels":[],"types":{"generator":false,"cancel":false},"collects_event_data":false,"trigger_after":null,"trigger_only_on_success":false,"trigger_only_on_failure":false,"trigger_mode":"once","api_visibility":"public","rendered_in":null,"render_id":null,"connection":"sse","time_limit":null,"stream_every":0.5,"event_specific_args":null,"component_prop_inputs":[],"js_implementation":null}],"layout":{"id":0,"children":[{"id":1},{"id":2},{"id":3},{"id":4},{"id":5},{"id":6},{"id":7},{"id":8},{"id":9},{"id":10},{"id":11},{"id":12,"children":[]},{"id":13,"children":[]},{"id":14}]},"username":null,"deep_link_state":"none","current_page":"","root":"https://weonjeong-ai-profile.hf.space"};</script>
75<script>window.gradio_api_info = {"named_endpoints":{"/infer":{"parameters":[{"label":"parameter_1","parameter_name":"images_b64_json","parameter_has_default":true,"parameter_default":"[]","type":{"type":"string"},"python_type":{"type":"str","description":""},"component":"Textbox","example_input":"Hello!!"},{"label":"parameter_2","parameter_name":"prompt","parameter_has_default":true,"parameter_default":"","type":{"type":"string"},"python_type":{"type":"str","description":""},"component":"Textbox","example_input":"Hello!!"},{"label":"parameter_3","parameter_name":"lora_adapter","parameter_has_default":true,"parameter_default":"Hyper-Realistic-Portrait","type":{"type":"string","enum":["Multiple-Angles","Photo-to-Anime","Anime-V2","Light-Migration","Upscaler","Style-Transfer","Manga-Tone","Anything2Real","Fal-Multiple-Angles","Polaroid-Photo","Unblur-Anything","Midnight-Noir-Eyes-Spotlight","Hyper-Realistic-Portrait","Ultra-Realistic-Portrait","Pixar-Inspired-3D","Noir-Comic-Book","Any-light","Studio-DeLight","Cinematic-FlatLog"]},"python_type":{"type":"Literal[\u0027Multiple-Angles\u0027, \u0027Photo-to-Anime\u0027, \u0027Anime-V2\u0027, \u0027Light-Migration\u0027, \u0027Upscaler\u0027, \u0027Style-Transfer\u0027, \u0027Manga-Tone\u0027, \u0027Anything2Real\u0027, \u0027Fal-Multiple-Angles\u0027, \u0027Polaroid-Photo\u0027, \u0027Unblur-Anything\u0027, \u0027Midnight-Noir-Eyes-Spotlight\u0027, \u0027Hyper-Realistic-Portrait\u0027, \u0027Ultra-Realistic-Portrait\u0027, \u0027Pixar-Inspired-3D\u0027, \u0027Noir-Comic-Book\u0027, \u0027Any-light\u0027, \u0027Studio-DeLight\u0027, \u0027Cinematic-FlatLog\u0027]","description":""},"component":"Dropdown","example_input":"Multiple-Angles"},{"label":"parameter_4","parameter_name":"seed","parameter_has_default":true,"parameter_default":0,"type":{"type":"number","description":"numeric value between 0 and 2147483647"},"python_type":{"type":"float","description":""},"component":"Slider","example_input":0},{"label":"parameter_5","parameter_name":"randomize_seed","parameter_has_default":true,"parameter_default":true,"type":{"type":"boolean"},"python_type":{"type":"bool","description":""},"component":"Checkbox","example_input":true},{"label":"parameter_6","parameter_name":"guidance_scale","parameter_has_default":true,"parameter_default":1.0,"type":{"type":"number","description":"numeric value between 1.0 and 10.0"},"python_type":{"type":"float","description":""},"component":"Slider","example_input":1.0},{"label":"parameter_7","parameter_name":"steps","parameter_has_default":true,"parameter_default":4,"type":{"type":"number","description":"numeric value between 1 and 50"},"python_type":{"type":"float","description":""},"component":"Slider","example_input":1}],"returns":[{"label":"value_8","type":{"properties":{"path":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Path to a local file","title":"Path"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Publicly available url or base64 encoded image","title":"Url"},"size":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Size of image in bytes","title":"Size"},"orig_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Original filename","title":"Orig Name"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"mime type of image","title":"Mime Type"},"is_stream":{"default":false,"description":"Can always be set to False","title":"Is Stream","type":"boolean"},"meta":{"additionalProperties":true,"default":{"_type":"gradio.FileData"},"title":"Meta","type":"object"}},"title":"ImageData","type":"object","additional_description":"A local filepath or publicly available URL."},"python_type":{"type":"filepath","description":""},"component":"Image"},{"label":"value_4","type":{"type":"number","description":"numeric value between 0 and 2147483647"},"python_type":{"type":"float","description":"numeric value between 0 and 2147483647"},"component":"Slider"}],"api_visibility":"public","description":"","code_snippets":{"python":"from gradio_client import Client\n\nclient = Client(\"WeonJeong/ai-profile\")\nresult = client.predict(\n\timages_b64_json=\"[]\",\n\tprompt=\"\",\n\tlora_adapter=\"Hyper-Realistic-Portrait\",\n\tseed=0,\n\trandomize_seed=True,\n\tguidance_scale=1.0,\n\tsteps=4,\n\tapi_name=\"/infer\",\n)\nprint(result)","javascript":"import { Client } from \"@gradio/client\";\n\nconst client = await Client.connect(\"WeonJeong/ai-profile\");\nconst result = await client.predict(\"/infer\", {\n\t\timages_b64_json: \"[]\",\n\t\tprompt: \"\",\n\t\tlora_adapter: \"Hyper-Realistic-Portrait\",\n\t\tseed: 0,\n\t\trandomize_seed: true,\n\t\tguid
75ance_scale: 1.0,\n\t\tsteps: 4,\n});\n\nconsole.log(result.data);","bash":"curl -X POST http://localhost:7860/gradio_api/call/v2/infer -s -H \"Content-Type: application/json\" \\\n -d \u0027{\"images_b64_json\": \"[]\", \"prompt\": \"\", \"lora_adapter\": \"Hyper-Realistic-Portrait\", \"seed\": 0, \"randomize_seed\": true, \"guidance_scale\": 1.0, \"steps\": 4}\u0027 \\\n | awk -F\u0027\"\u0027 \u0027{ print $4}\u0027 \\\n | read EVENT_ID; curl -N http://localhost:7860/gradio_api/call/infer/$EVENT_ID","cli":"{command} predict WeonJeong/ai-profile /infer \u0027{\n \"images_b64_json\": \"[]\",\n \"prompt\": \"Hello!!\",\n \"lora_adapter\": \"Hyper-Realistic-Portrait\",\n \"seed\": 0,\n \"randomize_seed\": true,\n \"guidance_scale\": 1.0,\n \"steps\": 4\n}\u0027\n"}},"/load_example_data":{"parameters":[{"label":"parameter_9","parameter_name":"idx_str","parameter_has_default":true,"parameter_default":"","type":{"type":"string"},"python_type":{"type":"str","description":""},"component":"Textbox","example_input":"Hello!!"}],"returns":[{"label":"value_10","type":{"type":"string"},"python_type":{"type":"str","description":""},"component":"Textbox"}],"api_visibility":"public","description":"","code_snippets":{"python":"from gradio_client import Client\n\nclient = Client(\"WeonJeong/ai-profile\")\nresult = client.predict(\n\tidx_str=\"\",\n\tapi_name=\"/load_example_data\",\n)\nprint(result)","javascript":"import { Client } from \"@gradio/client\";\n\nconst client = await Client.connect(\"WeonJeong/ai-profile\");\nconst result = await client.predict(\"/load_example_data\", {\n\t\tidx_str: \"\",\n});\n\nconsole.log(result.data);","bash":"curl -X POST http://localhost:7860/gradio_api/call/v2/load_example_data -s -H \"Content-Type: application/json\" \\\n -d \u0027{\"idx_str\": \"\"}\u0027 \\\n | awk -F\u0027\"\u0027 \u0027{ print $4}\u0027 \\\n | read EVENT_ID; curl -N http://localhost:7860/gradio_api/call/load_example_data/$EVENT_ID","cli":"{command} predict WeonJeong/ai-profile /load_example_data \u0027{\n \"idx_str\": \"Hello!!\"\n}\u0027\n"}}},"unnamed_endpoints":{}};</script>
75 76 77
77<script 78 src="https://weonjeong-ai-profile.hf.space/static/js/iframeResizer.contentWindow.min.js" 79 async 80 ></script>
80 81
81<script data-gradio-mode> 82 window.__gradio_mode__ = "app"; 83 window.iFrameResizer = { 84 autoResize: false, 85 sizeWidth: false 86 }; 87 window.parent?.postMessage( 88 { type: "SET_SCROLLING", enabled: false }, 89 "*" 90 ); 91 </script>
91 92 <link rel="manifest" href="/manifest.json" /> 93
93<script type="module" crossorigin src="./assets/index-CTFdGFMX.js"></script>
93 94 <link rel="stylesheet" crossorigin href="./assets/index-BMxruX6a.css"> 95 </head> 96 97 <body 98 style=" 99 width: 100%; 100 margin: 0; 101 padding: 0; 102 display: flex; 103 flex-direction: column; 104 flex-grow: 1; 105 " 106 > 107 <gradio-app 108 control_page_title="true" 109 embed="false" 110 eager="true" 111 style="display: flex; flex-direction: column; flex-grow: 1" 112 > 113 </gradio-app> 114
114<script> 115 const ce = document.getElementsByTagName("gradio-app"); 116 117 if (ce[0]) { 118 ce[0].addEventListener("domchange", () => { 119 document.body.style.padding = "0"; 120 }); 121 document.body.style.padding = "0"; 122 } 123 </script>
123 124 </body> 125</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.