Stable Diffusion Webui Img2img Tab Extender
Project description
sdwi2iextender
A python library to help create custom img2img operation modes in A1111.
Context
Conflicts can easily arise between different A1111 extensions when creating new operation modes in the img2img section.
This library suggests an implementation that uniformalizes the creation of new operation modes.
Install
pip install sdwi2iextender
Usage
Registering a new operation mode
Before creating any UI or behavior, we need to register the operation mode.
This is done in 2 steps for each new tab that we want to create.
Step 1
First, we need to extend the OperationMode
class:
from sdwi2iextender import OperationMode
class MyOperationMode(OperationMode):
pass
Step 2
Then, we can add the new operation mode to the list of operation modes by calling the register_operation_mode
function:
from sdwi2iextender import OperationMode, register_operation_mode
class MyOperationMode(OperationMode):
pass
register_operation_mode(MyOperationMode)
That's it! The new operation mode is now registered with the Webui.
This won't do anything yet, though. We still need to populate our class with the behavior that we want.
Populating an operation mode
There are a few methods that can be overriden, let's look at them one by one.
tab
The tab
method is called with the Gradio context of the img2img tab group.
This means that you can create a gradio tab in it, and it will be rendered with the other img2img operation tabs:
class MyOperationTab(OperationMode):
def tab(self, ):
self.tab = gr.TabItem(label='My new tab')
As of version 0.0.1, you need exactly one
gr.TabItem
per operation mode. Adding more than one tab per operation mode in thetab()
method will result in an error. Not defining the tab in thetab()
method will result in an error.
section
The section
method is called with the Gradio context of the inpaint parameters.
You tipically use it to modify the inpaint parameters, add new ones, hide them, etc.
class MyInpaintParams(OperationMode):
def section(self, components: list):
pass
Ignore the components
list for now, we'll look at it later for more complex examples.
For now, here is how you can add a slider to the inpaint parameters:
class MyInpaintParams(OperationMode):
def section(self, components: list):
self.slider = gr.Slider(label="New slider")
gradio_events
The gradio_events
method is called when all the new operation modes are finished being created in the UI.
This is useful to setup any new event you want between Gradio components:
class MyOperationMode(OperationMode):
def tab(self):
self.tab = gr.TabItem(label='My new tab')
def section(self, components: list):
self.slider = gr.Slider(label="New slider")
def gradio_events(self, img2img_tabs: list):
self.tab.select(fn=lambda slider_value: setattr(self, "slider_value", slider_value), inputs=[self.slider], outputs=[])
This documentation is a WIP
I encourage you to look at the source code if you want to learn more about how to use this library!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for sdwi2iextender-0.0.10-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 66dbbfa4f306020e50c4d2752f1dc319a7341dee7fd07f3fdcced4edbc4aca9d |
|
MD5 | fdf437f170e311b44f44c15bedabb50c |
|
BLAKE2b-256 | 3a76e6e63e3175f97d094def17fac1ddc4370ec286b02b373fe8cc59bd894889 |