ehristoforu's picture
Upload folder using huggingface_hub
0163a2c verified
# Openpose Editor for ControlNet in Stable Diffusion WebUI
This extension is specifically build to be integrated into Stable Diffusion
WebUI's ControlNet extension.
![editor](https://github.com/huchenlei/sd-webui-openpose-editor/assets/20929282/c69199e2-5676-4609-87bc-af7499b1c4bd)
# Translations of README.md
- [English](./README.md)
- [中文](./README.zh.md)
- [日本語](./README.ja.md)
# Prerequisite
[ControlNet](https://github.com/Mikubill/sd-webui-controlnet) `1.1.216`+
# Installation
From ControlNet extension v1.1.411, users no longer need to install this
extension locally, as ControlNet extension now uses the remote endpoint at
https://huchenlei.github.io/sd-webui-openpose-editor/ if no local editor
installation is detected. Local installation is still recommended if you have
poor internet connection, or have hard time connecting to github.io domain.
## Local Installation
![installation_guide](/readme_assets/install_guide.png)
![restart_ui_guide](/readme_assets/restart_ui_guide.png)
On UI restart, the extension will try to download the compiled Vue app from
Github. Check whether `stable-diffusion-webui\extensions\sd-webui-openpose-editor\dist`
exists and has content in it.
Some users in China have reported having issue downloading dist with the autoupdate
script. In such situtations, the user has 2 following options to get dist
manually:
### Option1: Build the application
Make sure you have nodeJS environment ready and follow `Development` section.
Run `npm run build` to compile the application.
### Option2: Download the compiled application
You can download the compiled application(`dist.zip`) from the
[release](https://github.com/huchenlei/sd-webui-openpose-editor/releases) page.
Unzip the package in the repository root and make sure hte unziped directory is
named `dist`.
# Usage
The openpose editor core is build with Vue3. The gradio extension script is
a thin wrapper that mounts the Vue3 Application on `/openpose_editor_index`.
The user can directly access the editor at `localhost:7860/openpose_editor_index`
or `https://huchenlei.github.io/sd-webui-openpose-editor/`
if desired, but the main entry point is invoking the editor in the ControlNet
extension. In ControlNet extension, select any openpose preprocessor, and hit
the run preprocessor button. A preprocessor result preview will be genereated.
Click `Edit` button at the bottom right corner of the generated image will bring
up the openpose editor in a modal. After the edit, clicking the
`Send pose to ControlNet` button will send back the pose to ControlNet.
Following demo shows the basic workflow:
<!-- https://youtu.be/WEHVpPNIh8M -->
[![Basic Workflow](http://img.youtube.com/vi/WEHVpPNIh8M/0.jpg)](http://www.youtube.com/watch?v=WEHVpPNIh8M)
# Features
1. Support for face/hand used in controlnet.
- The extension recognizes the face/hand objects in the controlnet preprocess
results.
- The user can add face/hand if the preprocessor result misses them. It can
be done by either
- Add Default hand (Face is not supported as face has too many keypoints (70 keypoints),
which makes adjust them manually really hard.)
- Add the object by uploading a pose JSON. The corresponding object of
the first person will be used.
1. Visibility toggle
- If a keypoint is not recognized by ControlNet preprocessor, it will have
`(-1, -1)` as coordinates. Such invalid keypoints will be set as invisible
in the editor.
- If the user sets a keypoint as invisible and send the pose back to
controlnet, the limb segments that the keypoint connects will not be rendered.
Effectively this is how you remove a limb segment in the editor.
1. Group toggle
- If you don't want to accidentally select and modify the keypoint of an
canvas object (hand/face/body). You can group them. The grouped object will
act like it is a single object. You can scale, rotate, skew the group.
# Development
## Recommended IDE Setup
[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin).
## Type Support for `.vue` Imports in TS
TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types.
If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps:
1. Disable the built-in TypeScript Extension
1) Run `Extensions: Show Built-in Extensions` from VSCode's command palette
2) Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)`
2. Reload the VSCode window by running `Developer: Reload Window` from the command palette.
## Customize configuration
See [Vite Configuration Reference](https://vitejs.dev/config/).
## Project Setup
```sh
npm install
```
### Compile and Hot-Reload for Development
```sh
npm run dev
```
### Type-Check, Compile and Minify for Production
```sh
npm run build
```
### Run Unit Tests with [Vitest](https://vitest.dev/)
```sh
npm run test:unit
```
### Lint with [ESLint](https://eslint.org/)
```sh
npm run lint
```