Upload folder using huggingface_hub (#1)
Browse files- bb047315bf025df1ef9b535ae63b31f0c8b58c1e7c896a4e4a9d116851115862 (7e6b1e2d6e0f478b3e44de95f0c744da483f7093)
- c5e5aafbd355d40c9a6098a76e091f0ce9686827f74aacd3a679fc72967ac606 (395def2df07471d0f0a667ae055b6d2f13ea5769)
- a34e80e8b4b20b9452d240a5dfb1810a082bf12e800fb36d96f61768dfebfe44 (b36180cdab6740771e97645ec336452451b08678)
- de62fe58e29c640df0d1bdacc1202aca1f811659137622e64c565ae8cb27305c (759809ae55e16924da82d522a83964cdfd508653)
- 493c20365a6d47dbf69371f8fd135bde2c229dc9054e566c25aaf8d2b87e7c2f (61f26a39bfdd594e2d753a8717a599f9a6ea7423)
- b1cd3cb7bfbdf6b65768916fc8a7bf7d73c29be1b2d83eee6ed82a504ce95797 (aab0905f25fb62fdf0504d35fc4090c6eca9b0a3)
- 3665ecb0775f4206863238cf012acd8fe84a6e50e0509ae1b2ca1dd989c83784 (3f52bfaa9995c4082524acb906d7f8476d871ee4)
- 49dd4a12034a58d8195abccf923cb1e9c2031af1a7963206e766ea35985d7fb7 (7e74c483911541a802e9482928ca3120b988923e)
- 2f05314564c053f0140bce4427ab439532284ce059305d792ca670c8507b2585 (debc2190e416f4dcf699cae0e2c9524c293a1f88)
- d085fb5e990db7ee5b7125f517739f5fcf88b6266a3c1d0adc5822b5cf7db6ae (32e1065c4dc595522e7ac7b1935b4c871a27dea9)
- f0647bda5c31a7c794c48c2dbd03bf29b382f58d595b0325e938e14aac346836 (f07387de7c25de60e7593590ba5ecda6b8edb584)
- 3648a469f0fb07172ece85292a5ce8613ac37e3239706f93cac30eb840e698f2 (ff00ee1605235d25334ade11907c7c6c0afeb8d0)
- 9d17f1734597b4731e3d6a274cdec37a4ad3054fb33be87bfc77fdab709efe1e (5d50a6ccced2c6abb56c6ba2f3cc106a1f5a1045)
- 8c13f0e820b243b9acc884bdce69389edad2a229723ae3171064068d34a4f6a9 (e9ce14ccb193ffcdc7c880e721097495c839c2d7)
- e194ce2d2748a5af0570a770a1cefb2fab8a44d5be14f7ad824e2c5377468cc2 (35cfa365b4abd6d90d44ffe33fb9719ec4a70a5a)
- e2995becd360d58a423e980bd90c8c561b09f45f96abafcdcf1c8ea7bd8fa73e (1abf80fff78b09dcf9fbcb69cf603a8c7b2f7e7f)
- d9f013547cdb7a093d4452d9d28a5bd50c4265d2173f171d992ef95712eda138 (e10622bba22855c1a9710c513de396e74a91b3e3)
- af28ca2ad0dcca742db28d34890817ef8b237640c1883a9458911942758da300 (63ad319ed37169ab882b6075c519cf413a1ba2ae)
- bd0b2d78c38bf12d814ff6448a27d0dfa9564561391f4c81eea9227035b96918 (48678db30edeae0b568e65ab3cee675fc1658ef4)
- d974c693be7c014b1693a82d1be000c0b7fc7cedadbd48c1c9c30e402483fd9e (953b7eb2fed93c295ca5fcede8aff2192f1aa5de)
- 3d5f0c007369428a6314f872ac5f22e2b33a263ebffac8b3892028a10b706d92 (f8965a7f4f14f47afe344d71fb474c127a9ee2f4)
- 9e9d39220f9e6e307aecc00a29e8e24c648b930f8fc232b426bb2a4e5b4ffe21 (93fee810e5c2f2acba534c338c724a6b83ef503b)
- 715ee7a5586a2e6afbb764d710102a533d4a880c8e5548c84ce26ca017c69492 (71f9f21bee2b7436924bc613871d54de39b548e1)
- 889169e5cfe911eba4ba56a0124f50811040e4850a76380dfa0144b5687b4a65 (85678acfad9155b137fc6ec82b702074b820f493)
- 63dd9f7852d681d9d30b785c459b2149830b4f0dbcd21a1a01da971538925752 (39cf5c70bc4d6edcd6379f64d28725d1aab2464a)
- aa926620ca6701673dec0f931c22897dc1c41bb94a3cec6e3b01f666d53a734a (65f2719d972f0e6b57fe93b9accaf279787e0bbb)
- 4d236f269e1a886ee94de597a01280b7022bdb78bc9f29135e2270c87e807b5a (92ddcc648a532d81f2edc188adfa136a20affbe5)
- fa041677180ea69638193882a16d82d986bd9d622f496af1a36c5226756a5355 (bb6da2dc4d1f9fdc09c286816741ba3c9f704a1d)
- e45e4f13d5c9e60475aab5d96e9b1a7480fe1c87f8e11a8a7e765452832fab90 (8e5bd2d97704eb2089f85f2141e0d74fabc93169)
- .gitattributes +8 -0
- Auto-Photoshop-StableDiffusion-Plugin/.github/workflows/publish_docs_to_wiki +43 -0
- Auto-Photoshop-StableDiffusion-Plugin/.github/workflows/wiki-sync-action.yml +29 -0
- Auto-Photoshop-StableDiffusion-Plugin/.github/workflows/wiki_action_2 +23 -0
- Auto-Photoshop-StableDiffusion-Plugin/.gitignore +34 -0
- Auto-Photoshop-StableDiffusion-Plugin/.prettierignore +3 -0
- Auto-Photoshop-StableDiffusion-Plugin/.prettierrc +6 -0
- Auto-Photoshop-StableDiffusion-Plugin/LICENSE.md +21 -0
- Auto-Photoshop-StableDiffusion-Plugin/README.md +202 -0
- Auto-Photoshop-StableDiffusion-Plugin/dialog_box.js +78 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/Generate txt2img.gif +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/History.gif +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/Home.md +217 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/Pasted image 20230131191554.png +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/Pasted image 20230131192430.png +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/Pasted image 20230131195947.png +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/Pasted image 20230131200253.png +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/Pasted image 20230131201122.png +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/Pasted image 20230131202243.png +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/Pasted image 20230131202255.png +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/Pasted image 20230131202517.png +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/Pasted image 20230131202539.png +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/Pasted image 20230131202558.png +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/Pasted image 20230131202638.png +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/Pasted image 20230201161508.png +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/Pasted image 20230201161702.png +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/Pasted image 20230201161716.png +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/Pasted image 20230201161938.png +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/Pasted image 20230201163236.png +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/Pasted image 20230203191656.png +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/Viewer Tutorial.gif +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/become_backer.svg +1 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/heal_brush.gif +3 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/img2img.gif +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/inpainting.gif +3 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/outpainting.gif +3 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/profile_image/A934E4F0-7778-47E9-A395-531BFF2E61F1_1_105_c.jpeg +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/profile_image/no_profile.png +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/prompt_shortcut.gif +3 -0
- Auto-Photoshop-StableDiffusion-Plugin/docs/prompt_shortcut_file.gif +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/enum.js +57 -0
- Auto-Photoshop-StableDiffusion-Plugin/helper.js +120 -0
- Auto-Photoshop-StableDiffusion-Plugin/icon/accept_all.png +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/icon/accept_all.svg +1 -0
- Auto-Photoshop-StableDiffusion-Plugin/icon/accept_selected.png +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/icon/accept_selected.svg +1 -0
- Auto-Photoshop-StableDiffusion-Plugin/icon/camera_icon.png +0 -0
- Auto-Photoshop-StableDiffusion-Plugin/icon/camera_icon.svg +14 -0
- Auto-Photoshop-StableDiffusion-Plugin/icon/chain_black.svg +4 -0
- Auto-Photoshop-StableDiffusion-Plugin/icon/chain_white.svg +4 -0
@@ -32,3 +32,11 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
32 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
33 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
34 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
33 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
34 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
35 |
+
Auto-Photoshop-StableDiffusion-Plugin/docs/heal_brush.gif filter=lfs diff=lfs merge=lfs -text
|
36 |
+
Auto-Photoshop-StableDiffusion-Plugin/docs/inpainting.gif filter=lfs diff=lfs merge=lfs -text
|
37 |
+
Auto-Photoshop-StableDiffusion-Plugin/docs/outpainting.gif filter=lfs diff=lfs merge=lfs -text
|
38 |
+
Auto-Photoshop-StableDiffusion-Plugin/docs/prompt_shortcut.gif filter=lfs diff=lfs merge=lfs -text
|
39 |
+
Stable-Diffusion-Webui-Civitai-Helper/img/all_in_one.png filter=lfs diff=lfs merge=lfs -text
|
40 |
+
posex/image/sample-webui2.jpg filter=lfs diff=lfs merge=lfs -text
|
41 |
+
posex/image/sample-webui2.png filter=lfs diff=lfs merge=lfs -text
|
42 |
+
sd_feed/assets/pinterest.png filter=lfs diff=lfs merge=lfs -text
|
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: Publish docs to Wiki
|
2 |
+
|
3 |
+
# Trigger this action only if there are changes pushed to the docs/** directory under the main branch
|
4 |
+
on:
|
5 |
+
push:
|
6 |
+
branches:
|
7 |
+
- main # This can be changed to any branch of your preference
|
8 |
+
|
9 |
+
env:
|
10 |
+
USER_TOKEN: ${{ secrets.WIKI_ACTION_TOKEN }} # This is the repository secret
|
11 |
+
USER_NAME: AbdullahAlfaraj # Enter the username of your (bot) account
|
12 |
+
USER_EMAIL: [email protected] # Enter the e-mail of your (bot) account
|
13 |
+
OWNER: ${{ github.event.repository.owner.name }} # This is the repository owner
|
14 |
+
REPOSITORY_NAME: ${{ github.event.repository.name }} # This is the repository name
|
15 |
+
|
16 |
+
jobs:
|
17 |
+
publish_docs_to_wiki:
|
18 |
+
name: Publish docs to Wiki
|
19 |
+
runs-on: ubuntu-latest
|
20 |
+
steps:
|
21 |
+
- name: Checkout repository
|
22 |
+
uses: actions/checkout@v2
|
23 |
+
|
24 |
+
# 1. Create folder named `tmp_wiki`
|
25 |
+
# 2. Initialize Git
|
26 |
+
# 3. Pull old Wiki content
|
27 |
+
- name: Pull content from wiki
|
28 |
+
run: |
|
29 |
+
mkdir tmp_wiki
|
30 |
+
cd tmp_wiki
|
31 |
+
git init
|
32 |
+
git config user.name $USER_NAME
|
33 |
+
git config user.email $USER_EMAIL
|
34 |
+
git pull https://[email protected]/$OWNER/$REPOSITORY_NAME.wiki.git
|
35 |
+
# 4. Synchronize differences between `docs` & `tmp_wiki`
|
36 |
+
# 5. Push new Wiki content
|
37 |
+
- name: Push content to wiki
|
38 |
+
run: |
|
39 |
+
rsync -av --delete docs/ tmp_wiki/ --exclude .git
|
40 |
+
cd tmp_wiki
|
41 |
+
git add .
|
42 |
+
git commit -m "Update Wiki content"
|
43 |
+
git push -f --set-upstream https://[email protected]/$OWNER/$REPOSITORY_NAME.wiki.git master
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
on:
|
2 |
+
push:
|
3 |
+
branches:
|
4 |
+
- master
|
5 |
+
pull_request:
|
6 |
+
branches:
|
7 |
+
- master
|
8 |
+
name: Wiki Sync
|
9 |
+
jobs:
|
10 |
+
update-wiki:
|
11 |
+
runs-on: ubuntu-latest
|
12 |
+
steps:
|
13 |
+
# - name: wiki-safe
|
14 |
+
# run: |
|
15 |
+
# git config --global --add safe.directory /wiki
|
16 |
+
- uses: actions/checkout@master
|
17 |
+
- name: Sync Wiki
|
18 |
+
# uses: joeizzard/action-wiki-sync@master
|
19 |
+
uses: AbdullahAlfaraj/ghaction-wiki-sync@master
|
20 |
+
|
21 |
+
|
22 |
+
with:
|
23 |
+
username: AbdullahAlfaraj
|
24 |
+
access_token: ${{ secrets.WIKI_ACTION_TOKEN }}
|
25 |
+
wiki_folder: docs
|
26 |
+
commit_username: 'AbdullahAlfaraj '
|
27 |
+
commit_email: '[email protected]'
|
28 |
+
commit_message: 'action: wiki sync'
|
29 |
+
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: Deploy Wiki
|
2 |
+
|
3 |
+
on:
|
4 |
+
push:
|
5 |
+
branches:
|
6 |
+
# And only on master branch
|
7 |
+
- master
|
8 |
+
|
9 |
+
jobs:
|
10 |
+
deploy-wiki:
|
11 |
+
runs-on: ubuntu-latest
|
12 |
+
steps:
|
13 |
+
|
14 |
+
- name: Push Wiki Changes
|
15 |
+
uses: Andrew-Chen-Wang/github-wiki-action@v3
|
16 |
+
env:
|
17 |
+
# Make sure you have that / at the end. We use rsync
|
18 |
+
# WIKI_DIR's default is wiki/
|
19 |
+
WIKI_DIR: docs/
|
20 |
+
GH_TOKEN: ${{ secrets.WIKI_ACTION_TOKEN }}
|
21 |
+
GH_MAIL: [email protected]
|
22 |
+
GH_NAME: ${{ github.repository_owner }}
|
23 |
+
EXCLUDED_FILES: "a/ b.md"
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
**/__pycache__
|
2 |
+
env
|
3 |
+
/server_env
|
4 |
+
/tmp
|
5 |
+
/outputs
|
6 |
+
/log
|
7 |
+
/.idea
|
8 |
+
/.vscode
|
9 |
+
/.git
|
10 |
+
/.github
|
11 |
+
test.bat
|
12 |
+
server/python_server/output/*
|
13 |
+
server/python_server/init_images/*
|
14 |
+
node_modules/
|
15 |
+
server/python_server/prompt_shortcut.json
|
16 |
+
experimental/
|
17 |
+
start_server.sh
|
18 |
+
start_server.bat
|
19 |
+
*.ccx
|
20 |
+
expanded_mask.png
|
21 |
+
original_mask.png
|
22 |
+
/config
|
23 |
+
|
24 |
+
/jimp/*
|
25 |
+
!/jimp/browser/
|
26 |
+
/jimp/browser/examples
|
27 |
+
/jimp/browser/*.md
|
28 |
+
/jimp/browser/*.editorconfig
|
29 |
+
/jimp/browser/lib/jimp.js
|
30 |
+
|
31 |
+
|
32 |
+
# comments when packaging:
|
33 |
+
ultimate_sd_upscaler/dist/*LICENSE.txt
|
34 |
+
ultimate_sd_upscaler/dist/*.bundle.js
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
server/python_server/output/*
|
2 |
+
*.md
|
3 |
+
manifest.json
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"trailingComma": "es5",
|
3 |
+
"tabWidth": 4,
|
4 |
+
"semi": false,
|
5 |
+
"singleQuote": true
|
6 |
+
}
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
MIT License
|
2 |
+
|
3 |
+
Copyright (c) 2022 Abdullah Alfaraj
|
4 |
+
|
5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6 |
+
of this software and associated documentation files (the "Software"), to deal
|
7 |
+
in the Software without restriction, including without limitation the rights
|
8 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9 |
+
copies of the Software, and to permit persons to whom the Software is
|
10 |
+
furnished to do so, subject to the following conditions:
|
11 |
+
|
12 |
+
The above copyright notice and this permission notice shall be included in all
|
13 |
+
copies or substantial portions of the Software.
|
14 |
+
|
15 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21 |
+
SOFTWARE.
|
@@ -0,0 +1,202 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
|
3 |
+
# Auto-Photoshop-StableDiffusion-Plugin
|
4 |
+
[![Become a Patron!](https://c5.patreon.com/external/logo/become_a_patron_button.png)](https://www.patreon.com/AbdullahAlfaraj)
|
5 |
+
[![discord badge]][discord link]
|
6 |
+
|
7 |
+
[discord badge]: https://flat.badgen.net/discord/members/3mVEtrddXJ
|
8 |
+
[discord link]: https://discord.gg/3mVEtrddXJ
|
9 |
+
|
10 |
+
|
11 |
+
|
12 |
+
With Auto-Photoshop-StableDiffusion-Plugin, you can directly use the capabilities of Automatic1111 Stable Diffusion in Photoshop without switching between programs. This allows you to easily use Stable Diffusion AI in a familiar environment. You can edit your Stable Diffusion image with all your favorite tools and save it right in Photoshop.
|
13 |
+
|
14 |
+
# Table of Contents
|
15 |
+
- [Auto-Photoshop-StableDiffusion-Plugin](#auto-photoshop-stablediffusion-plugin)
|
16 |
+
- [Table of Contents](#table-of-contents)
|
17 |
+
- [Demo:](#demo)
|
18 |
+
- [Support Us On Patreon](#support-us-on-patreon)
|
19 |
+
- [How to Install](#how-to-install)
|
20 |
+
- [Method 1: One Click Installer](#method-1-one-click-installer)
|
21 |
+
- [Method 2: The Unzip Method](#method-2-the-unzip-method)
|
22 |
+
- [Method 3: The UXP Method (for Developers/Programmers Only)](#method-3-the-uxp-method-instruction-for-developers)
|
23 |
+
|
24 |
+
- [FAQ and Known Issues](#faq-and-known-issues)
|
25 |
+
- [What Photoshop version do I need to run the plugin?](#what-photoshop-version-do-i-need-to-run-the-plugin)
|
26 |
+
- [Path Doesn't Exist](#path-doesnt-exist)
|
27 |
+
- [Plugin Load Failed](#plugin-load-failed)
|
28 |
+
- [No application are connected to the service](#no-application-are-connected-to-the-service)
|
29 |
+
- [Load command failed in App with ID PS and Version X.X.X](#load-command-failed-in-app-with-id-ps-and-version-xxx)
|
30 |
+
- [Exception in ASGI application / Expecting value: line 1 column 1](#exception-in-asgi-application--expecting-value-line-1-column-1)
|
31 |
+
- [No Generations and Plugin Server doesn't send messages. (Remote setup)](#no-generations-and-plugin-server-doesnt-send-messages-remote-setup)
|
32 |
+
|
33 |
+
- [No GPU Options](#no-gpu-options)
|
34 |
+
- [Stable Horde](#stable-horde)
|
35 |
+
- [Colab](#colab)
|
36 |
+
|
37 |
+
# Support Us On Patreon:
|
38 |
+
By supporting us on [Patreon](https://www.patreon.com/AbdullahAlfaraj), you’ll help us continue to develop and improve the Auto-Photoshop-StableDiffusion-Plugin, making it even easier for you to use Stable Diffusion AI in a familiar environment. As a supporter, you’ll have the opportunity to provide feedback and suggestions for future development. Plus, you’ll get early access to new features and tutorials, as well as exclusive art tutorials and tips from a professional artist. We’re passionate about making AI approachable to artists and with your help, we can continue to do just that.
|
39 |
+
# Auto-Photoshop-SD Backers and Sponsors:
|
40 |
+
**💎 Diamond:**
|
41 |
+
| [![Ronny Khalil](https://images.weserv.nl/?url=https://raw.githubusercontent.com/AbdullahAlfaraj/Auto-Photoshop-StableDiffusion-Plugin/206b56c911f67ede3ca3a934d0bce8c1d68a2113/docs/profile_image/A934E4F0-7778-47E9-A395-531BFF2E61F1_1_105_c.jpeg&h=80&w=80&fit=cover&mask=circle&maxage=7d)](https://ronnykhalil.com/) | ![zachary](https://ui-avatars.com/api/?background=random&color=fff&rounded=true&name=zachary) | ![Razvan Matei](https://ui-avatars.com/api/?background=random&color=fff&rounded=true&name=Razvan+Matei)
|
42 |
+
|:---:|:---:|:---:|
|
43 |
+
| [Ronny Khalil](https://ronnykhalil.com/) | zachary | Razvan Matei
|
44 |
+
|
45 |
+
**🥇 Gold:**
|
46 |
+
| ![Alex ](https://ui-avatars.com/api/?background=random&color=fff&rounded=true&name=Alex+) | ![Florin-Alexandru Ilinescu](https://ui-avatars.com/api/?background=random&color=fff&rounded=true&name=Florin-Alexandru+Ilinescu) | ![Robin Edwards](https://ui-avatars.com/api/?background=random&color=fff&rounded=true&name=Robin+Edwards) | ![Danny Sahagun](https://ui-avatars.com/api/?background=random&color=fff&rounded=true&name=Danny+Sahagun)
|
47 |
+
|:---:|:---:|:---:|:---:|
|
48 |
+
| Alex | Florin-Alexandru Ilinescu | Robin Edwards | Danny Sahagun
|
49 |
+
|
50 |
+
**🥈 Silver:**
|
51 |
+
| ![Amith Thomas](https://ui-avatars.com/api/?background=random&color=fff&rounded=true&name=Amith+Thomas) | ![Olivier Lefebvre](https://ui-avatars.com/api/?background=random&color=fff&rounded=true&name=Olivier+Lefebvre) | ![xiao yuan](https://ui-avatars.com/api/?background=random&color=fff&rounded=true&name=xiao+yuan) | ![Ezra Blake](https://ui-avatars.com/api/?background=random&color=fff&rounded=true&name=Ezra+Blake) | ![Zenko ](https://ui-avatars.com/api/?background=random&color=fff&rounded=true&name=Zenko+) | ![Frederic Dreuilhe](https://ui-avatars.com/api/?background=random&color=fff&rounded=true&name=Frederic+Dreuilhe) | ![Kevin Schofield](https://ui-avatars.com/api/?background=random&color=fff&rounded=true&name=Kevin+Schofield) | ![darius coal](https://ui-avatars.com/api/?background=random&color=fff&rounded=true&name=darius+coal) | ![Kerwin](https://ui-avatars.com/api/?background=random&color=fff&rounded=true&name=Kerwin) | ![The Dread Vixen Alinsa](https://ui-avatars.com/api/?background=random&color=fff&rounded=true&name=The+Dread+Vixen+Alinsa) | ![Chris Canterbury](https://ui-avatars.com/api/?background=random&color=fff&rounded=true&name=Chris+Canterbury)
|
52 |
+
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
53 |
+
| Amith Thomas | Olivier Lefebvre | xiao yuan | Ezra Blake | Zenko | Frederic Dreuilhe | Kevin Schofield | darius coal | Kerwin | The Dread Vixen Alinsa | Chris Canterbury
|
54 |
+
|
55 |
+
**🥉 Copper:**
|
56 |
+
| ![Sebastian Karbowniczek](https://ui-avatars.com/api/?background=random&color=fff&rounded=true&name=Sebastian+Karbowniczek) | ![Arthur Liu](https://ui-avatars.com/api/?background=random&color=fff&rounded=true&name=Arthur+Liu) | ![Juan Pablo Mendiola](https://ui-avatars.com/api/?background=random&color=fff&rounded=true&name=Juan+Pablo+Mendiola) | ![Bruce Hunter](https://ui-avatars.com/api/?background=random&color=fff&rounded=true&name=Bruce+Hunter)
|
57 |
+
|:---:|:---:|:---:|:---:|
|
58 |
+
| Sebastian Karbowniczek | Arthur Liu | Juan Pablo Mendiola | Bruce Hunter
|
59 |
+
|
60 |
+
|
61 |
+
|
62 |
+
|
63 |
+
|
64 |
+
|
65 |
+
|
66 |
+
|
67 |
+
|
68 |
+
|
69 |
+
<a href="https://www.patreon.com/AbdullahAlfaraj" rel="nofollow"><img src="docs/become_backer.svg" style="max-width: 100%;"></a>
|
70 |
+
|
71 |
+
|
72 |
+
# How To Install:
|
73 |
+
Use method 1 or 2 if you are an Artist
|
74 |
+
use method 3 if you are a Developer/Programmer
|
75 |
+
|
76 |
+
|
77 |
+
# Method 1: One Click Installer
|
78 |
+
|
79 |
+
1) Download the [.ccx](https://github.com/AbdullahAlfaraj/Auto-Photoshop-StableDiffusion-Plugin/releases/latest) file
|
80 |
+
2) run the ccx file . that's all. you will be able to use all of stable diffusion modes (txt2img, img2img, inpainting and outpainting), check the [tutorials](https://github.com/AbdullahAlfaraj/Auto-Photoshop-StableDiffusion-Plugin/wiki) section to master the tool.
|
81 |
+
|
82 |
+
![install_plugin_1](https://user-images.githubusercontent.com/7842232/217213943-3e2a588d-3ed8-4757-ba69-9846b55a1b36.gif)
|
83 |
+
|
84 |
+
|
85 |
+
3) (optional step) Install the Auto-Photoshop-SD Extension from Automatic1111. the extension will allow you to use the smart masking and image search features
|
86 |
+
- a) Copy Auto-Photoshop plugin url
|
87 |
+
![copy_githup_url_2](https://user-images.githubusercontent.com/7842232/217213998-367873ce-2c09-4c42-a5fa-0044415e3908.gif)
|
88 |
+
|
89 |
+
- b) Paste the url in auto1111's extension tab and click install
|
90 |
+
|
91 |
+
![install_extension_3](https://user-images.githubusercontent.com/7842232/217214062-4c2fef9e-8d49-46a0-aa3b-80c4975f8a70.gif)
|
92 |
+
|
93 |
+
- c) Make sure the Auto-Photoshop plugin is listed, then click "Apply and Restart UI"
|
94 |
+
|
95 |
+
![apply_and_restart_4](https://user-images.githubusercontent.com/7842232/217214116-2e30d7b8-aeb6-44df-aff3-4788a56cd800.gif)
|
96 |
+
|
97 |
+
|
98 |
+
|
99 |
+
# Method 2: The Unzip Method
|
100 |
+
1) Download the [.zip](https://github.com/AbdullahAlfaraj/Auto-Photoshop-StableDiffusion-Plugin/releases/latest) file
|
101 |
+
2) Unzip it in a folder with the same name
|
102 |
+
3) move the unzipped folder to the Photoshop Plugin folder
|
103 |
+
4) (optional step) Install the Auto-Photoshop-SD Extension from Automatic1111. the extension will allow you to use the smart masking and image search features
|
104 |
+
![image](https://user-images.githubusercontent.com/7842232/223751539-1a3013aa-aa1d-4058-87ae-e8b3fdfc5ec8.png)
|
105 |
+
|
106 |
+
|
107 |
+
|
108 |
+
# Method 3: The UXP method (Instruction for Developers):
|
109 |
+
For artists we recommend you use [the one click installer](#one-click-installer). If you are a developer Watch the any of these videos or follow the instruction bellow.
|
110 |
+
|
111 |
+
<a href="https://www.youtube.com/watch?v=BNzdhEpFHrg&ab_channel=Abdsart" title="How To Install Auto Photoshop Stable Diffusion Plugin by Abdullah Alfaraj" rel="Click Here to Watch How To Install Tutorial by Abdullah Alfaraj"><img src="https://user-images.githubusercontent.com/7842232/217941315-8d4a3b25-1a83-4dac-b921-79b3f82e0536.png" style="width:500px"></a>
|
112 |
+
|
113 |
+
<a href="https://www.youtube.com/watch?v=CJuTZw39Reg&t=145s&ab_channel=VladimirChopine%5BGeekatPlay%5D" title="How To Install Auto Photoshop Stable Diffusion Plugin by Vladimir Chopine" rel="Click Here to Watch How To Install Tutorial by Vladimir Chopine"><img src="https://i3.ytimg.com/vi/CJuTZw39Reg/maxresdefault.jpg" style="width:500px"></a>
|
114 |
+
|
115 |
+
For artists we recommend you use [the one click installer](#one-click-installer)
|
116 |
+
## First time running the plugin (local Automatic1111):
|
117 |
+
1) download the plugin:
|
118 |
+
```
|
119 |
+
git clone https://github.com/AbdullahAlfaraj/Auto-Photoshop-StableDiffusion-Plugin.git
|
120 |
+
```
|
121 |
+
2) open cmd window in the "Auto-Photoshop-StableDiffusion-Plugin" directory and then install the dependencies by typing:
|
122 |
+
```
|
123 |
+
npm install
|
124 |
+
```
|
125 |
+
3) build the plugin by transpiling typescript to javascript:
|
126 |
+
```
|
127 |
+
npm run watch
|
128 |
+
```
|
129 |
+
|
130 |
+
4) run "start_server.bat" inside "Auto-Photoshop-StableDiffusion-Plugin" directory
|
131 |
+
5) go to where you have [automatic1111](https://github.com/AUTOMATIC1111/stable-diffusion-webui) installed.
|
132 |
+
Edit the "webui-user.bat" in automatic1111
|
133 |
+
change this line
|
134 |
+
```
|
135 |
+
set COMMANDLINE_ARGS=
|
136 |
+
```
|
137 |
+
to
|
138 |
+
```
|
139 |
+
set COMMANDLINE_ARGS= --api
|
140 |
+
```
|
141 |
+
that will allow the plugin to communicate with the automatic1111 project. After saving close the "webui-user.bat" file and run it normally.
|
142 |
+
|
143 |
+
6) run photoshop. go to edit -> prefrences -> plugins
|
144 |
+
1) make sure you check "Enable Developer Mode" checkbox
|
145 |
+
7) install "Adobe UXP Developer Tool" from here [Installation (adobe.com)](https://developer.adobe.com/photoshop/uxp/devtool/installation/)
|
146 |
+
this tool will add the plugin into photoshop
|
147 |
+
8) run Adobe UXP Developer Tool and click on "Add Plugin" button in the top right. Navigate to where you have "Auto-Photoshop-StableDiffusion-Plugin" folder and open "manifest.json"
|
148 |
+
9) select the plugin and click on Actions -> Load Selected
|
149 |
+
that's it.
|
150 |
+
|
151 |
+
## First time running the plugin (remote Automatic1111):
|
152 |
+
__The remote webui must also have `--api` set in `COMMANDLINE_ARGS`. You can check if api access is enabled by appending "/docs#" to the end of the url. If the documentation includes `/sdapi/v1/samplers` then api access is enabled.__
|
153 |
+
|
154 |
+
1) download the plugin:
|
155 |
+
```
|
156 |
+
git clone https://github.com/AbdullahAlfaraj/Auto-Photoshop-StableDiffusion-Plugin.git
|
157 |
+
```
|
158 |
+
1) edit [start_server.bat](start_server.bat) (or start_server.sh if on linux) to point to the remote installation of Automatic1111
|
159 |
+
2) run "start_server.bat" inside "Auto-Photoshop-StableDiffusion-Plugin" directory
|
160 |
+
3) run photoshop. go to edit -> prefrences -> plugins
|
161 |
+
1) make sure you check "Enable Developer Mode" checkbox
|
162 |
+
4) install "Adobe UXP Developer Tool" from here [Installation (adobe.com)](https://developer.adobe.com/photoshop/uxp/devtool/installation/)
|
163 |
+
this tool will add the plugin into photoshop
|
164 |
+
5) run Adobe UXP Developer Tool and click on "Add Plugin" button in the top right. Navigate to where you have "Auto-Photoshop-StableDiffusion-Plugin" folder and open "manifest.json"
|
165 |
+
6) select the plugin and click on Actions -> Load Selected
|
166 |
+
that's it.
|
167 |
+
|
168 |
+
|
169 |
+
|
170 |
+
|
171 |
+
|
172 |
+
|
173 |
+
# Demo:
|
174 |
+
[![Click Here to Watch Demo](https://i3.ytimg.com/vi/VL_gbQai79E/maxresdefault.jpg)](https://youtu.be/VL_gbQai79E "Stable diffusion AI Photoshop Plugin Free and Open Source")
|
175 |
+
|
176 |
+
|
177 |
+
# FAQ and Known Issues
|
178 |
+
## What Photoshop version do I need to run the plugin?
|
179 |
+
The minimum Photoshop version that the plugin supports is Photoshop v24
|
180 |
+
|
181 |
+
## Plugin Load Failed
|
182 |
+
There are a few issues that can result in this error, please follow the instructions for the corresponding error message in the UDT logs
|
183 |
+
|
184 |
+
### No application are connected to the service
|
185 |
+
This error occurs when Photoshop is not started before the plugin is attempted to be loaded. Simply start photoshop then restart UXP and load the plugin
|
186 |
+
|
187 |
+
|
188 |
+
## Exception in ASGI application / Expecting value: line 1 column 1
|
189 |
+
This error occurs due to mismatched expectations between the plugin and the Automatic1111 backend.
|
190 |
+
It can be solved by both updating the version of the Automatic111 backend to the latest verion, and making sure "Save text information about generation parameters as chunks to png files" setting is enabled within the UI.
|
191 |
+
|
192 |
+
## No Generations and Plugin Server doesn't send messages. (Remote setup)
|
193 |
+
This error occurs when the remote server does not have the api enabled. You can verify this by attempting to go to the URL you access the webui at and appending "/docs#" to the end of the url. If you have permissions, make relaunch the remote instance with the "--api" flag.
|
194 |
+
|
195 |
+
# No GPU Options:
|
196 |
+
we provide two options to use the auto-photoshp plugin without GPU.
|
197 |
+
## Stable Horde
|
198 |
+
This is an awesome free crowdsourced distributed cluster of Stable Diffusion workers. If you like this service, consider joining the horde yourself!
|
199 |
+
the horde is enabled completely by the generosity of volunteers so make sure you don't overwhelm the service and help join the cause if you can.
|
200 |
+
read more on their [GitHub page](https://github.com/db0/AI-Horde)
|
201 |
+
## Colab:
|
202 |
+
we link to this [Colab](https://colab.research.google.com/drive/1nbcx_WOneRmYv9idBO33pN5CbxXrqZHu?usp=sharing#scrollTo=Y4ebYsPqTrGb) directly inside plugin find it in the settings tab. you only need to run it. no need to change any of the settings. copy the gradio.live url the colab will generate and paste it into ```sd url``` field in the settings tab.
|
@@ -0,0 +1,78 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
async function prompt(
|
2 |
+
heading,
|
3 |
+
body,
|
4 |
+
buttons = ['Cancel', 'Ok'],
|
5 |
+
options = { title: heading, size: { width: 360, height: 280 } }
|
6 |
+
) {
|
7 |
+
const [dlgEl, formEl, headingEl, dividerEl, bodyEl, footerEl] = [
|
8 |
+
'dialog',
|
9 |
+
'form',
|
10 |
+
'sp-heading',
|
11 |
+
'sp-divider',
|
12 |
+
'sp-body',
|
13 |
+
'footer',
|
14 |
+
].map((tag) => document.createElement(tag))
|
15 |
+
;[headingEl, dividerEl, bodyEl, footerEl].forEach((el) => {
|
16 |
+
el.style.margin = '6px'
|
17 |
+
el.style.width = 'calc(100% - 12px)'
|
18 |
+
})
|
19 |
+
|
20 |
+
formEl.setAttribute('method', 'dialog')
|
21 |
+
formEl.addEventListener('submit', () => dlgEl.close())
|
22 |
+
|
23 |
+
footerEl.style.marginTop = '26px'
|
24 |
+
|
25 |
+
dividerEl.setAttribute('size', 'large')
|
26 |
+
|
27 |
+
headingEl.textContent = heading
|
28 |
+
|
29 |
+
bodyEl.textContent = body
|
30 |
+
|
31 |
+
buttons.forEach((btnText, idx) => {
|
32 |
+
const btnEl = document.createElement('sp-button')
|
33 |
+
btnEl.setAttribute(
|
34 |
+
'variant',
|
35 |
+
idx === buttons.length - 1 ? btnText.variant || 'cta' : 'secondary'
|
36 |
+
)
|
37 |
+
if (idx === buttons.length - 1)
|
38 |
+
btnEl.setAttribute('autofocus', 'autofocus')
|
39 |
+
if (idx < buttons.length - 1) btnEl.setAttribute('quiet')
|
40 |
+
btnEl.textContent = btnText.text || btnText
|
41 |
+
btnEl.style.marginLeft = '12px'
|
42 |
+
btnEl.addEventListener('click', () =>
|
43 |
+
dlgEl.close(btnText.text || btnText)
|
44 |
+
)
|
45 |
+
footerEl.appendChild(btnEl)
|
46 |
+
})
|
47 |
+
;[headingEl, dividerEl, bodyEl, footerEl].forEach((el) =>
|
48 |
+
formEl.appendChild(el)
|
49 |
+
)
|
50 |
+
dlgEl.appendChild(formEl)
|
51 |
+
document.body.appendChild(dlgEl)
|
52 |
+
|
53 |
+
return dlgEl.uxpShowModal(options)
|
54 |
+
}
|
55 |
+
|
56 |
+
// const r1 = await prompt(
|
57 |
+
// 'Upload Large File',
|
58 |
+
// 'This is a large file (over 100MB) -- it may take a few moments to upload.',
|
59 |
+
// ['Skip', 'Upload']
|
60 |
+
// )
|
61 |
+
// if ((r1 || 'Upload') !== 'Upload') {
|
62 |
+
// /* cancelled or No */
|
63 |
+
// } else {
|
64 |
+
// /* Yes */
|
65 |
+
// }
|
66 |
+
|
67 |
+
// const r2 = await prompt(
|
68 |
+
// 'Delete File',
|
69 |
+
// 'Are you sure you wish to delete this file? This action cannot be undone.',
|
70 |
+
// ['Cancel', { variant: 'warning', text: 'Delete' }]
|
71 |
+
// )
|
72 |
+
// if (r2 !== 'Delete') {
|
73 |
+
// /* nope, don't do it! */
|
74 |
+
// } else {
|
75 |
+
// /* Do the delete */
|
76 |
+
// }
|
77 |
+
|
78 |
+
module.exports = { prompt }
|
@@ -0,0 +1,217 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
*Version 1.1.0*
|
3 |
+
|
4 |
+
## Introduction
|
5 |
+
|
6 |
+
This guide explains the Auto Photoshop UI and its main features, it doesn't go into any detail of how Stable Diffusion works or the functionalities implemented by AUTOMATIC1111. For the latter you can read the manual [here](https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Features).
|
7 |
+
|
8 |
+
## Stable Diffusion UI Tab
|
9 |
+
|
10 |
+
![[Pasted image 20230131191554.png]]
|
11 |
+
|
12 |
+
- **Model Selection** - allows to select the .ckpt / .safetensors model to be used for image generation.
|
13 |
+
- **Refresh** - refreshes the models. *Note*: this will extract all loaded models in AUTOMATIC1111, if you want to add a new model, first refresh AUTOMATIC1111.
|
14 |
+
- **L2S (Layer to selection)** - convenience function to move the content of the currently selected layer into the photoshop selection.
|
15 |
+
- **Snapshot** - convenience function equivalent to "ALT + Merge Visible Layers"
|
16 |
+
- **Reset** - reset UI to default values
|
17 |
+
- **Prompt Shortcut** - enables prompt shortcuts
|
18 |
+
- Prompt - text area for the image generation prompt
|
19 |
+
- Negative Prompt - text area for the image generation negative prompt
|
20 |
+
|
21 |
+
### txt2img
|
22 |
+
|
23 |
+
[[Pasted image 20230131192430.png]]
|
24 |
+
|
25 |
+
- **Images**: number of images to be generated in a single generation session
|
26 |
+
- **Steps**: number of steps
|
27 |
+
- **Selection Mode Ratio**: the generation dimension will be set automatically to match the proportion of the photoshop selection, using 512 as the base value.
|
28 |
+
- **Selection Mode Precise**: the generation dimension will be set to match exactly the photoshop selection.
|
29 |
+
- **Selection Mode Ignore**: the generation dimension are set by the user.
|
30 |
+
- **Width and Heigth**: the image generation dimensions
|
31 |
+
- **CFG Scale**: Influence strength of the prompt (for details please see the AUTOMATIC1111 wiki)
|
32 |
+
- **Restore Faces**: enables the restore faces function in AUTOMATIC1111
|
33 |
+
- **Hi Res Fix**: enables the Hi Res Fix function in AUTOMATIC1111 (see below)
|
34 |
+
- **Seed**: Displays and edit current seed (-1 = Random)
|
35 |
+
- **Random / Last**: sets seed to either random or last generation
|
36 |
+
- **Show Samplers**: allows to select the sampler used for image generation
|
37 |
+
|
38 |
+
**Hi Res Fix**
|
39 |
+
|
40 |
+
[[Pasted image 20230131195947.png]]
|
41 |
+
|
42 |
+
When Hi Res is checked, a number of parameters become avaiable including Upscaler model to be used, output dimensions and denoising strength. This is just an interface into the AUTOMATIC1111 functionality described [here](https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Features#hires-fix).
|
43 |
+
|
44 |
+
### img2img
|
45 |
+
|
46 |
+
[[Pasted image 20230131200253.png]]
|
47 |
+
|
48 |
+
- **Image**: shows the current image used as img2img base.
|
49 |
+
- **Denoising Strength**: how much Stable Diffusion should be influenced by the image, 0 = output is same as image, 1 = completely different image.
|
50 |
+
- **Inpainting conditioning mask strength**; this field only works with inpainting special models (ending in "-inpainting."). Determines how much the process should stick to the image structure, check out [this post](https://www.reddit.com/r/StableDiffusion/comments/yi46px/new_hidden_img2img_feature_conditioning_mask/) for details.
|
51 |
+
|
52 |
+
### inpaint
|
53 |
+
|
54 |
+
[[Pasted image 20230131201122.png]]
|
55 |
+
|
56 |
+
- **Image / Mask**: show image and mask used for the inpaint process
|
57 |
+
- **Denoising Strength**: similar to img2img however it behaves differently depending on Mask Content context.
|
58 |
+
- **Mask Blur**: how much to blur the mask before processing it in pixels
|
59 |
+
- **Mask Expansion**: how much the mask should expand to create a more blended output image
|
60 |
+
- Mask Content Fill: fill it with colors of the image
|
61 |
+
- Mask Content original: keep whatever was there originally
|
62 |
+
- Mask Content latent noise: fill it with latent space noise
|
63 |
+
- Mask Content latent nothing: fill it with latent space zeros
|
64 |
+
- **Inpaining at Full Res**: have a look [here](https://github.com/AUTOMATIC1111/stable-diffusion-webui/discussions/4637) for an explanation of this feature.
|
65 |
+
- **Restore Faces**: same as img2img
|
66 |
+
|
67 |
+
### outpaint
|
68 |
+
|
69 |
+
UI and its functionality are same as inpaint.
|
70 |
+
|
71 |
+
|
72 |
+
|
73 |
+
|
74 |
+
|
75 |
+
|
76 |
+
|
77 |
+
## Viewer
|
78 |
+
|
79 |
+
Tab to manage the images generated in the current session.
|
80 |
+
|
81 |
+
[[Pasted image 20230131202255.png]]
|
82 |
+
|
83 |
+
- Set Mask: manually sets the currently selected mask
|
84 |
+
- Set Init Image: manually sets the currently selected image
|
85 |
+
- Generate More: adds more generated images to the current session
|
86 |
+
- Selection Area: selects the boundaries of the currently selected image in the viewer
|
87 |
+
- [[Pasted image 20230131202517.png]] Keep all images generated in the current session
|
88 |
+
- [[Pasted image 20230131202539.png]] Discard all images generated in the current session
|
89 |
+
- [[Pasted image 20230131202558.png]] Keep only the selected image in the viewer
|
90 |
+
- [[Pasted image 20230131202638.png]] Discard the selected image in the viewer
|
91 |
+
|
92 |
+
## History
|
93 |
+
|
94 |
+
[[Pasted image 20230201161508.png]]
|
95 |
+
|
96 |
+
- **Load Previous Generations**: loads the images generated within this Photoshop file.
|
97 |
+
- [[Pasted image 20230201161716.png]] hovering on the image loaded from history will allow bringing the image back into the Photoshop Layer stack
|
98 |
+
- Clicking on the image will load the pluging settings for the image generation (seed and image generation configuration)
|
99 |
+
- **Image Search**: loads a set of images from the internet, clicking on any of the images will load them into the layer stack.
|
100 |
+
|
101 |
+
## Prompts Library
|
102 |
+
|
103 |
+
[[Pasted image 20230201161938.png]]
|
104 |
+
|
105 |
+
- For this to work a file will need to be created in the following location: Auto-Photoshop-StableDiffusion-Plugin\\server\\python_server\\prompt_shortcut.json
|
106 |
+
- **Load / Save**: Once the file is present, values can be loaded and saved onto the file.
|
107 |
+
- **Key / Value / Add top Prompt Shortcut**: allows to change / add values to the existing json file.
|
108 |
+
- **Refresh Menu**: will load all values from the json, allowing the user to make changes to the value.
|
109 |
+
|
110 |
+
## Horde
|
111 |
+
|
112 |
+
Coming Soon
|
113 |
+
|
114 |
+
## Settings
|
115 |
+
|
116 |
+
[[Pasted image 20230201163236.png]]
|
117 |
+
|
118 |
+
# Tutorials
|
119 |
+
|
120 |
+
## Generate a txt2img
|
121 |
+
|
122 |
+
[[Generate txt2img.gif]]
|
123 |
+
|
124 |
+
1. Make a selection where you want the image to be generated
|
125 |
+
2. Press [[Pasted image 20230203191656.png]]
|
126 |
+
3. (optional) use the Viewer to select which images to keep in case of multiple image generation
|
127 |
+
|
128 |
+
## Using the Viewer
|
129 |
+
|
130 |
+
[[Viewer Tutorial.gif]]
|
131 |
+
1. Generate images as usual
|
132 |
+
2. Select the image in the viewer grid (shift + click for multiple selection)
|
133 |
+
3. Choose from: keep one, discard one, keep all, discard all.
|
134 |
+
4. Images are saved in the latest session layer folder.
|
135 |
+
|
136 |
+
## History Tab
|
137 |
+
|
138 |
+
[[History.gif]]
|
139 |
+
|
140 |
+
1. Load Previous Generations button
|
141 |
+
2. Single click on image to load its settings in the Stable Diffusion tab (seed, prompt, etc)
|
142 |
+
3. Click on edit button to load the image in Photoshop
|
143 |
+
|
144 |
+
## Generate an img2img
|
145 |
+
|
146 |
+
[[img2img.gif]]
|
147 |
+
|
148 |
+
1. Select the portion of the image to be used as a sample
|
149 |
+
2. Select img2img mode and adjust the parameters (denoising strenght especially)
|
150 |
+
3. Press Generate img2img
|
151 |
+
4. (optional) use the Viewer to select which images to keep in case of multiple image generation
|
152 |
+
|
153 |
+
## Prompts Shortcut
|
154 |
+
you can substitute a whole sequence of words with one word.
|
155 |
+
|
156 |
+
Instead of writing the following as a prompt :
|
157 |
+
```
|
158 |
+
Unreal Engine, Octane Render, arcane card game ui, hearthstone art style, epic fantasy style art
|
159 |
+
```
|
160 |
+
you could write:
|
161 |
+
```
|
162 |
+
{game_like}
|
163 |
+
```
|
164 |
+
|
165 |
+
as long as you have defined the relationship in the prompt library tab
|
166 |
+
```
|
167 |
+
{
|
168 |
+
"game_like": "Unreal Engine, Octane Render, arcane card game ui, hearthstone art style, epic fantasy style art"
|
169 |
+
}
|
170 |
+
```
|
171 |
+
|
172 |
+
|
173 |
+
[[prompt_shortcut_file.gif]]
|
174 |
+
|
175 |
+
|
176 |
+
### Editing and Using a Prompt File
|
177 |
+
[[prompt_shortcut.gif]]
|
178 |
+
|
179 |
+
1. Switch to the *Prompt Shortcut* tab.
|
180 |
+
2. Load the json file.
|
181 |
+
3. Input a keyword and its value
|
182 |
+
4. Press *Add to Prompt Shortcut*
|
183 |
+
5. Now the new Prompt Shortcut can be used in the Stable Diffusion tab
|
184 |
+
6. To reuse previously saved shortcuts, ensure you load the json file at the start of each session.
|
185 |
+
|
186 |
+
## Inpainting
|
187 |
+
|
188 |
+
[[inpainting.gif]]
|
189 |
+
|
190 |
+
1. Select inpainting mode in the Stable Diffusion tab
|
191 |
+
2. Select the target area where to produce the image using rectangular marquee tool
|
192 |
+
3. With a 100% opacity white brush paint the area that you wish to inpaint
|
193 |
+
4. Ensure that you have a -inpainting.ckpt model selected (this is as important as it is easy to forget)
|
194 |
+
5. Write a prompt describing the inpaining image
|
195 |
+
6. Select the desired Mask Content option and adjust the Denoising Strength accordingly.
|
196 |
+
7. Hit Generate
|
197 |
+
|
198 |
+
## Outpainting
|
199 |
+
|
200 |
+
[[outpainting.gif]]
|
201 |
+
|
202 |
+
1. Select outpainting mode in the Stable Diffusion tab
|
203 |
+
2. Select the target area where to produce the image using rectangular marquee tool, ensure that you have **some overlap** with the existing image (to provide Stable Diffusion with some context) and that the target area is **transparent**.
|
204 |
+
4. Ensure that you have a -inpainting.ckpt model selected (this also works for outpainting)
|
205 |
+
5. Write a prompt describing the outpaining image
|
206 |
+
6. Select the desired Mask Content option and adjust the Denoising Strength accordingly.
|
207 |
+
7. Hit Generate
|
208 |
+
|
209 |
+
|
210 |
+
## Heal Brush
|
211 |
+
[[heal_brush.gif]]
|
212 |
+
1. Select the "Heal Brush" from the Smart Preset dropdown menu in the Stable Diffusion tab
|
213 |
+
2. Select the target area where to produce the image using rectangular marquee tool
|
214 |
+
3. With a 100% opacity white brush paint the area that you wish to erase
|
215 |
+
4. Ensure that you have a -inpainting.ckpt model selected (this is as important as it is easy to forget)
|
216 |
+
5. Write a prompt describing what you would like to see in the erased area
|
217 |
+
6. Hit Generate
|
Git LFS Details
|
Git LFS Details
|
Git LFS Details
|
Git LFS Details
|
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const clickTypeEnum = {
|
2 |
+
Click: 'click',
|
3 |
+
ShiftClick: 'shift_click',
|
4 |
+
AltClick: 'alt_click',
|
5 |
+
SecondClick: 'second_click', //when we click a thumbnail that is active/ has orange border
|
6 |
+
}
|
7 |
+
const generationModeEnum = {
|
8 |
+
Txt2Img: 'txt2img',
|
9 |
+
Img2Img: 'img2img',
|
10 |
+
Inpaint: 'inpaint',
|
11 |
+
Outpaint: 'outpaint',
|
12 |
+
Upscale: 'upscale',
|
13 |
+
}
|
14 |
+
|
15 |
+
const AutomaticStatusEnum = {
|
16 |
+
NoApi: 'no_api',
|
17 |
+
Offline: 'offline',
|
18 |
+
RunningNoApi: 'running_no_api',
|
19 |
+
RunningWithApi: 'running_with_api',
|
20 |
+
}
|
21 |
+
|
22 |
+
const ViewerObjectTypeEnum = {
|
23 |
+
OutputImage: 'output_image',
|
24 |
+
InitImage: 'init_image',
|
25 |
+
MaskImage: 'mask_image',
|
26 |
+
}
|
27 |
+
|
28 |
+
const RequestStateEnum = {
|
29 |
+
Generating: 'generating', // in the generation process
|
30 |
+
Interrupted: 'interrupted', // canceled/ interrupted
|
31 |
+
Finished: 'finished', // finished generating
|
32 |
+
}
|
33 |
+
const DocumentTypeEnum = {
|
34 |
+
NoBackground: 'no_background',
|
35 |
+
ImageBackground: 'image_background',
|
36 |
+
SolidBackground: 'solid_background',
|
37 |
+
ArtBoard: 'artboard',
|
38 |
+
}
|
39 |
+
const BackgroundHistoryEnum = {
|
40 |
+
CorrectBackground: 'correct_background',
|
41 |
+
NoBackground: 'no_background',
|
42 |
+
}
|
43 |
+
|
44 |
+
const PresetTypeEnum = {
|
45 |
+
SDPreset: 'sd_preset',
|
46 |
+
ControlNetPreset: 'controlnet_preset',
|
47 |
+
}
|
48 |
+
module.exports = {
|
49 |
+
clickTypeEnum,
|
50 |
+
generationModeEnum,
|
51 |
+
AutomaticStatusEnum,
|
52 |
+
ViewerObjectTypeEnum,
|
53 |
+
RequestStateEnum,
|
54 |
+
DocumentTypeEnum,
|
55 |
+
BackgroundHistoryEnum,
|
56 |
+
PresetTypeEnum,
|
57 |
+
}
|
@@ -0,0 +1,120 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const { unselectActiveLayers } = require('./psapi')
|
2 |
+
|
3 |
+
const app = window.require('photoshop').app
|
4 |
+
|
5 |
+
function getActiveLayer() {
|
6 |
+
let activeLayers = app.activeDocument.activeLayers
|
7 |
+
// console.dir(getSize())
|
8 |
+
for (const layer of activeLayers) {
|
9 |
+
console.dir({ layer })
|
10 |
+
const name = layer.name
|
11 |
+
console.dir({ name })
|
12 |
+
let layer_size = getLayerSize(layer)
|
13 |
+
console.dir({ layer_size })
|
14 |
+
}
|
15 |
+
|
16 |
+
return activeLayers[0]
|
17 |
+
}
|
18 |
+
|
19 |
+
function getSize() {
|
20 |
+
let doc = app.activeDocument
|
21 |
+
return { height: doc.height, width: doc.width }
|
22 |
+
}
|
23 |
+
|
24 |
+
const { batchPlay } = require('photoshop').action
|
25 |
+
const { executeAsModal } = require('photoshop').core
|
26 |
+
|
27 |
+
async function reselectBatchPlay(selectionInfo) {
|
28 |
+
const result = await batchPlay(
|
29 |
+
[
|
30 |
+
{
|
31 |
+
_obj: 'set',
|
32 |
+
_target: [
|
33 |
+
{
|
34 |
+
_ref: 'channel',
|
35 |
+
_property: 'selection',
|
36 |
+
},
|
37 |
+
],
|
38 |
+
to: {
|
39 |
+
_obj: 'rectangle',
|
40 |
+
top: {
|
41 |
+
_unit: 'pixelsUnit',
|
42 |
+
_value: selectionInfo.top,
|
43 |
+
},
|
44 |
+
left: {
|
45 |
+
_unit: 'pixelsUnit',
|
46 |
+
_value: selectionInfo.left,
|
47 |
+
},
|
48 |
+
bottom: {
|
49 |
+
_unit: 'pixelsUnit',
|
50 |
+
_value: selectionInfo.bottom,
|
51 |
+
},
|
52 |
+
right: {
|
53 |
+
_unit: 'pixelsUnit',
|
54 |
+
_value: selectionInfo.right,
|
55 |
+
},
|
56 |
+
},
|
57 |
+
_options: {
|
58 |
+
dialogOptions: 'dontDisplay',
|
59 |
+
},
|
60 |
+
},
|
61 |
+
],
|
62 |
+
{
|
63 |
+
synchronousExecution: true,
|
64 |
+
modalBehavior: 'execute',
|
65 |
+
}
|
66 |
+
)
|
67 |
+
}
|
68 |
+
|
69 |
+
async function reselect(selectionInfo) {
|
70 |
+
await executeAsModal(
|
71 |
+
async () => {
|
72 |
+
reselectBatchPlay(selectionInfo)
|
73 |
+
},
|
74 |
+
{ commandName: 'reselect' }
|
75 |
+
)
|
76 |
+
}
|
77 |
+
|
78 |
+
//unselect the rectangular marquee selection area
|
79 |
+
async function unSelect() {
|
80 |
+
const batchPlay = require('photoshop').action.batchPlay
|
81 |
+
|
82 |
+
const result = await batchPlay(
|
83 |
+
[
|
84 |
+
{
|
85 |
+
_obj: 'set',
|
86 |
+
_target: [
|
87 |
+
{
|
88 |
+
_ref: 'channel',
|
89 |
+
_property: 'selection',
|
90 |
+
},
|
91 |
+
],
|
92 |
+
to: {
|
93 |
+
_enum: 'ordinal',
|
94 |
+
_value: 'none',
|
95 |
+
},
|
96 |
+
_options: {
|
97 |
+
dialogOptions: 'dontDisplay',
|
98 |
+
},
|
99 |
+
},
|
100 |
+
],
|
101 |
+
{
|
102 |
+
synchronousExecution: true,
|
103 |
+
modalBehavior: 'execute',
|
104 |
+
}
|
105 |
+
)
|
106 |
+
|
107 |
+
return result
|
108 |
+
}
|
109 |
+
|
110 |
+
/**
|
111 |
+
* Convert 1d index to 2d array
|
112 |
+
* @param {number} index sequential index
|
113 |
+
* @param {number} width width of 2d array
|
114 |
+
* @returns {number[]} [x,y]
|
115 |
+
*/
|
116 |
+
function indexToXY(index, width) {
|
117 |
+
return [index % width, Math.floor(index / width)]
|
118 |
+
}
|
119 |
+
|
120 |
+
module.exports = {}
|