diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 7bb4cce9e..96a616063 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -19,7 +19,7 @@ ci: repos: # Standard hooks - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.4.0 + rev: v5.0.0 hooks: - id: check-added-large-files - id: check-case-conflict @@ -27,7 +27,6 @@ repos: - id: check-symlinks - id: check-yaml args: ["--allow-multiple-documents"] - - id: debug-statements - id: end-of-file-fixer - id: mixed-line-ending - id: trailing-whitespace @@ -36,31 +35,3 @@ repos: .*\.md| .github/ISSUE_TEMPLATE/.*\.yml )$ - -- repo: https://github.com/charliermarsh/ruff-pre-commit - rev: 'v0.0.285' - hooks: - - id: ruff - args: [--fix, --exit-non-zero-on-fix] -- repo: local - hooks: - - id: pylint - name: pylint - entry: pylint - language: system - types: [python] - args: [] - -# Black, the code formatter, natively supports pre-commit -# - repo: https://github.com/psf/black -# rev: 23.7.0 -# hooks: -# - id: black -# exclude: ^(docs) - -# Changes tabs to spaces -# - repo: https://github.com/Lucas-C/pre-commit-hooks -# rev: v1.5.3 -# hooks: -# - id: remove-tabs -# exclude: ^(docs) diff --git a/.pylintrc b/.pylintrc index b2c67d5b2..6fd27919d 100644 --- a/.pylintrc +++ b/.pylintrc @@ -60,7 +60,7 @@ ignore-patterns=.*test*.py$, .*_model.py$, .*_arch.py$, .*_model_arch.py*, - .*_model_arch_v2.py$, + .*_model_arch_v2.py$, ignored-modules= jobs=0 limit-inference-results=100 diff --git a/.vscode/settings.json b/.vscode/settings.json index 690477350..f7046cf59 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,4 +10,4 @@ "python.analysis.typeCheckingMode": "off", "editor.formatOnSave": false, "python.REPL.enableREPLSmartSend": false -} \ No newline at end of file +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 92469f39e..3256fb16d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -55,7 +55,7 @@ - major refactoring of requirements and dependencies to unblock `numpy>=2.1.0` - patch `insightface` - stronger lint rules - add separate `npm run lint`, `npm run todo`, `npm run test` macros + add separate `npm run lint`, `npm run todo`, `npm run test`, `npm run format` macros ## Update for 2025-06-30 diff --git a/CITATION.cff b/CITATION.cff index c03c00ebb..6a9ae4964 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -21,7 +21,7 @@ repository-code: 'https://github.com/vladmandic/sdnext' abstract: >- SD.Next: Advanced Implementation of Stable Diffusion and other diffusion models for text, image and video - generation + generation keywords: - stablediffusion diffusers sdnext license: Apache-2.0 diff --git a/CODE_OF_CONDUCT b/CODE_OF_CONDUCT index f2205e46a..089630fab 100644 --- a/CODE_OF_CONDUCT +++ b/CODE_OF_CONDUCT @@ -1,17 +1,17 @@ # Code of Conduct -Use your best judgement +Use your best judgement If it will possibly make others uncomfortable, do not post it -- Be respectful - Disagreement is not an opportunity to attack someone else's thoughts or opinions - Although views may differ, remember to approach every situation with patience and care -- Be considerate - Think about how your contribution will affect others in the community -- Be open minded - Embrace new people and new ideas. Our community is continually evolving and we welcome positive change +- Be respectful + Disagreement is not an opportunity to attack someone else's thoughts or opinions + Although views may differ, remember to approach every situation with patience and care +- Be considerate + Think about how your contribution will affect others in the community +- Be open minded + Embrace new people and new ideas. Our community is continually evolving and we welcome positive change -Be mindful of your language +Be mindful of your language Any of the following behavior is unacceptable: - Offensive comments of any kind @@ -20,7 +20,7 @@ Any of the following behavior is unacceptable: If you believe someone is violating the code of conduct, we ask that you report it -Participants asked to stop any harassing behavior are expected to comply immediately +Participants asked to stop any harassing behavior are expected to comply immediately
diff --git a/CONTRIBUTING b/CONTRIBUTING index ef51ffeb0..4e129066b 100644 --- a/CONTRIBUTING +++ b/CONTRIBUTING @@ -4,24 +4,24 @@ Pull requests from everyone are welcome Procedure for contributing: -- Select SD.Next `dev` branch: - -- Create a fork of the repository on github - In a top right corner of a GitHub, select "Fork" - Its recommended to fork latest version from main branch to avoid any possible conflicting code updates -- Clone your forked repository to your local system - `git clone https://github.com//` -- Make your changes -- Test your changes -- Lint your changes against code guidelines - - `ruff check` - - `pylint /.py` -- Push changes to your fork -- Submit a PR (pull request) - - Make sure that PR is against `dev` branch - - Update your fork before createing PR so that it is based on latest code - - Make sure that PR does NOT include any unrelated edits - - Make sure that PR does not include changes to submodules +- Select SD.Next `dev` branch: + +- Create a fork of the repository on github + In a top right corner of a GitHub, select "Fork" + Its recommended to fork latest version from main branch to avoid any possible conflicting code updates +- Clone your forked repository to your local system + `git clone https://github.com//` +- Make your changes +- Test your changes +- Lint your changes against code guidelines + - `ruff check` + - `pylint /.py` +- Push changes to your fork +- Submit a PR (pull request) + - Make sure that PR is against `dev` branch + - Update your fork before createing PR so that it is based on latest code + - Make sure that PR does NOT include any unrelated edits + - Make sure that PR does not include changes to submodules -Your pull request will be reviewed and pending review results, merged into `dev` branch -Dev merges to main are performed regularly and any PRs that are merged to `dev` will be included in the next main release +Your pull request will be reviewed and pending review results, merged into `dev` branch +Dev merges to main are performed regularly and any PRs that are merged to `dev` will be included in the next main release diff --git a/configs/Dockerfile.cuda b/configs/Dockerfile.cuda index 4f5bf3661..ca117bd4c 100644 --- a/configs/Dockerfile.cuda +++ b/configs/Dockerfile.cuda @@ -39,7 +39,7 @@ ENV SD_MODELSDIR="/mnt/models" ENV SD_DOCKER=true # tcmalloc is not required but it is highly recommended -ENV LD_PRELOAD=libtcmalloc.so.4 +ENV LD_PRELOAD=libtcmalloc.so.4 # sdnext will run all necessary pip install ops and then exit RUN ["python", "/app/launch.py", "--debug", "--uv", "--use-cuda", "--log", "sdnext.log", "--test", "--optional"] # preinstall additional packages to avoid installation during runtime diff --git a/configs/flux/tokenizer_2/tokenizer.json b/configs/flux/tokenizer_2/tokenizer.json index 21ed409af..c2923d4fc 100644 --- a/configs/flux/tokenizer_2/tokenizer.json +++ b/configs/flux/tokenizer_2/tokenizer.json @@ -129425,4 +129425,4 @@ ], "byte_fallback": false } -} \ No newline at end of file +} diff --git a/configs/sd3/tokenizer_3/tokenizer.json b/configs/sd3/tokenizer_3/tokenizer.json index 6f0550301..51e7d863d 100644 --- a/configs/sd3/tokenizer_3/tokenizer.json +++ b/configs/sd3/tokenizer_3/tokenizer.json @@ -129425,4 +129425,4 @@ ], "byte_fallback": false } -} \ No newline at end of file +} diff --git a/html/art-styles.json b/html/art-styles.json index 73e83a482..b601cacf9 100644 --- a/html/art-styles.json +++ b/html/art-styles.json @@ -2015,4 +2015,4 @@ "extra": "", "preview": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDABcQERQRDhcUEhQaGBcbIjklIh8fIkYyNSk5UkhXVVFIUE5bZoNvW2F8Yk5QcptzfIeLkpSSWG2grJ+OqoOPko3/2wBDARgaGiIeIkMlJUONXlBejY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY3/wAARCACAAIADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwC3pP8AyFU/65P/ADWsjwsxTxC6Z4IfI+la+k/8hZP+uT/zWsjw98vitl95B/OgDc13/kXbj/rp/wC1KZB/yCrL/cl/kak13/kXrj/rp/7UqOD/AJBdl/uS/wAjQBSk+/J7Ef8Aotqi05sXGc/8s2/9F1JJ9+X6j/0U1Raf/rSf+mb/APosUAasrs0Uh3nBVu/+/wC1bMX+pT/dH8qwBj7GOP8AlkO3s3tXQRf6lP8AdH8qAHVU1T/jwf6j+dW6qar/AMg+T8KAM22wbZc/89B/7JUhDIoCj55X/QH/ABxTLcAWq/8AXQf+yVYiUveMT0QYA9P880AF/wCbHpskdoMyldiD9P61maXZLp2vw2oO4pESzepI5q3fox1GxlLMF88Iq54IHU/n/Kk/5nH/ALZf+y0AU77nxDJ/11j/AJLU2p/8hL/gDf8AoZqG8/5GKT/rrH/Jam1T/kJf8AP/AKGaAH6T/wAhZP8Ark/81rI0j5PGbD/prKP51r6T/wAhVP8Ark/81rItPk8cEf8ATw/8jQBu67/yL1x/10/9qVQuXdNK0wIxXd5gOPTBq/rv/IvXH/XT/wBqVn3f/IL0r6v/ACNABPG0U8qNz84wfUeW1V9N+aTHqjj/AMcFaWrptlif++xH5I3+NZuln98P91//AEAUAWkbNoeOVTB/UV00X+qT/dH8q5f+GYe57V1Ef+rX6CgBJnMcLuOqqTWVe3cklpIrbccdFx3I9fatG8kSO2kDuqlkOMnGeKxLps24XnDlB/4+aAJLc/6KowSTLge3C0l7dtZ2+I/muLmTYgH6n8qj00Zs1PJPmkcnt8tLEHl1mOdwPKAkSIY/ujlvzJ/KgB2SbTRSSSfNHJp3/M5f9sv/AGWo8/6Hov8A11H86kH/ACOP/bL+lAFW7/5GOT/rrH/Jal1T/kJD/cP/AKGaiu/+Rkf/AK6x/wAlqXVP+QkP9xv/AEM0DH6T/wAhVf8Ark/81rJHyeOf+3j+YrW0n/kLJ/1yf+a1lXXyeOV950/UCgRt67/yL1x/10/9qVn3n/IK0r/ef+RrQ13/AJF64/66f+1Kz7z/AJBWl/7z/wAjQBe1VGdICATtdicdhsNY+mn94D/sv/6LFb9791fo/wD6AawNM/10YIzkMP8AxwUATk/NKP8AaP8ASurT/Vr9BXLXMfkzTpknbJ1/KuqT7i/QUAZmtHiP/db+lZczZih+qf8AoVaWuHBh+jf0rKlOYY8fw7Sfb5h/jQBJZOUtIAMYa52n6ZWrEBxJZY7Cf+dVLU/6Jbf9fX9VqzCcSWf+7P8AzoAjz/ouif8AXUVMp/4rH/tl/wCy1Av/AB7aJ/10FTL/AMjn/wBsv/ZaAK91/wAjI/8A11j/AJLUuqf8hIf7h/8AQzUV3/yMj/8AXWP+S1Jqn/IS/wCAH/0M0DJNJ/5Cq/8AXJ/5rWVq3yeNI29ZYj/KtXSf+Qqn/XJ/5rWV4h+TxVC3/XM/rQI3Nd/5F64/3/8A2pWdef8AIK0r/ef+taOu/wDIvXH+/wD+1Kzrz/kE6X/vP/I0AXtUnSNkjLYd1cqPXCn/ABrCsm2tGwPI3f8AoC1q6wcajan/AKZT/wDoFUJo1t7j5Adu5zgfwjaooAnuSd8u47juXk9+la/hy6kutNbzmLvFKyFick9x/Ose9jMLOpO7OxgfUcVd8KuAL9Ownz+Y/wDrUAJq1wZbwqM7Y8r0P+FVGDyp5caszELhR3wwNPvyP7QnHH3z/HinWcvll2UnPl9jg9aAI4o2itrVZFKt9qDY+u2pInAe1LEAYnHPuTinNG85tEiG5vPDHnoAFJP6U67W2SOG0hJcpdRl39d2TxQBGpxaaJ/10Wp1/wCRy/7Zf+y1ThlD2+jJn5lmGfzOKtp/yOZ/65f+y0AQXX/IyP8A9dY/5LUuqf8AISH+4f8A0M1Fd/8AIyP/ANdY/wCS1Lqn/ISH+4f/AEM0DH6T/wAhVf8Ark/81rL8WDZr1u//AEzU/wDjxrU0n/kKr/1yb+a1m+NBt1G1f/pn/I0CNnXP+Ren/wB//wBqVnXn/II0v/ef+Rq/rDB/DMrqchiCP++6oXn/ACCNL/3n/kaAJtX/AOQha/8AXKf/ANAqtcqGuWB6En/0KOrOr/8AIQtf+uU//oFV5/8Aj5P1P/oUdAEU2Qzg7iFdBntyFP4daveGiFuNR3HAEy5z261ABlrgHBBZeD/uLVfVplttOuUTh7h1BPcgDPNAE93zezsSABISTgdKqTM7WUzKzJhOx5OOak0x1urJHdizIQhU9MgdffoKbcn/AEOb/rmf5UAarottDCsPylzHuPdso+c1n2/SH/rra/8AoBrRu+lv9Yv/AEB6zrf7sP8A11tf/QDQBHafe0z/AK7L/M1oof8Aisz/ANc//Zaz7X72l/8AXZf5mr0Rz4zP+6f/AEGgCO7/AORkf/rrH/Jak1T/AJCQ/wBw/wDoZqO7/wCRkf8A67R/yWpNU/5CQ/3D/wChmgZJpP8AyFV/65N/NaoeN1/fWbeqsP1FX9J/5Cq/9cn/AJrVXxwvyWbe7j+VAixctu8EI3/TNP8A0IVWvP8AkEaV/vP/ACNSb9/gNT6KB+T1Hef8gjSv95/5GgCfVv8AkI2v/XKb/wBAqtP/AMfJ+p/9CjqfVz/xMLT/AK5Tf+g1VuCTdlQCSd2APqn+FAEyn95P/vJ/6AtZutuCuwkgLyPcnH9Af0rT8plmcSkIXIYpnkYUD+lZ/iKSNYIIFXDZL/h0/wA/SgA0dtluqDLK53A46EZBH8j+NSXB/wBEm/65n+VJ4ekSa0ltyuXRt4+h/wA/rU1xbNJFLHb/ADtsI2E4PTt60AaN30g+sX/oD1Qt/uQ/9dbX/wBANXbl1cQlWBw0QOOx2PxVG2+7D/11tf8A0A0AMtfvaZ/12X+Zq7D/AMjmf90/+g1RtfvaX/12X+Zq7D/yObfQ/wDoNAxl3/yMj/8AXaP+S1Lqn/ISH+4f/QzUV3/yMj/9do/5LUuqf8hIf7h/9DNAEmk/8hVf+uTfzWofGy/6FbN6SEfp/wDWqbSf+Qqv/XJv5rR4zXOkRN6TD+RoEVE+XwO6egVvwLD+uaLv/kEaV/vN/I1XurmOLwnaoJV8yVNjR55I3ZB/DH60lnZ3ut20KzkW2nwAkORgt6n/ADxQBYu7gajq0MdiDOYlcOVHA3DHWpwn2ZmZWVrg/eZSG2n6nAH0A/GpmQ29uLbShBDB/E7SDdJ+uajVbpfvSWmPabH/ALNQAlpalpdzbiSck8/0zUWs6XbzxPcBZDOAMnceg9sVeSXC4xAze1yv9QagmhuZEYRQvlgRkXEZH5YFAEek6VBbIk2x/PIOSGOCD2IxUk9nKk2+JXyDn7jH/wBlpLeC8jREe1HygDLXEZ/TaasvGGX97BEPcyRf/E0AVJ4XuFXLNbTqcq7I2wn/AGsjjr71RDyWk8VveRmCTzoNpJyrKgIJB/Krr2gcnaLfb7XCD+S1LFCPI+y3McM1qf4DMpKe6nNAGZan59L/AOuq/wAzV6D/AJHRvof/AEGqlzplxpssV3ZsbyyikD7AfmTHan6Vdx33ioXERO11J2nqPloAlu/+Rjf/AK6x/wAlqbVP+Ql/wA/+hmobz/kY5P8ArtH/ACWpdT/5CX/AD/6GaAH6W6pqQd2CqsLkknAHK1n+I9bi1JBY2SNKN4O8DqfQDvWXGt7rd2IYE49B91R6k11mm6PbaNGHCm4u2HUDk+y+g96AM3SfDSQILrVRk/wwDnn39T7VoXsd/duohl+zRJ91FRs/j8tVru11q9uvNJlt1HCrHIo2j8+TTo9J1D/lrqOoD/dYH/2agBRZat21Ob/v2f8A4mpI7LWgcrqSt7SJ/wDWoGmSj72qamv4E/yqQaPcOuY9ZvfxNABJDq+PnttNn+oI/nVSWK6X/W+H7V/dMH+QqSTSNYTmHVXk9mcr/jVZx4htupnceq7H/wDr0ACiVjhfDcOf9pT/AFFWYbe9yCmh2EXuzD+grOOrauWKGWcMOoFuM/ypyf25Oco18c+uEH64oA2ntNVnUA3VvaY7QIW/nVWaz1dM7b+ZgP4jsH6YNRRaXrknMmoPAPeXcfyA/rVwaRdIm6TWbw4HO0f05oAq2y6tBOJDcNKO6OvDfktJf6HHfE3Wn5tLxeSnKgn19vrUVytwikQXWryP2LKVX+WarI2qpKsnm3rFTkBlJH8qAKkV5PFqgXVNyTeYu5mGOmOv4DrWvqDB9QDKQymMkEHIPzmrckNvr1sIr2B4LhR8rFSCPoT1+lc1dWt9oNwBKPMhPCt/CR/Q0Af/2Q==" } -] \ No newline at end of file +] diff --git a/html/locale_de.json b/html/locale_de.json index e515baca2..45df9ae0e 100644 --- a/html/locale_de.json +++ b/html/locale_de.json @@ -7553,4 +7553,4 @@ "hint": "Zoe-Tiefe" } ] -} \ No newline at end of file +} diff --git a/html/locale_en.json b/html/locale_en.json index f7bdaae06..60295d496 100644 --- a/html/locale_en.json +++ b/html/locale_en.json @@ -19,7 +19,7 @@ {"id":"","label":"๐Ÿ–ผ๏ธ","localized":"","hint":"Show preview"}, {"id":"","label":"โ™ป","localized":"","hint":"Interrogate image"}, {"id":"","label":"โ†ถ","localized":"","hint":"Apply selected style to prompt"}, - {"id":"","label":"โ†ท","localized":"","hint":"Save current prompt to style"} + {"id":"","label":"โ†ท","localized":"","hint":"Save current prompt to style"} ], "main": [ {"id":"","label":"Prompt","localized":"","hint":"Describe image you want to generate"}, diff --git a/html/locale_es.json b/html/locale_es.json index 20bc84cd8..8714e6434 100644 --- a/html/locale_es.json +++ b/html/locale_es.json @@ -7553,4 +7553,4 @@ "hint": "profundidad zoe" } ] -} \ No newline at end of file +} diff --git a/html/locale_fr.json b/html/locale_fr.json index d5cc393c9..7797a34f3 100644 --- a/html/locale_fr.json +++ b/html/locale_fr.json @@ -7553,4 +7553,4 @@ "hint": "Profondeur ZOE" } ] -} \ No newline at end of file +} diff --git a/html/locale_hr.json b/html/locale_hr.json index 4cef6472c..b91554b28 100644 --- a/html/locale_hr.json +++ b/html/locale_hr.json @@ -7553,4 +7553,4 @@ "hint": "zoe dubina" } ] -} \ No newline at end of file +} diff --git a/html/locale_it.json b/html/locale_it.json index c2fd7b2c9..a30723b48 100644 --- a/html/locale_it.json +++ b/html/locale_it.json @@ -7553,4 +7553,4 @@ "hint": "Profonditร  ZOE" } ] -} \ No newline at end of file +} diff --git a/html/locale_ja.json b/html/locale_ja.json index e828daf5a..4b61b9b90 100644 --- a/html/locale_ja.json +++ b/html/locale_ja.json @@ -7553,4 +7553,4 @@ "hint": "Zoeๆทฑๅบฆ" } ] -} \ No newline at end of file +} diff --git a/html/locale_ko.json b/html/locale_ko.json index 09b474ebf..60dc35ed8 100644 --- a/html/locale_ko.json +++ b/html/locale_ko.json @@ -7553,4 +7553,4 @@ "hint": "Zoe ๊นŠ์ด" } ] -} \ No newline at end of file +} diff --git a/html/locale_pt.json b/html/locale_pt.json index 3af95f79b..a2551d8f9 100644 --- a/html/locale_pt.json +++ b/html/locale_pt.json @@ -7553,4 +7553,4 @@ "hint": "Profundidade ZOE" } ] -} \ No newline at end of file +} diff --git a/html/locale_ru.json b/html/locale_ru.json index 80cb478e6..a6ddbb8b7 100644 --- a/html/locale_ru.json +++ b/html/locale_ru.json @@ -7553,4 +7553,4 @@ "hint": "Zoe ะณะปัƒะฑะธะฝะฐ" } ] -} \ No newline at end of file +} diff --git a/html/locale_zh.json b/html/locale_zh.json index 4664bb3f5..c68a48620 100644 --- a/html/locale_zh.json +++ b/html/locale_zh.json @@ -7553,4 +7553,4 @@ "hint": "ZOEๆทฑๅบฆ" } ] -} \ No newline at end of file +} diff --git a/html/override_en.json b/html/override_en.json index 375690325..0d4f101c7 100644 --- a/html/override_en.json +++ b/html/override_en.json @@ -1,2 +1,2 @@ -[ -] \ No newline at end of file +[ +] diff --git a/html/override_hr.json b/html/override_hr.json index e6830e3cc..92fef58d5 100644 --- a/html/override_hr.json +++ b/html/override_hr.json @@ -1,3 +1,3 @@ [ { "id": "", "label": "Reprocess", "localized": "Ponovi", "hint": "Ponovno obradite prethodne generacije koristeฤ‡i razliฤite parametre" } -] \ No newline at end of file +] diff --git a/html/override_ko.json b/html/override_ko.json index e4ff1b898..02dea5293 100644 --- a/html/override_ko.json +++ b/html/override_ko.json @@ -1 +1 @@ -[{"id":"","label":"๐ŸŽฒ๏ธ","localized":"","hint":"๋ฌด์ž‘์œ„ ์‹œ๋“œ ์‚ฌ์šฉ"},{"id":"","label":"๐Ÿ”„","localized":"","hint":"์ดˆ๊ธฐํ™”"},{"id":"","label":"๐Ÿ”Ž๏ธŽ","localized":"","hint":"๋ˆ„๋ฝ๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ CivitAI์—์„œ ๊ฒ€์ƒ‰"},{"id":"","label":"Prompt","localized":"ํ”„๋กฌํ”„ํŠธ","hint":"์ƒ์„ฑํ•˜๊ณ  ์‹ถ์€ ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์„ธ์š”"},{"id":"","label":"Negative prompt","localized":"๋„ค๊ฑฐํ‹ฐ๋ธŒ ํ”„๋กฌํ”„ํŠธ","hint":"์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€์—์„œ ๋ณด๊ณ  ์‹ถ์ง€ ์•Š์€ ๊ฒƒ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์„ธ์š”"},{"id":"","label":"Interrogate","localized":"","hint":"์ด๋ฏธ์ง€ ์„ค๋ช…์„ ์–ป๊ธฐ ์œ„ํ•ด Interrogate ์‹คํ–‰"},{"id":"","label":"Agent Scheduler","localized":"์ž‘์—… ์Šค์ผ€์ค„๋Ÿฌ","hint":"์ƒ์„ฑ ์š”์ฒญ์„ ๋Œ€๊ธฐ์—ด์— ๋„ฃ๊ณ  ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰"},{"id":"","label":"System","localized":"์‹œ์Šคํ…œ ์„ค์ •","hint":"์‹œ์Šคํ…œ ์„ค์ • ๋ฐ ์ •๋ณด"},{"id":"","label":"Generate","localized":"์ƒ์„ฑ","hint":"์ž‘์—… ์‹œ์ž‘"},{"id":"","label":"Stop","localized":"์ค‘์ง€","hint":"์ž‘์—… ์ค‘์ง€"},{"id":"","label":"Skip","localized":"๊ฑด๋„ˆ๋›ฐ๊ธฐ","hint":"ํ˜„์žฌ ์ž‘์—…์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋‹ค์Œ ์ž‘์—… ์‹œ์ž‘"},{"id":"","label":"Pause","localized":"์ผ์‹œ ์ค‘์ง€","hint":"์ž‘์—… ์ผ์‹œ ์ค‘์ง€"},{"id":"","label":"Restore","localized":"๋ณต์›","hint":"ํ˜„์žฌ ํ”„๋กฌํ”„ํŠธ ๋˜๋Š” ๋งˆ์ง€๋ง‰์œผ๋กœ ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ณต์›"},{"id":"","label":"Default strength","localized":"๊ธฐ๋ณธ ๊ฐ•๋„","hint":"LoRA์™€ ๊ฐ™์€ ์ถ”๊ฐ€ ๋„คํŠธ์›Œํฌ๋ฅผ ํ”„๋กฌํ”„ํŠธ์— ์ถ”๊ฐ€ํ•  ๋•Œ ์‚ฌ์šฉ๋  ๊ธฐ๋ณธ ๊ฐ•๋„"},{"id":"","label":"Embedding","localized":"์ž„๋ฒ ๋”ฉ","hint":"Textual inversion embedding. ํŠน์ • ์ฃผ์ œ์— ๋Œ€ํ•ด ํ›ˆ๋ จ๋œ ๋ณด์กฐ ๋ชจ๋ธ"},{"id":"","label":"Hypernetwork","localized":"ํ•˜์ดํผ ๋„คํŠธ์›Œํฌ","hint":"๋กœ๋“œ๋œ ๋ชจ๋ธ์˜ ๋™์ž‘์„ ์ˆ˜์ •ํ•˜๋Š” ๋ณด์กฐ ๋ชจ๋ธ"},{"id":"","label":"VAE","localized":"VAE","hint":"Variational Auto Encoder. ์ƒ์„ฑ ๋งˆ์ง€๋ง‰์— ์ด๋ฏธ์ง€ ๋””์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋ธ"},{"id":"","label":"Corrections","localized":"๋ณด์ •","hint":"์ƒ์„ฑ ํ”„๋กœ์„ธ์Šค ๋™์•ˆ ์ด๋ฏธ์ง€ ์ƒ‰์ƒ/์„ ๋ช…๋„/๋ฐ๊ธฐ๋ฅผ ๋ณด์ •ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Refine","localized":"๋ฆฌํŒŒ์ด๋„ˆ","hint":"์—…์Šค์ผ€์ผ, HiRes ๋ฐ ๋ฆฌํŒŒ์ด๋„ˆ์™€ ๊ด€๋ จ๋œ ์„ค์ •"},{"id":"","label":"โž  text","localized":"โž  ํ…์ŠคํŠธ","hint":"์ด๋ฏธ์ง€๋ฅผ ํ…์ŠคํŠธ ํƒญ์œผ๋กœ ์ „์†ก"},{"id":"","label":"โž  image","localized":"โž  ์ด๋ฏธ์ง€","hint":"์ด๋ฏธ์ง€๋ฅผ ์ด๋ฏธ์ง€ ํƒญ์œผ๋กœ ์ „์†ก"},{"id":"","label":"โž  inpaint","localized":"โž  ์ธํŽ˜์ธํŠธ","hint":"์ด๋ฏธ์ง€๋ฅผ ์ธํŽ˜์ธํŠธ ํƒญ์œผ๋กœ ์ „์†ก"},{"id":"","label":"โž  sketch","localized":"โž  ์Šค์ผ€์น˜","hint":"์ด๋ฏธ์ง€๋ฅผ ์Šค์ผ€์น˜ ํƒญ์œผ๋กœ ์ „์†ก"},{"id":"","label":"โž  composite","localized":"โž  ํ•ฉ์„ฑ","hint":"์ด๋ฏธ์ง€๋ฅผ ํ•ฉ์„ฑ ํƒญ์œผ๋กœ ์ „์†ก"},{"id":"","label":"Sampling method","localized":"์ƒ˜ํ”Œ๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜","hint":"์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค."},{"id":"","label":"Steps","localized":"์ƒ˜ํ”Œ๋ง ์Šคํƒญ ์ˆ˜","hint":"์ดˆ๊ธฐ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ฐœ์„ ํ•˜๋Š” ํšŸ์ˆ˜์ž…๋‹ˆ๋‹ค. ์Šคํƒญ ์ˆ˜๋ฅผ ๋†’์ผ ์ˆ˜๋ก ์ƒ์„ฑ ์‹œ๊ฐ„์ด ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๋ชจ๋ธ์— ๋”ฐ๋ผ ๋‹ค๋ฅด์ง€๋งŒ, ์Šคํƒญ ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋‚ฎ์œผ๋ฉด ๊ฒฐ๊ณผ๋ฌผ์˜ ํ’ˆ์งˆ์ด ์ข‹์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."},{"id":"","label":"full quality","localized":"์ตœ๊ณ  ํ’ˆ์งˆ VAE ์‚ฌ์šฉ","hint":"์ตœ๊ณ  ํ’ˆ์งˆ VAE๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ๋„๋ฉด VAE ์ฒ˜๋ฆฌ ๋‹จ๊ณ„์—์„œ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋นจ๋ผ์ง€๊ณ  VRAM ์‚ฌ์šฉ๋Ÿ‰์ด ๋‚ฎ์•„์ง€์ง€๋งŒ ๊ฒฐ๊ณผ๋ฌผ์˜ ํ’ˆ์งˆ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค."},{"id":"","label":"HDR Clamp","localized":"HDR ํด๋žจํ”„","hint":"ํ‰๊ท ์—์„œ ํฌ๊ฒŒ ๋ฒ—์–ด๋‚˜๋Š” ๊ฐ’์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ, ๊ฐ€์ด๋˜์Šค ์Šค์ผ€์ผ ๊ฐ’์„ ๋†’๊ฒŒ ์„ค์ •ํ–ˆ์„ ๋•Œ ์ƒ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์ƒ์„ฑ ์ดˆ๊ธฐ์— ์ž˜๋ชป๋œ ๊ฐ’์„ ์ฐพ๊ณ , ๋ฒ”์œ„(๊ฒฝ๊ณ„) ๋ฐ ์ž„๊ณ„๊ฐ’ ์„ค์ •์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ˆ˜ํ•™์  ์กฐ์ •์„ ์ ์šฉํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ ๊ฐ’์— ์›ํ•˜๋Š” ๋ฒ”์œ„๋ฅผ ์„ค์ •ํ•˜๊ณ  ์ž„๊ณ„๊ฐ’์„ ์กฐ์ •ํ•˜์—ฌ ์ž˜๋ชป๋œ ๊ฐ’์„ ํ•ด๋‹น ๋ฒ”์œ„๋กœ ๋‹ค์‹œ ์กฐ์ •ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Enable refine pass","localized":"๋ฆฌํŒŒ์ด๋„ˆ ํ™œ์„ฑํ™”","hint":"์ด๋ฏธ์ง€-์ด๋ฏธ์ง€์™€ ์œ ์‚ฌํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์ข… ์ด๋ฏธ์ง€๋ฅผ ์—…์Šค์ผ€์ผํ•˜๊ฑฐ๋‚˜ ๋””ํ…Œ์ผ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋ชจ๋ธ๊ณผ๋Š” ๋ณ„๊ฐœ์˜ ๋ฆฌํŒŒ์ด๋„ˆ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€ ๋””ํ…Œ์ผ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค."},{"id":"","label":"enable detailer pass","localized":"๋””ํ…Œ์ผ๋Ÿฌ ํ™œ์„ฑํ™”","hint":"์–ผ๊ตด๊ณผ ๊ฐ™์€ ํŠน์ • ๋ถ€์œ„๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ๋ณ„๋„์˜ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ๋ถ€์œ„๋งŒ์„ ๋” ๋†’์€ ํ•ด์ƒ๋„๋กœ ๋‹ค์‹œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Force Hires","localized":"Hires ๊ฐ•์ œ ํ™œ์„ฑํ™”","hint":"Latent ์—…์Šค์ผ€์ผ๋Ÿฌ๊ฐ€ ์„ ํƒ๋˜๋ฉด Hires๊ฐ€ ์ž๋™์œผ๋กœ ํ™œ์„ฑํ™”๋˜์ง€๋งŒ, ๊ทธ ์™ธ์˜ ์—…์Šค์ผ€์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด ์—…์Šค์ผ€์ผ๋Ÿฌ ์ข…๋ฅ˜์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ํ•ญ์ƒ Hires๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Refine sampler","localized":"๋ฆฌํŒŒ์ด๋„ˆ ์ƒ˜ํ”Œ๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜","hint":"๋ฆฌํŒŒ์ด๋„ˆ ์ž‘์—… ์‹œ, ๊ธฐ๋ณธ ์ƒ˜ํ”Œ๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์ด ์ƒ˜ํ”Œ๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋Œ€์‹  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Refiner start","localized":"๋ฆฌํŒŒ์ด๋„ˆ ์‹œ์ž‘","hint":"๊ธฐ๋ณธ ๋ชจ๋ธ์ด ์ด๋งŒํผ ์™„๋ฃŒ๋˜๋ฉด ๋ฆฌํŒŒ์ด๋„ˆ ํŒจ์Šค๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. (0๋ณด๋‹ค ํฌ๊ณ  1๋ณด๋‹ค ์ž‘๊ฒŒ ์„ค์ •ํ•˜์—ฌ ์ „์ฒด ๊ธฐ๋ณธ ๋ชจ๋ธ ์‹คํ–‰ ํ›„์— ์‹คํ–‰)"},{"id":"","label":"Refiner steps","localized":"๋ฆฌํŒŒ์ด๋„ˆ ์ƒ˜ํ”Œ๋ง ์Šคํƒญ ์ˆ˜","hint":"๋ฆฌํŒŒ์ด๋„ˆ ์ž‘์—…์— ์‚ฌ์šฉํ•  ์ƒ˜ํ”Œ๋ง ์Šคํƒญ ์ˆ˜์ž…๋‹ˆ๋‹ค."},{"id":"","label":"Refine guidance","localized":"๋ฆฌํŒŒ์ด๋„ˆ ๊ฐ€์ด๋˜์Šค ์Šค์ผ€์ผ","hint":"๋ฆฌํŒŒ์ด๋„ˆ ์ž‘์—…์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ€์ด๋˜์Šค ์Šค์ผ€์ผ์ž…๋‹ˆ๋‹ค."},{"id":"","label":"Attention guidance","localized":"์–ดํ…์…˜ ๊ฐ€์ด๋˜์Šค ์Šค์ผ€์ผ","hint":"PAG(Perturbed-Attention Guidance)์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ€์ด๋˜์Šค ์Šค์ผ€์ผ์ž…๋‹ˆ๋‹ค."},{"id":"","label":"Adaptive scaling","localized":"์ ์‘ํ˜• ์Šค์ผ€์ผ๋ง","hint":"์–ดํ…์…˜ ๊ฐ€์ด๋˜์Šค ์Šค์ผ€์ผ์— ๋Œ€ํ•œ ์ ์‘ํ˜• ์ˆ˜์ •์ž์ž…๋‹ˆ๋‹ค."},{"id":"","label":"Rescale guidance","localized":"๊ฐ€์ด๋˜์Šค ์žฌ์กฐ์ •","hint":"๋…ธ์ถœ ๊ณผ๋‹ค๋œ ์ด๋ฏธ์ง€๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด CFG ์ƒ์„ฑ ๋…ธ์ด์ฆˆ๋ฅผ ์žฌ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Refine Prompt","localized":"๋ฆฌํŒŒ์ด๋„ˆ ํ”„๋กฌํ”„ํŠธ","hint":"๊ธฐ๋ณธ ๋ชจ๋ธ์˜ ๋‘ ๋ฒˆ์งธ ์ธ์ฝ”๋”(์žˆ๋Š” ๊ฒฝ์šฐ)์™€ ๋ฆฌํŒŒ์ด๋„ˆ ํŒจ์Šค(ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ) ๋ชจ๋‘์— ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กฌํ”„ํŠธ์ž…๋‹ˆ๋‹ค."},{"id":"","label":"Refine negative prompt","localized":"๋ฆฌํŒŒ์ด๋„ˆ ๋„ค๊ฑฐํ‹ฐ๋ธŒ ํ”„๋กฌํ”„ํŠธ","hint":"๊ธฐ๋ณธ ๋ชจ๋ธ์˜ ๋‘ ๋ฒˆ์งธ ์ธ์ฝ”๋”(์žˆ๋Š” ๊ฒฝ์šฐ)์™€ ๋ฆฌํŒŒ์ด๋„ˆ ํŒจ์Šค(ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ) ๋ชจ๋‘์— ์‚ฌ์šฉ๋˜๋Š” ๋„ค๊ฑฐํ‹ฐ๋ธŒ ํ”„๋กฌํ”„ํŠธ์ž…๋‹ˆ๋‹ค."},{"id":"","label":"Batch count","localized":"๋ฐฐ์น˜ ์ˆ˜","hint":"์ƒ์„ฑํ•  ์ด๋ฏธ์ง€ ๋ฐฐ์น˜ ์ˆ˜์ž…๋‹ˆ๋‹ค. (์ƒ์„ฑ ์„ฑ๋Šฅ ๋˜๋Š” VRAM ์‚ฌ์šฉ๋Ÿ‰์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Œ)"},{"id":"","label":"Batch size","localized":"๋ฐฐ์น˜ ํฌ๊ธฐ","hint":"๋‹จ์ผ ๋ฐฐ์น˜์—์„œ ์ƒ์„ฑํ•  ์ด๋ฏธ์ง€ ์ˆ˜์ž…๋‹ˆ๋‹ค. (VRAM ์‚ฌ์šฉ๋Ÿ‰์ด ๋†’์•„์ง€๋Š” ๋Œ€์‹  ์ƒ์„ฑ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋จ)"},{"id":"","label":"guidance scale","localized":"๊ฐ€์ด๋˜์Šค ์Šค์ผ€์ผ","hint":"Classifier Free Guidance ์Šค์ผ€์ผ:์ด๋ฏธ์ง€๊ฐ€ ํ”„๋กฌํ”„ํŠธ์— ์–ผ๋งˆ๋‚˜ ๊ฐ•ํ•˜๊ฒŒ ๋ถ€ํ•ฉํ•ด์•ผ ํ•˜๋Š”์ง€์ž…๋‹ˆ๋‹ค. ๊ฐ’์ด ๋‚ฎ์„์ˆ˜๋ก ๋” ์ฐฝ์˜์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ฐ’์ด ๋†’์„์ˆ˜๋ก ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋” ์—„๊ฒฉํ•˜๊ฒŒ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. 5-10 ์‚ฌ์ด์˜ ๊ฐ’์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Guidance End","localized":"๊ฐ€์ด๋˜์Šค ์ข…๋ฃŒ ์‹œ์ ","hint":"CFG ๋ฐ PAG ํšจ๊ณผ๊ฐ€ ๋๋‚˜๋Š” ์‹œ์ ์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์„ 1๋กœ ์„ค์ •ํ•˜๋ฉด ๋งˆ์ง€๋ง‰๊นŒ์ง€ ๊ฐ€์ด๋˜์Šค ํšจ๊ณผ๋ฅผ ์œ ์ง€ํ•˜๊ณ , 0.5๋กœ ์„ค์ •ํ•˜๋ฉด ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋‹จ๊ณ„์˜ 50% ์‹œ์ ์—์„œ ๊ฐ€์ด๋˜์Šค ํšจ๊ณผ๋ฅผ ๋๋ƒ…๋‹ˆ๋‹ค."},{"id":"","label":"Variation strength","localized":"๋ณ€ํ˜• ๊ฐ•๋„","hint":"์ƒ์„ฑํ•  ๋ณ€ํ˜•์˜ ๊ฐ•๋„์ž…๋‹ˆ๋‹ค. 0์—์„œ๋Š” ์•„๋ฌด๋Ÿฐ ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. 1์—์„œ๋Š” ๋ณ€ํ˜• ์‹œ๋“œ๊ฐ€ ์žˆ๋Š” ์™„์ „ํ•œ ์‚ฌ์ง„์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (a๋กœ ๋๋‚˜๋Š” ancestral ์ƒ˜ํ”Œ๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์—๋Š” ์ ์šฉ๋˜์ง€ ์•Š์Œ)"},{"id":"","label":"Extension GIT repository URL","localized":"ํ™•์žฅ Git ๋ ˆํฌ์ง€ํ† ๋ฆฌ URL","hint":"GitHub์˜ ํ™•์žฅ ๋ ˆํฌ์ง€ํ† ๋ฆฌ URL์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Specific branch name","localized":"ํŠน์ • ๋ธŒ๋žœ์น˜ ์ด๋ฆ„","hint":"ํ™•์žฅ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ณต๋ฐฑ์ธ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Local directory name","localized":"๋กœ์ปฌ ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„","hint":"ํ™•์žฅ์„ ์„ค์น˜ํ•  ๋””๋ ‰ํ† ๋ฆฌ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ๊ณต๋ฐฑ์ธ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Refresh extension list","localized":"ํ™•์žฅ ๋ชฉ๋ก ์ƒˆ๋กœ๊ณ ์นจ","hint":"์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ™•์žฅ์˜ ๋ชฉ๋ก์„ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค."},{"id":"","label":"Update all installed","localized":"์„ค์น˜๋œ ๋ชจ๋“  ํ™•์žฅ ์—…๋ฐ์ดํŠธ","hint":"์„ค์น˜๋œ ๋ชจ๋“  ํ™•์žฅ์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Apply changes","localized":"๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ ์šฉ","hint":"๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๊ณ  ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"uninstall","localized":"์ œ๊ฑฐ","hint":"์ด ํ™•์žฅ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"User interface","localized":"์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค","hint":"์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋ณธ ์„ค์ •์„ ๊ฒ€ํ† ํ•˜๊ณ  ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Set ui defaults","localized":"UI ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •","hint":"ํ˜„์žฌ ๊ฐ’์„ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Models & Networks","localized":"๋ชจ๋ธ ๋ฐ ๋„คํŠธ์›Œํฌ","hint":"์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ชจ๋ธ ๋ฐ ๋„คํŠธ์›Œํฌ ๋ชฉ๋ก์„ ๋ด…๋‹ˆ๋‹ค."},{"id":"","label":"Restore UI defaults","localized":"UI ๊ธฐ๋ณธ๊ฐ’ ๋ณต์›","hint":"๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ฐ’์„ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"detailer classes","localized":"๋””ํ…Œ์ผ๋Ÿฌ ํด๋ž˜์Šค","hint":"์„ ํƒํ•œ ๋””ํ…Œ์ผ๋Ÿฌ ๋ชจ๋ธ์ด ๋‹ค์ค‘ ํด๋ž˜์Šค ๋ชจ๋ธ์ธ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ํŠน์ • ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"detailer models","localized":"๋””ํ…Œ์ผ๋Ÿฌ ๋ชจ๋ธ","hint":"์‚ฌ์šฉํ•  ๋””ํ…Œ์ผ๋Ÿฌ ๋ชจ๋ธ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"detailer negative prompt","localized":"๋””ํ…Œ์ผ๋Ÿฌ ๋„ค๊ฑฐํ‹ฐ๋ธŒ ํ”„๋กฌํ”„ํŠธ","hint":"๋””ํ…Œ์ผ๋Ÿฌ์— ๋Œ€ํ•œ ๋ณ„๋„์˜ ๋„ค๊ฑฐํ‹ฐ๋ธŒ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ž€์ด ๊ณต๋ฐฑ์ธ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ๋„ค๊ฑฐํ‹ฐ๋ธŒ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"detailer prompt","localized":"๋””ํ…Œ์ผ๋Ÿฌ ํ”„๋กฌํ”„ํŠธ","hint":"๋””ํ…Œ์ผ๋Ÿฌ์— ๋Œ€ํ•˜์—ฌ ๋ณ„๋„์˜ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ž€์ด ๊ณต๋ฐฑ์ธ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"detailer steps","localized":"๋””ํ…Œ์ผ๋Ÿฌ ์Šคํƒญ ์ˆ˜","hint":"๋””ํ…Œ์ผ๋Ÿฌ ์ž‘์—…์„ ์‹คํ–‰ํ•  ์Šคํƒญ ์ˆ˜"},{"id":"","label":"detailer use model augment","localized":"๋””ํ…Œ์ผ๋Ÿฌ ๋ชจ๋ธ augment ์‚ฌ์šฉ","hint":"๋””ํ…Œ์ผ๋Ÿฌ ๊ฐ์ง€ ๋ชจ๋ธ์„ ๋” ๋†’์€ ์ •๋ฐ€๋„๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"edge blur","localized":"๊ฐ€์žฅ์ž๋ฆฌ ํ๋ฆผ","hint":"๋งˆ์Šคํฌ๋œ ์˜์—ญ์˜ ๊ฐ€์žฅ์ž๋ฆฌ๋ฅผ ํ๋ฆฌ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์œ„๋Š” %์ด๊ณ  ์ตœ๋Œ“๊ฐ’์€ 100%์ž…๋‹ˆ๋‹ค."},{"id":"","label":"edge padding","localized":"๊ฐ€์žฅ์ž๋ฆฌ ํŒจ๋”ฉ","hint":"๋งˆ์Šคํฌ๋œ ์˜์—ญ์˜ ๊ฐ€์žฅ์ž๋ฆฌ๋ฅผ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์œ„๋Š” %์ด๊ณ  ์ตœ๋Œ“๊ฐ’์€ 100%์ž…๋‹ˆ๋‹ค."},{"id":"","label":"min confidence","localized":"์ตœ์†Œ ์‹ ๋ขฐ๋„","hint":"๋””ํ…Œ์ผ๋Ÿฌ์— ์˜ํ•ด ๊ฐ์ง€๋œ ํ•ญ๋ชฉ์˜ ์ตœ์†Œ ์‹ ๋ขฐ๋„"},{"id":"","label":"ReBasin","localized":"","hint":"๋‘ ๋ชจ๋ธ์—์„œ ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ˆœ์—ด๊ณผ ํ•จ๊ป˜ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ณ‘ํ•ฉ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Number of ReBasin Iterations","localized":"ReBasin ๋ฐ˜๋ณต ํšŸ์ˆ˜","hint":"์ €์žฅํ•˜๊ธฐ ์ „์— ๋ชจ๋ธ์„ ๋ณ‘ํ•ฉํ•˜๊ณ  ์ˆœ์—ดํ•˜๋Š” ํšŸ์ˆ˜"},{"id":"","label":"cpu","localized":"CPU","hint":"CPU์™€ RAM๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋А๋ฆฌ์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๊ฐ€์žฅ ์ ์Šต๋‹ˆ๋‹ค."},{"id":"","label":"shuffle","localized":"์…”ํ”Œ","hint":"์ „์ฒด ๋ชจ๋ธ์€ RAM์— ๋กœ๋“œํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฐ’๋งŒ VRAM์œผ๋กœ ์˜ฎ๊ธด ํ›„ ์—ฐ์‚ฐํ•ฉ๋‹ˆ๋‹ค. CPU์™€ RAM๋งŒ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์— ๋น„ํ•ด ์กฐ๊ธˆ ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค. SDXL ๋ณ‘ํ•ฉ์— ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Preset Interpolation Ratio","localized":"์‚ฌ์ „ ์„ค์ • ๋ณด๊ฐ„ ๋น„์œจ","hint":"๋‘ ๊ฐœ์˜ ์‚ฌ์ „ ์„ค์ •์ด ์„ ํƒ๋œ ๊ฒฝ์šฐ ๊ทธ ์‚ฌ์ด๋ฅผ ๋ณด๊ฐ„ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"active ip adapters","localized":"ํ™œ์„ฑ IP ์–ด๋Œ‘ํ„ฐ ๊ฐœ์ˆ˜","hint":"ํ™œ์„ฑ IP ์–ด๋Œ‘ํ„ฐ ๊ฐœ์ˆ˜"},{"id":"","label":"unload adapter","localized":"์–ด๋Œ‘ํ„ฐ ์–ธ๋กœ๋“œ","hint":"์ƒ์„ฑ์ด ๋๋‚˜๋ฉด ์ฆ‰์‹œ IP ์–ด๋Œ‘ํ„ฐ๋ฅผ ์–ธ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋‹ค์Œ ์ƒ์„ฑ์—์„œ IP ์–ด๋Œ‘ํ„ฐ๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋กœ๋“œ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"crop to portrait","localized":"์„ธ๋กœ๋กœ ์ž๋ฅด๊ธฐ","hint":"IP ์–ด๋Œ‘ํ„ฐ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์ž…๋ ฅ ์ด๋ฏธ์ง€๋ฅผ ์„ธ๋กœ ์ „์šฉ์œผ๋กœ ์ž๋ฆ…๋‹ˆ๋‹ค."},{"id":"","label":"layer options","localized":"๋ ˆ์ด์–ด ์˜ต์…˜","hint":"IP ์–ด๋Œ‘ํ„ฐ ๊ณ ๊ธ‰ ๋ ˆ์ด์–ด ์˜ต์…˜์„ ์ˆ˜๋™์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"X values","localized":"X ๊ฐ’","hint":"์‰ผํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ X์ถ•์— ๋Œ€ํ•œ ๊ฐ’์„ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Y values","localized":"Y ๊ฐ’","hint":"์‰ผํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Y์ถ•์— ๋Œ€ํ•œ ๊ฐ’์„ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Z values","localized":"Z ๊ฐ’","hint":"์‰ผํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Z์ถ•์— ๋Œ€ํ•œ ๊ฐ’์„ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Tile overlap","localized":"ํƒ€์ผ ์ค‘๋ณต","hint":"์—…์Šค์ผ€์ผ์„ ํ•  ๋•Œ ๊ฐ ํƒ€์ผ ์‚ฌ์ด์— ๊ฒน์น˜๊ฒŒ ํ•  ํ”ฝ์…€ ์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ฒน์น˜๋Š” ํ”ฝ์…€์˜ ์ˆ˜๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ๋ชจ๋“  ํƒ€์ผ์ด ํ•˜๋‚˜์˜ ๊ทธ๋ฆผ์œผ๋กœ ๋‹ค์‹œ ๋ณ‘ํ•ฉ๋œ ์ดํ›„ ํƒ€์ผ ๊ฐ„ ์ด์Œ์ƒˆ๊ฐ€ ๋ˆˆ์— ๋œ ๋•๋‹ˆ๋‹ค."},{"id":"sett_reload_sd_model","label":"Reload model","localized":"๋ชจ๋ธ ๋‹ค์‹œ ๋กœ๋“œ","hint":"ํ˜„์žฌ ์„ ํƒ๋œ ๋ชจ๋ธ์„ ๋‹ค์‹œ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Variational Auto Encoder","localized":"Variational Auto Encoder","hint":"VAE ๋ฐ ์ด๋ฏธ์ง€ ๋””์ฝ”๋“œ ์ž‘์—…๊ณผ ๊ด€๋ จ๋œ ์„ค์ •"},{"id":"","label":"Text encoder","localized":"ํ…์ŠคํŠธ ์ธ์ฝ”๋”","hint":"ํ…์ŠคํŠธ ์ธ์ฝ”๋” ๋ฐ ํ”„๋กฌํ”„ํŠธ ์ธ์ฝ”๋“œ ๊ด€๋ จ ์„ค์ •"},{"id":"","label":"Compute Settings","localized":"์—ฐ์‚ฐ ์„ค์ •","hint":"์—ฐ์‚ฐ ์ •๋ฐ€๋„, cross-attention ๋ฐ ์ตœ์ ํ™” ๊ด€๋ จ ์„ค์ •"},{"id":"","label":"Backend Settings","localized":"๋ฐฑ์—”๋“œ ์„ค์ •","hint":"torch, onnx ๋ฐ olive์™€ ๊ฐ™์€ ์—ฐ์‚ฐ ๋ฐฑ์—”๋“œ ๊ด€๋ จ ์„ค์ •"},{"id":"","label":"Pipeline modifiers","localized":"ํŒŒ์ดํ”„๋ผ์ธ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ","hint":"์ƒ์„ฑ ์ค‘์— ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ"},{"id":"","label":"Sampler Settings","localized":"์ƒ˜ํ”Œ๋Ÿฌ ์„ค์ •","hint":"์ƒ˜ํ”Œ๋Ÿฌ ์„ ํƒ ๋ฐ ๊ตฌ์„ฑ, Diffusers ์ƒ˜ํ”Œ๋Ÿฌ ๊ตฌ์„ฑ ๊ด€๋ จ ์„ค์ •"},{"id":"","label":"Postprocessing","localized":"ํ›„์ฒ˜๋ฆฌ","hint":"์ด๋ฏธ์ง€ ์ƒ์„ฑ ํ›„ ์ฒ˜๋ฆฌ, ์–ผ๊ตด ๋ณต์› ๋ฐ ์—…์Šค์ผ€์ผ ๊ด€๋ จ ์„ค์ •"},{"id":"","label":"Huggingface","localized":"Huggingface","hint":"Huggingface ๊ด€๋ จ ์„ค์ •"},{"id":"","label":"Show all pages","localized":"๋ชจ๋“  ํŽ˜์ด์ง€ ํ‘œ์‹œ","hint":"๋ชจ๋“  ์„ค์ • ํŽ˜์ด์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"VAE model","localized":"VAE ๋ชจ๋ธ","hint":"VAE๋Š” ์ตœ์ข… ์ด๋ฏธ์ง€์˜ ๋ฏธ์„ธํ•œ ๋””ํ…Œ์ผ์„ ๋ณด์ •ํ•ฉ๋‹ˆ๋‹ค. ์ƒ‰๊ฐ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค."},{"id":"","label":"Model load using streams","localized":"์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ ๋กœ๋“œ","hint":"๋ชจ๋ธ์„ ๋กœ๋“œํ•  ๋•Œ ๋А๋ฆฐ ์ €์žฅ ์žฅ์น˜์™€ ๋„คํŠธ์›Œํฌ ์Šคํ† ๋ฆฌ์ง€์— ์ตœ์ ํ™”๋œ ์ŠคํŠธ๋ฆฌ๋ฐ ๋กœ๋“œ๋ฅผ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Full","localized":"","hint":"ํ•ญ์ƒ ์ตœ๋Œ€ ์ •๋ฐ€๋„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"FP32","localized":"FP32","hint":"32๋น„ํŠธ ๋ถ€๋™ ์†Œ์ˆ˜์ ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"FP16","localized":"FP16","hint":"16๋น„ํŠธ ๋ถ€๋™ ์†Œ์ˆ˜์ ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"BF16","localized":"BF16","hint":"์ˆ˜์ •๋œ 16๋น„ํŠธ ๋ถ€๋™ ์†Œ์ˆ˜์ ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Full precision (--no-half-vae)","localized":"VAE ์ตœ๋Œ€ ์ •๋ฐ€๋„ (--no-half-vae)","hint":"VAE์— FP32๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋” ๋งŽ์€ VRAM์„ ์‚ฌ์šฉํ•˜๊ณ  ์ƒ์„ฑ ์†๋„๊ฐ€ ๋А๋ฆฌ์ง€๋งŒ ๋” ๋‚˜์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."},{"id":"","label":"Force full precision (--no-half)","localized":"๋ชจ๋ธ ์ตœ๋Œ€ ์ •๋ฐ€๋„ (--no-half)","hint":"๋ชจ๋ธ์— FP32๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋” ๋งŽ์€ VRAM์„ ์‚ฌ์šฉํ•˜๊ณ  ์ƒ์„ฑ ์†๋„๊ฐ€ ๋А๋ฆฌ์ง€๋งŒ ๋” ๋‚˜์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."},{"id":"","label":"Upcast sampling","localized":"์—…์บ์ŠคํŠธ ์ƒ˜ํ”Œ๋ง","hint":"--no-half๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์™€ ์œ ์‚ฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ƒ์„ฑ ์†๋„๊ฐ€ ๋” ๋น ๋ฅด๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋„ ๋œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Attempt VAE roll back for NaN values","localized":"NaN ๊ฐ’ ๋ฐœ์ƒ ์‹œ VAE ๋กค๋ฐฑ ์‹œ๋„","hint":"Torch 2.1 ๋ฐ NaN ๊ฒ€์‚ฌ๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Olive use FP16 on optimization","localized":"Olive:์ตœ์ ํ™” ์‹œ FP16 ์‚ฌ์šฉ","hint":"Olive ์ตœ์ ํ™” ํ”„๋กœ์„ธ์Šค์˜ ์ถœ๋ ฅ ๋ชจ๋ธ์— 16๋น„ํŠธ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ •๋ฐ€๋„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋น„ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ 32๋น„ํŠธ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ •๋ฐ€๋„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Olive force FP32 for VAE Encoder","localized":"Olive:VAE ์ธ์ฝ”๋”์— ๋Œ€ํ•ด FP32 ๊ฐ•์ œ","hint":"์ถœ๋ ฅ ๋ชจ๋ธ์˜ VAE ์ธ์ฝ”๋”์— 32๋น„ํŠธ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ •๋ฐ€๋„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” '์ตœ์ ํ™” ์‹œ FP16 ์‚ฌ์šฉ' ์˜ต์…˜์„ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค. Img2Img์—์„œ NaN ๋˜๋Š” ๊ฒ€์€์ƒ‰ ๋นˆ ์ด๋ฏธ์ง€๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์ด ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•˜๊ณ  ์บ์‹œ๋œ ๋ชจ๋ธ์„ ์ œ๊ฑฐํ•˜์„ธ์š”."},{"id":"","label":"Olive use static dimensions","localized":"Olive:์ •์  ์ฐจ์› ์‚ฌ์šฉ","hint":"Olive ์ตœ์ ํ™” ๋ชจ๋ธ์˜ ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์†๋„๋ฅผ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. (OrtTransformersOptimization)"},{"id":"","label":"Olive cache optimized models","localized":"Olive:์ตœ์ ํ™” ๋ชจ๋ธ ์บ์‹œ","hint":"Olive ์ฒ˜๋ฆฌ๋œ ๋ชจ๋ธ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ONNX ํƒญ์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."},{"id":"","label":"Inpainting conditioning mask strength","localized":"์ธํŽ˜์ธํŠธ conditioning mask ๊ฐ•๋„","hint":"์ธํŽ˜์ธํŠธ ๋ฐ img2img์— ๋Œ€ํ•ด ์›๋ณธ ์ด๋ฏธ์ง€๋ฅผ ์–ผ๋งˆ๋‚˜ ๊ฐ•ํ•˜๊ฒŒ ๋งˆ์Šคํ‚นํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. 1.0์€ ์™„์ „ํžˆ ๋งˆ์Šคํ‚น(๊ธฐ๋ณธ๊ฐ’)์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 0.0์€ ์™„์ „ํžˆ ๋งˆ์Šคํ‚น๋˜์ง€ ์•Š์€ ์ปจ๋””์…”๋‹์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์ด ๋‚ฎ์„์ˆ˜๋ก ์ด๋ฏธ์ง€์˜ ์ „์ฒด ๊ตฌ์„ฑ์„ ๋ณด์กดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์ง€๋งŒ ํฐ ๋ณ€๊ฒฝ์—๋Š” ์–ด๋ ค์›€์„ ๊ฒช์Šต๋‹ˆ๋‹ค."},{"id":"","label":"Clip skip","localized":"Clip skip","hint":"CLIP ๋ชจ๋ธ์˜ ์ค‘๋‹จ ์‹œ์ . ์ด ๊ฐ’์„ 1๋กœ ์„ค์ •ํ•˜๋ฉด ํ‰์†Œ์™€ ๊ฐ™์ด ๋งˆ์ง€๋ง‰ ๋ ˆ์ด์–ด์—์„œ ์ค‘๋‹จํ•˜๊ณ , 2๋กœ ์„ค์ •ํ•˜๋ฉด ๋์—์„œ ๋‘ ๋ฒˆ์งธ ๋ ˆ์ด์–ด์—์„œ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Approximate","localized":"","hint":"๋น ๋ฅด๊ณ  ๊ฐ€๋ฒผ์šด ๊ทผ์‚ฌ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. VAE์— ๋น„ํ•ด ๋งค์šฐ ๋น ๋ฅด์ง€๋งŒ ๊ฐ€๋กœ/์„ธ๋กœ ํ•ด์ƒ๋„๊ฐ€ 4๋ฐฐ ์ž‘๊ณ  ํ’ˆ์งˆ์ด ๋‚ฎ์€ ์‚ฌ์ง„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Simple","localized":"","hint":"๋งค์šฐ ๋น ๋ฅด๊ณ  ๊ฐ€๋ฒผ์šด ๊ทผ์‚ฌ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. VAE์— ๋น„ํ•ด ๋งค์šฐ ๋น ๋ฅด์ง€๋งŒ ๊ฐ€๋กœ/์„ธ๋กœ ํ•ด์ƒ๋„๊ฐ€ 8๋ฐฐ ์ž‘๊ณ  ํ’ˆ์งˆ์ด ๋งค์šฐ ๋‚ฎ์€ ์‚ฌ์ง„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Progress update period","localized":"์ง„ํ–‰๋ฅ  ์—…๋ฐ์ดํŠธ ์ฃผ๊ธฐ","hint":"UI ํ”„๋กœ๊ทธ๋ ˆ์Šค ๋ฐ” ๋ฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์œ„ํ•œ ์—…๋ฐ์ดํŠธ ์ฃผ๊ธฐ์ž…๋‹ˆ๋‹ค. (๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„)"},{"id":"","label":"Euler a","localized":"Euler a","hint":"Euler Ancestral - ๋งค์šฐ ์ฐฝ์˜์ ์ด๋ฉฐ ์Šคํƒญ ์ˆ˜์— ๋”ฐ๋ผ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ทธ๋ฆผ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํƒญ ์ˆ˜๋ฅผ 30-40๋‹จ๊ณ„๋ณด๋‹ค ๋†’๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค."},{"id":"","label":"DDIM","localized":"DDIM","hint":"Denoising Diffusion Implicit Models - ์ธํŽ˜์ธํŠธ์— ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"UniPC","localized":"UniPC","hint":"Diffusion ๋ชจ๋ธ์˜ ๋น ๋ฅธ ์ƒ˜ํ”Œ๋ง์„ ์œ„ํ•œ ํ†ตํ•ฉ ์˜ˆ์ธก๊ธฐ"},{"id":"","label":"sigma negative guidance minimum","localized":"์‹œ๊ทธ๋งˆ ์Œ์ˆ˜ ์ง€์นจ ์ตœ์†Ÿ๊ฐ’","hint":"์ด๋ฏธ์ง€๊ฐ€ ๊ฑฐ์˜ ์ค€๋น„๋˜์—ˆ์„ ๋•Œ ์ผ๋ถ€ ๋‹จ๊ณ„์— ๋Œ€ํ•œ ์Œ์ˆ˜ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. 0=๋น„ํ™œ์„ฑํ™”"},{"id":"","label":"Upscaler tile overlap","localized":"์—…์Šค์ผ€์ผ๋Ÿฌ ํƒ€์ผ ์ค‘๋ณต","hint":"์ด ๊ฐ’์ด ๋‚ฎ์„ ์ˆ˜๋ก ํƒ€์ผ ๊ฐ„ ์ด์Œ์ƒˆ ๋ถ€๋ถ„์ด ๋” ์ž˜ ๋ณด์ž…๋‹ˆ๋‹ค."},{"id":"","label":"VAE slicing","localized":"VAE ์Šฌ๋ผ์ด์‹ฑ","hint":"VRAM ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋ฅผ ๋””์ฝ”๋“œํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์ค‘ ์ด๋ฏธ์ง€ ๋ฐฐ์น˜์—์„œ VAE ๋””์ฝ”๋“œ ์ž‘์—…์ด ์•ฝ๊ฐ„ ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค."},{"id":"","label":"VAE tiling","localized":"VAE ํƒ€์ผ๋ง","hint":"VRAM ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ํฐ ์ด๋ฏธ์ง€๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํƒ€์ผ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ์ƒ์„ฑ ์‹œ๊ฐ„์ด ์•ฝ๊ฐ„ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Dynamic attention BMM","localized":"๋‹ค์ด๋‚˜๋ฏน ์–ดํ…์…˜ BMM","hint":"์–ดํ…์…˜ ๊ณ„์‚ฐ์„ ํ•œ ๋ฒˆ์— ๋ชจ๋‘ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ  ๋‹จ๊ณ„๋ณ„๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ ์†๋„๊ฐ€ ๋А๋ ค์ง€์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ํฌ๊ฒŒ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค."},{"id":"","label":"ONNX Execution Provider","localized":"ONNX Execution Provider","hint":"ONNX Runtime์—์„œ ์‚ฌ์šฉํ•  ์žฅ์น˜ ์ข…๋ฅ˜ (Execution Provider)"},{"id":"","label":"ONNX allow fallback to CPU","localized":"ONNX:CPU fallback ํ—ˆ์šฉ","hint":"์„ ํƒํ•œ Execution Provider๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์„ ๋•Œ CPU๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"ONNX cache converted models","localized":"ONNX:๋ณ€ํ™˜๋œ ๋ชจ๋ธ ์ €์žฅ","hint":"ONNX ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜๋œ ๋ชจ๋ธ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ONNX ํƒญ์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."},{"id":"","label":"ONNX unload base model when processing refiner","localized":"ONNX:๋ฆฌํŒŒ์ด๋„ˆ ๋‹จ๊ณ„์—์„œ ๊ธฐ๋ณธ ๋ชจ๋ธ ์–ธ๋กœ๋“œ","hint":"๋ฆฌํŒŒ์ด๋„ˆ๊ฐ€ ๋ณ€ํ™˜/์ตœ์ ํ™”/์ฒ˜๋ฆฌ๋  ๋•Œ ๊ธฐ๋ณธ ๋ชจ๋ธ์„ ์–ธ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"model compile precompile","localized":"๋ชจ๋ธ ์ปดํŒŒ์ผ ์‚ฌ์ „ ์ปดํŒŒ์ผ","hint":"๋ชจ๋ธ์„ ๋กœ๋“œํ•  ๋•Œ ๋ชจ๋ธ ์ปดํŒŒ์ผ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด ์ƒˆ๋กœ ์ž‘์—…์„ ์‹œ์ž‘ํ•  ๋•Œ ๋ชจ๋ธ์„ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Use zeros for prompt padding","localized":"ํ”„๋กฌํ”„ํŠธ ํŒจ๋”ฉ์— 0 ์‚ฌ์šฉ","hint":"ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋น„์–ด ์žˆ์„ ๋•Œ ๋…ธ์ด์ฆˆ๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜๋จธ์ง€๋ฅผ 0์œผ๋กœ ์ฑ„์›๋‹ˆ๋‹ค."},{"id":"","label":"invisible watermark string","localized":"๋ณด์ด์ง€ ์•Š๋Š” ์›Œํ„ฐ๋งˆํฌ ๋ฌธ์ž์—ด","hint":"์ด๋ฏธ์ง€์— ์ถ”๊ฐ€ํ•  ๋ณด์ด์ง€ ์•Š๋Š” ์›Œํ„ฐ๋งˆํฌ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ ์†์ƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋งค์šฐ ์งง๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"1st stage backbone","localized":"1๋‹จ๊ณ„ backbone","hint":"1๋‹จ๊ณ„ backbone"},{"id":"","label":"1st stage skip","localized":"1๋‹จ๊ณ„ skip","hint":"1๋‹จ๊ณ„ skip"},{"id":"","label":"2nd stage backbone","localized":"2๋‹จ๊ณ„ backbone","hint":"2๋‹จ๊ณ„ backbone"},{"id":"","label":"2nd stage skip","localized":"2๋‹จ๊ณ„ skip","hint":"2๋‹จ๊ณ„ skip"},{"id":"","label":"aggressive at step","localized":"","hint":"aggressive at step"},{"id":"","label":"alt","localized":"","hint":"Alt"},{"id":"","label":"apply linfusion distillation on load","localized":"๋กœ๋“œ ์‹œ Linfusion distillation ์ ์šฉ","hint":"๋กœ๋“œ ์‹œ Linfusion distillation ์ ์šฉ"},{"id":"","label":"as a tab","localized":"ํƒญ","hint":"ํƒญ"},{"id":"","label":"auto requeue failed tasks","localized":"์‹คํŒจํ•œ ์ž‘์—… ๋Œ€๊ธฐ์—ด์— ๋‹ค์‹œ ์ถ”๊ฐ€","hint":"์‹คํŒจํ•œ ์ž‘์—…์„ ์ž๋™์œผ๋กœ ๋Œ€๊ธฐ์—ด์— ๋‹ค์‹œ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"backend storage","localized":"์—ฐ์‚ฐ ๋ฐ์ดํ„ฐ ํƒ€์ž…","hint":"์—ฐ์‚ฐ ๋ฐ์ดํ„ฐ ํƒ€์ž…"},{"id":"","label":"batch matrix-matrix","localized":"","hint":"batch matrix-matrix"},{"id":"","label":"batch mode uses sequential seeds","localized":"์—ฐ์†์  ์‹œ๋“œ ์‚ฌ์šฉ","hint":"์—ฐ์†์  ์‹œ๋“œ ์‚ฌ์šฉ"},{"id":"","label":"beta end","localized":"","hint":"beta end"},{"id":"","label":"beta start","localized":"","hint":"beta start"},{"id":"","label":"change log","localized":"์ฒด์ธ์ง€๋กœ๊ทธ","hint":"์ฒด์ธ์ง€๋กœ๊ทธ"},{"id":"","label":"channels last","localized":"","hint":"channels last"},{"id":"","label":"civitai","localized":"","hint":"CivitAI"},{"id":"","label":"civitai model type","localized":"CivitAI ๋ชจ๋ธ ์œ ํ˜•","hint":"CivitAI ๋ชจ๋ธ ์œ ํ˜•"},{"id":"","label":"civitai token","localized":"CivitAI ํ† ํฐ","hint":"CivitAI ํ† ํฐ"},{"id":"","label":"cross-attention","localized":"","hint":"cross-attention"},{"id":"","label":"ctrl","localized":"","hint":"Ctrl"},{"id":"","label":"cudamallocasync","localized":"cudaMallocAsync","hint":"cudaMallocAsync"},{"id":"","label":"current","localized":"ํ˜„์žฌ ๋กœ๋“œ๋œ ๋ชจ๋ธ","hint":"ํ˜„์žฌ ๋กœ๋“œ๋œ ๋ชจ๋ธ"},{"id":"","label":"deep-cache","localized":"","hint":"deep-cache"},{"id":"","label":"deterministic mode","localized":"","hint":"deterministic mode"},{"id":"","label":"disabled","localized":"๋น„ํ™œ์„ฑํ™”","hint":"๋น„ํ™œ์„ฑํ™”"},{"id":"","label":"downscale high resolution live previews","localized":"๊ณ ํ•ด์ƒ๋„ ์‹ค์‹œ๊ฐ„ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ถ•์†Œ","hint":"๊ณ ํ•ด์ƒ๋„ ์‹ค์‹œ๊ฐ„ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ถ•์†Œ"},{"id":"","label":"dynamic","localized":"","hint":"dynamic"},{"id":"","label":"dynamic attention","localized":"","hint":"dynamic attention"},{"id":"","label":"dynamic attention slicing rate in gb","localized":"๋‹ค์ด๋‚˜๋ฏน ์–ดํ…์…˜ ์Šฌ๋ผ์ด์‹ฑ ๋น„์œจ (GB ๋‹จ์œ„)","hint":"๋‹ค์ด๋‚˜๋ฏน ์–ดํ…์…˜ ์Šฌ๋ผ์ด์‹ฑ ๋น„์œจ (GB ๋‹จ์œ„)"},{"id":"","label":"dynamic attention trigger rate in gb","localized":"๋‹ค์ด๋‚˜๋ฏน ์–ดํ…์…˜ ํŠธ๋ฆฌ๊ฑฐ ๋น„์œจ (GB ๋‹จ์œ„)","hint":"๋‹ค์ด๋‚˜๋ฏน ์–ดํ…์…˜ ํŠธ๋ฆฌ๊ฑฐ ๋น„์œจ (GB ๋‹จ์œ„)"},{"id":"","label":"expandable segments","localized":"","hint":"expandable segments"},{"id":"","label":"false","localized":"๋น„ํ™œ์„ฑํ™”","hint":"๋น„ํ™œ์„ฑํ™”"},{"id":"","label":"first-block cache enabled","localized":"First-block ์บ์‹œ ํ™œ์„ฑํ™”","hint":"First-block ์บ์‹œ ํ™œ์„ฑํ™”"},{"id":"","label":"flash attention","localized":"","hint":"flash attention"},{"id":"","label":"folder for onnx conversion","localized":"ONNX ๋ณ€ํ™˜์„ ์œ„ํ•œ ์ž„์‹œ ํด๋”","hint":"ONNX ๋ณ€ํ™˜์„ ์œ„ํ•œ ์ž„์‹œ ํด๋”"},{"id":"","label":"full vae","localized":"VAE","hint":"๊ทผ์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  VAE๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"full-depth cudnn benchmark","localized":"Full-depth cuDNN ๋ฒค์น˜๋งˆํฌ","hint":"Full-depth cuDNN ๋ฒค์น˜๋งˆํฌ"},{"id":"","label":"fused projections","localized":"","hint":"fused projections"},{"id":"","label":"gc threshold","localized":"๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์ž„๊ณ„๊ฐ’","hint":"๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์ž„๊ณ„๊ฐ’"},{"id":"","label":"get changelog","localized":"์ฒด์ธ์ง€๋กœ๊ทธ ๊ฐ€์ ธ์˜ค๊ธฐ","hint":"์ฒด์ธ์ง€๋กœ๊ทธ ๊ฐ€์ ธ์˜ค๊ธฐ"},{"id":"","label":"hide the custom checkpoint dropdown","localized":"์ปค์Šคํ…€ ๋ชจ๋ธ ๋“œ๋กญ๋‹ค์šด ์ˆจ๊ธฐ๊ธฐ","hint":"์ปค์Šคํ…€ ๋ชจ๋ธ ๋“œ๋กญ๋‹ค์šด ์ˆจ๊ธฐ๊ธฐ"},{"id":"","label":"hidet","localized":"","hint":"hidet"},{"id":"","label":"inductor","localized":"","hint":"inductor"},{"id":"","label":"layerwise casting storage","localized":"Layerwise casting ์Šคํ† ๋ฆฌ์ง€ ํƒ€์ž…","hint":"Layerwise casting ์Šคํ† ๋ฆฌ์ง€ ํƒ€์ž…"},{"id":"","label":"layerwise non-blocking operations","localized":"Layerwise ์ž‘์—… ๋ธ”๋กœํ‚น ์•ˆ ํ•จ","hint":"Layerwise ์ž‘์—… ๋ธ”๋กœํ‚น ์•ˆ ํ•จ"},{"id":"","label":"ldsr processing steps","localized":"LDSR ์ฒ˜๋ฆฌ ์Šคํƒญ ์ˆ˜","hint":"LDSR ์ฒ˜๋ฆฌ ์Šคํƒญ ์ˆ˜"},{"id":"","label":"load model directly to gpu","localized":"๋ชจ๋ธ์„ GPU๋กœ ์ง์ ‘ ๋กœ๋“œ","hint":"๋ชจ๋ธ์„ GPU๋กœ ๋ฐ”๋กœ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"low order","localized":"","hint":"low order"},{"id":"","label":"math attention","localized":"","hint":"math attention"},{"id":"","label":"max-autotune","localized":"","hint":"max-autotune"},{"id":"","label":"max-autotune-no-cudagraphs","localized":"","hint":"max-autotune-no-cudagraphs"},{"id":"","label":"memory attention","localized":"","hint":"memory attention"},{"id":"","label":"migraphx","localized":"","hint":"MIGraphX"},{"id":"","label":"model auto-download on demand","localized":"ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ชจ๋ธ ์ž๋™ ๋‹ค์šด๋กœ๋“œ","hint":"ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ชจ๋ธ์„ ์ž๋™์œผ๋กœ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"model autoload on start","localized":"์‹œ์ž‘ ์‹œ ๋ชจ๋ธ ์ž๋™ ๋กœ๋“œ","hint":"์‹œ์ž‘ ์‹œ ๋ชจ๋ธ์„ ์ž๋™์œผ๋กœ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"model compile fullgraph","localized":"๋ชจ๋ธ ์ปดํŒŒ์ผ fullgraph","hint":"๋ชจ๋ธ ์ปดํŒŒ์ผ fullgraph"},{"id":"","label":"model compile suppress errors","localized":"๋ชจ๋ธ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ์ˆจ๊ธฐ๊ธฐ","hint":"๋ชจ๋ธ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๋ฅผ ์ˆจ๊น๋‹ˆ๋‹ค."},{"id":"","label":"modern","localized":"๋ชจ๋˜","hint":"๋ชจ๋˜"},{"id":"","label":"native","localized":"๊ธฐ๋ณธ","hint":"๊ธฐ๋ณธ"},{"id":"","label":"noise multiplier (eta)","localized":"๋…ธ์ด์ฆˆ ๋ฐฐ์ˆ˜ (eta)","hint":"๋…ธ์ด์ฆˆ ๋ฐฐ์ˆ˜ (eta)"},{"id":"","label":"noise multiplier for image processing","localized":"์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋…ธ์ด์ฆˆ ๋ฐฐ์ˆ˜","hint":"์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋…ธ์ด์ฆˆ ๋ฐฐ์ˆ˜"},{"id":"","label":"noise seed delta (eta)","localized":"","hint":"noise seed delta (eta)"},{"id":"","label":"override t1 ratio","localized":"","hint":"override t1 ratio"},{"id":"","label":"override t2 ratio","localized":"","hint":"override t1 ratio"},{"id":"","label":"parallel process images in batch","localized":"์ด๋ฏธ์ง€ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ","hint":"์ด๋ฏธ์ง€๋ฅผ ๋ฐฐ์น˜์—์„œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"prediction method","localized":"Prediction ์ข…๋ฅ˜","hint":"Prediction ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ Prediction ์ข…๋ฅ˜๋ฅผ ์˜ฌ๋ฐ”๋ฅธ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"quantization activations type","localized":"์–‘์žํ™” Activation ๋ฐ์ดํ„ฐ ํƒ€์ž…","hint":"์–‘์žํ™” Activation ๋ฐ์ดํ„ฐ ํƒ€์ž…"},{"id":"","label":"quantization type","localized":"์–‘์žํ™” ๋ฐ์ดํ„ฐ ํƒ€์ž…","hint":"์–‘์žํ™” ๋ฐ์ดํ„ฐ ํƒ€์ž…"},{"id":"","label":"quantization weights type","localized":"์–‘์žํ™” ๋ฐ์ดํ„ฐ ํƒ€์ž…","hint":"์–‘์žํ™” ๋ฐ์ดํ„ฐ ํƒ€์ž…"},{"id":"","label":"reduce-overhead","localized":"","hint":"reduce-overhead"},{"id":"","label":"rescale","localized":"","hint":"rescale"},{"id":"","label":"residual diff threshold","localized":"","hint":"residual diff threshold"},{"id":"","label":"sage attention","localized":"","hint":"sage attention"},{"id":"","label":"search changelog","localized":"์ฒด์ธ์ง€๋กœ๊ทธ ๊ฒ€์ƒ‰","hint":"์ฒด์ธ์ง€๋กœ๊ทธ ๊ฒ€์ƒ‰"},{"id":"","label":"sharpen","localized":"์„ ๋ช…๋„","hint":"์„ ๋ช…๋„"},{"id":"","label":"shift","localized":"","hint":"Shift"},{"id":"","label":"shuffle weights","localized":"๊ฐ€์ค‘์น˜ ์…”ํ”Œ","hint":"๊ฐ€์ค‘์น˜ ์…”ํ”Œ"},{"id":"","label":"sigma max","localized":"์‹œ๊ทธ๋งˆ ์ตœ๋Œ“๊ฐ’","hint":"์‹œ๊ทธ๋งˆ ์ตœ๋Œ“๊ฐ’"},{"id":"","label":"sigma min","localized":"์‹œ๊ทธ๋งˆ ์ตœ์†Ÿ๊ฐ’","hint":"์‹œ๊ทธ๋งˆ ์ตœ์†Ÿ๊ฐ’"},{"id":"","label":"skip generation if nan found in latents","localized":"์ƒ์„ฑ ์ค‘ NaN์ด ๋ฐœ๊ฒฌ๋˜๋ฉด ๊ฑด๋„ˆ๋›ฐ๊ธฐ","hint":"์ƒ์„ฑ ์ค‘ NaN์ด ๋ฐœ๊ฒฌ๋˜๋ฉด ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค."},{"id":"","label":"skip guidance layers","localized":"๊ฐ€์ด๋˜์Šค ๋ ˆ์ด์–ด ๊ฑด๋„ˆ๋›ฐ๊ธฐ","hint":"๊ฐ€์ด๋˜์Šค ๋ ˆ์ด์–ด ๊ฑด๋„ˆ๋›ฐ๊ธฐ"},{"id":"","label":"split attention","localized":"","hint":"split attention"},{"id":"","label":"taesd","localized":"","hint":"taesd"},{"id":"","label":"taesd decode layers","localized":"TAESD ๋””์ฝ”๋“œ ๋ ˆ์ด์–ด","hint":"TAESD ๋””์ฝ”๋“œ ๋ ˆ์ด์–ด"},{"id":"","label":"taesd variant","localized":"TAESD ๋ณ€ํ˜•","hint":"TAESD ๋ณ€ํ˜•"},{"id":"","label":"task list page size (0 for auto)","localized":"์ž‘์—… ๋ชฉ๋ก ํŽ˜์ด์ง€ ํฌ๊ธฐ","hint":"์ž‘์—… ๋ชฉ๋ก ํŽ˜์ด์ง€ ํฌ๊ธฐ. 0์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ์ž๋™์œผ๋กœ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"thresholding","localized":"","hint":"thresholding"},{"id":"","label":"timestep","localized":"ํƒ€์ž„์Šคํƒญ","hint":"ํƒ€์ž„์Šคํƒญ"},{"id":"","label":"timestep skip end","localized":"ํƒ€์ž„์Šคํƒญ ์Šคํ‚ต ๋","hint":"ํƒ€์ž„์Šคํƒญ ์Šคํ‚ต ๋"},{"id":"","label":"timestep skip start","localized":"ํƒ€์ž„์Šคํƒญ ์Šคํ‚ต ์‹œ์ž‘","hint":"ํƒ€์ž„์Šคํƒญ ์Šคํ‚ต ์‹œ์ž‘"},{"id":"","label":"timestep spacing","localized":"ํƒ€์ž„์Šคํƒญ ๊ฐ„๊ฒฉ","hint":"ํƒ€์ž„์Šคํƒญ ๊ฐ„๊ฒฉ"},{"id":"","label":"timesteps","localized":"ํƒ€์ž„์Šคํƒญ ์ˆ˜","hint":"ํƒ€์ž„์Šคํƒญ ์ˆ˜"},{"id":"","label":"timesteps override","localized":"ํƒ€์ž„์Šคํƒญ ์ˆ˜ ๋ฎ์–ด์“ฐ๊ธฐ","hint":"ํƒ€์ž„์Šคํƒญ ์ˆ˜ ๋ฎ์–ด์“ฐ๊ธฐ"},{"id":"","label":"timesteps presets","localized":"ํƒ€์ž„์Šคํƒญ ์ˆ˜ ํ”„๋ฆฌ์…‹","hint":"ํƒ€์ž„์Šคํƒญ ์ˆ˜ ํ”„๋ฆฌ์…‹"},{"id":"","label":"timesteps range","localized":"ํƒ€์ž„์Šคํƒญ ์ˆ˜ ๋ฒ”์œ„","hint":"ํƒ€์ž„์Šคํƒญ ์ˆ˜ ๋ฒ”์œ„"},{"id":"","label":"todo","localized":"ToDo","hint":"ToDo"},{"id":"","label":"tome","localized":"ToMe","hint":"Token Merging"},{"id":"","label":"true","localized":"ํ™œ์„ฑํ™”","hint":"ํ™œ์„ฑํ™”"},{"id":"","label":"tunable ops limit","localized":"Tunable ops ์ œํ•œ","hint":"Tunable ops ์ œํ•œ"},{"id":"","label":"unet","localized":"UNet","hint":"UNet"},{"id":"","label":"unet depth","localized":"UNet ๊นŠ์ด","hint":"UNet ๊นŠ์ด"},{"id":"","label":"unet enabled","localized":"UNet์— ์ ์šฉ","hint":"UNet์— HyperTile ์ ์šฉ"},{"id":"","label":"unet max tile size","localized":"UNet ์ตœ๋Œ€ ํƒ€์ผ ํฌ๊ธฐ","hint":"UNet ์ตœ๋Œ€ ํƒ€์ผ ํฌ๊ธฐ"},{"id":"","label":"unet min tile size","localized":"UNet ์ตœ์†Œ ํƒ€์ผ ํฌ๊ธฐ","hint":"UNet ์ตœ์†Œ ํƒ€์ผ ํฌ๊ธฐ"},{"id":"","label":"unet model","localized":"UNet ๋ชจ๋ธ","hint":"UNet ๋ชจ๋ธ"},{"id":"","label":"unet swap size","localized":"UNet ์Šค์™‘ ํฌ๊ธฐ","hint":"UNet ์Šค์™‘ ํฌ๊ธฐ"},{"id":"","label":"unset","localized":"๊ธฐ๋ณธ๊ฐ’","hint":"๊ธฐ๋ณธ๊ฐ’"},{"id":"","label":"use separate base dict","localized":"๋ณ„๋„์˜ ๋ชจ๋ธ ๋”•์…”๋„ˆ๋ฆฌ ์‚ฌ์šฉ","hint":"๋ณ„๋„์˜ ๋ชจ๋ธ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"vae enabled","localized":"VAE์— ์ ์šฉ","hint":"VAE์— HyperTile ์ ์šฉ"},{"id":"","label":"visual query","localized":"๋น„์ฃผ์–ผ ์ฟผ๋ฆฌ","hint":"๋น„์ฃผ์–ผ ์ฟผ๋ฆฌ"},{"id":"","label":"weighted","localized":"๊ฐ€์ค‘์น˜ ์ ์šฉ","hint":"๊ฐ€์ค‘์น˜ ์ ์šฉ"}] \ No newline at end of file +[{"id":"","label":"๐ŸŽฒ๏ธ","localized":"","hint":"๋ฌด์ž‘์œ„ ์‹œ๋“œ ์‚ฌ์šฉ"},{"id":"","label":"๐Ÿ”„","localized":"","hint":"์ดˆ๊ธฐํ™”"},{"id":"","label":"๐Ÿ”Ž๏ธŽ","localized":"","hint":"๋ˆ„๋ฝ๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ CivitAI์—์„œ ๊ฒ€์ƒ‰"},{"id":"","label":"Prompt","localized":"ํ”„๋กฌํ”„ํŠธ","hint":"์ƒ์„ฑํ•˜๊ณ  ์‹ถ์€ ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์„ธ์š”"},{"id":"","label":"Negative prompt","localized":"๋„ค๊ฑฐํ‹ฐ๋ธŒ ํ”„๋กฌํ”„ํŠธ","hint":"์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€์—์„œ ๋ณด๊ณ  ์‹ถ์ง€ ์•Š์€ ๊ฒƒ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์„ธ์š”"},{"id":"","label":"Interrogate","localized":"","hint":"์ด๋ฏธ์ง€ ์„ค๋ช…์„ ์–ป๊ธฐ ์œ„ํ•ด Interrogate ์‹คํ–‰"},{"id":"","label":"Agent Scheduler","localized":"์ž‘์—… ์Šค์ผ€์ค„๋Ÿฌ","hint":"์ƒ์„ฑ ์š”์ฒญ์„ ๋Œ€๊ธฐ์—ด์— ๋„ฃ๊ณ  ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰"},{"id":"","label":"System","localized":"์‹œ์Šคํ…œ ์„ค์ •","hint":"์‹œ์Šคํ…œ ์„ค์ • ๋ฐ ์ •๋ณด"},{"id":"","label":"Generate","localized":"์ƒ์„ฑ","hint":"์ž‘์—… ์‹œ์ž‘"},{"id":"","label":"Stop","localized":"์ค‘์ง€","hint":"์ž‘์—… ์ค‘์ง€"},{"id":"","label":"Skip","localized":"๊ฑด๋„ˆ๋›ฐ๊ธฐ","hint":"ํ˜„์žฌ ์ž‘์—…์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋‹ค์Œ ์ž‘์—… ์‹œ์ž‘"},{"id":"","label":"Pause","localized":"์ผ์‹œ ์ค‘์ง€","hint":"์ž‘์—… ์ผ์‹œ ์ค‘์ง€"},{"id":"","label":"Restore","localized":"๋ณต์›","hint":"ํ˜„์žฌ ํ”„๋กฌํ”„ํŠธ ๋˜๋Š” ๋งˆ์ง€๋ง‰์œผ๋กœ ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ณต์›"},{"id":"","label":"Default strength","localized":"๊ธฐ๋ณธ ๊ฐ•๋„","hint":"LoRA์™€ ๊ฐ™์€ ์ถ”๊ฐ€ ๋„คํŠธ์›Œํฌ๋ฅผ ํ”„๋กฌํ”„ํŠธ์— ์ถ”๊ฐ€ํ•  ๋•Œ ์‚ฌ์šฉ๋  ๊ธฐ๋ณธ ๊ฐ•๋„"},{"id":"","label":"Embedding","localized":"์ž„๋ฒ ๋”ฉ","hint":"Textual inversion embedding. ํŠน์ • ์ฃผ์ œ์— ๋Œ€ํ•ด ํ›ˆ๋ จ๋œ ๋ณด์กฐ ๋ชจ๋ธ"},{"id":"","label":"Hypernetwork","localized":"ํ•˜์ดํผ ๋„คํŠธ์›Œํฌ","hint":"๋กœ๋“œ๋œ ๋ชจ๋ธ์˜ ๋™์ž‘์„ ์ˆ˜์ •ํ•˜๋Š” ๋ณด์กฐ ๋ชจ๋ธ"},{"id":"","label":"VAE","localized":"VAE","hint":"Variational Auto Encoder. ์ƒ์„ฑ ๋งˆ์ง€๋ง‰์— ์ด๋ฏธ์ง€ ๋””์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋ธ"},{"id":"","label":"Corrections","localized":"๋ณด์ •","hint":"์ƒ์„ฑ ํ”„๋กœ์„ธ์Šค ๋™์•ˆ ์ด๋ฏธ์ง€ ์ƒ‰์ƒ/์„ ๋ช…๋„/๋ฐ๊ธฐ๋ฅผ ๋ณด์ •ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Refine","localized":"๋ฆฌํŒŒ์ด๋„ˆ","hint":"์—…์Šค์ผ€์ผ, HiRes ๋ฐ ๋ฆฌํŒŒ์ด๋„ˆ์™€ ๊ด€๋ จ๋œ ์„ค์ •"},{"id":"","label":"โž  text","localized":"โž  ํ…์ŠคํŠธ","hint":"์ด๋ฏธ์ง€๋ฅผ ํ…์ŠคํŠธ ํƒญ์œผ๋กœ ์ „์†ก"},{"id":"","label":"โž  image","localized":"โž  ์ด๋ฏธ์ง€","hint":"์ด๋ฏธ์ง€๋ฅผ ์ด๋ฏธ์ง€ ํƒญ์œผ๋กœ ์ „์†ก"},{"id":"","label":"โž  inpaint","localized":"โž  ์ธํŽ˜์ธํŠธ","hint":"์ด๋ฏธ์ง€๋ฅผ ์ธํŽ˜์ธํŠธ ํƒญ์œผ๋กœ ์ „์†ก"},{"id":"","label":"โž  sketch","localized":"โž  ์Šค์ผ€์น˜","hint":"์ด๋ฏธ์ง€๋ฅผ ์Šค์ผ€์น˜ ํƒญ์œผ๋กœ ์ „์†ก"},{"id":"","label":"โž  composite","localized":"โž  ํ•ฉ์„ฑ","hint":"์ด๋ฏธ์ง€๋ฅผ ํ•ฉ์„ฑ ํƒญ์œผ๋กœ ์ „์†ก"},{"id":"","label":"Sampling method","localized":"์ƒ˜ํ”Œ๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜","hint":"์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค."},{"id":"","label":"Steps","localized":"์ƒ˜ํ”Œ๋ง ์Šคํƒญ ์ˆ˜","hint":"์ดˆ๊ธฐ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ฐœ์„ ํ•˜๋Š” ํšŸ์ˆ˜์ž…๋‹ˆ๋‹ค. ์Šคํƒญ ์ˆ˜๋ฅผ ๋†’์ผ ์ˆ˜๋ก ์ƒ์„ฑ ์‹œ๊ฐ„์ด ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๋ชจ๋ธ์— ๋”ฐ๋ผ ๋‹ค๋ฅด์ง€๋งŒ, ์Šคํƒญ ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋‚ฎ์œผ๋ฉด ๊ฒฐ๊ณผ๋ฌผ์˜ ํ’ˆ์งˆ์ด ์ข‹์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."},{"id":"","label":"full quality","localized":"์ตœ๊ณ  ํ’ˆ์งˆ VAE ์‚ฌ์šฉ","hint":"์ตœ๊ณ  ํ’ˆ์งˆ VAE๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ๋„๋ฉด VAE ์ฒ˜๋ฆฌ ๋‹จ๊ณ„์—์„œ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋นจ๋ผ์ง€๊ณ  VRAM ์‚ฌ์šฉ๋Ÿ‰์ด ๋‚ฎ์•„์ง€์ง€๋งŒ ๊ฒฐ๊ณผ๋ฌผ์˜ ํ’ˆ์งˆ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค."},{"id":"","label":"HDR Clamp","localized":"HDR ํด๋žจํ”„","hint":"ํ‰๊ท ์—์„œ ํฌ๊ฒŒ ๋ฒ—์–ด๋‚˜๋Š” ๊ฐ’์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ, ๊ฐ€์ด๋˜์Šค ์Šค์ผ€์ผ ๊ฐ’์„ ๋†’๊ฒŒ ์„ค์ •ํ–ˆ์„ ๋•Œ ์ƒ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์ƒ์„ฑ ์ดˆ๊ธฐ์— ์ž˜๋ชป๋œ ๊ฐ’์„ ์ฐพ๊ณ , ๋ฒ”์œ„(๊ฒฝ๊ณ„) ๋ฐ ์ž„๊ณ„๊ฐ’ ์„ค์ •์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ˆ˜ํ•™์  ์กฐ์ •์„ ์ ์šฉํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ ๊ฐ’์— ์›ํ•˜๋Š” ๋ฒ”์œ„๋ฅผ ์„ค์ •ํ•˜๊ณ  ์ž„๊ณ„๊ฐ’์„ ์กฐ์ •ํ•˜์—ฌ ์ž˜๋ชป๋œ ๊ฐ’์„ ํ•ด๋‹น ๋ฒ”์œ„๋กœ ๋‹ค์‹œ ์กฐ์ •ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Enable refine pass","localized":"๋ฆฌํŒŒ์ด๋„ˆ ํ™œ์„ฑํ™”","hint":"์ด๋ฏธ์ง€-์ด๋ฏธ์ง€์™€ ์œ ์‚ฌํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์ข… ์ด๋ฏธ์ง€๋ฅผ ์—…์Šค์ผ€์ผํ•˜๊ฑฐ๋‚˜ ๋””ํ…Œ์ผ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋ชจ๋ธ๊ณผ๋Š” ๋ณ„๊ฐœ์˜ ๋ฆฌํŒŒ์ด๋„ˆ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€ ๋””ํ…Œ์ผ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค."},{"id":"","label":"enable detailer pass","localized":"๋””ํ…Œ์ผ๋Ÿฌ ํ™œ์„ฑํ™”","hint":"์–ผ๊ตด๊ณผ ๊ฐ™์€ ํŠน์ • ๋ถ€์œ„๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ๋ณ„๋„์˜ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ๋ถ€์œ„๋งŒ์„ ๋” ๋†’์€ ํ•ด์ƒ๋„๋กœ ๋‹ค์‹œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Force Hires","localized":"Hires ๊ฐ•์ œ ํ™œ์„ฑํ™”","hint":"Latent ์—…์Šค์ผ€์ผ๋Ÿฌ๊ฐ€ ์„ ํƒ๋˜๋ฉด Hires๊ฐ€ ์ž๋™์œผ๋กœ ํ™œ์„ฑํ™”๋˜์ง€๋งŒ, ๊ทธ ์™ธ์˜ ์—…์Šค์ผ€์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด ์—…์Šค์ผ€์ผ๋Ÿฌ ์ข…๋ฅ˜์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ํ•ญ์ƒ Hires๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Refine sampler","localized":"๋ฆฌํŒŒ์ด๋„ˆ ์ƒ˜ํ”Œ๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜","hint":"๋ฆฌํŒŒ์ด๋„ˆ ์ž‘์—… ์‹œ, ๊ธฐ๋ณธ ์ƒ˜ํ”Œ๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์ด ์ƒ˜ํ”Œ๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋Œ€์‹  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Refiner start","localized":"๋ฆฌํŒŒ์ด๋„ˆ ์‹œ์ž‘","hint":"๊ธฐ๋ณธ ๋ชจ๋ธ์ด ์ด๋งŒํผ ์™„๋ฃŒ๋˜๋ฉด ๋ฆฌํŒŒ์ด๋„ˆ ํŒจ์Šค๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. (0๋ณด๋‹ค ํฌ๊ณ  1๋ณด๋‹ค ์ž‘๊ฒŒ ์„ค์ •ํ•˜์—ฌ ์ „์ฒด ๊ธฐ๋ณธ ๋ชจ๋ธ ์‹คํ–‰ ํ›„์— ์‹คํ–‰)"},{"id":"","label":"Refiner steps","localized":"๋ฆฌํŒŒ์ด๋„ˆ ์ƒ˜ํ”Œ๋ง ์Šคํƒญ ์ˆ˜","hint":"๋ฆฌํŒŒ์ด๋„ˆ ์ž‘์—…์— ์‚ฌ์šฉํ•  ์ƒ˜ํ”Œ๋ง ์Šคํƒญ ์ˆ˜์ž…๋‹ˆ๋‹ค."},{"id":"","label":"Refine guidance","localized":"๋ฆฌํŒŒ์ด๋„ˆ ๊ฐ€์ด๋˜์Šค ์Šค์ผ€์ผ","hint":"๋ฆฌํŒŒ์ด๋„ˆ ์ž‘์—…์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ€์ด๋˜์Šค ์Šค์ผ€์ผ์ž…๋‹ˆ๋‹ค."},{"id":"","label":"Attention guidance","localized":"์–ดํ…์…˜ ๊ฐ€์ด๋˜์Šค ์Šค์ผ€์ผ","hint":"PAG(Perturbed-Attention Guidance)์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ€์ด๋˜์Šค ์Šค์ผ€์ผ์ž…๋‹ˆ๋‹ค."},{"id":"","label":"Adaptive scaling","localized":"์ ์‘ํ˜• ์Šค์ผ€์ผ๋ง","hint":"์–ดํ…์…˜ ๊ฐ€์ด๋˜์Šค ์Šค์ผ€์ผ์— ๋Œ€ํ•œ ์ ์‘ํ˜• ์ˆ˜์ •์ž์ž…๋‹ˆ๋‹ค."},{"id":"","label":"Rescale guidance","localized":"๊ฐ€์ด๋˜์Šค ์žฌ์กฐ์ •","hint":"๋…ธ์ถœ ๊ณผ๋‹ค๋œ ์ด๋ฏธ์ง€๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด CFG ์ƒ์„ฑ ๋…ธ์ด์ฆˆ๋ฅผ ์žฌ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Refine Prompt","localized":"๋ฆฌํŒŒ์ด๋„ˆ ํ”„๋กฌํ”„ํŠธ","hint":"๊ธฐ๋ณธ ๋ชจ๋ธ์˜ ๋‘ ๋ฒˆ์งธ ์ธ์ฝ”๋”(์žˆ๋Š” ๊ฒฝ์šฐ)์™€ ๋ฆฌํŒŒ์ด๋„ˆ ํŒจ์Šค(ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ) ๋ชจ๋‘์— ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กฌํ”„ํŠธ์ž…๋‹ˆ๋‹ค."},{"id":"","label":"Refine negative prompt","localized":"๋ฆฌํŒŒ์ด๋„ˆ ๋„ค๊ฑฐํ‹ฐ๋ธŒ ํ”„๋กฌํ”„ํŠธ","hint":"๊ธฐ๋ณธ ๋ชจ๋ธ์˜ ๋‘ ๋ฒˆ์งธ ์ธ์ฝ”๋”(์žˆ๋Š” ๊ฒฝ์šฐ)์™€ ๋ฆฌํŒŒ์ด๋„ˆ ํŒจ์Šค(ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ) ๋ชจ๋‘์— ์‚ฌ์šฉ๋˜๋Š” ๋„ค๊ฑฐํ‹ฐ๋ธŒ ํ”„๋กฌํ”„ํŠธ์ž…๋‹ˆ๋‹ค."},{"id":"","label":"Batch count","localized":"๋ฐฐ์น˜ ์ˆ˜","hint":"์ƒ์„ฑํ•  ์ด๋ฏธ์ง€ ๋ฐฐ์น˜ ์ˆ˜์ž…๋‹ˆ๋‹ค. (์ƒ์„ฑ ์„ฑ๋Šฅ ๋˜๋Š” VRAM ์‚ฌ์šฉ๋Ÿ‰์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Œ)"},{"id":"","label":"Batch size","localized":"๋ฐฐ์น˜ ํฌ๊ธฐ","hint":"๋‹จ์ผ ๋ฐฐ์น˜์—์„œ ์ƒ์„ฑํ•  ์ด๋ฏธ์ง€ ์ˆ˜์ž…๋‹ˆ๋‹ค. (VRAM ์‚ฌ์šฉ๋Ÿ‰์ด ๋†’์•„์ง€๋Š” ๋Œ€์‹  ์ƒ์„ฑ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋จ)"},{"id":"","label":"guidance scale","localized":"๊ฐ€์ด๋˜์Šค ์Šค์ผ€์ผ","hint":"Classifier Free Guidance ์Šค์ผ€์ผ:์ด๋ฏธ์ง€๊ฐ€ ํ”„๋กฌํ”„ํŠธ์— ์–ผ๋งˆ๋‚˜ ๊ฐ•ํ•˜๊ฒŒ ๋ถ€ํ•ฉํ•ด์•ผ ํ•˜๋Š”์ง€์ž…๋‹ˆ๋‹ค. ๊ฐ’์ด ๋‚ฎ์„์ˆ˜๋ก ๋” ์ฐฝ์˜์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ฐ’์ด ๋†’์„์ˆ˜๋ก ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋” ์—„๊ฒฉํ•˜๊ฒŒ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. 5-10 ์‚ฌ์ด์˜ ๊ฐ’์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Guidance End","localized":"๊ฐ€์ด๋˜์Šค ์ข…๋ฃŒ ์‹œ์ ","hint":"CFG ๋ฐ PAG ํšจ๊ณผ๊ฐ€ ๋๋‚˜๋Š” ์‹œ์ ์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์„ 1๋กœ ์„ค์ •ํ•˜๋ฉด ๋งˆ์ง€๋ง‰๊นŒ์ง€ ๊ฐ€์ด๋˜์Šค ํšจ๊ณผ๋ฅผ ์œ ์ง€ํ•˜๊ณ , 0.5๋กœ ์„ค์ •ํ•˜๋ฉด ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋‹จ๊ณ„์˜ 50% ์‹œ์ ์—์„œ ๊ฐ€์ด๋˜์Šค ํšจ๊ณผ๋ฅผ ๋๋ƒ…๋‹ˆ๋‹ค."},{"id":"","label":"Variation strength","localized":"๋ณ€ํ˜• ๊ฐ•๋„","hint":"์ƒ์„ฑํ•  ๋ณ€ํ˜•์˜ ๊ฐ•๋„์ž…๋‹ˆ๋‹ค. 0์—์„œ๋Š” ์•„๋ฌด๋Ÿฐ ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. 1์—์„œ๋Š” ๋ณ€ํ˜• ์‹œ๋“œ๊ฐ€ ์žˆ๋Š” ์™„์ „ํ•œ ์‚ฌ์ง„์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (a๋กœ ๋๋‚˜๋Š” ancestral ์ƒ˜ํ”Œ๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์—๋Š” ์ ์šฉ๋˜์ง€ ์•Š์Œ)"},{"id":"","label":"Extension GIT repository URL","localized":"ํ™•์žฅ Git ๋ ˆํฌ์ง€ํ† ๋ฆฌ URL","hint":"GitHub์˜ ํ™•์žฅ ๋ ˆํฌ์ง€ํ† ๋ฆฌ URL์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Specific branch name","localized":"ํŠน์ • ๋ธŒ๋žœ์น˜ ์ด๋ฆ„","hint":"ํ™•์žฅ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ณต๋ฐฑ์ธ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Local directory name","localized":"๋กœ์ปฌ ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„","hint":"ํ™•์žฅ์„ ์„ค์น˜ํ•  ๋””๋ ‰ํ† ๋ฆฌ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ๊ณต๋ฐฑ์ธ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Refresh extension list","localized":"ํ™•์žฅ ๋ชฉ๋ก ์ƒˆ๋กœ๊ณ ์นจ","hint":"์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ™•์žฅ์˜ ๋ชฉ๋ก์„ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค."},{"id":"","label":"Update all installed","localized":"์„ค์น˜๋œ ๋ชจ๋“  ํ™•์žฅ ์—…๋ฐ์ดํŠธ","hint":"์„ค์น˜๋œ ๋ชจ๋“  ํ™•์žฅ์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Apply changes","localized":"๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ ์šฉ","hint":"๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๊ณ  ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"uninstall","localized":"์ œ๊ฑฐ","hint":"์ด ํ™•์žฅ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"User interface","localized":"์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค","hint":"์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋ณธ ์„ค์ •์„ ๊ฒ€ํ† ํ•˜๊ณ  ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Set ui defaults","localized":"UI ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •","hint":"ํ˜„์žฌ ๊ฐ’์„ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Models & Networks","localized":"๋ชจ๋ธ ๋ฐ ๋„คํŠธ์›Œํฌ","hint":"์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ชจ๋ธ ๋ฐ ๋„คํŠธ์›Œํฌ ๋ชฉ๋ก์„ ๋ด…๋‹ˆ๋‹ค."},{"id":"","label":"Restore UI defaults","localized":"UI ๊ธฐ๋ณธ๊ฐ’ ๋ณต์›","hint":"๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ฐ’์„ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"detailer classes","localized":"๋””ํ…Œ์ผ๋Ÿฌ ํด๋ž˜์Šค","hint":"์„ ํƒํ•œ ๋””ํ…Œ์ผ๋Ÿฌ ๋ชจ๋ธ์ด ๋‹ค์ค‘ ํด๋ž˜์Šค ๋ชจ๋ธ์ธ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ํŠน์ • ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"detailer models","localized":"๋””ํ…Œ์ผ๋Ÿฌ ๋ชจ๋ธ","hint":"์‚ฌ์šฉํ•  ๋””ํ…Œ์ผ๋Ÿฌ ๋ชจ๋ธ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"detailer negative prompt","localized":"๋””ํ…Œ์ผ๋Ÿฌ ๋„ค๊ฑฐํ‹ฐ๋ธŒ ํ”„๋กฌํ”„ํŠธ","hint":"๋””ํ…Œ์ผ๋Ÿฌ์— ๋Œ€ํ•œ ๋ณ„๋„์˜ ๋„ค๊ฑฐํ‹ฐ๋ธŒ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ž€์ด ๊ณต๋ฐฑ์ธ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ๋„ค๊ฑฐํ‹ฐ๋ธŒ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"detailer prompt","localized":"๋””ํ…Œ์ผ๋Ÿฌ ํ”„๋กฌํ”„ํŠธ","hint":"๋””ํ…Œ์ผ๋Ÿฌ์— ๋Œ€ํ•˜์—ฌ ๋ณ„๋„์˜ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ž€์ด ๊ณต๋ฐฑ์ธ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"detailer steps","localized":"๋””ํ…Œ์ผ๋Ÿฌ ์Šคํƒญ ์ˆ˜","hint":"๋””ํ…Œ์ผ๋Ÿฌ ์ž‘์—…์„ ์‹คํ–‰ํ•  ์Šคํƒญ ์ˆ˜"},{"id":"","label":"detailer use model augment","localized":"๋””ํ…Œ์ผ๋Ÿฌ ๋ชจ๋ธ augment ์‚ฌ์šฉ","hint":"๋””ํ…Œ์ผ๋Ÿฌ ๊ฐ์ง€ ๋ชจ๋ธ์„ ๋” ๋†’์€ ์ •๋ฐ€๋„๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"edge blur","localized":"๊ฐ€์žฅ์ž๋ฆฌ ํ๋ฆผ","hint":"๋งˆ์Šคํฌ๋œ ์˜์—ญ์˜ ๊ฐ€์žฅ์ž๋ฆฌ๋ฅผ ํ๋ฆฌ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์œ„๋Š” %์ด๊ณ  ์ตœ๋Œ“๊ฐ’์€ 100%์ž…๋‹ˆ๋‹ค."},{"id":"","label":"edge padding","localized":"๊ฐ€์žฅ์ž๋ฆฌ ํŒจ๋”ฉ","hint":"๋งˆ์Šคํฌ๋œ ์˜์—ญ์˜ ๊ฐ€์žฅ์ž๋ฆฌ๋ฅผ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์œ„๋Š” %์ด๊ณ  ์ตœ๋Œ“๊ฐ’์€ 100%์ž…๋‹ˆ๋‹ค."},{"id":"","label":"min confidence","localized":"์ตœ์†Œ ์‹ ๋ขฐ๋„","hint":"๋””ํ…Œ์ผ๋Ÿฌ์— ์˜ํ•ด ๊ฐ์ง€๋œ ํ•ญ๋ชฉ์˜ ์ตœ์†Œ ์‹ ๋ขฐ๋„"},{"id":"","label":"ReBasin","localized":"","hint":"๋‘ ๋ชจ๋ธ์—์„œ ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ˆœ์—ด๊ณผ ํ•จ๊ป˜ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ณ‘ํ•ฉ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Number of ReBasin Iterations","localized":"ReBasin ๋ฐ˜๋ณต ํšŸ์ˆ˜","hint":"์ €์žฅํ•˜๊ธฐ ์ „์— ๋ชจ๋ธ์„ ๋ณ‘ํ•ฉํ•˜๊ณ  ์ˆœ์—ดํ•˜๋Š” ํšŸ์ˆ˜"},{"id":"","label":"cpu","localized":"CPU","hint":"CPU์™€ RAM๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋А๋ฆฌ์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๊ฐ€์žฅ ์ ์Šต๋‹ˆ๋‹ค."},{"id":"","label":"shuffle","localized":"์…”ํ”Œ","hint":"์ „์ฒด ๋ชจ๋ธ์€ RAM์— ๋กœ๋“œํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฐ’๋งŒ VRAM์œผ๋กœ ์˜ฎ๊ธด ํ›„ ์—ฐ์‚ฐํ•ฉ๋‹ˆ๋‹ค. CPU์™€ RAM๋งŒ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์— ๋น„ํ•ด ์กฐ๊ธˆ ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค. SDXL ๋ณ‘ํ•ฉ์— ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Preset Interpolation Ratio","localized":"์‚ฌ์ „ ์„ค์ • ๋ณด๊ฐ„ ๋น„์œจ","hint":"๋‘ ๊ฐœ์˜ ์‚ฌ์ „ ์„ค์ •์ด ์„ ํƒ๋œ ๊ฒฝ์šฐ ๊ทธ ์‚ฌ์ด๋ฅผ ๋ณด๊ฐ„ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"active ip adapters","localized":"ํ™œ์„ฑ IP ์–ด๋Œ‘ํ„ฐ ๊ฐœ์ˆ˜","hint":"ํ™œ์„ฑ IP ์–ด๋Œ‘ํ„ฐ ๊ฐœ์ˆ˜"},{"id":"","label":"unload adapter","localized":"์–ด๋Œ‘ํ„ฐ ์–ธ๋กœ๋“œ","hint":"์ƒ์„ฑ์ด ๋๋‚˜๋ฉด ์ฆ‰์‹œ IP ์–ด๋Œ‘ํ„ฐ๋ฅผ ์–ธ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋‹ค์Œ ์ƒ์„ฑ์—์„œ IP ์–ด๋Œ‘ํ„ฐ๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋กœ๋“œ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"crop to portrait","localized":"์„ธ๋กœ๋กœ ์ž๋ฅด๊ธฐ","hint":"IP ์–ด๋Œ‘ํ„ฐ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์ž…๋ ฅ ์ด๋ฏธ์ง€๋ฅผ ์„ธ๋กœ ์ „์šฉ์œผ๋กœ ์ž๋ฆ…๋‹ˆ๋‹ค."},{"id":"","label":"layer options","localized":"๋ ˆ์ด์–ด ์˜ต์…˜","hint":"IP ์–ด๋Œ‘ํ„ฐ ๊ณ ๊ธ‰ ๋ ˆ์ด์–ด ์˜ต์…˜์„ ์ˆ˜๋™์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"X values","localized":"X ๊ฐ’","hint":"์‰ผํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ X์ถ•์— ๋Œ€ํ•œ ๊ฐ’์„ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Y values","localized":"Y ๊ฐ’","hint":"์‰ผํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Y์ถ•์— ๋Œ€ํ•œ ๊ฐ’์„ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Z values","localized":"Z ๊ฐ’","hint":"์‰ผํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Z์ถ•์— ๋Œ€ํ•œ ๊ฐ’์„ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Tile overlap","localized":"ํƒ€์ผ ์ค‘๋ณต","hint":"์—…์Šค์ผ€์ผ์„ ํ•  ๋•Œ ๊ฐ ํƒ€์ผ ์‚ฌ์ด์— ๊ฒน์น˜๊ฒŒ ํ•  ํ”ฝ์…€ ์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ฒน์น˜๋Š” ํ”ฝ์…€์˜ ์ˆ˜๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ๋ชจ๋“  ํƒ€์ผ์ด ํ•˜๋‚˜์˜ ๊ทธ๋ฆผ์œผ๋กœ ๋‹ค์‹œ ๋ณ‘ํ•ฉ๋œ ์ดํ›„ ํƒ€์ผ ๊ฐ„ ์ด์Œ์ƒˆ๊ฐ€ ๋ˆˆ์— ๋œ ๋•๋‹ˆ๋‹ค."},{"id":"sett_reload_sd_model","label":"Reload model","localized":"๋ชจ๋ธ ๋‹ค์‹œ ๋กœ๋“œ","hint":"ํ˜„์žฌ ์„ ํƒ๋œ ๋ชจ๋ธ์„ ๋‹ค์‹œ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Variational Auto Encoder","localized":"Variational Auto Encoder","hint":"VAE ๋ฐ ์ด๋ฏธ์ง€ ๋””์ฝ”๋“œ ์ž‘์—…๊ณผ ๊ด€๋ จ๋œ ์„ค์ •"},{"id":"","label":"Text encoder","localized":"ํ…์ŠคํŠธ ์ธ์ฝ”๋”","hint":"ํ…์ŠคํŠธ ์ธ์ฝ”๋” ๋ฐ ํ”„๋กฌํ”„ํŠธ ์ธ์ฝ”๋“œ ๊ด€๋ จ ์„ค์ •"},{"id":"","label":"Compute Settings","localized":"์—ฐ์‚ฐ ์„ค์ •","hint":"์—ฐ์‚ฐ ์ •๋ฐ€๋„, cross-attention ๋ฐ ์ตœ์ ํ™” ๊ด€๋ จ ์„ค์ •"},{"id":"","label":"Backend Settings","localized":"๋ฐฑ์—”๋“œ ์„ค์ •","hint":"torch, onnx ๋ฐ olive์™€ ๊ฐ™์€ ์—ฐ์‚ฐ ๋ฐฑ์—”๋“œ ๊ด€๋ จ ์„ค์ •"},{"id":"","label":"Pipeline modifiers","localized":"ํŒŒ์ดํ”„๋ผ์ธ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ","hint":"์ƒ์„ฑ ์ค‘์— ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ"},{"id":"","label":"Sampler Settings","localized":"์ƒ˜ํ”Œ๋Ÿฌ ์„ค์ •","hint":"์ƒ˜ํ”Œ๋Ÿฌ ์„ ํƒ ๋ฐ ๊ตฌ์„ฑ, Diffusers ์ƒ˜ํ”Œ๋Ÿฌ ๊ตฌ์„ฑ ๊ด€๋ จ ์„ค์ •"},{"id":"","label":"Postprocessing","localized":"ํ›„์ฒ˜๋ฆฌ","hint":"์ด๋ฏธ์ง€ ์ƒ์„ฑ ํ›„ ์ฒ˜๋ฆฌ, ์–ผ๊ตด ๋ณต์› ๋ฐ ์—…์Šค์ผ€์ผ ๊ด€๋ จ ์„ค์ •"},{"id":"","label":"Huggingface","localized":"Huggingface","hint":"Huggingface ๊ด€๋ จ ์„ค์ •"},{"id":"","label":"Show all pages","localized":"๋ชจ๋“  ํŽ˜์ด์ง€ ํ‘œ์‹œ","hint":"๋ชจ๋“  ์„ค์ • ํŽ˜์ด์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"VAE model","localized":"VAE ๋ชจ๋ธ","hint":"VAE๋Š” ์ตœ์ข… ์ด๋ฏธ์ง€์˜ ๋ฏธ์„ธํ•œ ๋””ํ…Œ์ผ์„ ๋ณด์ •ํ•ฉ๋‹ˆ๋‹ค. ์ƒ‰๊ฐ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค."},{"id":"","label":"Model load using streams","localized":"์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ ๋กœ๋“œ","hint":"๋ชจ๋ธ์„ ๋กœ๋“œํ•  ๋•Œ ๋А๋ฆฐ ์ €์žฅ ์žฅ์น˜์™€ ๋„คํŠธ์›Œํฌ ์Šคํ† ๋ฆฌ์ง€์— ์ตœ์ ํ™”๋œ ์ŠคํŠธ๋ฆฌ๋ฐ ๋กœ๋“œ๋ฅผ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Full","localized":"","hint":"ํ•ญ์ƒ ์ตœ๋Œ€ ์ •๋ฐ€๋„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"FP32","localized":"FP32","hint":"32๋น„ํŠธ ๋ถ€๋™ ์†Œ์ˆ˜์ ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"FP16","localized":"FP16","hint":"16๋น„ํŠธ ๋ถ€๋™ ์†Œ์ˆ˜์ ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"BF16","localized":"BF16","hint":"์ˆ˜์ •๋œ 16๋น„ํŠธ ๋ถ€๋™ ์†Œ์ˆ˜์ ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Full precision (--no-half-vae)","localized":"VAE ์ตœ๋Œ€ ์ •๋ฐ€๋„ (--no-half-vae)","hint":"VAE์— FP32๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋” ๋งŽ์€ VRAM์„ ์‚ฌ์šฉํ•˜๊ณ  ์ƒ์„ฑ ์†๋„๊ฐ€ ๋А๋ฆฌ์ง€๋งŒ ๋” ๋‚˜์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."},{"id":"","label":"Force full precision (--no-half)","localized":"๋ชจ๋ธ ์ตœ๋Œ€ ์ •๋ฐ€๋„ (--no-half)","hint":"๋ชจ๋ธ์— FP32๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋” ๋งŽ์€ VRAM์„ ์‚ฌ์šฉํ•˜๊ณ  ์ƒ์„ฑ ์†๋„๊ฐ€ ๋А๋ฆฌ์ง€๋งŒ ๋” ๋‚˜์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."},{"id":"","label":"Upcast sampling","localized":"์—…์บ์ŠคํŠธ ์ƒ˜ํ”Œ๋ง","hint":"--no-half๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์™€ ์œ ์‚ฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ƒ์„ฑ ์†๋„๊ฐ€ ๋” ๋น ๋ฅด๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋„ ๋œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Attempt VAE roll back for NaN values","localized":"NaN ๊ฐ’ ๋ฐœ์ƒ ์‹œ VAE ๋กค๋ฐฑ ์‹œ๋„","hint":"Torch 2.1 ๋ฐ NaN ๊ฒ€์‚ฌ๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Olive use FP16 on optimization","localized":"Olive:์ตœ์ ํ™” ์‹œ FP16 ์‚ฌ์šฉ","hint":"Olive ์ตœ์ ํ™” ํ”„๋กœ์„ธ์Šค์˜ ์ถœ๋ ฅ ๋ชจ๋ธ์— 16๋น„ํŠธ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ •๋ฐ€๋„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋น„ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ 32๋น„ํŠธ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ •๋ฐ€๋„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Olive force FP32 for VAE Encoder","localized":"Olive:VAE ์ธ์ฝ”๋”์— ๋Œ€ํ•ด FP32 ๊ฐ•์ œ","hint":"์ถœ๋ ฅ ๋ชจ๋ธ์˜ VAE ์ธ์ฝ”๋”์— 32๋น„ํŠธ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ •๋ฐ€๋„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” '์ตœ์ ํ™” ์‹œ FP16 ์‚ฌ์šฉ' ์˜ต์…˜์„ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค. Img2Img์—์„œ NaN ๋˜๋Š” ๊ฒ€์€์ƒ‰ ๋นˆ ์ด๋ฏธ์ง€๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์ด ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•˜๊ณ  ์บ์‹œ๋œ ๋ชจ๋ธ์„ ์ œ๊ฑฐํ•˜์„ธ์š”."},{"id":"","label":"Olive use static dimensions","localized":"Olive:์ •์  ์ฐจ์› ์‚ฌ์šฉ","hint":"Olive ์ตœ์ ํ™” ๋ชจ๋ธ์˜ ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์†๋„๋ฅผ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. (OrtTransformersOptimization)"},{"id":"","label":"Olive cache optimized models","localized":"Olive:์ตœ์ ํ™” ๋ชจ๋ธ ์บ์‹œ","hint":"Olive ์ฒ˜๋ฆฌ๋œ ๋ชจ๋ธ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ONNX ํƒญ์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."},{"id":"","label":"Inpainting conditioning mask strength","localized":"์ธํŽ˜์ธํŠธ conditioning mask ๊ฐ•๋„","hint":"์ธํŽ˜์ธํŠธ ๋ฐ img2img์— ๋Œ€ํ•ด ์›๋ณธ ์ด๋ฏธ์ง€๋ฅผ ์–ผ๋งˆ๋‚˜ ๊ฐ•ํ•˜๊ฒŒ ๋งˆ์Šคํ‚นํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. 1.0์€ ์™„์ „ํžˆ ๋งˆ์Šคํ‚น(๊ธฐ๋ณธ๊ฐ’)์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 0.0์€ ์™„์ „ํžˆ ๋งˆ์Šคํ‚น๋˜์ง€ ์•Š์€ ์ปจ๋””์…”๋‹์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์ด ๋‚ฎ์„์ˆ˜๋ก ์ด๋ฏธ์ง€์˜ ์ „์ฒด ๊ตฌ์„ฑ์„ ๋ณด์กดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์ง€๋งŒ ํฐ ๋ณ€๊ฒฝ์—๋Š” ์–ด๋ ค์›€์„ ๊ฒช์Šต๋‹ˆ๋‹ค."},{"id":"","label":"Clip skip","localized":"Clip skip","hint":"CLIP ๋ชจ๋ธ์˜ ์ค‘๋‹จ ์‹œ์ . ์ด ๊ฐ’์„ 1๋กœ ์„ค์ •ํ•˜๋ฉด ํ‰์†Œ์™€ ๊ฐ™์ด ๋งˆ์ง€๋ง‰ ๋ ˆ์ด์–ด์—์„œ ์ค‘๋‹จํ•˜๊ณ , 2๋กœ ์„ค์ •ํ•˜๋ฉด ๋์—์„œ ๋‘ ๋ฒˆ์งธ ๋ ˆ์ด์–ด์—์„œ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Approximate","localized":"","hint":"๋น ๋ฅด๊ณ  ๊ฐ€๋ฒผ์šด ๊ทผ์‚ฌ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. VAE์— ๋น„ํ•ด ๋งค์šฐ ๋น ๋ฅด์ง€๋งŒ ๊ฐ€๋กœ/์„ธ๋กœ ํ•ด์ƒ๋„๊ฐ€ 4๋ฐฐ ์ž‘๊ณ  ํ’ˆ์งˆ์ด ๋‚ฎ์€ ์‚ฌ์ง„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Simple","localized":"","hint":"๋งค์šฐ ๋น ๋ฅด๊ณ  ๊ฐ€๋ฒผ์šด ๊ทผ์‚ฌ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. VAE์— ๋น„ํ•ด ๋งค์šฐ ๋น ๋ฅด์ง€๋งŒ ๊ฐ€๋กœ/์„ธ๋กœ ํ•ด์ƒ๋„๊ฐ€ 8๋ฐฐ ์ž‘๊ณ  ํ’ˆ์งˆ์ด ๋งค์šฐ ๋‚ฎ์€ ์‚ฌ์ง„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Progress update period","localized":"์ง„ํ–‰๋ฅ  ์—…๋ฐ์ดํŠธ ์ฃผ๊ธฐ","hint":"UI ํ”„๋กœ๊ทธ๋ ˆ์Šค ๋ฐ” ๋ฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์œ„ํ•œ ์—…๋ฐ์ดํŠธ ์ฃผ๊ธฐ์ž…๋‹ˆ๋‹ค. (๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„)"},{"id":"","label":"Euler a","localized":"Euler a","hint":"Euler Ancestral - ๋งค์šฐ ์ฐฝ์˜์ ์ด๋ฉฐ ์Šคํƒญ ์ˆ˜์— ๋”ฐ๋ผ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ทธ๋ฆผ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํƒญ ์ˆ˜๋ฅผ 30-40๋‹จ๊ณ„๋ณด๋‹ค ๋†’๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค."},{"id":"","label":"DDIM","localized":"DDIM","hint":"Denoising Diffusion Implicit Models - ์ธํŽ˜์ธํŠธ์— ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"UniPC","localized":"UniPC","hint":"Diffusion ๋ชจ๋ธ์˜ ๋น ๋ฅธ ์ƒ˜ํ”Œ๋ง์„ ์œ„ํ•œ ํ†ตํ•ฉ ์˜ˆ์ธก๊ธฐ"},{"id":"","label":"sigma negative guidance minimum","localized":"์‹œ๊ทธ๋งˆ ์Œ์ˆ˜ ์ง€์นจ ์ตœ์†Ÿ๊ฐ’","hint":"์ด๋ฏธ์ง€๊ฐ€ ๊ฑฐ์˜ ์ค€๋น„๋˜์—ˆ์„ ๋•Œ ์ผ๋ถ€ ๋‹จ๊ณ„์— ๋Œ€ํ•œ ์Œ์ˆ˜ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. 0=๋น„ํ™œ์„ฑํ™”"},{"id":"","label":"Upscaler tile overlap","localized":"์—…์Šค์ผ€์ผ๋Ÿฌ ํƒ€์ผ ์ค‘๋ณต","hint":"์ด ๊ฐ’์ด ๋‚ฎ์„ ์ˆ˜๋ก ํƒ€์ผ ๊ฐ„ ์ด์Œ์ƒˆ ๋ถ€๋ถ„์ด ๋” ์ž˜ ๋ณด์ž…๋‹ˆ๋‹ค."},{"id":"","label":"VAE slicing","localized":"VAE ์Šฌ๋ผ์ด์‹ฑ","hint":"VRAM ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋ฅผ ๋””์ฝ”๋“œํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์ค‘ ์ด๋ฏธ์ง€ ๋ฐฐ์น˜์—์„œ VAE ๋””์ฝ”๋“œ ์ž‘์—…์ด ์•ฝ๊ฐ„ ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค."},{"id":"","label":"VAE tiling","localized":"VAE ํƒ€์ผ๋ง","hint":"VRAM ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ํฐ ์ด๋ฏธ์ง€๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํƒ€์ผ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ์ƒ์„ฑ ์‹œ๊ฐ„์ด ์•ฝ๊ฐ„ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Dynamic attention BMM","localized":"๋‹ค์ด๋‚˜๋ฏน ์–ดํ…์…˜ BMM","hint":"์–ดํ…์…˜ ๊ณ„์‚ฐ์„ ํ•œ ๋ฒˆ์— ๋ชจ๋‘ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ  ๋‹จ๊ณ„๋ณ„๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ ์†๋„๊ฐ€ ๋А๋ ค์ง€์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ํฌ๊ฒŒ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค."},{"id":"","label":"ONNX Execution Provider","localized":"ONNX Execution Provider","hint":"ONNX Runtime์—์„œ ์‚ฌ์šฉํ•  ์žฅ์น˜ ์ข…๋ฅ˜ (Execution Provider)"},{"id":"","label":"ONNX allow fallback to CPU","localized":"ONNX:CPU fallback ํ—ˆ์šฉ","hint":"์„ ํƒํ•œ Execution Provider๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์„ ๋•Œ CPU๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"ONNX cache converted models","localized":"ONNX:๋ณ€ํ™˜๋œ ๋ชจ๋ธ ์ €์žฅ","hint":"ONNX ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜๋œ ๋ชจ๋ธ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ONNX ํƒญ์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."},{"id":"","label":"ONNX unload base model when processing refiner","localized":"ONNX:๋ฆฌํŒŒ์ด๋„ˆ ๋‹จ๊ณ„์—์„œ ๊ธฐ๋ณธ ๋ชจ๋ธ ์–ธ๋กœ๋“œ","hint":"๋ฆฌํŒŒ์ด๋„ˆ๊ฐ€ ๋ณ€ํ™˜/์ตœ์ ํ™”/์ฒ˜๋ฆฌ๋  ๋•Œ ๊ธฐ๋ณธ ๋ชจ๋ธ์„ ์–ธ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"model compile precompile","localized":"๋ชจ๋ธ ์ปดํŒŒ์ผ ์‚ฌ์ „ ์ปดํŒŒ์ผ","hint":"๋ชจ๋ธ์„ ๋กœ๋“œํ•  ๋•Œ ๋ชจ๋ธ ์ปดํŒŒ์ผ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด ์ƒˆ๋กœ ์ž‘์—…์„ ์‹œ์ž‘ํ•  ๋•Œ ๋ชจ๋ธ์„ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"Use zeros for prompt padding","localized":"ํ”„๋กฌํ”„ํŠธ ํŒจ๋”ฉ์— 0 ์‚ฌ์šฉ","hint":"ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋น„์–ด ์žˆ์„ ๋•Œ ๋…ธ์ด์ฆˆ๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜๋จธ์ง€๋ฅผ 0์œผ๋กœ ์ฑ„์›๋‹ˆ๋‹ค."},{"id":"","label":"invisible watermark string","localized":"๋ณด์ด์ง€ ์•Š๋Š” ์›Œํ„ฐ๋งˆํฌ ๋ฌธ์ž์—ด","hint":"์ด๋ฏธ์ง€์— ์ถ”๊ฐ€ํ•  ๋ณด์ด์ง€ ์•Š๋Š” ์›Œํ„ฐ๋งˆํฌ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ ์†์ƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋งค์šฐ ์งง๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"1st stage backbone","localized":"1๋‹จ๊ณ„ backbone","hint":"1๋‹จ๊ณ„ backbone"},{"id":"","label":"1st stage skip","localized":"1๋‹จ๊ณ„ skip","hint":"1๋‹จ๊ณ„ skip"},{"id":"","label":"2nd stage backbone","localized":"2๋‹จ๊ณ„ backbone","hint":"2๋‹จ๊ณ„ backbone"},{"id":"","label":"2nd stage skip","localized":"2๋‹จ๊ณ„ skip","hint":"2๋‹จ๊ณ„ skip"},{"id":"","label":"aggressive at step","localized":"","hint":"aggressive at step"},{"id":"","label":"alt","localized":"","hint":"Alt"},{"id":"","label":"apply linfusion distillation on load","localized":"๋กœ๋“œ ์‹œ Linfusion distillation ์ ์šฉ","hint":"๋กœ๋“œ ์‹œ Linfusion distillation ์ ์šฉ"},{"id":"","label":"as a tab","localized":"ํƒญ","hint":"ํƒญ"},{"id":"","label":"auto requeue failed tasks","localized":"์‹คํŒจํ•œ ์ž‘์—… ๋Œ€๊ธฐ์—ด์— ๋‹ค์‹œ ์ถ”๊ฐ€","hint":"์‹คํŒจํ•œ ์ž‘์—…์„ ์ž๋™์œผ๋กœ ๋Œ€๊ธฐ์—ด์— ๋‹ค์‹œ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"backend storage","localized":"์—ฐ์‚ฐ ๋ฐ์ดํ„ฐ ํƒ€์ž…","hint":"์—ฐ์‚ฐ ๋ฐ์ดํ„ฐ ํƒ€์ž…"},{"id":"","label":"batch matrix-matrix","localized":"","hint":"batch matrix-matrix"},{"id":"","label":"batch mode uses sequential seeds","localized":"์—ฐ์†์  ์‹œ๋“œ ์‚ฌ์šฉ","hint":"์—ฐ์†์  ์‹œ๋“œ ์‚ฌ์šฉ"},{"id":"","label":"beta end","localized":"","hint":"beta end"},{"id":"","label":"beta start","localized":"","hint":"beta start"},{"id":"","label":"change log","localized":"์ฒด์ธ์ง€๋กœ๊ทธ","hint":"์ฒด์ธ์ง€๋กœ๊ทธ"},{"id":"","label":"channels last","localized":"","hint":"channels last"},{"id":"","label":"civitai","localized":"","hint":"CivitAI"},{"id":"","label":"civitai model type","localized":"CivitAI ๋ชจ๋ธ ์œ ํ˜•","hint":"CivitAI ๋ชจ๋ธ ์œ ํ˜•"},{"id":"","label":"civitai token","localized":"CivitAI ํ† ํฐ","hint":"CivitAI ํ† ํฐ"},{"id":"","label":"cross-attention","localized":"","hint":"cross-attention"},{"id":"","label":"ctrl","localized":"","hint":"Ctrl"},{"id":"","label":"cudamallocasync","localized":"cudaMallocAsync","hint":"cudaMallocAsync"},{"id":"","label":"current","localized":"ํ˜„์žฌ ๋กœ๋“œ๋œ ๋ชจ๋ธ","hint":"ํ˜„์žฌ ๋กœ๋“œ๋œ ๋ชจ๋ธ"},{"id":"","label":"deep-cache","localized":"","hint":"deep-cache"},{"id":"","label":"deterministic mode","localized":"","hint":"deterministic mode"},{"id":"","label":"disabled","localized":"๋น„ํ™œ์„ฑํ™”","hint":"๋น„ํ™œ์„ฑํ™”"},{"id":"","label":"downscale high resolution live previews","localized":"๊ณ ํ•ด์ƒ๋„ ์‹ค์‹œ๊ฐ„ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ถ•์†Œ","hint":"๊ณ ํ•ด์ƒ๋„ ์‹ค์‹œ๊ฐ„ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ถ•์†Œ"},{"id":"","label":"dynamic","localized":"","hint":"dynamic"},{"id":"","label":"dynamic attention","localized":"","hint":"dynamic attention"},{"id":"","label":"dynamic attention slicing rate in gb","localized":"๋‹ค์ด๋‚˜๋ฏน ์–ดํ…์…˜ ์Šฌ๋ผ์ด์‹ฑ ๋น„์œจ (GB ๋‹จ์œ„)","hint":"๋‹ค์ด๋‚˜๋ฏน ์–ดํ…์…˜ ์Šฌ๋ผ์ด์‹ฑ ๋น„์œจ (GB ๋‹จ์œ„)"},{"id":"","label":"dynamic attention trigger rate in gb","localized":"๋‹ค์ด๋‚˜๋ฏน ์–ดํ…์…˜ ํŠธ๋ฆฌ๊ฑฐ ๋น„์œจ (GB ๋‹จ์œ„)","hint":"๋‹ค์ด๋‚˜๋ฏน ์–ดํ…์…˜ ํŠธ๋ฆฌ๊ฑฐ ๋น„์œจ (GB ๋‹จ์œ„)"},{"id":"","label":"expandable segments","localized":"","hint":"expandable segments"},{"id":"","label":"false","localized":"๋น„ํ™œ์„ฑํ™”","hint":"๋น„ํ™œ์„ฑํ™”"},{"id":"","label":"first-block cache enabled","localized":"First-block ์บ์‹œ ํ™œ์„ฑํ™”","hint":"First-block ์บ์‹œ ํ™œ์„ฑํ™”"},{"id":"","label":"flash attention","localized":"","hint":"flash attention"},{"id":"","label":"folder for onnx conversion","localized":"ONNX ๋ณ€ํ™˜์„ ์œ„ํ•œ ์ž„์‹œ ํด๋”","hint":"ONNX ๋ณ€ํ™˜์„ ์œ„ํ•œ ์ž„์‹œ ํด๋”"},{"id":"","label":"full vae","localized":"VAE","hint":"๊ทผ์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  VAE๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"full-depth cudnn benchmark","localized":"Full-depth cuDNN ๋ฒค์น˜๋งˆํฌ","hint":"Full-depth cuDNN ๋ฒค์น˜๋งˆํฌ"},{"id":"","label":"fused projections","localized":"","hint":"fused projections"},{"id":"","label":"gc threshold","localized":"๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์ž„๊ณ„๊ฐ’","hint":"๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์ž„๊ณ„๊ฐ’"},{"id":"","label":"get changelog","localized":"์ฒด์ธ์ง€๋กœ๊ทธ ๊ฐ€์ ธ์˜ค๊ธฐ","hint":"์ฒด์ธ์ง€๋กœ๊ทธ ๊ฐ€์ ธ์˜ค๊ธฐ"},{"id":"","label":"hide the custom checkpoint dropdown","localized":"์ปค์Šคํ…€ ๋ชจ๋ธ ๋“œ๋กญ๋‹ค์šด ์ˆจ๊ธฐ๊ธฐ","hint":"์ปค์Šคํ…€ ๋ชจ๋ธ ๋“œ๋กญ๋‹ค์šด ์ˆจ๊ธฐ๊ธฐ"},{"id":"","label":"hidet","localized":"","hint":"hidet"},{"id":"","label":"inductor","localized":"","hint":"inductor"},{"id":"","label":"layerwise casting storage","localized":"Layerwise casting ์Šคํ† ๋ฆฌ์ง€ ํƒ€์ž…","hint":"Layerwise casting ์Šคํ† ๋ฆฌ์ง€ ํƒ€์ž…"},{"id":"","label":"layerwise non-blocking operations","localized":"Layerwise ์ž‘์—… ๋ธ”๋กœํ‚น ์•ˆ ํ•จ","hint":"Layerwise ์ž‘์—… ๋ธ”๋กœํ‚น ์•ˆ ํ•จ"},{"id":"","label":"ldsr processing steps","localized":"LDSR ์ฒ˜๋ฆฌ ์Šคํƒญ ์ˆ˜","hint":"LDSR ์ฒ˜๋ฆฌ ์Šคํƒญ ์ˆ˜"},{"id":"","label":"load model directly to gpu","localized":"๋ชจ๋ธ์„ GPU๋กœ ์ง์ ‘ ๋กœ๋“œ","hint":"๋ชจ๋ธ์„ GPU๋กœ ๋ฐ”๋กœ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"low order","localized":"","hint":"low order"},{"id":"","label":"math attention","localized":"","hint":"math attention"},{"id":"","label":"max-autotune","localized":"","hint":"max-autotune"},{"id":"","label":"max-autotune-no-cudagraphs","localized":"","hint":"max-autotune-no-cudagraphs"},{"id":"","label":"memory attention","localized":"","hint":"memory attention"},{"id":"","label":"migraphx","localized":"","hint":"MIGraphX"},{"id":"","label":"model auto-download on demand","localized":"ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ชจ๋ธ ์ž๋™ ๋‹ค์šด๋กœ๋“œ","hint":"ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ชจ๋ธ์„ ์ž๋™์œผ๋กœ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"model autoload on start","localized":"์‹œ์ž‘ ์‹œ ๋ชจ๋ธ ์ž๋™ ๋กœ๋“œ","hint":"์‹œ์ž‘ ์‹œ ๋ชจ๋ธ์„ ์ž๋™์œผ๋กœ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"model compile fullgraph","localized":"๋ชจ๋ธ ์ปดํŒŒ์ผ fullgraph","hint":"๋ชจ๋ธ ์ปดํŒŒ์ผ fullgraph"},{"id":"","label":"model compile suppress errors","localized":"๋ชจ๋ธ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ์ˆจ๊ธฐ๊ธฐ","hint":"๋ชจ๋ธ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๋ฅผ ์ˆจ๊น๋‹ˆ๋‹ค."},{"id":"","label":"modern","localized":"๋ชจ๋˜","hint":"๋ชจ๋˜"},{"id":"","label":"native","localized":"๊ธฐ๋ณธ","hint":"๊ธฐ๋ณธ"},{"id":"","label":"noise multiplier (eta)","localized":"๋…ธ์ด์ฆˆ ๋ฐฐ์ˆ˜ (eta)","hint":"๋…ธ์ด์ฆˆ ๋ฐฐ์ˆ˜ (eta)"},{"id":"","label":"noise multiplier for image processing","localized":"์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋…ธ์ด์ฆˆ ๋ฐฐ์ˆ˜","hint":"์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋…ธ์ด์ฆˆ ๋ฐฐ์ˆ˜"},{"id":"","label":"noise seed delta (eta)","localized":"","hint":"noise seed delta (eta)"},{"id":"","label":"override t1 ratio","localized":"","hint":"override t1 ratio"},{"id":"","label":"override t2 ratio","localized":"","hint":"override t1 ratio"},{"id":"","label":"parallel process images in batch","localized":"์ด๋ฏธ์ง€ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ","hint":"์ด๋ฏธ์ง€๋ฅผ ๋ฐฐ์น˜์—์„œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"prediction method","localized":"Prediction ์ข…๋ฅ˜","hint":"Prediction ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ Prediction ์ข…๋ฅ˜๋ฅผ ์˜ฌ๋ฐ”๋ฅธ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"quantization activations type","localized":"์–‘์žํ™” Activation ๋ฐ์ดํ„ฐ ํƒ€์ž…","hint":"์–‘์žํ™” Activation ๋ฐ์ดํ„ฐ ํƒ€์ž…"},{"id":"","label":"quantization type","localized":"์–‘์žํ™” ๋ฐ์ดํ„ฐ ํƒ€์ž…","hint":"์–‘์žํ™” ๋ฐ์ดํ„ฐ ํƒ€์ž…"},{"id":"","label":"quantization weights type","localized":"์–‘์žํ™” ๋ฐ์ดํ„ฐ ํƒ€์ž…","hint":"์–‘์žํ™” ๋ฐ์ดํ„ฐ ํƒ€์ž…"},{"id":"","label":"reduce-overhead","localized":"","hint":"reduce-overhead"},{"id":"","label":"rescale","localized":"","hint":"rescale"},{"id":"","label":"residual diff threshold","localized":"","hint":"residual diff threshold"},{"id":"","label":"sage attention","localized":"","hint":"sage attention"},{"id":"","label":"search changelog","localized":"์ฒด์ธ์ง€๋กœ๊ทธ ๊ฒ€์ƒ‰","hint":"์ฒด์ธ์ง€๋กœ๊ทธ ๊ฒ€์ƒ‰"},{"id":"","label":"sharpen","localized":"์„ ๋ช…๋„","hint":"์„ ๋ช…๋„"},{"id":"","label":"shift","localized":"","hint":"Shift"},{"id":"","label":"shuffle weights","localized":"๊ฐ€์ค‘์น˜ ์…”ํ”Œ","hint":"๊ฐ€์ค‘์น˜ ์…”ํ”Œ"},{"id":"","label":"sigma max","localized":"์‹œ๊ทธ๋งˆ ์ตœ๋Œ“๊ฐ’","hint":"์‹œ๊ทธ๋งˆ ์ตœ๋Œ“๊ฐ’"},{"id":"","label":"sigma min","localized":"์‹œ๊ทธ๋งˆ ์ตœ์†Ÿ๊ฐ’","hint":"์‹œ๊ทธ๋งˆ ์ตœ์†Ÿ๊ฐ’"},{"id":"","label":"skip generation if nan found in latents","localized":"์ƒ์„ฑ ์ค‘ NaN์ด ๋ฐœ๊ฒฌ๋˜๋ฉด ๊ฑด๋„ˆ๋›ฐ๊ธฐ","hint":"์ƒ์„ฑ ์ค‘ NaN์ด ๋ฐœ๊ฒฌ๋˜๋ฉด ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค."},{"id":"","label":"skip guidance layers","localized":"๊ฐ€์ด๋˜์Šค ๋ ˆ์ด์–ด ๊ฑด๋„ˆ๋›ฐ๊ธฐ","hint":"๊ฐ€์ด๋˜์Šค ๋ ˆ์ด์–ด ๊ฑด๋„ˆ๋›ฐ๊ธฐ"},{"id":"","label":"split attention","localized":"","hint":"split attention"},{"id":"","label":"taesd","localized":"","hint":"taesd"},{"id":"","label":"taesd decode layers","localized":"TAESD ๋””์ฝ”๋“œ ๋ ˆ์ด์–ด","hint":"TAESD ๋””์ฝ”๋“œ ๋ ˆ์ด์–ด"},{"id":"","label":"taesd variant","localized":"TAESD ๋ณ€ํ˜•","hint":"TAESD ๋ณ€ํ˜•"},{"id":"","label":"task list page size (0 for auto)","localized":"์ž‘์—… ๋ชฉ๋ก ํŽ˜์ด์ง€ ํฌ๊ธฐ","hint":"์ž‘์—… ๋ชฉ๋ก ํŽ˜์ด์ง€ ํฌ๊ธฐ. 0์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ์ž๋™์œผ๋กœ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"thresholding","localized":"","hint":"thresholding"},{"id":"","label":"timestep","localized":"ํƒ€์ž„์Šคํƒญ","hint":"ํƒ€์ž„์Šคํƒญ"},{"id":"","label":"timestep skip end","localized":"ํƒ€์ž„์Šคํƒญ ์Šคํ‚ต ๋","hint":"ํƒ€์ž„์Šคํƒญ ์Šคํ‚ต ๋"},{"id":"","label":"timestep skip start","localized":"ํƒ€์ž„์Šคํƒญ ์Šคํ‚ต ์‹œ์ž‘","hint":"ํƒ€์ž„์Šคํƒญ ์Šคํ‚ต ์‹œ์ž‘"},{"id":"","label":"timestep spacing","localized":"ํƒ€์ž„์Šคํƒญ ๊ฐ„๊ฒฉ","hint":"ํƒ€์ž„์Šคํƒญ ๊ฐ„๊ฒฉ"},{"id":"","label":"timesteps","localized":"ํƒ€์ž„์Šคํƒญ ์ˆ˜","hint":"ํƒ€์ž„์Šคํƒญ ์ˆ˜"},{"id":"","label":"timesteps override","localized":"ํƒ€์ž„์Šคํƒญ ์ˆ˜ ๋ฎ์–ด์“ฐ๊ธฐ","hint":"ํƒ€์ž„์Šคํƒญ ์ˆ˜ ๋ฎ์–ด์“ฐ๊ธฐ"},{"id":"","label":"timesteps presets","localized":"ํƒ€์ž„์Šคํƒญ ์ˆ˜ ํ”„๋ฆฌ์…‹","hint":"ํƒ€์ž„์Šคํƒญ ์ˆ˜ ํ”„๋ฆฌ์…‹"},{"id":"","label":"timesteps range","localized":"ํƒ€์ž„์Šคํƒญ ์ˆ˜ ๋ฒ”์œ„","hint":"ํƒ€์ž„์Šคํƒญ ์ˆ˜ ๋ฒ”์œ„"},{"id":"","label":"todo","localized":"ToDo","hint":"ToDo"},{"id":"","label":"tome","localized":"ToMe","hint":"Token Merging"},{"id":"","label":"true","localized":"ํ™œ์„ฑํ™”","hint":"ํ™œ์„ฑํ™”"},{"id":"","label":"tunable ops limit","localized":"Tunable ops ์ œํ•œ","hint":"Tunable ops ์ œํ•œ"},{"id":"","label":"unet","localized":"UNet","hint":"UNet"},{"id":"","label":"unet depth","localized":"UNet ๊นŠ์ด","hint":"UNet ๊นŠ์ด"},{"id":"","label":"unet enabled","localized":"UNet์— ์ ์šฉ","hint":"UNet์— HyperTile ์ ์šฉ"},{"id":"","label":"unet max tile size","localized":"UNet ์ตœ๋Œ€ ํƒ€์ผ ํฌ๊ธฐ","hint":"UNet ์ตœ๋Œ€ ํƒ€์ผ ํฌ๊ธฐ"},{"id":"","label":"unet min tile size","localized":"UNet ์ตœ์†Œ ํƒ€์ผ ํฌ๊ธฐ","hint":"UNet ์ตœ์†Œ ํƒ€์ผ ํฌ๊ธฐ"},{"id":"","label":"unet model","localized":"UNet ๋ชจ๋ธ","hint":"UNet ๋ชจ๋ธ"},{"id":"","label":"unet swap size","localized":"UNet ์Šค์™‘ ํฌ๊ธฐ","hint":"UNet ์Šค์™‘ ํฌ๊ธฐ"},{"id":"","label":"unset","localized":"๊ธฐ๋ณธ๊ฐ’","hint":"๊ธฐ๋ณธ๊ฐ’"},{"id":"","label":"use separate base dict","localized":"๋ณ„๋„์˜ ๋ชจ๋ธ ๋”•์…”๋„ˆ๋ฆฌ ์‚ฌ์šฉ","hint":"๋ณ„๋„์˜ ๋ชจ๋ธ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."},{"id":"","label":"vae enabled","localized":"VAE์— ์ ์šฉ","hint":"VAE์— HyperTile ์ ์šฉ"},{"id":"","label":"visual query","localized":"๋น„์ฃผ์–ผ ์ฟผ๋ฆฌ","hint":"๋น„์ฃผ์–ผ ์ฟผ๋ฆฌ"},{"id":"","label":"weighted","localized":"๊ฐ€์ค‘์น˜ ์ ์šฉ","hint":"๊ฐ€์ค‘์น˜ ์ ์šฉ"}] diff --git a/html/reference.json b/html/reference.json index e90aad1d1..cfb4a7dcc 100644 --- a/html/reference.json +++ b/html/reference.json @@ -50,7 +50,7 @@ "preview": "dreamshaperXL_v21TurboDPMSDE.jpg", "desc": "Showcase finetuned model based on Stable diffusion XL", "extras": "sampler: DPM SDE, steps: 8, cfg_scale: 2.0" - }, + }, "SDXS DreamShaper 512": { "path": "IDKiro/sdxs-512-dreamshaper", @@ -194,37 +194,37 @@ "desc": "Sana is an efficient model with scaling of training-time and inference time techniques. SANA-1.5 delivers: efficient model growth from 1.6B Sana-1.0 model to 4.8B, achieving similar or better performance than training from scratch and saving 60% training cost; efficient model depth pruning, slimming any model size as you want; powerful VLM selection based inference scaling, smaller model+inference scaling > larger model.", "preview": "Efficient-Large-Model--Sana_1600M_1024px_diffusers.jpg", "skip": true - }, + }, "NVLabs Sana 1.5 4.8B 1k": { "path": "Efficient-Large-Model/SANA1.5_4.8B_1024px_diffusers", "desc": "Sana is an efficient model with scaling of training-time and inference time techniques. SANA-1.5 delivers: efficient model growth from 1.6B Sana-1.0 model to 4.8B, achieving similar or better performance than training from scratch and saving 60% training cost; efficient model depth pruning, slimming any model size as you want; powerful VLM selection based inference scaling, smaller model+inference scaling > larger model.", "preview": "Efficient-Large-Model--Sana_1600M_1024px_diffusers.jpg", "skip": true - }, + }, "NVLabs Sana 1.5 1.6B 1k Sprint": { "path": "Efficient-Large-Model/Sana_Sprint_1.6B_1024px_diffusers", "desc": "SANA-Sprint is an ultra-efficient diffusion model for text-to-image (T2I) generation, reducing inference steps from 20 to 1-4 while achieving state-of-the-art performance.", "preview": "Efficient-Large-Model--Sana_1600M_1024px_diffusers.jpg", "skip": true - }, + }, "NVLabs Sana 1.0 1.6B 4k": { "path": "Efficient-Large-Model/Sana_1600M_4Kpx_BF16_diffusers", "desc": "Sana is a text-to-image framework that can efficiently generate images up to 4096 ร— 4096 resolution. Sana can synthesize high-resolution, high-quality images with strong text-image alignment at a remarkably fast speed, deployable on laptop GPU.", "preview": "Efficient-Large-Model--Sana_1600M_1024px_diffusers.jpg", "skip": true - }, + }, "NVLabs Sana 1.0 1.6B 2k": { "path": "Efficient-Large-Model/Sana_1600M_2Kpx_BF16_diffusers", "desc": "Sana is a text-to-image framework that can efficiently generate images up to 4096 ร— 4096 resolution. Sana can synthesize high-resolution, high-quality images with strong text-image alignment at a remarkably fast speed, deployable on laptop GPU.", "preview": "Efficient-Large-Model--Sana_1600M_1024px_diffusers.jpg", "skip": true - }, + }, "NVLabs Sana 1.0 1.6B 1k": { "path": "Efficient-Large-Model/Sana_1600M_1024px_diffusers", "desc": "Sana is a text-to-image framework that can efficiently generate images up to 4096 ร— 4096 resolution. Sana can synthesize high-resolution, high-quality images with strong text-image alignment at a remarkably fast speed, deployable on laptop GPU.", "preview": "Efficient-Large-Model--Sana_1600M_1024px_diffusers.jpg", "skip": true - }, + }, "NVLabs Sana 1.0 0.6B 0.5k": { "path": "Efficient-Large-Model/Sana_600M_512px_diffusers", "desc": "Sana is a text-to-image framework that can efficiently generate images up to 4096 ร— 4096 resolution. Sana can synthesize high-resolution, high-quality images with strong text-image alignment at a remarkably fast speed, deployable on laptop GPU.", @@ -250,21 +250,21 @@ "desc": "OmniGen is a unified image generation model that can generate a wide range of images from multi-modal prompts. It is designed to be simple, flexible and easy to use.", "preview": "Shitao--OmniGen-v1.jpg", "skip": true - }, + }, "VectorSpaceLab OmniGen v2": { "path": "OmniGen2/OmniGen2", "desc": "OmniGen2 is a powerful and efficient unified multimodal model. Unlike OmniGen v1, OmniGen2 features two distinct decoding pathways for text and image modalities, utilizing unshared parameters and a decoupled image tokenizer.", "preview": "OmniGen2--OmniGen2.jpg", "skip": true - }, + }, "AuraFlow 0.3": { "path": "fal/AuraFlow-v0.3", "desc": "AuraFlow v0.3 is the fully open-sourced flow-based text-to-image generation model. The model was trained with more compute compared to the previous version, AuraFlow-v0.2. Compared to AuraFlow-v0.2, the model is fine-tuned on more aesthetic datasets and now supports various aspect ratio, (now width and height up to 1536 pixels).", "preview": "fal--AuraFlow-v0.3.jpg", "skip": true - }, + }, "Segmind Vega": { "path": "huggingface/segmind/Segmind-Vega", @@ -334,7 +334,7 @@ "skip": true, "extras": "sampler: Default, cfg_scale: 2.0" }, - + "Tencent HunyuanDiT 1.2": { "path": "Tencent-Hunyuan/HunyuanDiT-v1.2-Diffusers", "desc": "Hunyuan-DiT : A Powerful Multi-Resolution Diffusion Transformer with Fine-Grained Chinese Understanding.", @@ -348,7 +348,7 @@ "preview": "Alpha-VLLM--Lumina-Next-SFT-diffusers.jpg", "skip": true, "extras": "sampler: Default" - }, + }, "AlphaVLLM Lumina 2": { "path": "Alpha-VLLM/Lumina-Image-2.0", "desc": "A Unified and Efficient Image Generative Model. Lumina-Image-2.0 is a 2 billion parameter flow-based diffusion transformer capable of generating images from text descriptions.", @@ -392,7 +392,7 @@ "preview": "Kwai-Kolors--Kolors-diffusers.jpg", "skip": true, "extras": "width: 1024, height: 1024" - }, + }, "Kandinsky 2.1": { "path": "kandinsky-community/kandinsky-2-1", diff --git a/html/swagger.css b/html/swagger.css index 3c24a39ab..77a578923 100644 --- a/html/swagger.css +++ b/html/swagger.css @@ -865,4 +865,4 @@ linear-gradient(270deg, #696969 30%, rgba(0, 0, 0, 0) 31%); background-color: #b6b6b6; } -} \ No newline at end of file +} diff --git a/javascript/base.css b/javascript/base.css index fe06e6732..45f96b889 100644 --- a/javascript/base.css +++ b/javascript/base.css @@ -10,7 +10,7 @@ .token-counter div { display: inline; } .token-counter span { padding: 0.1em 0.75em; } -/* tooltips and statuses */ +/* tooltips and statuses */ .infotext { overflow-wrap: break-word; } .tooltip { display: block; position: fixed; top: 1em; right: 1em; padding: 0.5em; background: var(--input-background-fill); color: var(--body-text-color); border: 1pt solid var(--button-primary-border-color); width: 22em; min-height: 1.3em; font-size: 0.8em; transition: opacity 0.2s ease-in; pointer-events: none; opacity: 0; z-index: 999; } @@ -124,7 +124,7 @@ table.settings-value-table td { padding: 0.4em; border: 1px solid #ccc; max-widt #tab-browser-search { padding: 0; } #tab-browser-status { align-content: center; text-align: right; background: var(--input-background-fill); padding-right: 1em; margin-left: -1em; } div:has(>#tab-browser-folders) { flex-grow: 0 !important; background-color: var(--input-background-fill); min-width: max-content !important; } -.browser-separator { background-color: var(--input-background-fill); font-size: larger; padding: 0.5em; display: block !important; } +.browser-separator { background-color: var(--input-background-fill); font-size: larger; padding: 0.5em; display: block !important; } /* loader */ .splash { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; z-index: 1000; display: block; text-align: center; } diff --git a/javascript/black-teal-reimagined.css b/javascript/black-teal-reimagined.css index ba8957c3e..c803c6d97 100644 --- a/javascript/black-teal-reimagined.css +++ b/javascript/black-teal-reimagined.css @@ -1192,4 +1192,4 @@ svg.feather.feather-image, --button-transition: none; --size-9: 64px; --size-14: 64px; -} \ No newline at end of file +} diff --git a/javascript/emerald-paradise.css b/javascript/emerald-paradise.css index 411b37774..476c18d4f 100644 --- a/javascript/emerald-paradise.css +++ b/javascript/emerald-paradise.css @@ -14,7 +14,7 @@ --inactive-color: var(--primary--800); --body-text-color: var(--neutral-100); --body-text-color-subdued: var(--neutral-300); - --background-color: var(--primary-100); + --background-color: var(--primary-100); --background-fill-primary: var(--input-background-fill); --input-padding: 8px; --input-background-fill: var(--primary-200); diff --git a/javascript/invoked.css b/javascript/invoked.css index a5954adbf..af5f63a9a 100644 --- a/javascript/invoked.css +++ b/javascript/invoked.css @@ -6,15 +6,15 @@ --primary-100: #2b303b; --primary-200: #15181e; --primary-300: #0a0c0e; - --primary-400: #566176; - --primary-500: #483a90; - --primary-700: #6b7994; - --primary-800: #5b49b3; + --primary-400: #566176; + --primary-500: #483a90; + --primary-700: #6b7994; + --primary-800: #5b49b3; --highlight-color: var(--primary-500); --inactive-color: var(--primary--800); --body-text-color: var(--neutral-100); --body-text-color-subdued: var(--neutral-300); - --background-color: var(--primary-100); + --background-color: var(--primary-100); --background-fill-primary: var(--input-background-fill); --input-padding: 8px; --input-background-fill: var(--primary-200); diff --git a/javascript/login.js b/javascript/login.js index 50f1d2f87..3f2ab1f64 100644 --- a/javascript/login.js +++ b/javascript/login.js @@ -12,7 +12,7 @@ const loginCSS = ` const loginHTML = `
-

Login

+

Login

diff --git a/javascript/orchid-dreams.css b/javascript/orchid-dreams.css index 915823bb3..a28e894a4 100644 --- a/javascript/orchid-dreams.css +++ b/javascript/orchid-dreams.css @@ -14,7 +14,7 @@ --inactive-color: var(--primary--800); --body-text-color: var(--neutral-100); --body-text-color-subdued: var(--neutral-300); - --background-color: var(--primary-100); + --background-color: var(--primary-100); --background-fill-primary: var(--input-background-fill); --input-padding: 8px; --input-background-fill: var(--primary-200); diff --git a/javascript/sdnext.css b/javascript/sdnext.css index 5e219e195..6f3c4fd53 100644 --- a/javascript/sdnext.css +++ b/javascript/sdnext.css @@ -387,7 +387,7 @@ div:has(>#tab-gallery-folders) { flex-grow: 0 !important; background-color: var( --spacing-md: 4px; --spacing-lg: 5px; --spacing-xl: 6px; - --spacing-xxl: 7px; + --spacing-xxl: 7px; } @media (hover: none) and (pointer: coarse) { /* Apply different styles for devices with coarse pointers dependant on screen resolution */ @@ -396,7 +396,7 @@ div:has(>#tab-gallery-folders) { flex-grow: 0 !important; background-color: var( :root, .light, .dark { --left-column: 100%; } #txt2img_results, #img2img_results, #extras_results { min-width: calc(min(320px, 100%)) !important;} /* maintain single column for from image operations on larger mobile devices */ #txt2img_footer p { text-wrap: wrap; } - } + } @media (min-width: 400px) { /* Screens larger than 400px wide */ :root, .light, .dark {--left-column: 50%;} #txt2img_results, #extras_results, #txt2im g_footer p { text-wrap: wrap; max-width: 100% !important; } /* maintain side by side split on larger mobile displays for from text */ @@ -408,7 +408,7 @@ div:has(>#tab-gallery-folders) { flex-grow: 0 !important; background-color: var( #img2img_actions_column { display: flex; min-width: fit-content !important; flex-direction: row;justify-content: space-evenly; align-items: center;} #txt2img_generate_box, #img2img_generate_box, #txt2img_enqueue_wrapper,#img2img_enqueue_wrapper {display: flex;flex-direction: column;height: 4em !important;align-items: stretch;justify-content: space-evenly;} #img2img_interface, #img2img_results, #img2img_footer p { text-wrap: wrap; min-width: 100% !important; max-width: 100% !important;} /* maintain single column for from image operations on larger mobile devices */ - #txt2img_sampler, #txt2img_batch, #txt2img_seed_group, #txt2img_advanced, #txt2img_second_pass, #img2img_sampling_group, #img2img_resize_group, #img2img_batch_group, #img2img_seed_group, #img2img_denoise_group, #img2img_advanced_group { width: 100% !important; } /* fix from text/image UI + #txt2img_sampler, #txt2img_batch, #txt2img_seed_group, #txt2img_advanced, #txt2img_second_pass, #img2img_sampling_group, #img2img_resize_group, #img2img_batch_group, #img2img_seed_group, #img2img_denoise_group, #img2img_advanced_group { width: 100% !important; } /* fix from text/image UI elements to prevent them from moving around within the UI */ #img2img_resize_group .gradio-radio>div { display: flex; flex-direction: column; width: unset !important; } #inpaint_controls div { display:flex;flex-direction: row;} @@ -425,5 +425,5 @@ div:has(>#tab-gallery-folders) { flex-grow: 0 !important; background-color: var( .gradio-slider input[type="number"] { width: 4em; font-size: var(--text-xs); height: 16px; text-align: center; } /* adjust slider input fields as they were too large for mobile devices. */ #txt2img_settings .block .padded:not(.gradio-accordion) { padding: 0 !important;margin-right: 0; min-width: 100% !important; width:100% !important;} #script_txt2img_prompts_from_file_prompt_txt, #script_img2img_prompts_from_file_prompt_txt, #script_control2img_prompts_from_file_prompt_txt { resize: vertical !important; } - } + } } diff --git a/javascript/timeless-beige.css b/javascript/timeless-beige.css index a8a9c1536..f611dbbeb 100644 --- a/javascript/timeless-beige.css +++ b/javascript/timeless-beige.css @@ -14,7 +14,7 @@ --inactive-color: var(--primary--800); --body-text-color: var(--neutral-100); --body-text-color-subdued: var(--neutral-300); - --background-color: var(--primary-100); + --background-color: var(--primary-100); --background-fill-primary: var(--input-background-fill); --input-padding: 8px; --input-background-fill: var(--primary-200); diff --git a/modules/cfgzero/cogview4_pipeline.py b/modules/cfgzero/cogview4_pipeline.py index 3467a649f..472c2eb72 100644 --- a/modules/cfgzero/cogview4_pipeline.py +++ b/modules/cfgzero/cogview4_pipeline.py @@ -41,7 +41,7 @@ def optimized_scale(positive_flat, negative_flat): # st_star = v_cond^T * v_uncond / ||v_uncond||^2 st_star = dot_product / squared_norm - + return st_star @@ -662,8 +662,8 @@ class CogView4CFGZeroPipeline(DiffusionPipeline, CogView4LoraLoaderMixin): return_dict=False, )[0] if use_cfg_zero_star: - positive_flat = noise_pred_cond.view(batch_size, -1) - negative_flat = noise_pred_uncond.view(batch_size, -1) + positive_flat = noise_pred_cond.view(batch_size, -1) + negative_flat = noise_pred_uncond.view(batch_size, -1) alpha = optimized_scale(positive_flat,negative_flat) alpha = alpha.view(batch_size, *([1] * (len(noise_pred_cond.shape) - 1))) diff --git a/modules/cfgzero/hunyuan_t2v_pipeline.py b/modules/cfgzero/hunyuan_t2v_pipeline.py index e6f2f1bde..8494b9b96 100644 --- a/modules/cfgzero/hunyuan_t2v_pipeline.py +++ b/modules/cfgzero/hunyuan_t2v_pipeline.py @@ -77,7 +77,7 @@ def optimized_scale(positive_flat, negative_flat): # st_star = v_cond^T * v_uncond / ||v_uncond||^2 st_star = dot_product / squared_norm - + return st_star DEFAULT_PROMPT_TEMPLATE = { diff --git a/modules/cfgzero/sd3_pipeline.py b/modules/cfgzero/sd3_pipeline.py index d7c8b81ec..946571d81 100644 --- a/modules/cfgzero/sd3_pipeline.py +++ b/modules/cfgzero/sd3_pipeline.py @@ -80,7 +80,7 @@ def optimized_scale(positive_flat, negative_flat): # st_star = v_cond^T * v_uncond / ||v_uncond||^2 st_star = dot_product / squared_norm - + return st_star # Copied from diffusers.pipelines.flux.pipeline_flux.calculate_shift @@ -1088,8 +1088,8 @@ class StableDiffusion3CFGZeroPipeline(DiffusionPipeline, SD3LoraLoaderMixin, Fro noise_pred_uncond, noise_pred_text = noise_pred.chunk(2) if use_cfg_zero_star: - positive_flat = noise_pred_text.view(batch_size, -1) - negative_flat = noise_pred_uncond.view(batch_size, -1) + positive_flat = noise_pred_text.view(batch_size, -1) + negative_flat = noise_pred_uncond.view(batch_size, -1) alpha = optimized_scale(positive_flat,negative_flat) alpha = alpha.view(batch_size, *([1] * (len(noise_pred_text.shape) - 1))) diff --git a/modules/cfgzero/wan_t2v_pipeline.py b/modules/cfgzero/wan_t2v_pipeline.py index e23c20721..7912ea3aa 100644 --- a/modules/cfgzero/wan_t2v_pipeline.py +++ b/modules/cfgzero/wan_t2v_pipeline.py @@ -82,9 +82,9 @@ def optimized_scale(positive_flat, negative_flat): # st_star = v_cond^T * v_uncond / ||v_uncond||^2 st_star = dot_product / squared_norm - + return st_star - + def basic_clean(text): text = ftfy.fix_text(text) text = html.unescape(html.unescape(text)) @@ -555,8 +555,8 @@ class WanCFGZeroPipeline(DiffusionPipeline, WanLoraLoaderMixin): noise_pred_text = noise_pred if use_cfg_zero_star: - positive_flat = noise_pred_text.view(batch_size, -1) - negative_flat = noise_pred_uncond.view(batch_size, -1) + positive_flat = noise_pred_text.view(batch_size, -1) + negative_flat = noise_pred_uncond.view(batch_size, -1) alpha = optimized_scale(positive_flat,negative_flat) alpha = alpha.view(batch_size, *([1] * (len(noise_pred_text.shape) - 1))) diff --git a/modules/control/proc/leres/leres/LICENSE b/modules/control/proc/leres/leres/LICENSE index e0f1d07d9..b8e45dffc 100644 --- a/modules/control/proc/leres/leres/LICENSE +++ b/modules/control/proc/leres/leres/LICENSE @@ -20,4 +20,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file +SOFTWARE. diff --git a/modules/control/proc/leres/leres/Resnext_torch.py b/modules/control/proc/leres/leres/Resnext_torch.py index 9af54fcc3..1a3dac630 100644 --- a/modules/control/proc/leres/leres/Resnext_torch.py +++ b/modules/control/proc/leres/leres/Resnext_torch.py @@ -234,4 +234,3 @@ def resnext101_32x8d(pretrained=True, **kwargs): model = ResNet(Bottleneck, [3, 4, 23, 3], **kwargs) return model - diff --git a/modules/control/proc/leres/leres/network_auxi.py b/modules/control/proc/leres/leres/network_auxi.py index 44d96423e..34007c9c9 100644 --- a/modules/control/proc/leres/leres/network_auxi.py +++ b/modules/control/proc/leres/leres/network_auxi.py @@ -416,4 +416,3 @@ if __name__ == '__main__': inputs = torch.ones(4,3,128,128) out = net(inputs) print(out.size()) - diff --git a/modules/control/proc/leres/pix2pix/LICENSE b/modules/control/proc/leres/pix2pix/LICENSE index 38b1a24fd..8126345cc 100644 --- a/modules/control/proc/leres/pix2pix/LICENSE +++ b/modules/control/proc/leres/pix2pix/LICENSE @@ -2,10 +2,10 @@ https://github.com/compphoto/BoostingMonocularDepth Copyright 2021, Seyed Mahdi Hosseini Miangoleh, Sebastian Dille, Computational Photography Laboratory. All rights reserved. -This software is for academic use only. A redistribution of this -software, with or without modifications, has to be for academic -use only, while giving the appropriate credit to the original -authors of the software. The methods implemented as a part of +This software is for academic use only. A redistribution of this +software, with or without modifications, has to be for academic +use only, while giving the appropriate credit to the original +authors of the software. The methods implemented as a part of this software may be covered under patents or patent applications. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED @@ -16,4 +16,4 @@ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/modules/control/proc/midas/api.py b/modules/control/proc/midas/api.py index b1540cd9e..c08c02cdd 100644 --- a/modules/control/proc/midas/api.py +++ b/modules/control/proc/midas/api.py @@ -165,4 +165,3 @@ class MiDaSInference(nn.Module): def forward(self, x): prediction = self.model(x) return prediction - diff --git a/modules/control/proc/midas/midas/blocks.py b/modules/control/proc/midas/midas/blocks.py index cb840ded3..861687fe3 100644 --- a/modules/control/proc/midas/midas/blocks.py +++ b/modules/control/proc/midas/midas/blocks.py @@ -339,4 +339,3 @@ class FeatureFusionBlock_custom(nn.Module): output = self.out_conv(output) return output - diff --git a/modules/control/proc/midas/midas/dpt_depth.py b/modules/control/proc/midas/midas/dpt_depth.py index 4429b7f94..600a42cd8 100644 --- a/modules/control/proc/midas/midas/dpt_depth.py +++ b/modules/control/proc/midas/midas/dpt_depth.py @@ -106,4 +106,3 @@ class DPTDepthModel(DPT): def forward(self, x): return super().forward(x).squeeze(dim=1) - diff --git a/modules/control/proc/mlsd/LICENSE b/modules/control/proc/mlsd/LICENSE index d855c6db4..0729d998d 100644 --- a/modules/control/proc/mlsd/LICENSE +++ b/modules/control/proc/mlsd/LICENSE @@ -198,4 +198,4 @@ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file + limitations under the License. diff --git a/modules/control/proc/normalbae/LICENSE b/modules/control/proc/normalbae/LICENSE index 16a9d56a3..59c5465b4 100644 --- a/modules/control/proc/normalbae/LICENSE +++ b/modules/control/proc/normalbae/LICENSE @@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file +SOFTWARE. diff --git a/modules/control/proc/normalbae/nets/submodules/decoder.py b/modules/control/proc/normalbae/nets/submodules/decoder.py index 993203d17..316537fce 100644 --- a/modules/control/proc/normalbae/nets/submodules/decoder.py +++ b/modules/control/proc/normalbae/nets/submodules/decoder.py @@ -199,4 +199,3 @@ class Decoder(nn.Module): return [out_res8, out_res4, out_res2, out_res1], \ [out_res8, samples_pred_res4, samples_pred_res2, samples_pred_res1], \ [None, point_coords_res4, point_coords_res2, point_coords_res1] - diff --git a/modules/control/proc/normalbae/nets/submodules/efficientnet_repo/README.md b/modules/control/proc/normalbae/nets/submodules/efficientnet_repo/README.md index 463368280..d8afeb4d1 100644 --- a/modules/control/proc/normalbae/nets/submodules/efficientnet_repo/README.md +++ b/modules/control/proc/normalbae/nets/submodules/efficientnet_repo/README.md @@ -319,5 +319,3 @@ export now requires additional args mentioned in the export script (not needed i 2. TF ported models with 'SAME' padding will have the padding fixed at export time to the resolution used for export. Even though dynamic padding is supported in opset >= 11, I can't get it working. 3. ONNX optimize facility doesn't work reliably in PyTorch 1.6 / ONNX 1.7. Fortunately, the onnxruntime based inference is working very well now and includes on the fly optimization. 3. ONNX / Caffe2 export/import frequently breaks with different PyTorch and ONNX version releases. Please check their respective issue trackers before filing issues here. - - diff --git a/modules/control/proc/normalbae/nets/submodules/efficientnet_repo/geffnet/activations/__init__.py b/modules/control/proc/normalbae/nets/submodules/efficientnet_repo/geffnet/activations/__init__.py index 813421a74..b031fbe2e 100644 --- a/modules/control/proc/normalbae/nets/submodules/efficientnet_repo/geffnet/activations/__init__.py +++ b/modules/control/proc/normalbae/nets/submodules/efficientnet_repo/geffnet/activations/__init__.py @@ -133,5 +133,3 @@ def get_act_layer(name='relu'): if use_jit and name in _ACT_FN_JIT: # jit scripted models should be okay for export/scripting return _ACT_LAYER_JIT[name] return _ACT_LAYER_DEFAULT[name] - - diff --git a/modules/control/proc/normalbae/nets/submodules/efficientnet_repo/geffnet/activations/activations.py b/modules/control/proc/normalbae/nets/submodules/efficientnet_repo/geffnet/activations/activations.py index bdea692d1..eca58933b 100644 --- a/modules/control/proc/normalbae/nets/submodules/efficientnet_repo/geffnet/activations/activations.py +++ b/modules/control/proc/normalbae/nets/submodules/efficientnet_repo/geffnet/activations/activations.py @@ -98,5 +98,3 @@ class HardSigmoid(nn.Module): def forward(self, x): return hard_sigmoid(x, self.inplace) - - diff --git a/modules/control/proc/normalbae/nets/submodules/efficientnet_repo/utils.py b/modules/control/proc/normalbae/nets/submodules/efficientnet_repo/utils.py index d327e8bd8..5eb82a298 100644 --- a/modules/control/proc/normalbae/nets/submodules/efficientnet_repo/utils.py +++ b/modules/control/proc/normalbae/nets/submodules/efficientnet_repo/utils.py @@ -49,4 +49,3 @@ def get_outdir(path, *paths, inc=False): outdir = outdir_inc os.makedirs(outdir) return outdir - diff --git a/modules/control/proc/openpose/LICENSE b/modules/control/proc/openpose/LICENSE index 6f60b76d3..51a094a4e 100644 --- a/modules/control/proc/openpose/LICENSE +++ b/modules/control/proc/openpose/LICENSE @@ -4,15 +4,15 @@ ACADEMIC OR NON-PROFIT ORGANIZATION NONCOMMERCIAL RESEARCH USE ONLY BY USING OR DOWNLOADING THE SOFTWARE, YOU ARE AGREEING TO THE TERMS OF THIS LICENSE AGREEMENT. IF YOU DO NOT AGREE WITH THESE TERMS, YOU MAY NOT USE OR DOWNLOAD THE SOFTWARE. -This is a license agreement ("Agreement") between your academic institution or non-profit organization or self (called "Licensee" or "You" in this Agreement) and Carnegie Mellon University (called "Licensor" in this Agreement). All rights not specifically granted to you in this Agreement are reserved for Licensor. +This is a license agreement ("Agreement") between your academic institution or non-profit organization or self (called "Licensee" or "You" in this Agreement) and Carnegie Mellon University (called "Licensor" in this Agreement). All rights not specifically granted to you in this Agreement are reserved for Licensor. -RESERVATION OF OWNERSHIP AND GRANT OF LICENSE: -Licensor retains exclusive ownership of any copy of the Software (as defined below) licensed under this Agreement and hereby grants to Licensee a personal, non-exclusive, +RESERVATION OF OWNERSHIP AND GRANT OF LICENSE: +Licensor retains exclusive ownership of any copy of the Software (as defined below) licensed under this Agreement and hereby grants to Licensee a personal, non-exclusive, non-transferable license to use the Software for noncommercial research purposes, without the right to sublicense, pursuant to the terms and conditions of this Agreement. As used in this Agreement, the term "Software" means (i) the actual copy of all or any portion of code for program routines made accessible to Licensee by Licensor pursuant to this Agreement, inclusive of backups, updates, and/or merged copies permitted hereunder or subsequently supplied by Licensor, including all or any file structures, programming instructions, user interfaces and screen formats and sequences as well as any and all documentation and instructions related to it, and (ii) all or any derivatives and/or modifications created or made by You to any of the items specified in (i). CONFIDENTIALITY: Licensee acknowledges that the Software is proprietary to Licensor, and as such, Licensee agrees to receive all such materials in confidence and use the Software only in accordance with the terms of this Agreement. Licensee agrees to use reasonable effort to protect the Software from unauthorized use, reproduction, distribution, or publication. -COPYRIGHT: The Software is owned by Licensor and is protected by United +COPYRIGHT: The Software is owned by Licensor and is protected by United States copyright laws and applicable international treaties and/or conventions. PERMITTED USES: The Software may be used for your own noncommercial internal research purposes. You understand and agree that Licensor is not obligated to implement any suggestions and/or feedback you might provide regarding the Software, but to the extent Licensor does so, you are not entitled to any compensation related thereto. @@ -35,11 +35,11 @@ FEE: Provided Licensee abides completely by the terms and conditions of this Agr DISCLAIMER OF WARRANTIES: THE SOFTWARE IS PROVIDED "AS-IS" WITHOUT WARRANTY OF ANY KIND INCLUDING ANY WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE OR PURPOSE OR OF NON-INFRINGEMENT. LICENSEE BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF THE SOFTWARE AND RELATED MATERIALS. -SUPPORT AND MAINTENANCE: No Software support or training by the Licensor is provided as part of this Agreement. +SUPPORT AND MAINTENANCE: No Software support or training by the Licensor is provided as part of this Agreement. EXCLUSIVE REMEDY AND LIMITATION OF LIABILITY: To the maximum extent permitted under applicable law, Licensor shall not be liable for direct, indirect, special, incidental, or consequential damages or lost profits related to Licensee's use of and/or inability to use the Software, even if Licensor is advised of the possibility of such damage. -EXPORT REGULATION: Licensee agrees to comply with any and all applicable +EXPORT REGULATION: Licensee agrees to comply with any and all applicable U.S. export control laws, regulations, and/or other laws related to embargoes and sanction programs administered by the Office of Foreign Assets Control. SEVERABILITY: If any provision(s) of this Agreement shall be held to be invalid, illegal, or unenforceable by a court or other tribunal of competent jurisdiction, the validity, legality and enforceability of the remaining provisions shall not in any way be affected or impaired thereby. @@ -57,7 +57,7 @@ ENTIRE AGREEMENT AND AMENDMENTS: This Agreement constitutes the sole and entire THIRD-PARTY SOFTWARE NOTICES AND INFORMATION This project incorporates material from the project(s) listed below (collectively, "Third Party Code"). This Third Party Code is licensed to you under their original license terms set forth below. We reserves all other rights not expressly granted, whether by implication, estoppel or otherwise. - + 1. Caffe, version 1.0.0, (https://github.com/BVLC/caffe/) COPYRIGHT @@ -80,13 +80,13 @@ committed. LICENSE Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: +modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. + list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. + and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED @@ -105,4 +105,4 @@ By contributing to the BVLC/caffe repository through pull-request, comment, or otherwise, the contributor releases their content to the license and copyright terms herein. -************END OF THIRD-PARTY SOFTWARE NOTICES AND INFORMATION********** \ No newline at end of file +************END OF THIRD-PARTY SOFTWARE NOTICES AND INFORMATION********** diff --git a/modules/control/proc/segment_anything/build_sam.py b/modules/control/proc/segment_anything/build_sam.py index 9a52c506b..6c64ee1e8 100644 --- a/modules/control/proc/segment_anything/build_sam.py +++ b/modules/control/proc/segment_anything/build_sam.py @@ -155,5 +155,3 @@ def _build_sam( state_dict = torch.load(f) sam.load_state_dict(state_dict) return sam - - diff --git a/modules/control/proc/zoe/LICENSE b/modules/control/proc/zoe/LICENSE index 7a1e90d00..70a206826 100644 --- a/modules/control/proc/zoe/LICENSE +++ b/modules/control/proc/zoe/LICENSE @@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file +SOFTWARE. diff --git a/modules/control/proc/zoe/zoedepth/models/__init__.py b/modules/control/proc/zoe/zoedepth/models/__init__.py index 5f2668792..c344f725c 100644 --- a/modules/control/proc/zoe/zoedepth/models/__init__.py +++ b/modules/control/proc/zoe/zoedepth/models/__init__.py @@ -21,4 +21,3 @@ # SOFTWARE. # File author: Shariq Farooq Bhat - diff --git a/modules/control/proc/zoe/zoedepth/models/base_models/__init__.py b/modules/control/proc/zoe/zoedepth/models/base_models/__init__.py index 5f2668792..c344f725c 100644 --- a/modules/control/proc/zoe/zoedepth/models/base_models/__init__.py +++ b/modules/control/proc/zoe/zoedepth/models/base_models/__init__.py @@ -21,4 +21,3 @@ # SOFTWARE. # File author: Shariq Farooq Bhat - diff --git a/modules/control/proc/zoe/zoedepth/models/base_models/midas_repo/midas/blocks.py b/modules/control/proc/zoe/zoedepth/models/base_models/midas_repo/midas/blocks.py index 998a94bda..c480bbb66 100644 --- a/modules/control/proc/zoe/zoedepth/models/base_models/midas_repo/midas/blocks.py +++ b/modules/control/proc/zoe/zoedepth/models/base_models/midas_repo/midas/blocks.py @@ -438,4 +438,3 @@ class FeatureFusionBlock_custom(nn.Module): output = self.out_conv(output) return output - diff --git a/modules/control/proc/zoe/zoedepth/models/zoedepth/config_zoedepth.json b/modules/control/proc/zoe/zoedepth/models/zoedepth/config_zoedepth.json index 3112ed78c..44779abf4 100644 --- a/modules/control/proc/zoe/zoedepth/models/zoedepth/config_zoedepth.json +++ b/modules/control/proc/zoe/zoedepth/models/zoedepth/config_zoedepth.json @@ -18,7 +18,7 @@ "inverse_midas": false, "img_size": [384, 512] }, - + "train": { "train_midas": true, "use_pretrained_midas": true, @@ -55,4 +55,4 @@ "use_pretrained_midas": false, "pretrained_resource" : null } -} \ No newline at end of file +} diff --git a/modules/control/proc/zoe/zoedepth/models/zoedepth/config_zoedepth_kitti.json b/modules/control/proc/zoe/zoedepth/models/zoedepth/config_zoedepth_kitti.json index b51802aa4..15140db42 100644 --- a/modules/control/proc/zoe/zoedepth/models/zoedepth/config_zoedepth_kitti.json +++ b/modules/control/proc/zoe/zoedepth/models/zoedepth/config_zoedepth_kitti.json @@ -3,7 +3,7 @@ "bin_centers_type": "normed", "img_size": [384, 768] }, - + "train": { }, @@ -19,4 +19,4 @@ "use_pretrained_midas": false, "pretrained_resource" : "url::https://github.com/isl-org/ZoeDepth/releases/download/v1.0/ZoeD_M12_K.pt" } -} \ No newline at end of file +} diff --git a/modules/control/proc/zoe/zoedepth/models/zoedepth_nk/config_zoedepth_nk.json b/modules/control/proc/zoe/zoedepth/models/zoedepth_nk/config_zoedepth_nk.json index 42bab2a3a..b85747297 100644 --- a/modules/control/proc/zoe/zoedepth/models/zoedepth_nk/config_zoedepth_nk.json +++ b/modules/control/proc/zoe/zoedepth/models/zoedepth_nk/config_zoedepth_nk.json @@ -15,7 +15,7 @@ "min_depth": 1e-3, "max_depth": 80.0 } - ], + ], "bin_embedding_dim": 128, "bin_centers_type": "softplus", "n_attractors":[16, 8, 4, 1], @@ -24,8 +24,8 @@ "attractor_kind" : "mean", "attractor_type" : "inv", "min_temp": 0.0212, - "max_temp": 50.0, - "memory_efficient": true, + "max_temp": 50.0, + "memory_efficient": true, "midas_model_type" : "DPT_BEiT_L_384", "img_size": [384, 512] }, @@ -58,10 +58,10 @@ "use_pretrained_midas": false, "force_keep_ar": true }, - + "eval": { "train_midas": false, "pretrained_resource": "url::https://github.com/isl-org/ZoeDepth/releases/download/v1.0/ZoeD_M12_NK.pt", "use_pretrained_midas": false } -} \ No newline at end of file +} diff --git a/modules/control/proc/zoe/zoedepth/utils/__init__.py b/modules/control/proc/zoe/zoedepth/utils/__init__.py index 5f2668792..c344f725c 100644 --- a/modules/control/proc/zoe/zoedepth/utils/__init__.py +++ b/modules/control/proc/zoe/zoedepth/utils/__init__.py @@ -21,4 +21,3 @@ # SOFTWARE. # File author: Shariq Farooq Bhat - diff --git a/modules/flash_attn_triton_amd/fwd_prefill.py b/modules/flash_attn_triton_amd/fwd_prefill.py index f03d229fc..38589f016 100644 --- a/modules/flash_attn_triton_amd/fwd_prefill.py +++ b/modules/flash_attn_triton_amd/fwd_prefill.py @@ -295,7 +295,7 @@ def attn_fwd(Q, K, V, bias, Cache_seqlens, Cache_batch_idx, # pylint: disable=un # The tensor allocated for L is based on MAX_SEQLENS_Q as that is # statically known. l_offset = LSE + off_z * stride_lse_z + off_h_q * stride_lse_h + cu_seqlens_q_start * stride_lse_m - l_ptrs = l_offset + offs_m * stride_lse_m + l_ptrs = l_offset + offs_m * stride_lse_m l = tl.full([BLOCK_M], value=0.0, dtype=ACCUMULATOR_TYPE) @@ -450,7 +450,7 @@ def attn_fwd(Q, K, V, bias, Cache_seqlens, Cache_batch_idx, # pylint: disable=un # write back LSE(Log Sum Exponents), the log of the normalization constant l_offset = LSE + off_z * stride_lse_z + off_h_q * stride_lse_h + cu_seqlens_q_start * stride_lse_m - l_ptrs = l_offset + offs_m * stride_lse_m + l_ptrs = l_offset + offs_m * stride_lse_m if USE_EXP2: RCP_LN2: tl.constexpr = 1.4426950408889634 LN2: tl.constexpr = 0.6931471824645996 @@ -499,9 +499,9 @@ def attention_prefill_forward_triton_impl( bias: Optional[torch.Tensor], layout: Literal["bshd", "bhsd", "thd"], # varlen - cu_seqlens_q: Optional[torch.Tensor], + cu_seqlens_q: Optional[torch.Tensor], cu_seqlens_k: Optional[torch.Tensor], - max_seqlens_q: int, + max_seqlens_q: int, max_seqlens_k: int, # inference cache_seqlens: Optional[Union[(int, torch.Tensor)]], @@ -570,7 +570,7 @@ def attention_prefill_forward_triton_impl( attn_fwd[grid](q, k, v, bias, cache_seqlens, cache_batch_idx, sm_scale, softmax_lse, o, *q_strides, *k_strides, *v_strides, *o_strides, *bias_strides, stride_az, stride_ah, *scores_strides, stride_lse_z, stride_lse_h, stride_lse_m, cu_seqlens_q, cu_seqlens_k, - dropout_p=dropout_p, philox_seed=philox_seed, philox_offset_base=philox_offset, sd_mask=sd_mask, dropout_mask=dropout_mask, alibi_slopes=alibi_slopes, + dropout_p=dropout_p, philox_seed=philox_seed, philox_offset_base=philox_offset, sd_mask=sd_mask, dropout_mask=dropout_mask, alibi_slopes=alibi_slopes, HQ=nheads_q, HK=nheads_k, ACTUAL_BLOCK_DMODEL=head_size, MAX_SEQLENS_Q=max_seqlens_q, MAX_SEQLENS_K=max_seqlens_k, IS_CAUSAL=causal, IS_VARLEN=is_varlen, IS_INFERENCE=is_inference, BLOCK_DMODEL=padded_d_model, USE_BIAS=False if bias is None else True, diff --git a/modules/flash_attn_triton_amd/utils.py b/modules/flash_attn_triton_amd/utils.py index 9250819b2..09f6a6d78 100644 --- a/modules/flash_attn_triton_amd/utils.py +++ b/modules/flash_attn_triton_amd/utils.py @@ -366,7 +366,7 @@ def get_shape_from_layout( elif layout == 'thd': total_seqlen, num_heads, head_dim = x.shape if cu_seqlens is None: - raise ValueError("cu_seqlens must be provided for varlen (thd) layout") + raise ValueError("cu_seqlens must be provided for varlen (thd) layout") if max_seqlen is None: raise ValueError("max_seqlen must be provided for varlen (thd) layout") @@ -389,7 +389,7 @@ def get_shapes_from_layout(q, k, layout, cu_seqlens_q = None, cu_seqlens_k = Non def get_stride_from_layout(x: torch.Tensor, layout:Literal["bshd", "bhsd", "thd"]): if layout == 'thd': - strides = (0, x.stride(1), x.stride(0), x.stride(2)) + strides = (0, x.stride(1), x.stride(0), x.stride(2)) elif layout == 'bhsd': strides = (x.stride(0), x.stride(1), x.stride(2), x.stride(3)) elif layout == 'bshd': diff --git a/modules/schedulers/scheduler_bdia.py b/modules/schedulers/scheduler_bdia.py index bb3e7f9b2..cffb5cb35 100644 --- a/modules/schedulers/scheduler_bdia.py +++ b/modules/schedulers/scheduler_bdia.py @@ -219,7 +219,7 @@ class BDIA_DDIMScheduler(SchedulerMixin, ConfigMixin): self.betas = rescale_zero_terminal_snr(self.betas) self.alphas = 1.0 - self.betas #may have to add something for last step - + self.alphas_cumprod = torch.cumprod(self.alphas, dim=0) # At every step in ddim, we are looking into the previous alphas_cumprod # For the final step, there is no previous alphas_cumprod because we are already at 0 @@ -357,7 +357,7 @@ class BDIA_DDIMScheduler(SchedulerMixin, ConfigMixin): ) -> Union[DDIMSchedulerOutput, Tuple]: """ Predict the sample from the previous timestep by reversing the SDE. - + Args: model_output (torch.Tensor): Direct output from learned diffusion model timestep (int): Current discrete timestep in the diffusion chain @@ -458,15 +458,15 @@ class BDIA_DDIMScheduler(SchedulerMixin, ConfigMixin): alpha_prod_t_next = self.alphas_cumprod[next_timestep] alpha_i_plus_1 = alpha_prod_t_next ** 0.5 sigma_i_plus_1 = (1 - alpha_prod_t_next) ** 0.5 - + if debug: print(f"alpha_i_plus_1: {alpha_i_plus_1}") print(f"sigma_i_plus_1: {sigma_i_plus_1}") - + a = alpha_i_plus_1 * pred_original_sample + sigma_i_plus_1 * pred_epsilon bdia_step = ( - self.config.gamma * self.next_sample[-2] + - ddim_step - + self.config.gamma * self.next_sample[-2] + + ddim_step - (self.config.gamma * a) ) self.update_next_sample_BDIA(bdia_step) @@ -477,7 +477,7 @@ class BDIA_DDIMScheduler(SchedulerMixin, ConfigMixin): if eta > 0: if debug: print(f"\nApplying variance noise with eta: {eta}") - + if variance_noise is not None and generator is not None: raise ValueError( "Cannot pass both generator and variance_noise. Use either `generator` or `variance_noise`." @@ -496,7 +496,7 @@ class BDIA_DDIMScheduler(SchedulerMixin, ConfigMixin): return (prev_sample,) return DDIMSchedulerOutput(prev_sample=prev_sample, pred_original_sample=pred_original_sample) - + def add_noise( self, original_samples: torch.Tensor, @@ -542,10 +542,10 @@ class BDIA_DDIMScheduler(SchedulerMixin, ConfigMixin): velocity = sqrt_alpha_prod * noise - sqrt_one_minus_alpha_prod * sample return velocity - + def update_next_sample_BDIA(self, new_value): self.next_sample.append(new_value.clone()) def __len__(self): - return self.config.num_train_timesteps \ No newline at end of file + return self.config.num_train_timesteps diff --git a/modules/schedulers/scheduler_dc.py b/modules/schedulers/scheduler_dc.py index 190588855..8b483f901 100644 --- a/modules/schedulers/scheduler_dc.py +++ b/modules/schedulers/scheduler_dc.py @@ -740,7 +740,7 @@ class DCSolverMultistepScheduler(SchedulerMixin, ConfigMixin): t_ = ratio * (t_prev_list[-1] - t_prev_list[-2]) + t_prev_list[-2] inter_order = min(self.dc_order + 1, 4) - + if inter_order is not None: model_t_dc = torch.zeros_like(model_prev_list[-1]) for i in range(inter_order): @@ -768,7 +768,7 @@ class DCSolverMultistepScheduler(SchedulerMixin, ConfigMixin): else: scalar_t = 0 ratio_param = torch.nn.Parameter(torch.tensor([param_initial], device=sample.device), requires_grad=True) - + sample_clone = sample.clone() index = np.where(self.ddim_gt['ts'] >= scalar_t)[0].max() diff --git a/modules/schedulers/scheduler_dpm_flowmatch.py b/modules/schedulers/scheduler_dpm_flowmatch.py index c1f045e8a..2bf5b092a 100644 --- a/modules/schedulers/scheduler_dpm_flowmatch.py +++ b/modules/schedulers/scheduler_dpm_flowmatch.py @@ -114,25 +114,25 @@ class FlowMatchDPMSolverMultistepScheduler(SchedulerMixin, ConfigMixin): The DPMSolver order which can be `2` or `3`. It is recommended to use `solver_order=2` for guided sampling, and `solver_order=3` for unconditional sampling. algorithm_type (`str`, defaults to `dpmsolver++2M`): - Algorithm type for the solver; can be `dpmsolver2`, `dpmsolver2A`, `dpmsolver++2M`, `dpmsolver++2S`, `dpmsolver++sde`, `dpmsolver++2Msde`, + Algorithm type for the solver; can be `dpmsolver2`, `dpmsolver2A`, `dpmsolver++2M`, `dpmsolver++2S`, `dpmsolver++sde`, `dpmsolver++2Msde`, or `dpmsolver++3Msde`. solver_type (`str`, defaults to `midpoint`): Solver type for the second-order solver; can be `midpoint` or `heun`. The solver type slightly affects the sample quality, especially for a small number of steps. It is recommended to use `midpoint` solvers. - sigma_schedule (`str`, *optional*, defaults to None (beta)): Sigma schedule to compute the `sigmas`. Optionally, we use - the schedule "karras" introduced in the EDM paper (https://arxiv.org/abs/2206.00364). Other acceptable values are - "exponential". The exponential schedule was incorporated in this model: https://huggingface.co/stabilityai/cosxl. - Other acceptable values are "lambdas". The uniform-logSNR for step sizes proposed by Lu's DPM-Solver in the + sigma_schedule (`str`, *optional*, defaults to None (beta)): Sigma schedule to compute the `sigmas`. Optionally, we use + the schedule "karras" introduced in the EDM paper (https://arxiv.org/abs/2206.00364). Other acceptable values are + "exponential". The exponential schedule was incorporated in this model: https://huggingface.co/stabilityai/cosxl. + Other acceptable values are "lambdas". The uniform-logSNR for step sizes proposed by Lu's DPM-Solver in the noise schedule during the sampling process. The sigmas and time steps are determined according to a sequence of `lambda(t)`. "betas" for step sizes in the noise schedule during the sampling process. Refer to [Beta Sampling is All You Need](https://huggingface.co/papers/2407.12173) for more information. use_noise_sampler for BrownianTreeNoiseSampler (only valid for `dpmsolver++2S`, `dpmsolver++sde`, `dpmsolver++2Msde`, or `dpmsolver++3Msde`. - A noise sampler backed by a torchsde increasing the stability of convergence. Default strategy + A noise sampler backed by a torchsde increasing the stability of convergence. Default strategy (random noise) has it jumping all over the place, but Brownian sampling is more stable. Utilizes the model generation seed provided. midpoint_ratio (`float`, *optional*, range: 0.4 to 0.6, default=0.5): Only valid for (`dpmsolver++sde`, `dpmsolver++2S`). Higher values may result in smoothing, more vivid colors and less noise at the expense of more detail and effect. - s_noise (`float`, *optional*, defaults to 1.0): Sigma noise strength: range 0 - 1.1 (only valid for `dpmsolver++2S`, `dpmsolver++sde`, - `dpmsolver++2Msde`, or `dpmsolver++3Msde`). The amount of additional noise to counteract loss of detail during sampling. A + s_noise (`float`, *optional*, defaults to 1.0): Sigma noise strength: range 0 - 1.1 (only valid for `dpmsolver++2S`, `dpmsolver++sde`, + `dpmsolver++2Msde`, or `dpmsolver++3Msde`). The amount of additional noise to counteract loss of detail during sampling. A reasonable range is [1.000, 1.011]. Defaults to 1.0 from the original implementation. use_beta_sigmas: (`bool` defaults to False for FLUX and True for SD3). Based on original interpretation of using beta values for determining sigmas. use_dynamic_shifting (`bool` defaults to False for SD3 and True for FLUX). When `True`, shift is ignored. diff --git a/modules/shared.py b/modules/shared.py index 8e37ab09b..0a3588851 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -717,7 +717,7 @@ options_templates.update(options_section(('saving-paths', "Image Paths"), { "outdir_extras_samples": OptionInfo("outputs/extras", 'Folder for processed images', component_args=hide_dirs, folder=True), "outdir_save": OptionInfo("outputs/save", "Folder for manually saved images", component_args=hide_dirs, folder=True), "outdir_video": OptionInfo("outputs/video", "Folder for videos", component_args=hide_dirs, folder=True), - "outdir_init_images": OptionInfo("outputs/init-images", "Folder for init images", component_args=hide_dirs, folder=True), + "outdir_init_images": OptionInfo("outputs/inputs", "Folder for init images", component_args=hide_dirs, folder=True), "outdir_sep_grids": OptionInfo("

Grids

", "", gr.HTML), "outdir_grids": OptionInfo("", "Grids folder", component_args=hide_dirs, folder=True), diff --git a/modules/teacache/teacache_chroma.py b/modules/teacache/teacache_chroma.py index 102ae7f9b..8b2b22333 100644 --- a/modules/teacache/teacache_chroma.py +++ b/modules/teacache/teacache_chroma.py @@ -329,4 +329,4 @@ def teacache_chroma_forward( if not return_dict: return (output,) - return Transformer2DModelOutput(sample=output) \ No newline at end of file + return Transformer2DModelOutput(sample=output) diff --git a/modules/teacache/teacache_cogvideox.py b/modules/teacache/teacache_cogvideox.py index 436338b37..33ed865d6 100644 --- a/modules/teacache/teacache_cogvideox.py +++ b/modules/teacache/teacache_cogvideox.py @@ -64,10 +64,10 @@ def teacache_cog_forward( if self.cnt == 0 or self.cnt == self.num_steps-1: should_calc = True self.accumulated_rel_l1_distance = 0 - else: + else: if not self.config.use_rotary_positional_embeddings: # CogVideoX-2B - coefficients = [-3.10658903e+01, 2.54732368e+01, -5.92380459e+00, 1.75769064e+00, -3.61568434e-03] + coefficients = [-3.10658903e+01, 2.54732368e+01, -5.92380459e+00, 1.75769064e+00, -3.61568434e-03] else: # CogVideoX-5B and CogvideoX1.5-5B coefficients = [-1.53880483e+03, 8.43202495e+02, -1.34363087e+02, 7.97131516e+00, -5.23162339e-02] @@ -81,8 +81,8 @@ def teacache_cog_forward( self.previous_modulated_input = emb self.cnt += 1 if self.cnt == self.num_steps: - self.cnt = 0 - + self.cnt = 0 + if self.enable_teacache: if not should_calc: hidden_states += self.previous_residual diff --git a/modules/teacache/teacache_hidream.py b/modules/teacache/teacache_hidream.py index eab1b7220..cb3767cab 100644 --- a/modules/teacache/teacache_hidream.py +++ b/modules/teacache/teacache_hidream.py @@ -119,7 +119,7 @@ def teacache_hidream_forward( else: should_calc = True self.accumulated_rel_l1_distance = 0 - self.previous_modulated_input = modulated_inp + self.previous_modulated_input = modulated_inp self.cnt += 1 if self.cnt == self.num_steps: self.cnt = 0 @@ -262,4 +262,4 @@ def teacache_hidream_forward( if not return_dict: return (output,) - return Transformer2DModelOutput(sample=output) \ No newline at end of file + return Transformer2DModelOutput(sample=output) diff --git a/modules/teacache/teacache_ltx.py b/modules/teacache/teacache_ltx.py index 8a4e1b392..23d4897c0 100644 --- a/modules/teacache/teacache_ltx.py +++ b/modules/teacache/teacache_ltx.py @@ -69,7 +69,7 @@ def teacache_ltx_forward( if self.cnt == 0 or self.cnt == self.num_steps-1: should_calc = True self.accumulated_rel_l1_distance = 0 - else: + else: coefficients = [2.14700694e+01, -1.28016453e+01, 2.31279151e+00, 7.92487521e-01, 9.69274326e-03] rescale_func = np.poly1d(coefficients) self.accumulated_rel_l1_distance += rescale_func(((modulated_inp-self.previous_modulated_input).abs().mean() / self.previous_modulated_input.abs().mean()).cpu().item()) @@ -78,11 +78,11 @@ def teacache_ltx_forward( else: should_calc = True self.accumulated_rel_l1_distance = 0 - self.previous_modulated_input = modulated_inp + self.previous_modulated_input = modulated_inp self.cnt += 1 if self.cnt == self.num_steps: - self.cnt = 0 - + self.cnt = 0 + if self.enable_teacache: if not should_calc: hidden_states += self.previous_residual diff --git a/modules/teacache/teacache_mochi.py b/modules/teacache/teacache_mochi.py index e899fb164..2be193a77 100644 --- a/modules/teacache/teacache_mochi.py +++ b/modules/teacache/teacache_mochi.py @@ -65,7 +65,7 @@ def teacache_mochi_forward( if self.cnt == 0 or self.cnt == self.num_steps-1: should_calc = True self.accumulated_rel_l1_distance = 0 - else: + else: coefficients = [-3.51241319e+03, 8.11675948e+02, -6.09400215e+01, 2.42429681e+00, 3.05291719e-03] rescale_func = np.poly1d(coefficients) self.accumulated_rel_l1_distance += rescale_func(((modulated_inp-self.previous_modulated_input).abs().mean() / self.previous_modulated_input.abs().mean()).cpu().item()) @@ -74,11 +74,11 @@ def teacache_mochi_forward( else: should_calc = True self.accumulated_rel_l1_distance = 0 - self.previous_modulated_input = modulated_inp + self.previous_modulated_input = modulated_inp self.cnt += 1 if self.cnt == self.num_steps: - self.cnt = 0 - + self.cnt = 0 + if self.enable_teacache: if not should_calc: hidden_states += self.previous_residual @@ -112,7 +112,7 @@ def teacache_mochi_forward( image_rotary_emb=image_rotary_emb, ) hidden_states = self.norm_out(hidden_states, temb) - self.previous_residual = hidden_states - ori_hidden_states + self.previous_residual = hidden_states - ori_hidden_states else: for i, block in enumerate(self.transformer_blocks): if torch.is_grad_enabled() and self.gradient_checkpointing: diff --git a/motd b/motd index 0519ecba6..e69de29bb 100644 --- a/motd +++ b/motd @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/package.json b/package.json index 159b76420..05604fb65 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,8 @@ "eslint": "eslint javascript/ extensions-builtin/sdnext-modernui/javascript/", "ruff": ". venv/bin/activate && ruff check", "pylint": ". venv/bin/activate && pylint *.py modules/ pipelines/ scripts/ extensions-builtin/ | grep -v '^*'", - "lint": "npm run eslint && npm run ruff && npm run pylint | grep -v TODO", + "format": ". venv/bin/activate && pre-commit run -a", + "lint": "npm run eslint && npm run format && npm run ruff && npm run pylint | grep -v TODO", "todo": "npm run pylint | grep W0511 | awk -F'TODO ' '{print \"- \"$NF}' | sed 's/ (fixme)//g' | sort", "test": ". venv/bin/activate; python launch.py --debug --test" }, diff --git a/pipelines/meissonic/pipeline.py b/pipelines/meissonic/pipeline.py index 512eab742..4f1bb05a2 100644 --- a/pipelines/meissonic/pipeline.py +++ b/pipelines/meissonic/pipeline.py @@ -54,7 +54,7 @@ class Pipeline(DiffusionPipeline): vqvae: VQModel tokenizer: CLIPTokenizer text_encoder: CLIPTextModelWithProjection - transformer: Transformer2DModel + transformer: Transformer2DModel scheduler: Scheduler # tokenizer_t5: T5Tokenizer # text_encoder_t5: T5ForConditionalGeneration @@ -66,7 +66,7 @@ class Pipeline(DiffusionPipeline): vqvae: VQModel, tokenizer: CLIPTokenizer, text_encoder: CLIPTextModelWithProjection, - transformer: Transformer2DModel, + transformer: Transformer2DModel, scheduler: Scheduler, # tokenizer_t5: T5Tokenizer, # text_encoder_t5: T5ForConditionalGeneration, @@ -226,8 +226,8 @@ class Pipeline(DiffusionPipeline): # truncation=True, # max_length=512, # ).input_ids.to(self._execution_device) - - + + outputs = self.text_encoder(input_ids, return_dict=True, output_hidden_states=True) # outputs_t5 = self.text_encoder_t5(input_ids_t5, decoder_input_ids = input_ids_t5 ,return_dict=True, output_hidden_states=True) prompt_embeds = outputs.text_embeds @@ -265,8 +265,8 @@ class Pipeline(DiffusionPipeline): negative_prompt_embeds = outputs.text_embeds negative_encoder_hidden_states = outputs.hidden_states[-2] # negative_encoder_hidden_states = outputs_t5.encoder_hidden_states[-2] - - + + negative_prompt_embeds = negative_prompt_embeds.repeat(num_images_per_prompt, 1) negative_encoder_hidden_states = negative_encoder_hidden_states.repeat(num_images_per_prompt, 1, 1) @@ -370,4 +370,4 @@ class Pipeline(DiffusionPipeline): if not return_dict: return (output,) - return ImagePipelineOutput(output) \ No newline at end of file + return ImagePipelineOutput(output) diff --git a/pipelines/meissonic/test.py b/pipelines/meissonic/test.py index 46189c85d..5687cbff0 100644 --- a/pipelines/meissonic/test.py +++ b/pipelines/meissonic/test.py @@ -26,7 +26,7 @@ pipe = pipe.to(device) steps = 64 guidance_scale = 9 -resolution = 1024 +resolution = 1024 negative = "worst quality, low quality, low res, blurry, distortion, watermark, logo, signature, text, jpeg artifacts, signature, sketch, duplicate, ugly, identifying mark" prompt = "Beautiful young woman posing on a lake with snow covered mountains in the background" image = pipe(prompt=prompt, negative_prompt=negative, height=resolution, width=resolution, guidance_scale=guidance_scale, num_inference_steps=steps).images[0] diff --git a/pipelines/meissonic/transformer.py b/pipelines/meissonic/transformer.py index 543c30108..c2336d323 100644 --- a/pipelines/meissonic/transformer.py +++ b/pipelines/meissonic/transformer.py @@ -34,7 +34,7 @@ from diffusers.models.normalization import AdaLayerNormContinuous, AdaLayerNormZ from diffusers.utils import USE_PEFT_BACKEND, is_torch_version, logging, scale_lora_layers, unscale_lora_layers from diffusers.utils.torch_utils import maybe_allow_in_graph from diffusers.models.embeddings import CombinedTimestepGuidanceTextProjEmbeddings, CombinedTimestepTextProjEmbeddings,TimestepEmbedding, get_timestep_embedding #,FluxPosEmbed -from diffusers.models.modeling_outputs import Transformer2DModelOutput +from diffusers.models.modeling_outputs import Transformer2DModelOutput from diffusers.models.resnet import Downsample2D, Upsample2D from typing import List @@ -794,8 +794,8 @@ class Transformer2DModel(ModelMixin, ConfigMixin, PeftAdapterMixin, FromOriginal guidance_embeds (`bool`, defaults to False): Whether to use guidance embeddings. """ - _supports_gradient_checkpointing = False #True - # Due to NotImplementedError: DDPOptimizer backend: Found a higher order op in the graph. This is not supported. Please turn off DDP optimizer using torch._dynamo.config.optimize_ddp=False. Note that this can cause performance degradation because there will be one bucket for the entire Dynamo graph. + _supports_gradient_checkpointing = False #True + # Due to NotImplementedError: DDPOptimizer backend: Found a higher order op in the graph. This is not supported. Please turn off DDP optimizer using torch._dynamo.config.optimize_ddp=False. Note that this can cause performance degradation because there will be one bucket for the entire Dynamo graph. # Please refer to this issue - https://github.com/pytorch/pytorch/issues/104674. _no_split_modules = ["TransformerBlock", "SingleTransformerBlock"] @@ -819,7 +819,7 @@ class Transformer2DModel(ModelMixin, ConfigMixin, PeftAdapterMixin, FromOriginal ): super().__init__() self.out_channels = in_channels - self.inner_dim = self.config.num_attention_heads * self.config.attention_head_dim + self.inner_dim = self.config.num_attention_heads * self.config.attention_head_dim self.pos_embed = FluxPosEmbed(theta=10000, axes_dim=axes_dims_rope) text_time_guidance_cls = ( @@ -830,7 +830,7 @@ class Transformer2DModel(ModelMixin, ConfigMixin, PeftAdapterMixin, FromOriginal ) self.context_embedder = nn.Linear(self.config.joint_attention_dim, self.inner_dim) - + self.transformer_blocks = nn.ModuleList( [ TransformerBlock( @@ -856,7 +856,7 @@ class Transformer2DModel(ModelMixin, ConfigMixin, PeftAdapterMixin, FromOriginal self.gradient_checkpointing = False - in_channels_embed = self.inner_dim + in_channels_embed = self.inner_dim ln_elementwise_affine = True layer_norm_eps = 1e-06 use_bias = False @@ -867,7 +867,7 @@ class Transformer2DModel(ModelMixin, ConfigMixin, PeftAdapterMixin, FromOriginal self.mlm_layer = ConvMlmLayer( self.inner_dim, in_channels_embed, use_bias, ln_elementwise_affine, layer_norm_eps, self.config.codebook_size ) - self.cond_embed = TimestepEmbedding( + self.cond_embed = TimestepEmbedding( micro_cond_embed_dim + self.config.pooled_projection_dim, self.inner_dim, sample_proj_bias=use_bias ) self.encoder_proj_layer_norm = RMSNorm(self.inner_dim, layer_norm_eps, ln_elementwise_affine) @@ -875,9 +875,9 @@ class Transformer2DModel(ModelMixin, ConfigMixin, PeftAdapterMixin, FromOriginal self.project_to_hidden = nn.Linear(in_channels_embed, self.inner_dim, bias=use_bias) self.project_from_hidden_norm = RMSNorm(self.inner_dim, layer_norm_eps, ln_elementwise_affine) self.project_from_hidden = nn.Linear(self.inner_dim, in_channels_embed, bias=use_bias) - + self.down_block = Simple_UVitBlock( - self.inner_dim, + self.inner_dim, ln_elementwise_affine, layer_norm_eps, use_bias, @@ -892,7 +892,7 @@ class Transformer2DModel(ModelMixin, ConfigMixin, PeftAdapterMixin, FromOriginal False, upsample=upsample, ) - + # self.fuse_qkv_projections() @property @@ -1043,26 +1043,26 @@ class Transformer2DModel(ModelMixin, ConfigMixin, PeftAdapterMixin, FromOriginal micro_cond_encode_dim = 256 # same as self.config.micro_cond_encode_dim = 256 from amused micro_cond_embeds = get_timestep_embedding( micro_conds.flatten(), micro_cond_encode_dim, flip_sin_to_cos=True, downscale_freq_shift=0 - ) - micro_cond_embeds = micro_cond_embeds.reshape((hidden_states.shape[0], -1)) + ) + micro_cond_embeds = micro_cond_embeds.reshape((hidden_states.shape[0], -1)) pooled_projections = torch.cat([pooled_projections, micro_cond_embeds], dim=1) pooled_projections = pooled_projections.to(dtype=self.dtype) - pooled_projections = self.cond_embed(pooled_projections).to(encoder_hidden_states.dtype) - + pooled_projections = self.cond_embed(pooled_projections).to(encoder_hidden_states.dtype) - hidden_states = self.embed(hidden_states) - encoder_hidden_states = self.context_embedder(encoder_hidden_states) + hidden_states = self.embed(hidden_states) + + encoder_hidden_states = self.context_embedder(encoder_hidden_states) encoder_hidden_states = self.encoder_proj_layer_norm(encoder_hidden_states) hidden_states = self.down_block(hidden_states) batch_size, channels, height, width = hidden_states.shape hidden_states = hidden_states.permute(0, 2, 3, 1).reshape(batch_size, height * width, channels) - hidden_states = self.project_to_hidden_norm(hidden_states) + hidden_states = self.project_to_hidden_norm(hidden_states) hidden_states = self.project_to_hidden(hidden_states) - + if joint_attention_kwargs is not None: joint_attention_kwargs = joint_attention_kwargs.copy() lora_scale = joint_attention_kwargs.pop("scale", 1.0) @@ -1083,11 +1083,11 @@ class Transformer2DModel(ModelMixin, ConfigMixin, PeftAdapterMixin, FromOriginal guidance = guidance.to(hidden_states.dtype) * 1000 else: guidance = None - temb = ( + temb = ( self.time_text_embed(timestep, pooled_projections) if guidance is None else self.time_text_embed(timestep, guidance, pooled_projections) - ) + ) if txt_ids.ndim == 3: logger.warning( @@ -1102,8 +1102,8 @@ class Transformer2DModel(ModelMixin, ConfigMixin, PeftAdapterMixin, FromOriginal ) img_ids = img_ids[0] ids = torch.cat((txt_ids, img_ids), dim=0) - - image_rotary_emb = self.pos_embed(ids) + + image_rotary_emb = self.pos_embed(ids) for index_block, block in enumerate(self.transformer_blocks): if self.training and self.gradient_checkpointing: @@ -1131,10 +1131,10 @@ class Transformer2DModel(ModelMixin, ConfigMixin, PeftAdapterMixin, FromOriginal encoder_hidden_states, hidden_states = block( hidden_states=hidden_states, encoder_hidden_states=encoder_hidden_states, - temb=temb, + temb=temb, image_rotary_emb=image_rotary_emb, ) - + # controlnet residual if controlnet_block_samples is not None: @@ -1181,12 +1181,12 @@ class Transformer2DModel(ModelMixin, ConfigMixin, PeftAdapterMixin, FromOriginal + controlnet_single_block_samples[index_block // interval_control] ) - hidden_states = hidden_states[:, encoder_hidden_states.shape[1] :, ...] + hidden_states = hidden_states[:, encoder_hidden_states.shape[1] :, ...] + - hidden_states = self.project_from_hidden_norm(hidden_states) hidden_states = self.project_from_hidden(hidden_states) - + hidden_states = hidden_states.reshape(batch_size, height, width, channels).permute(0, 3, 1, 2) @@ -1195,11 +1195,11 @@ class Transformer2DModel(ModelMixin, ConfigMixin, PeftAdapterMixin, FromOriginal if USE_PEFT_BACKEND: # remove `lora_scale` from each PEFT layer unscale_lora_layers(self, lora_scale) - + output = self.mlm_layer(hidden_states) # self.unfuse_qkv_projections() if not return_dict: return (output,) - - return output \ No newline at end of file + + return output diff --git a/pipelines/omnigen2/pipeline_omnigen2.py b/pipelines/omnigen2/pipeline_omnigen2.py index a7d6c2ca3..d2e13ba18 100644 --- a/pipelines/omnigen2/pipeline_omnigen2.py +++ b/pipelines/omnigen2/pipeline_omnigen2.py @@ -54,8 +54,8 @@ class FMPipelineOutput(BaseOutput): Output class for OmniGen2 pipeline. Args: - images (Union[List[PIL.Image.Image], np.ndarray]): - List of denoised PIL images of length `batch_size` or numpy array of shape + images (Union[List[PIL.Image.Image], np.ndarray]): + List of denoised PIL images of length `batch_size` or numpy array of shape `(batch_size, height, width, num_channels)`. Contains the generated images. """ images: Union[List[PIL.Image.Image], np.ndarray] diff --git a/repositories/codeformer/LICENSE b/repositories/codeformer/LICENSE index 44bf750a2..be6c4ed80 100644 --- a/repositories/codeformer/LICENSE +++ b/repositories/codeformer/LICENSE @@ -2,34 +2,34 @@ S-Lab License 1.0 Copyright 2022 S-Lab -Redistribution and use for non-commercial purpose in source and -binary forms, with or without modification, are permitted provided +Redistribution and use for non-commercial purpose in source and +binary forms, with or without modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -In the event that redistribution and/or use for commercial purpose in -source or binary forms, with or without modification is required, -please contact the contributor(s) of the work. \ No newline at end of file +In the event that redistribution and/or use for commercial purpose in +source or binary forms, with or without modification is required, +please contact the contributor(s) of the work. diff --git a/repositories/codeformer/basicsr/archs/arcface_arch.py b/repositories/codeformer/basicsr/archs/arcface_arch.py index fe5afb7bd..e6d3bd97f 100644 --- a/repositories/codeformer/basicsr/archs/arcface_arch.py +++ b/repositories/codeformer/basicsr/archs/arcface_arch.py @@ -242,4 +242,4 @@ class ResNetArcFace(nn.Module): x = self.fc5(x) x = self.bn5(x) - return x \ No newline at end of file + return x diff --git a/repositories/codeformer/basicsr/archs/arch_util.py b/repositories/codeformer/basicsr/archs/arch_util.py index bad45ab34..11b82a74e 100644 --- a/repositories/codeformer/basicsr/archs/arch_util.py +++ b/repositories/codeformer/basicsr/archs/arch_util.py @@ -315,4 +315,4 @@ to_1tuple = _ntuple(1) to_2tuple = _ntuple(2) to_3tuple = _ntuple(3) to_4tuple = _ntuple(4) -to_ntuple = _ntuple \ No newline at end of file +to_ntuple = _ntuple diff --git a/repositories/codeformer/basicsr/archs/codeformer_arch.py b/repositories/codeformer/basicsr/archs/codeformer_arch.py index 4d0d8027c..fd633cf2e 100644 --- a/repositories/codeformer/basicsr/archs/codeformer_arch.py +++ b/repositories/codeformer/basicsr/archs/codeformer_arch.py @@ -119,7 +119,7 @@ class TransformerSALayer(nn.Module): tgt_mask: Optional[Tensor] = None, tgt_key_padding_mask: Optional[Tensor] = None, query_pos: Optional[Tensor] = None): - + # self attention tgt2 = self.norm1(tgt) q = k = self.with_pos_embed(tgt2, query_pos) @@ -159,7 +159,7 @@ class Fuse_sft_block(nn.Module): @ARCH_REGISTRY.register() class CodeFormer(VQAutoEncoder): - def __init__(self, dim_embd=512, n_head=8, n_layers=9, + def __init__(self, dim_embd=512, n_head=8, n_layers=9, codebook_size=1024, latent_size=256, connect_list=['32', '64', '128', '256'], fix_modules=['quantize','generator']): @@ -179,14 +179,14 @@ class CodeFormer(VQAutoEncoder): self.feat_emb = nn.Linear(256, self.dim_embd) # transformer - self.ft_layers = nn.Sequential(*[TransformerSALayer(embed_dim=dim_embd, nhead=n_head, dim_mlp=self.dim_mlp, dropout=0.0) + self.ft_layers = nn.Sequential(*[TransformerSALayer(embed_dim=dim_embd, nhead=n_head, dim_mlp=self.dim_mlp, dropout=0.0) for _ in range(self.n_layers)]) # logits_predict head self.idx_pred_layer = nn.Sequential( nn.LayerNorm(dim_embd), nn.Linear(dim_embd, codebook_size, bias=False)) - + self.channels = { '16': 512, '32': 256, @@ -221,7 +221,7 @@ class CodeFormer(VQAutoEncoder): enc_feat_dict = {} out_list = [self.fuse_encoder_block[f_size] for f_size in self.connect_list] for i, block in enumerate(self.encoder.blocks): - x = block(x) + x = block(x) if i in out_list: enc_feat_dict[str(x.shape[-1])] = x.clone() @@ -266,11 +266,11 @@ class CodeFormer(VQAutoEncoder): fuse_list = [self.fuse_generator_block[f_size] for f_size in self.connect_list] for i, block in enumerate(self.generator.blocks): - x = block(x) + x = block(x) if i in fuse_list: # fuse after i-th block f_size = str(x.shape[-1]) if w>0: x = self.fuse_convs_dict[f_size](enc_feat_dict[f_size].detach(), x, w) out = x # logits doesn't need softmax before cross_entropy loss - return out, logits, lq_feat \ No newline at end of file + return out, logits, lq_feat diff --git a/repositories/codeformer/basicsr/archs/rrdbnet_arch.py b/repositories/codeformer/basicsr/archs/rrdbnet_arch.py index 49a2d6c20..e1f31bcad 100644 --- a/repositories/codeformer/basicsr/archs/rrdbnet_arch.py +++ b/repositories/codeformer/basicsr/archs/rrdbnet_arch.py @@ -116,4 +116,4 @@ class RRDBNet(nn.Module): feat = self.lrelu(self.conv_up1(F.interpolate(feat, scale_factor=2, mode='nearest'))) feat = self.lrelu(self.conv_up2(F.interpolate(feat, scale_factor=2, mode='nearest'))) out = self.conv_last(self.lrelu(self.conv_hr(feat))) - return out \ No newline at end of file + return out diff --git a/repositories/codeformer/basicsr/archs/vqgan_arch.py b/repositories/codeformer/basicsr/archs/vqgan_arch.py index 5ac692633..54b314877 100644 --- a/repositories/codeformer/basicsr/archs/vqgan_arch.py +++ b/repositories/codeformer/basicsr/archs/vqgan_arch.py @@ -13,7 +13,7 @@ from basicsr.utils.registry import ARCH_REGISTRY def normalize(in_channels): return torch.nn.GroupNorm(num_groups=32, num_channels=in_channels, eps=1e-6, affine=True) - + @torch.jit.script def swish(x): @@ -209,15 +209,15 @@ class AttnBlock(nn.Module): # compute attention b, c, h, w = q.shape q = q.reshape(b, c, h*w) - q = q.permute(0, 2, 1) + q = q.permute(0, 2, 1) k = k.reshape(b, c, h*w) - w_ = torch.bmm(q, k) + w_ = torch.bmm(q, k) w_ = w_ * (int(c)**(-0.5)) w_ = F.softmax(w_, dim=2) # attend to values v = v.reshape(b, c, h*w) - w_ = w_.permute(0, 2, 1) + w_ = w_.permute(0, 2, 1) h_ = torch.bmm(v, w_) h_ = h_.reshape(b, c, h, w) @@ -269,18 +269,18 @@ class Encoder(nn.Module): def forward(self, x): for block in self.blocks: x = block(x) - + return x class Generator(nn.Module): def __init__(self, nf, emb_dim, ch_mult, res_blocks, img_size, attn_resolutions): super().__init__() - self.nf = nf - self.ch_mult = ch_mult + self.nf = nf + self.ch_mult = ch_mult self.num_resolutions = len(self.ch_mult) self.num_res_blocks = res_blocks - self.resolution = img_size + self.resolution = img_size self.attn_resolutions = attn_resolutions self.in_channels = emb_dim self.out_channels = 3 @@ -314,24 +314,24 @@ class Generator(nn.Module): blocks.append(nn.Conv2d(block_in_ch, self.out_channels, kernel_size=3, stride=1, padding=1)) self.blocks = nn.ModuleList(blocks) - + def forward(self, x): for block in self.blocks: x = block(x) - + return x - + @ARCH_REGISTRY.register() class VQAutoEncoder(nn.Module): def __init__(self, img_size, nf, ch_mult, quantizer="nearest", res_blocks=2, attn_resolutions=[16], codebook_size=1024, emb_dim=256, beta=0.25, gumbel_straight_through=False, gumbel_kl_weight=1e-8, model_path=None): super().__init__() logger = get_root_logger() - self.in_channels = 3 - self.nf = nf - self.n_blocks = res_blocks + self.in_channels = 3 + self.nf = nf + self.n_blocks = res_blocks self.codebook_size = codebook_size self.embed_dim = emb_dim self.ch_mult = ch_mult @@ -362,11 +362,11 @@ class VQAutoEncoder(nn.Module): self.kl_weight ) self.generator = Generator( - self.nf, + self.nf, self.embed_dim, - self.ch_mult, - self.n_blocks, - self.resolution, + self.ch_mult, + self.n_blocks, + self.resolution, self.attn_resolutions ) @@ -431,4 +431,4 @@ class VQGANDiscriminator(nn.Module): raise ValueError(f'Wrong params!') def forward(self, x): - return self.main(x) \ No newline at end of file + return self.main(x) diff --git a/repositories/codeformer/basicsr/losses/losses.py b/repositories/codeformer/basicsr/losses/losses.py index 71331aa01..f4028c3ff 100644 --- a/repositories/codeformer/basicsr/losses/losses.py +++ b/repositories/codeformer/basicsr/losses/losses.py @@ -254,8 +254,8 @@ class PerceptualLoss(nn.Module): @LOSS_REGISTRY.register() class LPIPSLoss(nn.Module): - def __init__(self, - loss_weight=1.0, + def __init__(self, + loss_weight=1.0, use_input_norm=True, range_norm=False,): super(LPIPSLoss, self).__init__() diff --git a/repositories/codeformer/basicsr/train.py b/repositories/codeformer/basicsr/train.py index a01c0dfcc..2490bdffd 100644 --- a/repositories/codeformer/basicsr/train.py +++ b/repositories/codeformer/basicsr/train.py @@ -130,7 +130,7 @@ def train_pipeline(root_path): # initialize loggers logger, tb_logger = init_loggers(opt) - + # create train and validation dataloaders result = create_train_val_dataloader(opt, logger) train_loader, train_sampler, val_loader, total_epochs, total_iters = result diff --git a/repositories/codeformer/basicsr/utils/download_util.py b/repositories/codeformer/basicsr/utils/download_util.py index 2a2679157..9da02ffd4 100644 --- a/repositories/codeformer/basicsr/utils/download_util.py +++ b/repositories/codeformer/basicsr/utils/download_util.py @@ -92,4 +92,4 @@ def load_file_from_url(url, model_dir=None, progress=True, file_name=None): if not os.path.exists(cached_file): print(f'Downloading: "{url}" to {cached_file}\n') download_url_to_file(url, cached_file, hash_prefix=None, progress=progress) - return cached_file \ No newline at end of file + return cached_file diff --git a/repositories/codeformer/basicsr/utils/img_util.py b/repositories/codeformer/basicsr/utils/img_util.py index 5aba82ce0..d409a132f 100644 --- a/repositories/codeformer/basicsr/utils/img_util.py +++ b/repositories/codeformer/basicsr/utils/img_util.py @@ -168,4 +168,3 @@ def crop_border(imgs, crop_border): return [v[crop_border:-crop_border, crop_border:-crop_border, ...] for v in imgs] else: return imgs[crop_border:-crop_border, crop_border:-crop_border, ...] - \ No newline at end of file diff --git a/repositories/codeformer/basicsr/utils/logger.py b/repositories/codeformer/basicsr/utils/logger.py index 9714bf59c..c375ddfdd 100644 --- a/repositories/codeformer/basicsr/utils/logger.py +++ b/repositories/codeformer/basicsr/utils/logger.py @@ -166,4 +166,4 @@ def get_env_info(): f'\n\tBasicSR: {__version__}' f'\n\tPyTorch: {torch.__version__}' f'\n\tTorchVision: {torchvision.__version__}') - return msg \ No newline at end of file + return msg diff --git a/repositories/codeformer/basicsr/utils/realesrgan_utils.py b/repositories/codeformer/basicsr/utils/realesrgan_utils.py index 6b7a8b460..18af7e6ac 100644 --- a/repositories/codeformer/basicsr/utils/realesrgan_utils.py +++ b/repositories/codeformer/basicsr/utils/realesrgan_utils.py @@ -209,9 +209,9 @@ class RealESRGANer(): if img_mode == 'L': output_img = cv2.cvtColor(output_img, cv2.COLOR_BGR2GRAY) del output_img_t - torch.cuda.empty_cache() + torch.cuda.empty_cache() except RuntimeError as error: - print(f"Failed inference for RealESRGAN: {error}") + print(f"Failed inference for RealESRGAN: {error}") # ------------------- process the alpha channel if necessary ------------------- # if img_mode == 'RGBA': @@ -296,4 +296,4 @@ class IOConsumer(threading.Thread): output = msg['output'] save_path = msg['save_path'] cv2.imwrite(save_path, output) - print(f'IO worker {self.qid} is done.') \ No newline at end of file + print(f'IO worker {self.qid} is done.') diff --git a/repositories/codeformer/basicsr/utils/video_util.py b/repositories/codeformer/basicsr/utils/video_util.py index 20a2ff14c..b29df5caf 100644 --- a/repositories/codeformer/basicsr/utils/video_util.py +++ b/repositories/codeformer/basicsr/utils/video_util.py @@ -122,4 +122,4 @@ class VideoWriter: def close(self): self.stream_writer.stdin.close() - self.stream_writer.wait() \ No newline at end of file + self.stream_writer.wait() diff --git a/repositories/codeformer/facelib/detection/yolov5face/face_detector.py b/repositories/codeformer/facelib/detection/yolov5face/face_detector.py index 79fdba0c9..addb9f703 100644 --- a/repositories/codeformer/facelib/detection/yolov5face/face_detector.py +++ b/repositories/codeformer/facelib/detection/yolov5face/face_detector.py @@ -119,9 +119,9 @@ class YoloDetector: origimgs = copy.deepcopy(images) images = self._preprocess(images) - + if IS_HIGH_VERSION: - with torch.inference_mode(): # for pytorch>=1.9 + with torch.inference_mode(): # for pytorch>=1.9 pred = self.detector(images)[0] else: with torch.no_grad(): # for pytorch<1.9 diff --git a/repositories/codeformer/facelib/detection/yolov5face/models/yolov5l.yaml b/repositories/codeformer/facelib/detection/yolov5face/models/yolov5l.yaml index 0532b0e22..5c8302517 100644 --- a/repositories/codeformer/facelib/detection/yolov5face/models/yolov5l.yaml +++ b/repositories/codeformer/facelib/detection/yolov5face/models/yolov5l.yaml @@ -44,4 +44,4 @@ head: [-1, 3, C3, [1024, False]], # 22 (P5/32-large) [[16, 19, 22], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) - ] \ No newline at end of file + ] diff --git a/repositories/codeformer/facelib/detection/yolov5face/utils/extract_ckpt.py b/repositories/codeformer/facelib/detection/yolov5face/utils/extract_ckpt.py index 4b8b63134..413719ecc 100644 --- a/repositories/codeformer/facelib/detection/yolov5face/utils/extract_ckpt.py +++ b/repositories/codeformer/facelib/detection/yolov5face/utils/extract_ckpt.py @@ -2,4 +2,4 @@ import torch import sys sys.path.insert(0,'./facelib/detection/yolov5face') model = torch.load('facelib/detection/yolov5face/yolov5n-face.pt', map_location='cpu')['model'] -torch.save(model.state_dict(),'weights/facelib/yolov5n-face.pth') \ No newline at end of file +torch.save(model.state_dict(),'weights/facelib/yolov5n-face.pth') diff --git a/repositories/codeformer/facelib/utils/__init__.py b/repositories/codeformer/facelib/utils/__init__.py index f03b1c2ba..23ef0352c 100644 --- a/repositories/codeformer/facelib/utils/__init__.py +++ b/repositories/codeformer/facelib/utils/__init__.py @@ -2,6 +2,6 @@ from .face_utils import align_crop_face_landmarks, compute_increased_bbox, get_v from .misc import img2tensor, load_file_from_url, download_pretrained_models, scandir __all__ = [ - 'align_crop_face_landmarks', 'compute_increased_bbox', 'get_valid_bboxes', 'load_file_from_url', + 'align_crop_face_landmarks', 'compute_increased_bbox', 'get_valid_bboxes', 'load_file_from_url', 'download_pretrained_models', 'paste_face_back', 'img2tensor', 'scandir' ] diff --git a/repositories/codeformer/facelib/utils/face_restoration_helper.py b/repositories/codeformer/facelib/utils/face_restoration_helper.py index 5d3fb8f3b..e0cd2710b 100644 --- a/repositories/codeformer/facelib/utils/face_restoration_helper.py +++ b/repositories/codeformer/facelib/utils/face_restoration_helper.py @@ -68,7 +68,7 @@ class FaceRestoreHelper(object): if self.template_3points: self.face_template = np.array([[192, 240], [319, 240], [257, 371]]) else: - # standard 5 landmarks for FFHQ faces with 512 x 512 + # standard 5 landmarks for FFHQ faces with 512 x 512 # facexlib self.face_template = np.array([[192.98138, 239.94708], [318.90277, 240.1936], [256.63416, 314.01935], [201.26117, 371.41043], [313.08905, 371.15118]]) @@ -170,7 +170,7 @@ class FaceRestoreHelper(object): landmark = np.array([[bbox[i], bbox[i + 1]] for i in range(5, 15, 2)]) self.all_landmarks_5.append(landmark) self.det_faces.append(bbox[0:5]) - + if len(self.det_faces) == 0: return 0 if only_keep_largest: @@ -317,7 +317,7 @@ class FaceRestoreHelper(object): assert len(self.restored_faces) == len( self.inverse_affine_matrices), ('length of restored_faces and affine_matrices are different.') - + inv_mask_borders = [] for restored_face, inverse_affine in zip(self.restored_faces, self.inverse_affine_matrices): if face_upsampler is not None: @@ -457,4 +457,4 @@ class FaceRestoreHelper(object): self.cropped_faces = [] self.inverse_affine_matrices = [] self.det_faces = [] - self.pad_input_imgs = [] \ No newline at end of file + self.pad_input_imgs = [] diff --git a/repositories/codeformer/facelib/utils/misc.py b/repositories/codeformer/facelib/utils/misc.py index 7f5c95506..1f14e6c37 100644 --- a/repositories/codeformer/facelib/utils/misc.py +++ b/repositories/codeformer/facelib/utils/misc.py @@ -13,7 +13,7 @@ ROOT_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__fil def download_pretrained_models(file_ids, save_path_root): import gdown - + os.makedirs(save_path_root, exist_ok=True) for file_name, file_id in file_ids.items(): diff --git a/repositories/codeformer/inference_codeformer.py b/repositories/codeformer/inference_codeformer.py index cde1094af..c3fd3b545 100644 --- a/repositories/codeformer/inference_codeformer.py +++ b/repositories/codeformer/inference_codeformer.py @@ -52,20 +52,20 @@ if __name__ == '__main__': device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') parser = argparse.ArgumentParser() - parser.add_argument('-i', '--input_path', type=str, default='./inputs/whole_imgs', + parser.add_argument('-i', '--input_path', type=str, default='./inputs/whole_imgs', help='Input image, video or folder. Default: inputs/whole_imgs') - parser.add_argument('-o', '--output_path', type=str, default=None, + parser.add_argument('-o', '--output_path', type=str, default=None, help='Output folder. Default: results/_') - parser.add_argument('-w', '--fidelity_weight', type=float, default=0.5, + parser.add_argument('-w', '--fidelity_weight', type=float, default=0.5, help='Balance the quality and fidelity. Default: 0.5') - parser.add_argument('-s', '--upscale', type=int, default=2, + parser.add_argument('-s', '--upscale', type=int, default=2, help='The final upsampling scale of the image. Default: 2') parser.add_argument('--has_aligned', action='store_true', help='Input are cropped and aligned faces. Default: False') parser.add_argument('--only_center_face', action='store_true', help='Only restore the center face. Default: False') parser.add_argument('--draw_box', action='store_true', help='Draw the bounding box for the detected faces. Default: False') # large det_model: 'YOLOv5l', 'retinaface_resnet50' # small det_model: 'YOLOv5n', 'retinaface_mobile0.25' - parser.add_argument('--detection_model', type=str, default='retinaface_resnet50', + parser.add_argument('--detection_model', type=str, default='retinaface_resnet50', help='Face detector. Optional: retinaface_resnet50, retinaface_mobile0.25, YOLOv5l, YOLOv5n. \ Default: retinaface_resnet50') parser.add_argument('--bg_upsampler', type=str, default='None', help='Background upsampler. Optional: realesrgan') @@ -91,7 +91,7 @@ if __name__ == '__main__': input_img_list.append(image) image = vidreader.get_frame() audio = vidreader.get_audio() - fps = vidreader.get_fps() if args.save_video_fps is None else args.save_video_fps + fps = vidreader.get_fps() if args.save_video_fps is None else args.save_video_fps video_name = os.path.basename(args.input_path)[:-4] result_root = f'results/{video_name}_{w}' input_video = True @@ -127,11 +127,11 @@ if __name__ == '__main__': face_upsampler = None # ------------------ set up CodeFormer restorer ------------------- - net = ARCH_REGISTRY.get('CodeFormer')(dim_embd=512, codebook_size=1024, n_head=8, n_layers=9, + net = ARCH_REGISTRY.get('CodeFormer')(dim_embd=512, codebook_size=1024, n_head=8, n_layers=9, connect_list=['32', '64', '128', '256']).to(device) - + # ckpt_path = 'weights/CodeFormer/codeformer.pth' - ckpt_path = load_file_from_url(url=pretrain_model_url['restoration'], + ckpt_path = load_file_from_url(url=pretrain_model_url['restoration'], model_dir='weights/CodeFormer', progress=True, file_name=None) checkpoint = torch.load(ckpt_path)['params_ema'] net.load_state_dict(checkpoint) @@ -140,9 +140,9 @@ if __name__ == '__main__': # ------------------ set up FaceRestoreHelper ------------------- # large det_model: 'YOLOv5l', 'retinaface_resnet50' # small det_model: 'YOLOv5n', 'retinaface_mobile0.25' - if not args.has_aligned: + if not args.has_aligned: print(f'Face detection model: {args.detection_model}') - if bg_upsampler is not None: + if bg_upsampler is not None: print(f'Background upsampling: True, Face upsampling: {args.face_upsample}') else: print(f'Background upsampling: False, Face upsampling: {args.face_upsample}') @@ -160,7 +160,7 @@ if __name__ == '__main__': for i, img_path in enumerate(input_img_list): # clean all the intermediate results to process the next image face_helper.clean_all() - + if isinstance(img_path, str): img_name = os.path.basename(img_path) basename, ext = os.path.splitext(img_name) @@ -172,7 +172,7 @@ if __name__ == '__main__': print(f'[{i+1}/{test_img_num}] Processing: {img_name}') img = img_path - if args.has_aligned: + if args.has_aligned: # the input faces are already cropped and aligned img = cv2.resize(img, (512, 512), interpolation=cv2.INTER_LINEAR) face_helper.is_gray = is_gray(img, threshold=5) @@ -218,7 +218,7 @@ if __name__ == '__main__': bg_img = None face_helper.get_inverse_affine(None) # paste each restored face to the input image - if args.face_upsample and face_upsampler is not None: + if args.face_upsample and face_upsampler is not None: restored_img = face_helper.paste_faces_to_input_image(upsample_img=bg_img, draw_box=args.draw_box, face_upsampler=face_upsampler) else: restored_img = face_helper.paste_faces_to_input_image(upsample_img=bg_img, draw_box=args.draw_box) @@ -226,7 +226,7 @@ if __name__ == '__main__': # save faces for idx, (cropped_face, restored_face) in enumerate(zip(face_helper.cropped_faces, face_helper.restored_faces)): # save cropped face - if not args.has_aligned: + if not args.has_aligned: save_crop_path = os.path.join(result_root, 'cropped_faces', f'{basename}_{idx:02d}.png') imwrite(cropped_face, save_crop_path) # save restored face @@ -261,7 +261,7 @@ if __name__ == '__main__': video_name = f'{video_name}_{args.suffix}.png' save_restore_path = os.path.join(result_root, f'{video_name}.mp4') vidwriter = VideoWriter(save_restore_path, height, width, fps, audio) - + for f in video_frames: vidwriter.write_frame(f) vidwriter.close() diff --git a/repositories/codeformer/requirements.txt b/repositories/codeformer/requirements.txt index 7e1950a06..4d67efafb 100644 --- a/repositories/codeformer/requirements.txt +++ b/repositories/codeformer/requirements.txt @@ -14,4 +14,4 @@ torchvision tqdm yapf lpips -gdown # supports downloading the large file from Google Drive \ No newline at end of file +gdown # supports downloading the large file from Google Drive diff --git a/repositories/codeformer/scripts/crop_align_face.py b/repositories/codeformer/scripts/crop_align_face.py index 31e66266a..125cdbcf7 100644 --- a/repositories/codeformer/scripts/crop_align_face.py +++ b/repositories/codeformer/scripts/crop_align_face.py @@ -124,7 +124,7 @@ def align_face(filepath, out_path): img = img.resize(rsize, PIL.Image.ANTIALIAS) quad /= shrink qsize /= shrink - + # Crop. border = max(int(np.rint(qsize * 0.1)), 3) crop = (int(np.floor(min(quad[:, 0]))), int(np.floor(min(quad[:, 1]))), @@ -187,6 +187,6 @@ if __name__ == '__main__': img_list = sorted(img_list) for in_path in img_list: - out_path = os.path.join(args.out_dir, in_path.split("/")[-1]) + out_path = os.path.join(args.out_dir, in_path.split("/")[-1]) out_path = out_path.replace('.jpg', '.png') - size_ = align_face(in_path, out_path) \ No newline at end of file + size_ = align_face(in_path, out_path) diff --git a/requirements.txt b/requirements.txt index 87d1b9f9f..4b5ce3f49 100644 --- a/requirements.txt +++ b/requirements.txt @@ -26,8 +26,6 @@ voluptuous yapf fasteners orjson -ruff -pylint sqlalchemy invisible-watermark pi-heif @@ -70,6 +68,11 @@ scikit-image seam-carving sentencepiece +# lint +ruff +pylint +pre-commit + # block torch!=2.5.0 torchvision!=0.20.0 diff --git a/scripts/consistory/consistory_pipeline.py b/scripts/consistory/consistory_pipeline.py index b17fb4143..cf020c254 100644 --- a/scripts/consistory/consistory_pipeline.py +++ b/scripts/consistory/consistory_pipeline.py @@ -82,7 +82,7 @@ class ConsistoryExtendAttnSDXLPipeline( clip_skip: Optional[int] = None, callback_on_step_end: Optional[Callable[[int, int, Dict], None]] = None, callback_on_step_end_tensor_inputs: List[str] = ["latents"], - + attention_store_kwargs: Optional[Dict] = None, extended_attn_kwargs: Optional[Dict] = None, share_queries: bool = False, @@ -422,8 +422,8 @@ class ConsistoryExtendAttnSDXLPipeline( t, encoder_hidden_states=prompt_embeds, timestep_cond=timestep_cond, - cross_attention_kwargs={'query_store': query_store, - 'perform_extend_attn': False, + cross_attention_kwargs={'query_store': query_store, + 'perform_extend_attn': False, 'record_attention': False}, added_cond_kwargs=added_cond_kwargs, return_dict=False, @@ -436,9 +436,9 @@ class ConsistoryExtendAttnSDXLPipeline( t, encoder_hidden_states=prompt_embeds, timestep_cond=timestep_cond, - cross_attention_kwargs={'query_store': query_store, - 'perform_extend_attn': True, - 'record_attention': True, + cross_attention_kwargs={'query_store': query_store, + 'perform_extend_attn': True, + 'record_attention': True, 'feature_injector': feature_injector, 'anchors_cache': anchors_cache}, added_cond_kwargs=added_cond_kwargs, @@ -483,7 +483,7 @@ class ConsistoryExtendAttnSDXLPipeline( if XLA_AVAILABLE: # xm.mark_step() pass - + # Update attention store mask self.attention_store.aggregate_last_steps_attention() @@ -516,4 +516,4 @@ class ConsistoryExtendAttnSDXLPipeline( if not return_dict: return (image,) - return StableDiffusionXLPipelineOutput(images=image) \ No newline at end of file + return StableDiffusionXLPipelineOutput(images=image) diff --git a/scripts/consistory/consistory_unet_sdxl.py b/scripts/consistory/consistory_unet_sdxl.py index 940b4ba01..4e6e4b335 100644 --- a/scripts/consistory/consistory_unet_sdxl.py +++ b/scripts/consistory/consistory_unet_sdxl.py @@ -1153,7 +1153,7 @@ class ConsistorySDXLUNet2DConditionModel(ModelMixin, ConfigMixin, UNet2DConditio upsample_size=upsample_size, scale=lora_scale, ) - + self.latent_store(sample.detach(), t=timestep, layer_index=i) # 6. post-process diff --git a/scripts/consistory/utils/ptp_utils.py b/scripts/consistory/utils/ptp_utils.py index 0ab2d8d93..5bd4adf65 100644 --- a/scripts/consistory/utils/ptp_utils.py +++ b/scripts/consistory/utils/ptp_utils.py @@ -13,9 +13,9 @@ # limitations under the License. # MIT License -# +# # Copyright (c) 2023 AttendAndExcite -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights @@ -175,9 +175,9 @@ class AttentionStore: attn_mask = self.last_mask_dropout[width] if attn_mask is None: return None - + n_patches = width**2 - + output_attn_mask = torch.zeros((attn_mask.shape[0] * attn_mask.shape[1],), device=attn_mask.device, dtype=torch.bool) for j in range(attn_mask.shape[0]): @@ -191,4 +191,4 @@ class AttentionStore: raise NotImplementedError('mask_background_query is not supported anymore') output_attn_mask[0, attn_mask[i], k*n_patches:(k+1)*n_patches] = attn_mask[j].unsqueeze(0).expand(attn_mask[i].sum(), -1) - return output_attn_mask \ No newline at end of file + return output_attn_mask diff --git a/scripts/instantir/aggregator.py b/scripts/instantir/aggregator.py index 1950f9efa..5877340ca 100644 --- a/scripts/instantir/aggregator.py +++ b/scripts/instantir/aggregator.py @@ -68,7 +68,7 @@ class SFT(nn.Module): self.add = nn.Conv2d(nhidden, norm_nc, kernel_size=ks, padding=pw) def forward(self, hidden_states, mask=False): - + c, h = hidden_states mask = mask or self.mask assert mask is False @@ -750,7 +750,7 @@ class Aggregator(ModelMixin, ConfigMixin, FromOriginalModelMixin): image_embeds = self.encoder_hid_proj(image_embeds) encoder_hidden_states = (encoder_hidden_states, image_embeds) return encoder_hidden_states - + def _set_gradient_checkpointing(self, module, value: bool = False) -> None: if isinstance(module, (CrossAttnDownBlock2D, DownBlock2D)): module.gradient_checkpointing = value diff --git a/scripts/instantir/ip_adapter/attention_processor.py b/scripts/instantir/ip_adapter/attention_processor.py index 68dce4281..ca57b8754 100644 --- a/scripts/instantir/ip_adapter/attention_processor.py +++ b/scripts/instantir/ip_adapter/attention_processor.py @@ -723,7 +723,7 @@ class AdditiveKV_AttnProcessor2_0(torch.nn.Module): temb=None, ): assert temb is not None, "Timestep embedding is needed for a time-aware attention processor." - + residual = hidden_states if attn.spatial_norm is not None: @@ -834,7 +834,7 @@ class TA_AdditiveKV_AttnProcessor2_0(torch.nn.Module): temb=None, ): assert temb is not None, "Timestep embedding is needed for a time-aware attention processor." - + residual = hidden_states if attn.spatial_norm is not None: @@ -1163,7 +1163,7 @@ class TA_IPAttnProcessor2_0(torch.nn.Module): # for ip-adapter ip_key = self.to_k_ip(ip_hidden_states) ip_value = self.to_v_ip(ip_hidden_states) - + # time-dependent adaLN ip_key = self.ln_k_ip(ip_key, temb) ip_value = self.ln_v_ip(ip_value, temb) diff --git a/scripts/instantir/ip_adapter/ip_adapter.py b/scripts/instantir/ip_adapter/ip_adapter.py index 7f4bcbc45..a244cd681 100644 --- a/scripts/instantir/ip_adapter/ip_adapter.py +++ b/scripts/instantir/ip_adapter/ip_adapter.py @@ -47,14 +47,14 @@ class MLPProjModel(torch.nn.Module): """SD model with image prompt""" def __init__(self, cross_attention_dim=2048, clip_embeddings_dim=1280): super().__init__() - + self.proj = torch.nn.Sequential( torch.nn.Linear(clip_embeddings_dim, clip_embeddings_dim), torch.nn.GELU(), torch.nn.Linear(clip_embeddings_dim, cross_attention_dim), torch.nn.LayerNorm(cross_attention_dim) ) - + def forward(self, image_embeds): clip_extra_context_tokens = self.proj(image_embeds) return clip_extra_context_tokens diff --git a/scripts/instantir/ip_adapter/utils.py b/scripts/instantir/ip_adapter/utils.py index 64c45cd85..07147c278 100644 --- a/scripts/instantir/ip_adapter/utils.py +++ b/scripts/instantir/ip_adapter/utils.py @@ -245,4 +245,4 @@ def prepare_training_image_embeds( ) image_embeds.append(single_image_embeds) - return image_embeds \ No newline at end of file + return image_embeds diff --git a/scripts/instantir/sdxl_instantir.py b/scripts/instantir/sdxl_instantir.py index b279d8445..8595a4b40 100644 --- a/scripts/instantir/sdxl_instantir.py +++ b/scripts/instantir/sdxl_instantir.py @@ -396,7 +396,7 @@ class InstantIRPipeline( self.unet.disable_adapters() return lora_alpha - + # Copied from diffusers.pipelines.stable_diffusion_xl.pipeline_stable_diffusion_xl.StableDiffusionXLPipeline.encode_prompt def encode_prompt( self, diff --git a/scripts/pulid/eva_clip/__init__.py b/scripts/pulid/eva_clip/__init__.py index fa2d014bb..039e7ce32 100644 --- a/scripts/pulid/eva_clip/__init__.py +++ b/scripts/pulid/eva_clip/__init__.py @@ -8,4 +8,4 @@ from .openai import load_openai_model, list_openai_models from .pretrained import list_pretrained, list_pretrained_models_by_tag, list_pretrained_tags_by_model,\ get_pretrained_url, download_pretrained_from_url, is_pretrained_cfg, get_pretrained_cfg, download_pretrained from .tokenizer import SimpleTokenizer, tokenize -from .transform import image_transform \ No newline at end of file +from .transform import image_transform diff --git a/scripts/pulid/eva_clip/eva_vit_model.py b/scripts/pulid/eva_clip/eva_vit_model.py index 51db88cf0..7d22eeacd 100644 --- a/scripts/pulid/eva_clip/eva_vit_model.py +++ b/scripts/pulid/eva_clip/eva_vit_model.py @@ -11,7 +11,7 @@ try: from timm.models.layers import drop_path, to_2tuple, trunc_normal_ except: from timm.layers import drop_path, to_2tuple, trunc_normal_ - + from .transformer import PatchDropout from .rope import VisionRotaryEmbedding, VisionRotaryEmbeddingFast @@ -39,19 +39,19 @@ class DropPath(nn.Module): def forward(self, x): return drop_path(x, self.drop_prob, self.training) - + def extra_repr(self) -> str: return 'p={}'.format(self.drop_prob) class Mlp(nn.Module): def __init__( - self, - in_features, - hidden_features=None, - out_features=None, - act_layer=nn.GELU, - norm_layer=nn.LayerNorm, + self, + in_features, + hidden_features=None, + out_features=None, + act_layer=nn.GELU, + norm_layer=nn.LayerNorm, drop=0., subln=False, @@ -71,7 +71,7 @@ class Mlp(nn.Module): x = self.fc1(x) x = self.act(x) # x = self.drop(x) - # commit this for the orignal BERT implement + # commit this for the orignal BERT implement x = self.ffn_ln(x) x = self.fc2(x) @@ -79,7 +79,7 @@ class Mlp(nn.Module): return x class SwiGLU(nn.Module): - def __init__(self, in_features, hidden_features=None, out_features=None, act_layer=nn.SiLU, drop=0., + def __init__(self, in_features, hidden_features=None, out_features=None, act_layer=nn.SiLU, drop=0., norm_layer=nn.LayerNorm, subln=False): super().__init__() out_features = out_features or in_features @@ -91,7 +91,7 @@ class SwiGLU(nn.Module): self.act = act_layer() self.ffn_ln = norm_layer(hidden_features) if subln else nn.Identity() self.w3 = nn.Linear(hidden_features, out_features) - + self.drop = nn.Dropout(drop) def forward(self, x): @@ -172,20 +172,20 @@ class Attention(nn.Module): def forward(self, x, rel_pos_bias=None, attn_mask=None): B, N, C = x.shape - if self.subln: + if self.subln: q = F.linear(input=x, weight=self.q_proj.weight, bias=self.q_bias) k = F.linear(input=x, weight=self.k_proj.weight, bias=None) v = F.linear(input=x, weight=self.v_proj.weight, bias=self.v_bias) q = q.reshape(B, N, self.num_heads, -1).permute(0, 2, 1, 3) # B, num_heads, N, C - k = k.reshape(B, N, self.num_heads, -1).permute(0, 2, 1, 3) - v = v.reshape(B, N, self.num_heads, -1).permute(0, 2, 1, 3) - else: + k = k.reshape(B, N, self.num_heads, -1).permute(0, 2, 1, 3) + v = v.reshape(B, N, self.num_heads, -1).permute(0, 2, 1, 3) + else: qkv_bias = None if self.q_bias is not None: qkv_bias = torch.cat((self.q_bias, torch.zeros_like(self.v_bias, requires_grad=False), self.v_bias)) - + qkv = F.linear(input=x, weight=self.qkv.weight, bias=qkv_bias) qkv = qkv.reshape(B, N, 3, self.num_heads, -1).permute(2, 0, 3, 1, 4) # 3, B, num_heads, N, C q, k, v = qkv[0], qkv[1], qkv[2] @@ -232,7 +232,7 @@ class Attention(nn.Module): if attn_mask is not None: attn_mask = attn_mask.bool() attn = attn.masked_fill(~attn_mask[:, None, None, :], float("-inf")) - + attn = attn.softmax(dim=-1) attn = self.attn_drop(attn) @@ -262,15 +262,15 @@ class Block(nn.Module): if naiveswiglu: self.mlp = SwiGLU( - in_features=dim, - hidden_features=mlp_hidden_dim, + in_features=dim, + hidden_features=mlp_hidden_dim, subln=subln, norm_layer=norm_layer, ) else: self.mlp = Mlp( - in_features=dim, - hidden_features=mlp_hidden_dim, + in_features=dim, + hidden_features=mlp_hidden_dim, act_layer=act_layer, subln=subln, drop=drop @@ -407,7 +407,7 @@ class EVAVisionTransformer(nn.Module): ft_seq_len=hw_seq_len if intp_freq else None, # patch_dropout=patch_dropout ) - else: + else: self.rope = None self.naiveswiglu = naiveswiglu @@ -469,7 +469,7 @@ class EVAVisionTransformer(nn.Module): def get_num_layers(self): return len(self.blocks) - + def lock(self, unlocked_groups=0, freeze_bn_stats=False): assert unlocked_groups == 0, 'partial locking not currently supported for this model' for param in self.parameters(): @@ -491,7 +491,7 @@ class EVAVisionTransformer(nn.Module): self.head = nn.Linear(self.embed_dim, num_classes) if num_classes > 0 else nn.Identity() def forward_features(self, x, return_all_features=False, return_hidden=False, shuffle=False): - + x = self.patch_embed(x) batch_size, seq_len, _ = x.size() diff --git a/scripts/pulid/eva_clip/factory.py b/scripts/pulid/eva_clip/factory.py index ced899999..b33929625 100644 --- a/scripts/pulid/eva_clip/factory.py +++ b/scripts/pulid/eva_clip/factory.py @@ -93,7 +93,7 @@ def load_state_dict(checkpoint_path: str, map_location: str='cpu', model_key: st state_dict = checkpoint if next(iter(state_dict.items()))[0].startswith('module'): state_dict = {k[7:]: v for k, v in state_dict.items()} - + for k in skip_list: if k in list(state_dict.keys()): logging.info(f"Removing key {k} from pretrained checkpoint") @@ -181,7 +181,7 @@ def load_pretrained_checkpoint( visual_state_dict = load_clip_visual_state_dict(visual_checkpoint_path, is_openai=True, skip_list=skip_list) else: visual_state_dict = load_state_dict(visual_checkpoint_path, model_key=model_key, is_openai=False, skip_list=skip_list) - + # resize_clip_pos_embed for CLIP and open CLIP if 'positional_embedding' in visual_state_dict: resize_visual_pos_embed(visual_state_dict, model) @@ -202,7 +202,7 @@ def load_pretrained_checkpoint( text_state_dict = load_state_dict(visual_checkpoint_path, model_key=model_key, is_openai=False, skip_list=skip_list) text_incompatible_keys = model.text.load_state_dict(text_state_dict, strict=strict) - + logging.info(f"num of loaded text_state_dict keys: {len(text_state_dict.keys())}") logging.info(f"text_incompatible_keys.missing_keys: {text_incompatible_keys.missing_keys}") @@ -255,7 +255,7 @@ def create_model( if force_quick_gelu: # override for use of QuickGELU on non-OpenAI transformer models model_cfg["quick_gelu"] = True - + if force_patch_dropout is not None: # override the default patch dropout value model_cfg['vision_cfg']["patch_dropout"] = force_patch_dropout @@ -286,7 +286,7 @@ def create_model( checkpoint_path, model_key="model|module|state_dict", strict=False - ) + ) else: error_str = ( f'Pretrained weights ({pretrained}) not found for model {model_name}.' @@ -296,7 +296,7 @@ def create_model( else: visual_checkpoint_path = '' text_checkpoint_path = '' - + if pretrained_image: pretrained_visual_model = pretrained_visual_model.replace('/', '-') # for callers using old naming with / in ViT names pretrained_image_cfg = get_pretrained_cfg(pretrained_visual_model, pretrained_image) @@ -321,7 +321,7 @@ def create_model( else: logging.warning(f'Pretrained weights ({text_checkpoint_path}) not found for model {model_name}.text.') raise RuntimeError(f'Pretrained weights ({text_checkpoint_path}) not found for model {model_name}.text.') - + if visual_checkpoint_path: logging.info(f'Loading pretrained {model_name}.visual weights ({visual_checkpoint_path}).') if text_checkpoint_path: @@ -338,7 +338,7 @@ def create_model( model_key="model|module|state_dict", skip_list=skip_list ) - + if "fp16" in precision or "bf16" in precision: logging.info(f'convert precision to {precision}') model = model.to(torch.bfloat16) if 'bf16' in precision else model.to(torch.float16) diff --git a/scripts/pulid/eva_clip/hf_model.py b/scripts/pulid/eva_clip/hf_model.py index 0b9551993..1665ada0b 100644 --- a/scripts/pulid/eva_clip/hf_model.py +++ b/scripts/pulid/eva_clip/hf_model.py @@ -62,19 +62,19 @@ class ClsPooler(nn.Module): self.use_pooler_output = use_pooler_output def forward(self, x:BaseModelOutput, attention_mask:TensorType): - - if (self.use_pooler_output and + + if (self.use_pooler_output and isinstance(x, (BaseModelOutputWithPooling, BaseModelOutputWithPoolingAndCrossAttentions)) and (x.pooler_output is not None) ): return x.pooler_output - + return x.last_hidden_state[:, self.cls_token_position, :] class HFTextEncoder(nn.Module): """HuggingFace model adapter""" def __init__( - self, + self, model_name_or_path: str, output_dim: int, tokenizer_name: str = None, @@ -134,10 +134,10 @@ class HFTextEncoder(nn.Module): self.tokenizer = AutoTokenizer.from_pretrained(tokenizer_name) # def forward_itm(self, x:TensorType, image_embeds:TensorType) -> TensorType: - # image_atts = torch.ones(image_embeds.size()[:-1],dtype=torch.long).to(x.device) + # image_atts = torch.ones(image_embeds.size()[:-1],dtype=torch.long).to(x.device) # attn_mask = (x != self.config.pad_token_id).long() # out = self.transformer( - # input_ids=x, + # input_ids=x, # attention_mask=attn_mask, # encoder_hidden_states = image_embeds, # encoder_attention_mask = image_atts, @@ -147,14 +147,14 @@ class HFTextEncoder(nn.Module): # return self.itm_proj(pooled_out) def mask(self, input_ids, vocab_size, device, targets=None, masked_indices=None, probability_matrix=None): - if masked_indices is None: + if masked_indices is None: masked_indices = torch.bernoulli(probability_matrix).bool() - + masked_indices[input_ids == self.tokenizer.pad_token_id] = False masked_indices[input_ids == self.tokenizer.cls_token_id] = False - + if targets is not None: - targets[~masked_indices] = -100 # We only compute loss on masked tokens + targets[~masked_indices] = -100 # We only compute loss on masked tokens # 80% of the time, we replace masked input tokens with tokenizer.mask_token ([MASK]) indices_replaced = torch.bernoulli(torch.full(input_ids.shape, 0.8)).bool() & masked_indices @@ -163,9 +163,9 @@ class HFTextEncoder(nn.Module): # 10% of the time, we replace masked input tokens with random word indices_random = torch.bernoulli(torch.full(input_ids.shape, 0.5)).bool() & masked_indices & ~indices_replaced random_words = torch.randint(vocab_size, input_ids.shape, dtype=torch.long).to(device) - input_ids[indices_random] = random_words[indices_random] - # The rest of the time (10% of the time) we keep the masked input tokens unchanged - + input_ids[indices_random] = random_words[indices_random] + # The rest of the time (10% of the time) we keep the masked input tokens unchanged + if targets is not None: return input_ids, targets else: @@ -174,7 +174,7 @@ class HFTextEncoder(nn.Module): def forward_mlm(self, input_ids, image_embeds, mlm_probability=0.25): labels = input_ids.clone() attn_mask = (input_ids != self.config.pad_token_id).long() - image_atts = torch.ones(image_embeds.size()[:-1],dtype=torch.long).to(input_ids.device) + image_atts = torch.ones(image_embeds.size()[:-1],dtype=torch.long).to(input_ids.device) vocab_size = getattr(self.config, arch_dict[self.config.model_type]["config_names"]["vocab_size"]) probability_matrix = torch.full(labels.shape, mlm_probability) input_ids, labels = self.mask(input_ids, vocab_size, input_ids.device, targets=labels, diff --git a/scripts/pulid/eva_clip/loss.py b/scripts/pulid/eva_clip/loss.py index 473f60d98..13450d838 100644 --- a/scripts/pulid/eva_clip/loss.py +++ b/scripts/pulid/eva_clip/loss.py @@ -119,7 +119,7 @@ class ClipLoss(nn.Module): self.prev_num_logits = num_logits else: labels = self.labels[device] - + if self.label_smoothing_cross_entropy: total_loss = ( self.label_smoothing_cross_entropy(logits_per_image, labels) + @@ -130,9 +130,9 @@ class ClipLoss(nn.Module): F.cross_entropy(logits_per_image, labels) + F.cross_entropy(logits_per_text, labels) ) / 2 - + acc = None i2t_acc = (logits_per_image.argmax(-1) == labels).sum() / len(logits_per_image) t2i_acc = (logits_per_text.argmax(-1) == labels).sum() / len(logits_per_text) acc = {"i2t": i2t_acc, "t2i": t2i_acc} - return total_loss, acc \ No newline at end of file + return total_loss, acc diff --git a/scripts/pulid/eva_clip/model.py b/scripts/pulid/eva_clip/model.py index abd8c02db..85a3e5b53 100644 --- a/scripts/pulid/eva_clip/model.py +++ b/scripts/pulid/eva_clip/model.py @@ -231,7 +231,7 @@ class CLIP(nn.Module): def set_grad_checkpointing(self, enable=True): self.visual.set_grad_checkpointing(enable) self.transformer.grad_checkpointing = enable - + @torch.jit.ignore def no_weight_decay(self): return {'logit_scale'} @@ -309,7 +309,7 @@ def convert_weights_to_lp(model: nn.Module, dtype=torch.float16): """Convert applicable model parameters to low-precision (bf16 or fp16)""" def _convert_weights(l): - + if isinstance(l, (nn.Conv1d, nn.Conv2d, nn.Linear)): l.weight.data = l.weight.data.to(dtype) if l.bias is not None: diff --git a/scripts/pulid/eva_clip/model_configs/EVA01-CLIP-B-16.json b/scripts/pulid/eva_clip/model_configs/EVA01-CLIP-B-16.json index aad205800..fc684f14e 100644 --- a/scripts/pulid/eva_clip/model_configs/EVA01-CLIP-B-16.json +++ b/scripts/pulid/eva_clip/model_configs/EVA01-CLIP-B-16.json @@ -16,4 +16,4 @@ "heads": 8, "layers": 12 } -} \ No newline at end of file +} diff --git a/scripts/pulid/eva_clip/model_configs/EVA01-CLIP-g-14-plus.json b/scripts/pulid/eva_clip/model_configs/EVA01-CLIP-g-14-plus.json index 100279572..b08129178 100644 --- a/scripts/pulid/eva_clip/model_configs/EVA01-CLIP-g-14-plus.json +++ b/scripts/pulid/eva_clip/model_configs/EVA01-CLIP-g-14-plus.json @@ -21,4 +21,4 @@ "xattn": false, "fusedLN": true } -} \ No newline at end of file +} diff --git a/scripts/pulid/eva_clip/model_configs/EVA01-CLIP-g-14.json b/scripts/pulid/eva_clip/model_configs/EVA01-CLIP-g-14.json index 5d338b4e6..6a477be45 100644 --- a/scripts/pulid/eva_clip/model_configs/EVA01-CLIP-g-14.json +++ b/scripts/pulid/eva_clip/model_configs/EVA01-CLIP-g-14.json @@ -21,4 +21,4 @@ "xattn": false, "fusedLN": true } -} \ No newline at end of file +} diff --git a/scripts/pulid/eva_clip/model_configs/EVA02-CLIP-B-16.json b/scripts/pulid/eva_clip/model_configs/EVA02-CLIP-B-16.json index e4a6e723f..533e39afe 100644 --- a/scripts/pulid/eva_clip/model_configs/EVA02-CLIP-B-16.json +++ b/scripts/pulid/eva_clip/model_configs/EVA02-CLIP-B-16.json @@ -26,4 +26,4 @@ "xattn": true, "fusedLN": true } -} \ No newline at end of file +} diff --git a/scripts/pulid/eva_clip/model_configs/EVA02-CLIP-L-14-336.json b/scripts/pulid/eva_clip/model_configs/EVA02-CLIP-L-14-336.json index 3e1d124e1..5feb65755 100644 --- a/scripts/pulid/eva_clip/model_configs/EVA02-CLIP-L-14-336.json +++ b/scripts/pulid/eva_clip/model_configs/EVA02-CLIP-L-14-336.json @@ -26,4 +26,4 @@ "xattn": false, "fusedLN": true } -} \ No newline at end of file +} diff --git a/scripts/pulid/eva_clip/model_configs/EVA02-CLIP-L-14.json b/scripts/pulid/eva_clip/model_configs/EVA02-CLIP-L-14.json index 03b22ad3c..853abf237 100644 --- a/scripts/pulid/eva_clip/model_configs/EVA02-CLIP-L-14.json +++ b/scripts/pulid/eva_clip/model_configs/EVA02-CLIP-L-14.json @@ -26,4 +26,4 @@ "xattn": false, "fusedLN": true } -} \ No newline at end of file +} diff --git a/scripts/pulid/eva_clip/model_configs/EVA02-CLIP-bigE-14.json b/scripts/pulid/eva_clip/model_configs/EVA02-CLIP-bigE-14.json index 747ffccc8..df99893bf 100644 --- a/scripts/pulid/eva_clip/model_configs/EVA02-CLIP-bigE-14.json +++ b/scripts/pulid/eva_clip/model_configs/EVA02-CLIP-bigE-14.json @@ -22,4 +22,4 @@ "xattn": false, "fusedLN": true } -} \ No newline at end of file +} diff --git a/scripts/pulid/eva_clip/rope.py b/scripts/pulid/eva_clip/rope.py index 69030c35e..764cb1976 100644 --- a/scripts/pulid/eva_clip/rope.py +++ b/scripts/pulid/eva_clip/rope.py @@ -60,7 +60,7 @@ class VisionRotaryEmbedding(nn.Module): freqs_w = torch.einsum('..., f -> ... f', t, freqs) freqs_w = repeat(freqs_w, '... n -> ... (n r)', r = 2) - freqs = broadcat((freqs_h[:, None, :], freqs_w[None, :, :]), dim = -1) + freqs = broadcat((freqs_h[:, None, :], freqs_w[None, :, :]), dim = -1) self.register_buffer("freqs_cos", freqs.cos()) self.register_buffer("freqs_sin", freqs.sin()) @@ -134,4 +134,4 @@ class VisionRotaryEmbeddingFast(nn.Module): return t * freqs_cos + rotate_half(t) * freqs_sin - return t * self.freqs_cos + rotate_half(t) * self.freqs_sin \ No newline at end of file + return t * self.freqs_cos + rotate_half(t) * self.freqs_sin diff --git a/scripts/pulid/eva_clip/transformer.py b/scripts/pulid/eva_clip/transformer.py index 1e0a52ceb..f5afdb2a0 100644 --- a/scripts/pulid/eva_clip/transformer.py +++ b/scripts/pulid/eva_clip/transformer.py @@ -12,7 +12,7 @@ try: from timm.models.layers import trunc_normal_ except: from timm.layers import trunc_normal_ - + from .rope import VisionRotaryEmbedding, VisionRotaryEmbeddingFast from .utils import to_2tuple @@ -311,7 +311,7 @@ class CustomAttention(nn.Module): attn = self.attn_drop(attn) x = torch.bmm(attn, v) - + if self.head_scale is not None: x = x.view(B_q, self.num_heads, N_q, C_q) * self.head_scale x = x.view(-1, N_q, C_q) @@ -411,7 +411,7 @@ class CustomTransformer(nn.Module): ]) def get_cast_dtype(self) -> torch.dtype: - return self.resblocks[0].mlp.c_fc.weight.dtype + return self.resblocks[0].mlp.c_fc.weight.dtype def forward(self, q: torch.Tensor, k: torch.Tensor = None, v: torch.Tensor = None, attn_mask: Optional[torch.Tensor] = None): if k is None and v is None: @@ -532,7 +532,7 @@ class VisionTransformer(nn.Module): # setting a patch_dropout of 0. would mean it is disabled and this function would be the identity fn self.patch_dropout = PatchDropout(patch_dropout) if patch_dropout > 0. else nn.Identity() self.ln_pre = norm_layer(width) - + self.transformer = Transformer( width, layers, @@ -551,7 +551,7 @@ class VisionTransformer(nn.Module): def lock(self, unlocked_groups=0, freeze_bn_stats=False): for param in self.parameters(): param.requires_grad = False - + if unlocked_groups != 0: groups = [ [ @@ -655,7 +655,7 @@ class TextTransformer(nn.Module): norm_layer=norm_layer, xattn=xattn ) - + self.xattn = xattn self.ln_final = norm_layer(width) self.text_projection = nn.Parameter(torch.empty(width, output_dim)) @@ -686,7 +686,7 @@ class TextTransformer(nn.Module): @torch.jit.ignore def set_grad_checkpointing(self, enable=True): self.transformer.grad_checkpointing = enable - + @torch.jit.ignore def no_weight_decay(self): # return {'positional_embedding', 'token_embedding'} diff --git a/scripts/pulid/eva_clip/utils.py b/scripts/pulid/eva_clip/utils.py index bdc5a7a45..1c3c06201 100644 --- a/scripts/pulid/eva_clip/utils.py +++ b/scripts/pulid/eva_clip/utils.py @@ -135,7 +135,7 @@ def resize_eva_pos_embed(state_dict, model, interpolation: str = 'bicubic', seq_ patch_size = model.visual.patch_embed.patch_size state_dict['patch_embed.proj.weight'] = torch.nn.functional.interpolate( patch_embed_proj.float(), size=patch_size, mode='bicubic', align_corners=False) - + def resize_rel_pos_embed(state_dict, model, interpolation: str = 'bicubic', seq_dim=1): all_keys = list(state_dict.keys()) @@ -323,4 +323,4 @@ class AllGather(torch.autograd.Function): None ) -allgather = AllGather.apply \ No newline at end of file +allgather = AllGather.apply diff --git a/scripts/xadapter/pipeline_sd_xl_adapter_controlnet.py b/scripts/xadapter/pipeline_sd_xl_adapter_controlnet.py index f0f27fa69..a07982925 100644 --- a/scripts/xadapter/pipeline_sd_xl_adapter_controlnet.py +++ b/scripts/xadapter/pipeline_sd_xl_adapter_controlnet.py @@ -1824,4 +1824,3 @@ class StableDiffusionXLAdapterControlnetPipeline(DiffusionPipeline, FromSingleFi init_latents = self.scheduler.add_noise(init_latents, noise, timestep) return init_latents - diff --git a/scripts/xadapter/pipeline_sd_xl_adapter_controlnet_img2img.py b/scripts/xadapter/pipeline_sd_xl_adapter_controlnet_img2img.py index c2dadfbfc..b2eee115f 100644 --- a/scripts/xadapter/pipeline_sd_xl_adapter_controlnet_img2img.py +++ b/scripts/xadapter/pipeline_sd_xl_adapter_controlnet_img2img.py @@ -1910,4 +1910,3 @@ class StableDiffusionXLAdapterControlnetI2IPipeline(DiffusionPipeline, FromSingl # image.save(f'./test_img/noisy_image_sd1_5_{int(timestep)}.jpg') return init_latents - diff --git a/scripts/xadapter/utils.py b/scripts/xadapter/utils.py index 02990f645..817491647 100644 --- a/scripts/xadapter/utils.py +++ b/scripts/xadapter/utils.py @@ -11,4 +11,4 @@ from safetensors import safe_open from tqdm import tqdm from einops import rearrange from model.convert_from_ckpt import convert_ldm_unet_checkpoint, convert_ldm_clip_checkpoint, convert_ldm_vae_checkpoint -# from animatediff.utils.convert_lora_safetensor_to_diffusers import convert_lora, convert_motion_lora_ckpt_to_diffusers \ No newline at end of file +# from animatediff.utils.convert_lora_safetensor_to_diffusers import convert_lora, convert_motion_lora_ckpt_to_diffusers