Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat: Support both Google Colab and Paperspace Gradient notebook architectures #1010

Draft
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

dte
Copy link

@dte dte commented Dec 13, 2022

Goal

Paperspace offers a public notebook with free GPUs that for some users prefer to use instead of Google's Colab product. This PR adds notebook compatibility for both Google Colab and Gradient. Gradient has a few differences including persistent storage that does not require Google Drive and a slightly different storage model that supports multiple files and subdirectories.

Major Changes:

  • refactor hardcoded Google Drive and /content directories as configurable {persistent_storage_dir}, {working_notebook_dir}, and {packages_dir}
  • check for if IN_PAPERSPACE as opposed to in Colab to set up

Test Plan:

  • confirm works in Google Colab
  • confirm works in Paperspace Gradient
  • test all configurations

@dte
Copy link
Author

dte commented Dec 13, 2022

@TheLastBen Thanks for all your work in this repo! I was trying to get this to work as a notebook in Paperspace and figured it might be more useful upstreamed. Let me know if this approach of making the directories more modular is an abstraction that you would support.

@artificialguybr
Copy link

It's great to see Paperspace engaged in bringing great Colabs from the community to Paperspace. Great work!

@TheLastBen
Copy link
Owner

TheLastBen commented Dec 14, 2022

@dte Hi, contact me on discord : TheLastBen#0087

@nawnie
Copy link

nawnie commented Dec 22, 2022

PLEASE YES!!!!

@askiiart
Copy link

Here's some repos that might help:

@gugleigos
Copy link

webui
community saturnenterprise io

import os, time
from IPython.display import display, clear_output
from subprocess import getoutput


import ipywidgets as widgets
from ipywidgets import Layout
from ipywidgets import GridspecLayout


passdesks = True
passlexss = True

lvs = int(widgets.__version__[:1])
if lvs==8:
    passdesks = False

commands_regex = getoutput('pip list | grep regex')# if "regex" in v_diffusers:
if "regex" in commands_regex:
    passlexss = False
    
if passdesks and passlexss:
    
    !pip install regex
    !pip install --upgrade ipywidgets
    clear_output(wait=False)
    print ('     \033[0;36m\033[1mipywidgets established\033[0m')
    time.sleep(0.5)
    os._exit(00)
    
else:
    
    import regex
    
    enable = {'button_color': '#3d85c6', 'text_color': '#033932'}
    emdown = {'button_color': '#008081', 'text_color': '#053c3c'}

    #ifoCOMifoCOMifoCOMifoCOMifoCOM

    opens = '<p style="text-align:center;"><span style="color:#25323b;font-family:"Courier New", Courier, monospace;"><strong>'
    cloug = '</strong></span></p>'
    migse = {'background': '#a3b8c8'}

    nunlfs = widgets.HTML(value=opens+'git-lfs'+cloug, style = migse ,layout=Layout(width="120px",height="28px"))
    nunxformers = widgets.HTML(value=opens+'xformers'+cloug, style = migse ,layout=Layout(width="120px",height="28px"))
    nundiffusers = widgets.HTML(value=opens+'diffusers'+cloug, style = migse ,layout=Layout(width="120px",height="28px"))
    nunfastapi = widgets.HTML(value=opens+'fastapi 0.90.1'+cloug, style = migse ,layout=Layout(width="120px",height="28px"))
    nunautomatic = widgets.HTML(value=opens+'automatic'+cloug, style = migse ,layout=Layout(width="120px",height="28px"))
    nuncontrolnet = widgets.HTML(value=opens+'controlnet'+cloug, style = migse ,layout=Layout(width="120px",height="28px"))

    onoffcolos = ["solid arrow-down","solid rotate-right","solid check"]
    onoffcolosS = [enable, emdown]
    onoffcolosD = [False, True]

    nunlfsU = widgets.Button(disabled=onoffcolosD[0],button_style='',tooltip='',icon=onoffcolos[0],layout=Layout(width="38px",height="28px"),style = onoffcolosS[0])
    nunxformersU = widgets.Button(disabled=onoffcolosD[0],button_style='',tooltip='',icon=onoffcolos[0],layout=Layout(width="38px",height="28px"),style = onoffcolosS[0])
    nundiffusersU = widgets.Button(disabled=onoffcolosD[0],button_style='',tooltip='',icon=onoffcolos[0],layout=Layout(width="38px",height="28px"),style = onoffcolosS[0])
    nunfastapiU = widgets.Button(disabled=onoffcolosD[0],button_style='',tooltip='',icon=onoffcolos[0],layout=Layout(width="38px",height="28px"),style = onoffcolosS[0])
    nunautomaticU = widgets.Button(disabled=onoffcolosD[0],button_style='',tooltip='',icon=onoffcolos[0],layout=Layout(width="38px",height="28px"),style = onoffcolosS[0])
    nuncontrolnetU = widgets.Button(disabled=onoffcolosD[0],button_style='',tooltip='',icon=onoffcolos[0],layout=Layout(width="38px",height="28px"),style = onoffcolosS[0])

    ifoCOM = GridspecLayout(2,6,width='500px',height='auto')

    ifoCOM[0, 0] = nunlfs
    ifoCOM[0, 1] = nunlfsU

    ifoCOM[1, 0] = nunxformers
    ifoCOM[1, 1] = nunxformersU

    ifoCOM[0, 2] = nundiffusers
    ifoCOM[0, 3] = nundiffusersU

    ifoCOM[1, 2] = nunfastapi
    ifoCOM[1, 3] = nunfastapiU

    ifoCOM[0, 4] = nunautomatic
    ifoCOM[0, 5] = nunautomaticU

    ifoCOM[1, 4] = nuncontrolnet
    ifoCOM[1, 5] = nuncontrolnetU

    def upload_ifoCOM ():

        upload_ifoCOM_lfs = False
        upload_ifoCOM_xfo = False
        upload_ifoCOM_diffusers = False
        upload_ifoCOM_ivs = False
        upload_ifoCOM_wui = False
        upload_ifoCOM_col = False

        commands_lfs = getoutput('git lfs install')
        if "Git LFS initialized" in commands_lfs:
             upload_ifoCOM_lfs = True

        commands_xfo = getoutput('python -m xformers.info')
        if not "Error while finding module specification" in commands_xfo:
            upload_ifoCOM_xfo = True

        commands_diffusers = getoutput('pip list | grep diffusers')
        if "diffusers" in commands_diffusers:
            upload_ifoCOM_diffusers = True

        try:
            import fastapi
            ivs = str(fastapi.__version__)
        except:
            ivs = str("except")
        if ivs == '0.90.1':
            upload_ifoCOM_ivs = True

        if os.path.exists('/home/jovyan/workspace/stable-diffusion-webui'):
            upload_ifoCOM_wui = True

        if os.path.exists('/home/jovyan/workspace/stable-diffusion-webui/extensions/sd-webui-controlnet'):
            upload_ifoCOM_col = True

        if not upload_ifoCOM_lfs:
            nunlfsU.disabled=onoffcolosD[0]; nunlfsU.icon=onoffcolos[0]; nunlfsU.style=onoffcolosS[0]
        else:
            nunlfsU.disabled=onoffcolosD[1]; nunlfsU.icon=onoffcolos[2]; nunlfsU.style=onoffcolosS[1]
        if not upload_ifoCOM_xfo:
            nunxformersU.disabled=onoffcolosD[0]; nunxformersU.icon=onoffcolos[0]; nunxformersU.style=onoffcolosS[0]
        else:
            nunxformersU.disabled=onoffcolosD[1]; nunxformersU.icon=onoffcolos[2]; nunxformersU.style=onoffcolosS[1]
        if not upload_ifoCOM_diffusers:
            nundiffusersU.disabled=onoffcolosD[0]; nundiffusersU.icon=onoffcolos[0]; nundiffusersU.style=onoffcolosS[0]
        else:
            nundiffusersU.disabled=onoffcolosD[1]; nundiffusersU.icon=onoffcolos[2]; nundiffusersU.style=onoffcolosS[1]
        if not upload_ifoCOM_ivs:
            nunfastapiU.disabled=onoffcolosD[0]; nunfastapiU.icon=onoffcolos[0]; nunfastapiU.style=onoffcolosS[0]
        else:
            nunfastapiU.disabled=onoffcolosD[1]; nunfastapiU.icon=onoffcolos[2]; nunfastapiU.style=onoffcolosS[1]
        if not upload_ifoCOM_wui:
            nunautomaticU.disabled=onoffcolosD[0]; nunautomaticU.icon=onoffcolos[0]; nunautomaticU.style=onoffcolosS[0]
        else:
            nunautomaticU.disabled=onoffcolosD[0]; nunautomaticU.icon=onoffcolos[1]; nunautomaticU.style=onoffcolosS[0]
        if not upload_ifoCOM_col:
            if os.path.exists('/home/jovyan/workspace/stable-diffusion-webui'):
                nuncontrolnetU.disabled=onoffcolosD[0]
            else:
                nuncontrolnetU.disabled=onoffcolosD[1]
            nuncontrolnetU.icon=onoffcolos[0]; nuncontrolnetU.style=onoffcolosS[0]
        else:
            nuncontrolnetU.disabled=onoffcolosD[1]; nuncontrolnetU.icon=onoffcolos[2]; nuncontrolnetU.style=onoffcolosS[1]

    upload_ifoCOM ()

    #ifoCOMifoCOMifoCOMifoCOMifoCOM
    #widCOMwidCOMwidCOMwidCOMwidCOM

    ckptsize =[]

    widV15 = widgets.Button(description='V15',disabled=False,button_style='',tooltip='',layout=Layout(width="50px",height="28px"),style = enable)
    widV21 = widgets.Button(description='V21',disabled=False,button_style='',tooltip='',layout=Layout(width="50px",height="28px"),style = enable)
    widDSS = widgets.Button(description='DSS',disabled=True,button_style='',tooltip='',layout=Layout(width="50px",height="28px"),style = emdown)

    widSELES = widgets.Select(options=ckptsize,disabled=False,layout=Layout(width="358px",height="95px"))

    emgNUN = widgets.Button(description='WUI',disabled=False,button_style='',tooltip='',layout=Layout(width="80px",height="auto"),style = enable)

    widCOM = GridspecLayout(3,3,width='500px',height='100px')

    widCOM[0, 0] = widV15
    widCOM[1, 0] = widV21
    widCOM[2, 0] = widDSS
    widCOM[:, 1] = widSELES
    widCOM[:, 2] = emgNUN

    def upload_widCOM ():

        global ckptsize

        if os.path.exists('/home/jovyan/workspace/stable-diffusion-webui'):
            emgNUN.disabled=False
        else:
            emgNUN.disabled=True

        if os.path.exists('/home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion/V15.ckpt'):
            widV15.disabled=True;widV15.style=emdown;
        else:
            widV15.disabled=False;widV15.style=enable;

        if os.path.exists('/home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion/V21.ckpt'):
            widV21.disabled=True;widV21.style=emdown;
        else:
            widV21.disabled=False;widV21.style=enable;

        if os.path.exists('/home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion/DSS.ckpt'):
            widDSS.disabled=True;widDSS.style=emdown;
        else:
            widDSS.disabled=False;widDSS.style=enable;

        if os.path.exists('/home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion/'):
            ckptsize = []
            for e in os.listdir("/home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion/"):
                name, ext = os.path.splitext(e)
                if ext == '.ckpt':
                    ckptsize.append(name)
            widSELES.options=ckptsize

    upload_widCOM ()

    #widCOMwidCOMwidCOMwidCOMwidCOM
    #sizCOMsizCOMsizCOMsizCOMsizCOM

    SZ = widgets.IntProgress(min=0,max=102400,
                             bar_style='',
                             style={'bar_color': '#3d85c6', 'description_width': 'initial'},
                             layout=Layout(width="315px",height="28px"),
                             orientation='horizontal'
                            )
    sizesU = widgets.Button(disabled=False,button_style='',tooltip='',icon="solid rotate-right",layout=Layout(width="80px",height="28px"),style = enable)
    sizesD = widgets.Button(disabled=False,button_style='',tooltip='',icon="sharp solid trash",layout=Layout(width="80px",height="28px"),style = enable)

    sizCOM = GridspecLayout(1,3,width='500px',height='auto')

    sizCOM[0, 0] = sizesD
    sizCOM[0, 1] = sizesU
    sizCOM[0, 2] = SZ

    def upload_sizCOM ():

        getpt = str(os.path.abspath(os.getcwd()))
        os.chdir('/')
        comsiz = str(getoutput('du -s')).split("\n")
        outsiz = int(int(regex.findall("\d+", comsiz[len(comsiz)-1])[0])/1024)
        os.chdir(getpt)
        SZ.value=outsiz

    upload_sizCOM ()

    #sizCOMsizCOMsizCOMsizCOMsizCOM

    allsizezCOMPIL = GridspecLayout(3,1,width='auto',height='233px')

    allsizezCOMPIL[0, 0] = ifoCOM
    allsizezCOMPIL[1, 0] = widCOM
    allsizezCOMPIL[2, 0] = sizCOM

    #bittenfigitten


    #downline

    def lisau():
        getpt = str(os.path.abspath(os.getcwd()))
        os.chdir('/home/jovyan') 
        !find -name '.ipynb_checkpoints' -exec rm -rf {} \;
        os.chdir(getpt)
        if os.path.exists("/home/jovyan/.local/share/Trash/files"):
            !rm -rf /home/jovyan/.local/share/Trash/files

    def sizesD_function(aug):
        lisau()
        upload_sizCOM()

    def sizesU_function(aug):
        upload_sizCOM()

    sizesU.on_click(sizesD_function)
    sizesD.on_click(sizesD_function)

    #downline

    #hensline

    intes = [nunlfsU,nunxformersU,nundiffusersU,nunfastapiU,nunautomaticU,nuncontrolnetU,widV15,widV21,widDSS,emgNUN,sizesD,sizesU]
    poses = [False,False,False,False,False,False,False,False,False,False,False,False]

    def setup_loads():
        global poses
        for i in range(len(poses)):
            poses[i]=intes[i].disabled
        for i in range(len(poses)):
            intes[i].disabled=True

    def exele_loads():
        for i in range(len(poses)):
            intes[i].disabled=poses[i]

    def nunlfsU_function(aug):

        setup_loads()

        with light_output:
            clear_output()
            !curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
            !sudo apt-get install git-lfs

        upload_sizCOM ()

        with light_output:
            clear_output()

        exele_loads ()

        upload_ifoCOM ()

    def nunxformersU_function(aug):

        setup_loads()

        with light_output:
            # clear_output()
            # !mamba install -q -c nvidia cuda-nvcc=11.7 python=3.9.13 --yes
            # clear_output()
            # !mamba install -q -c nvidia -c pytorch pytorch-cuda=11.7 python=3.9.13 --yes
            # clear_output()
            # !mamba install -q -c fastai python=3.9.13 fastai=2.7.11 --yes
            # clear_output()
            # !mamba install -q -c conda-forge python=3.9.13 huggingface_hub=0.12.1 --yes
            # clear_output()
            # !mamba install -q -c nvidia -c pytorch -c 'xformers/label/dev' python=3.9.13 pytorch=1.13.1 xformers --yes
            # clear_output()
            # !pip install --upgrade triton==2.0.0a2
            
            clear_output()
            !mamba install -q -c nvidia cuda-nvcc=11.7 python=3.9.13 --yes
            clear_output()
            !mamba install -q -c conda-forge python=3.9.13 transformers --yes
            clear_output()
            !mamba install -q -c nvidia -c pytorch -c 'xformers/label/dev' python=3.9.13 xformers --yes
            clear_output()
            !pip install --upgrade triton==2.0.0a2
            clear_output()
            !pip install --upgrade transformers==4.25.1
            

        upload_sizCOM ()

        with light_output:

            clear_output()

            qwe = getoutput('nvidia-smi')

            nvc = getoutput('nvcc --version')
            if not 'nvcc: not found' in nvc:
                asd = nvc
            else:
                asd = ''

            xfo = getoutput('python -m xformers.info')
            if not 'Error while finding module specification' in xfo:
                zxc = xfo
            else:
                zxc = ''

            print('\033[0;36m\033[1m',"\n",qwe,"\n\n",asd,"\n\n",zxc,'\033[0m')

        exele_loads ()

        upload_ifoCOM ()

    def nundiffusersU_function(aug):

        setup_loads()

        with light_output:
            clear_output()

            !pip install accelerate
            clear_output()

            !pip install git+https://github.com/huggingface/diffusers
            clear_output()

        upload_sizCOM ()

        # with light_output:
        #     !pip install transformers==4.25.1
        #     clear_output()

        exele_loads ()

        upload_ifoCOM ()

    def nunfastapiU_function(aug):

        setup_loads()

        with light_output:
            clear_output()

        upload_sizCOM ()

        with light_output:
            !pip install --upgrade fastapi==0.90.1
            clear_output()

        exele_loads ()

        upload_ifoCOM ()

    def nunautomaticU_function(aug):

        setup_loads()

        with light_output:

            clear_output()

            if not os.path.exists("/home/jovyan/workspace/stable-diffusion-webui"):
                os.chdir('/home/jovyan/workspace/')
                !git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui stable-diffusion-webui
            else:
                os.chdir('/home/jovyan/workspace/stable-diffusion-webui')
                !git pull

        upload_sizCOM ()

        with light_output:
            clear_output()

        exele_loads ()

        upload_ifoCOM ()

    def nuncontrolnetU_function(aug):

        setup_loads()

        with light_output:
            clear_output()

            os.chdir('/home/jovyan/workspace/stable-diffusion-webui/extensions')
            !git clone https://github.com/Mikubill/sd-webui-controlnet.git

            from torch.hub import download_url_to_file
            from urllib.parse import urlparse

            mdldir="/home/jovyan/workspace/stable-diffusion-webui/extensions/sd-webui-controlnet/models"

            os.chdir('/home/jovyan/workspace/')
            !wget -q -O CN_models.txt https://github.com/TheLastBen/fast-stable-diffusion/raw/main/AUTOMATIC1111_files/CN_models.txt

            with open("CN_models.txt", 'r') as f:
                mdllnk = f.read().splitlines()

            for lnk in mdllnk:
                clear_output()
                download_url_to_file(lnk, os.path.abspath(os.path.join(mdldir, os.path.basename(urlparse(lnk).path))), hash_prefix=None, progress=True)

            !rm CN_models.txt

        upload_sizCOM ()

        with light_output:
            clear_output()

        exele_loads ()

        upload_ifoCOM ()



    nunlfsU.on_click(nunlfsU_function)
    nunxformersU.on_click(nunxformersU_function)
    nundiffusersU.on_click(nundiffusersU_function)
    nunfastapiU.on_click(nunfastapiU_function)
    nunautomaticU.on_click(nunautomaticU_function)
    nuncontrolnetU.on_click(nuncontrolnetU_function)


    #hensline

    #midasline

    def widV15_function(aug):
        with light_output:

            clear_output()
            os.chdir('/home/jovyan/workspace/') 
            !mkdir "/home/jovyan/workspace/tmp"
            os.chdir('/home/jovyan/workspace/tmp')
            !git init
            !git lfs install --system --skip-repo
            !git clone --depth 1 --branch fp16 "https://huggingface.co/runwayml/stable-diffusion-v1-5"
            !rm -rf /home/jovyan/workspace/tmp/.git

        lisau()
        with light_output:

            os.chdir('/home/jovyan/workspace/tmp')
            if os.path.exists('/home/jovyan/workspace/tmp/stable-diffusion-v1-5/unet/diffusion_pytorch_model.bin'):
                !wget -q -O stable-diffusion-v1-5/vae/diffusion_pytorch_model.bin https://huggingface.co/stabilityai/sd-vae-ft-mse/resolve/main/diffusion_pytorch_model.bin
                !wget -O convertosd.py https://github.com/TheLastBen/fast-stable-diffusion/raw/main/Dreambooth/convertosd.py
                !sed -i '201s@.*@    model_path = "/home/jovyan/workspace/tmp/stable-diffusion-v1-5"@' /home/jovyan/workspace/tmp/convertosd.py
                !sed -i '202s@.*@    checkpoint_path= "/home/jovyan/workspace/V15.ckpt"@' /home/jovyan/workspace/tmp/convertosd.py      
                !python /home/jovyan/workspace/tmp/convertosd.py
            if os.path.exists("/home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion"):
                !mv /home/jovyan/workspace/V15.ckpt /home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion/V15.ckpt
                widV15_function_out = "/home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion/V15.ckpt"
            else:
                widV15_function_out = "/home/jovyan/workspace/V15.ckpt"

            os.chdir('/home/jovyan/workspace/')
            !rm -rf /home/jovyan/workspace/tmp

        lisau()
        with light_output:

            upload_sizCOM()

            upload_widCOM()

            clear_output()

            if os.path.exists(widV15_function_out):
                print ('\033[0;36m\033[1m'+widV15_function_out+'\033[0m')

    def widV21_function(aug):
        with light_output:

            clear_output()

            os.chdir('/home/jovyan/workspace/') 
            !mkdir "/home/jovyan/workspace/tmp"
            os.chdir('/home/jovyan/workspace/tmp')
            !git init
            !git lfs install --system --skip-repo
            !git remote add -f origin  "https://huggingface.co/stabilityai/stable-diffusion-2-1"
            !git config core.sparsecheckout true
            !echo -e "scheduler\ntext_encoder\ntokenizer\nunet\nvae\nfeature_extractor\nmodel_index.json\n!*.safetensors" > .git/info/sparse-checkout
            !git pull origin fp16
            !rm -rf /home/jovyan/workspace/tmp/.git


        lisau()
        with light_output:

            os.chdir('/home/jovyan/workspace/')
            !wget -O convertosdv2.py https://github.com/TheLastBen/fast-stable-diffusion/raw/main/Dreambooth/convertosdv2.py
            !python /home/jovyan/workspace/convertosdv2.py --fp16 /home/jovyan/workspace/tmp /home/jovyan/workspace/V21.ckpt

            if os.path.exists("/home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion"):
                !mv /home/jovyan/workspace/V21.ckpt /home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion/V21.ckpt
                widV21_function_out = "/home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion/V21.ckpt"
            else:
                widV21_function_out = "/home/jovyan/workspace/V21.ckpt"

            !rm -rf /home/jovyan/workspace/tmp
            !rm -rf /home/jovyan/workspace/convertosdv2.py

        lisau()
        with light_output:

            upload_sizCOM()

            upload_widCOM()

            clear_output()

            if os.path.exists(widV21_function_out):
                print ('\033[0;36m\033[1m'+widV21_function_out+'\033[0m')

    def widDSS_function(aug):
        with light_output:

            clear_output()
            os.chdir('/home/jovyan/workspace/') 
            !mkdir "/home/jovyan/workspace/tmp"
            os.chdir('/home/jovyan/workspace/tmp')
            !git init
            !git lfs install --system --skip-repo
            !git clone "https://huggingface.co/dream-textures/texture-diffusion"
            !rm -rf /home/jovyan/workspace/tmp/.git

        lisau()
        with light_output:
            
            os.chdir('/home/jovyan/workspace/')
            !wget -O convertosdv2.py https://github.com/TheLastBen/fast-stable-diffusion/raw/main/Dreambooth/convertosdv2.py
            !python /home/jovyan/workspace/convertosdv2.py --fp16 /home/jovyan/workspace/tmp/texture-diffusion /home/jovyan/workspace/DSS.ckpt

            if os.path.exists("/home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion"):
                !mv /home/jovyan/workspace/DSS.ckpt /home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion/DSS.ckpt
                widDSS_function_out = "/home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion/DSS.ckpt"
            else:
                widDSS_function_out = "/home/jovyan/workspace/DSS.ckpt"

            !rm -rf /home/jovyan/workspace/tmp
            !rm -rf /home/jovyan/workspace/convertosdv2.py
            

        lisau()
        with light_output:

            upload_sizCOM()

            upload_widCOM()

            clear_output()

            if os.path.exists(widDSS_function_out):
                print ('\033[0;36m\033[1m'+widDSS_function_out+'\033[0m')

    widV15.on_click(widV15_function)
    widV21.on_click(widV21_function)
    widDSS.on_click(widDSS_function)

    def emgNUN_function(aug):
        with light_output:

            clear_output()
            saind_widSELES = str(widSELES.value)

            alpha = str('cd /home/jovyan/workspace/stable-diffusion-webui\nCOMMANDLINE_ARGS="--share --enable-insecure-extension-access --xformers --lowram ')
            betas = str('" REQS_FILE="requirements.txt" python launch.py')

            if saind_widSELES == 'None':
                print ('\033[0;36m\033[1m'+alpha+betas+'\033[0m')
            else:
                modes = str('--ckpt /home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion/') + saind_widSELES + str('.ckpt')
                print ('\033[0;36m\033[1m'+alpha+modes+betas+'\033[0m')

    emgNUN.on_click(emgNUN_function)

    #midasline

    #bittenfigitten

    light_output = widgets.Output()

    display(allsizezCOMPIL,light_output)

@gugleigos
Copy link

dbooth

@gugleigos
Copy link

import os, time
import regex
from IPython.display import display, clear_output
from subprocess import getoutput
import random
import ipywidgets as widgets
from ipywidgets import Layout
from ipywidgets import GridspecLayout
os.chdir('/home/jovyan/workspace/')

AGfloats = False

try:
    import accelerate
    avs = str(accelerate.__version__)
except:
    avs = str("except")
if avs == '0.12.0':
    AGfloats = True

DIfloats = False

try:
    import diffusers
    jvs = str(diffusers.__version__)
except:
    jvs = str("except")
if jvs == '0.9.0.dev0':
    DIfloats = True
    
DB = '/home/jovyan/workspace/DB/'
SDfloats = '/home/jovyan/workspace/DB/diffusers/'
sd15f = "/home/jovyan/workspace/DB/value-v1-5/"

if not os.path.exists(DB):
    os.makedirs(DB)
    
if not AGfloats:
    !pip install -q --no-deps accelerate==0.12.0
    
if not os.path.exists(SDfloats):
    os.chdir(DB)
    !git clone --depth 1 --branch updt https://github.com/TheLastBen/diffusers
else:
    os.chdir(SDfloats)
    !git pull
    
if not DIfloats:
    os.chdir('/home/jovyan/workspace/DB/diffusers/')
    !pip install -e ".[torch]"
    
try:
    import bitsandbytes
    
except:
    !pip install -q --no-deps bitsandbytes
    
if not os.path.exists(sd15f):
    os.makedirs(sd15f)
    os.chdir(sd15f)

    !git init
    !git lfs install --system --skip-repo
    !git remote add -f origin  "https://huggingface.co/runwayml/stable-diffusion-v1-5"
    !git config core.sparsecheckout true
    !echo -e "scheduler\ntext_encoder\ntokenizer\nunet\nvae\n!vae/diffusion_pytorch_model.bin\n!*.safetensors" > .git/info/sparse-checkout
    !git pull origin main

    !wget -q -O vae/diffusion_pytorch_model.bin https://huggingface.co/stabilityai/sd-vae-ft-mse/resolve/main/diffusion_pytorch_model.bin
    !rm -rf .git  
    !wget -q -O model_index.json https://raw.githubusercontent.com/TheLastBen/fast-stable-diffusion/main/Dreambooth/model_index.json
    
files = '/home/jovyan/workspace/DB/files/'

instancefiles = '/home/jovyan/workspace/DB/files/instancefiles/'
classfiles = '/home/jovyan/workspace/DB/files/classfiles/'
outputfiles = '/home/jovyan/workspace/DB/files/outputfiles/'
sesiontemp = '/home/jovyan/workspace/DB/files/sesiontemp/'
sesions = '/home/jovyan/workspace/DB/files/sesions/'

if not os.path.exists(files):
    os.makedirs(files)
if not os.path.exists(instancefiles):
    os.makedirs(instancefiles)
if not os.path.exists(classfiles):
    os.makedirs(classfiles)
if not os.path.exists(outputfiles):
    os.makedirs(outputfiles)
if not os.path.exists(sesiontemp):
    os.makedirs(sesiontemp)
if not os.path.exists(sesions):
    os.makedirs(sesions)
gendiffusion = GridspecLayout(1,6,width='1000px',height='auto')

opens = '<p style="text-align:center;"><span style="color:#25323b;font-family:"Courier New", Courier, monospace;"><strong>'
cloug = '</strong></span></p>'
migse = {'background': '#a3b8c8'}

enable = {'button_color': '#3d85c6', 'text_color': '#033932'}
emdown = {'button_color': '#008081', 'text_color': '#053c3c'}

onoffcolos = ["solid arrow-down","solid rotate-right","solid check"]
onoffcolosS = [enable, emdown]
onoffcolosD = [False, True]

labelssei = widgets.HTML(value=opens+'sesion'+cloug, style = migse ,layout=Layout(width="120px",height="28px"))
fieldsei = widgets.Text(value='',placeholder='Something',disabled=False,layout=Layout(width="330px",height="28px"))
gelsei = widgets.Button(disabled=False,button_style='',tooltip='',icon=onoffcolos[0],layout=Layout(width="38px",height="28px"),style = onoffcolosS[0])

labelstok = widgets.HTML(value=opens+'token'+cloug, style = migse ,layout=Layout(width="120px",height="28px"))
fieldtok = widgets.Text(value='',placeholder='Something',disabled=False,layout=Layout(width="330px",height="28px"))
geltok = widgets.Button(disabled=False,button_style='',tooltip='',icon=onoffcolos[1],layout=Layout(width="38px",height="28px"),style = onoffcolosS[0])

if fieldsei.value == '':
    gelsei.icon=onoffcolos[0]
    gelsei.style = onoffcolosS[0]
else:
    gelsei.icon=onoffcolos[1]
    gelsei.style = onoffcolosS[1]

if fieldsei.value == '':
    geltok.style = onoffcolosS[0]
else:
    geltok.style = onoffcolosS[1]
    
gendiffusion[0, 0] = labelssei
gendiffusion[0, 1] = fieldsei
gendiffusion[0, 2] = gelsei

gendiffusion[0, 3] = labelstok
gendiffusion[0, 4] = fieldtok
gendiffusion[0, 5] = geltok

inputSesion = '/home/jovyan/workspace/DB/value-v1-5/'
outputSesion = ''

inputInstanse = '/home/jovyan/workspace/DB/files/instancefiles/'
inputClassic = '/home/jovyan/workspace/DB/files/classfiles/'
outputInstanse = '/home/jovyan/workspace/DB/files/outputfiles/'

def gelsei_function(aug):

    if not fieldsei.value == '':
        
        global outputSesion
        outputSesion = '/home/jovyan/workspace/DB/files/sesions/' + fieldsei.value
        
        if not os.path.exists(outputSesion):
            os.makedirs(outputSesion)
        
        gelsei.icon=onoffcolos[1]
        gelsei.style = onoffcolosS[1]

def geltok_function(aug):
    
    filefields = str(open("/home/jovyan/workspace/SCD/simple.py", "r").read())
    split = filefields.split("###")[1]
    teg = split.split("@")
    compil = int(random.randint(0,len(teg)-1))
    fieldtok.value = str(teg[compil])
    geltok.style = onoffcolosS[1]
        
gelsei.on_click(gelsei_function)
geltok.on_click(geltok_function)

display(gendiffusion)
opens3 = '<p style="text-align:right;"><span style="color:#25323b;font-family:"Courier New", Courier, monospace;"><strong>'
cloug3 = '</strong></span></p>'

gen2diffusion = GridspecLayout(13,2,width='1000px',height='auto')

l_Resume_Training = widgets.HTML(value=opens3+'Resume_Training '+cloug3, style = migse ,layout=Layout(flex='1 1 0%', width="auto",height="28px"))
f_Resume_Training = widgets.Checkbox(value=False,disabled=False,indent=False,layout=Layout(flex='1 1 0%', width='auto', height='28px'))

l_UNet_Training_Steps = widgets.HTML(value=opens3+'UNet_Training_Steps '+cloug3, style = migse ,layout=Layout(flex='1 1 0%', width="auto",height="28px"))
f_UNet_Training_Steps = widgets.IntText(value=1500,disabled=False,layout=Layout(flex='1 1 0%', width='auto', height='28px'))

l_UNet_Learning_Rate = widgets.HTML(value=opens3+'UNet_Learning_Rate '+cloug3, style = migse ,layout=Layout(flex='1 1 0%', width="auto",height="28px"))
f_UNet_Learning_Rate = widgets.Dropdown(options=['1e-5', '8e-6', '5e-6', '3e-6', '2e-6', '1e-6']\
                                        ,value='1e-6',disabled=False,layout=Layout(flex='1 1 0%', width='auto', height='28px'))

l_Text_Encoder_Training_Steps = widgets.HTML(value=opens3+'l_Text_Encoder_Training_Steps '+cloug3, style = migse ,layout=Layout(flex='1 1 0%', width="auto",height="28px"))
f_Text_Encoder_Training_Steps = widgets.IntText(value=0,disabled=False,layout=Layout(flex='1 1 0%', width='auto', height='28px'))

l_Text_Encoder_Concept_Training_Steps = widgets.HTML(value=opens3+'l_Text_Encoder_Concept_Training_Steps '+cloug3,\
                                                     style = migse ,layout=Layout(flex='1 1 0%', width="auto",height="28px"))
f_Text_Encoder_Concept_Training_Steps = widgets.IntText(value=0,disabled=False,layout=Layout(flex='1 1 0%', width='auto', height='28px'))

l_Text_Encoder_Learning_Rate = widgets.HTML(value=opens3+'l_Text_Encoder_Learning_Rate '+cloug3, style = migse ,layout=Layout(flex='1 1 0%', width="auto",height="28px"))
f_Text_Encoder_Learning_Rate = widgets.Dropdown(options=['2e-6', '8e-8', '5e-8', '3e-8', '2e-8', '1e-8']\
                                                ,value='1e-8',disabled=False,layout=Layout(flex='1 1 0%', width='auto', height='28px'))

l_Offset_Noise = widgets.HTML(value=opens3+'l_Offset_Noise '+cloug3, style = migse ,layout=Layout(flex='1 1 0%', width="auto",height="28px"))
f_Offset_Noise = widgets.Checkbox(value=False,disabled=False,indent=False,layout=Layout(flex='1 1 0%', width='auto', height='28px'))

l_External_Captions = widgets.HTML(value=opens3+'l_External_Captions '+cloug3, style = migse ,layout=Layout(flex='1 1 0%', width="auto",height="28px"))
f_External_Captions = widgets.Checkbox(value=False,disabled=False,indent=False,layout=Layout(flex='1 1 0%', width='auto', height='28px'))

l_Resolution = widgets.HTML(value=opens3+'l_Resolution '+cloug3, style = migse ,layout=Layout(flex='1 1 0%', width="auto",height="28px"))
f_Resolution = widgets.Dropdown(options=['1024', '512']\
                                        ,value='512',disabled=False,layout=Layout(flex='1 1 0%', width='auto', height='28px'))

l_Save_Checkpoint_Every_n_Steps = widgets.HTML(value=opens3+'l_Save_Checkpoint_Every_n_Steps '+cloug3, style = migse ,layout=Layout(flex='1 1 0%', width="auto",height="28px"))
f_Save_Checkpoint_Every_n_Steps = widgets.Checkbox(value=False,disabled=False,indent=False,layout=Layout(flex='1 1 0%', width='auto', height='28px'))

l_Save_Checkpoint_Every = widgets.HTML(value=opens3+'l_Save_Checkpoint_Every '+cloug3, style = migse ,layout=Layout(flex='1 1 0%', width="auto",height="28px"))
f_Save_Checkpoint_Every = widgets.IntText(value=300,disabled=False,layout=Layout(flex='1 1 0%', width='auto', height='28px'))

l_Start_saving_from_the_step = widgets.HTML(value=opens3+'l_Start_saving_from_the_step '+cloug3, style = migse ,layout=Layout(flex='1 1 0%', width="auto",height="28px"))
f_Start_saving_from_the_step = widgets.IntText(value=300,disabled=False,layout=Layout(flex='1 1 0%', width='auto', height='28px'))

l_Disconnect_after_training = widgets.HTML(value=opens3+'l_Disconnect_after_training '+cloug3, style = migse ,layout=Layout(flex='1 1 0%', width="auto",height="28px"))
f_Disconnect_after_training = widgets.Checkbox(value=False,disabled=False,indent=False,layout=Layout(flex='1 1 0%', width='auto', height='28px'))


gen2diffusion[0, 0] = l_Resume_Training
gen2diffusion[0, 1] = f_Resume_Training
gen2diffusion[1, 0] = l_UNet_Training_Steps
gen2diffusion[1, 1] = f_UNet_Training_Steps
gen2diffusion[2, 0] = l_UNet_Learning_Rate
gen2diffusion[2, 1] = f_UNet_Learning_Rate
gen2diffusion[3, 0] = l_Text_Encoder_Training_Steps
gen2diffusion[3, 1] = f_Text_Encoder_Training_Steps
gen2diffusion[4, 0] = l_Text_Encoder_Concept_Training_Steps
gen2diffusion[4, 1] = f_Text_Encoder_Concept_Training_Steps
gen2diffusion[5, 0] = l_Text_Encoder_Learning_Rate
gen2diffusion[5, 1] = f_Text_Encoder_Learning_Rate
gen2diffusion[6, 0] = l_Offset_Noise
gen2diffusion[6, 1] = f_Offset_Noise
gen2diffusion[7, 0] = l_External_Captions
gen2diffusion[7, 1] = f_External_Captions
gen2diffusion[8, 0] = l_Resolution
gen2diffusion[8, 1] = f_Resolution
gen2diffusion[9, 0] = l_Save_Checkpoint_Every_n_Steps
gen2diffusion[9, 1] = f_Save_Checkpoint_Every_n_Steps
gen2diffusion[10, 0] = l_Save_Checkpoint_Every
gen2diffusion[10, 1] = f_Save_Checkpoint_Every
gen2diffusion[11, 0] = l_Start_saving_from_the_step
gen2diffusion[11, 1] = f_Start_saving_from_the_step
gen2diffusion[12, 0] = l_Disconnect_after_training
gen2diffusion[12, 1] = f_Disconnect_after_training

display(gen2diffusion)
INSTANCE_DIR = inputInstanse
CONCEPT_DIR = inputClassic
CAPTIONS_DIR = '/home/jovyan/workspace/DB/files/captionsfiles/'

if not os.path.exists(CAPTIONS_DIR):
    os.makedirs(CAPTIONS_DIR)

Resume_Training = f_Resume_Training.value

OUTPUT_DIR = outputSesion

resume=False
if os.path.exists(OUTPUT_DIR+'/unet/diffusion_pytorch_model.bin'):
    resume=True
    
if resume and not Resume_Training:
  print('�[1;31mOverwrite your previously trained model ? answering "yes" will train a new model, answering "no" will resume the training of the previous model?  yes or no ?�[0m')
  while True:
    ansres=input('')
    if ansres=='no':
      Resume_Training = True
      break
    elif ansres=='yes':
      Resume_Training = False
      resume= False
      break
    
MODEL_NAME = inputSesion

while not Resume_Training and MODEL_NAME=="":
  print('�[1;31mNo model found, use the "Model Download" cell to download a model.')
  time.sleep(5)
    
    
MODELT_NAME = MODEL_NAME
    
UNet_Training_Steps = int(f_UNet_Training_Steps.value)
UNet_Learning_Rate = float(f_UNet_Learning_Rate.value)
untlr=UNet_Learning_Rate

Text_Encoder_Training_Steps = int(f_Text_Encoder_Training_Steps.value)
Text_Encoder_Concept_Training_Steps = int(f_Text_Encoder_Concept_Training_Steps.value)

Text_Encoder_Learning_Rate = float(f_Text_Encoder_Learning_Rate.value)
txlr=Text_Encoder_Learning_Rate

trnonltxt=""
if UNet_Training_Steps==0:
   trnonltxt="--train_only_text_encoder"


ofstnse=""
Offset_Noise = f_Offset_Noise.value

if Offset_Noise:
  ofstnse="--offset_noise"

External_Captions = f_External_Captions.value

extrnlcptn=""
if External_Captions:
  extrnlcptn="--external_captions"

Resolution = f_Resolution.value
Res=int(Resolution)


Seed=''
if Seed =='' or Seed=='0':
  Seed=random.randint(1, 999999)
else:
  Seed=int(Seed)

GC="--gradient_checkpointing"

fp16 = True
if fp16:
  prec="fp16"
else:
  prec="no"
precision=prec

s = getoutput('nvidia-smi')
if 'A100' in s:
  GC=""
GCUNET=GC
if Res<=640:
  GCUNET=""


resuming=""
if Resume_Training and os.path.exists(OUTPUT_DIR+'/unet/diffusion_pytorch_model.bin'):
  MODELT_NAME=OUTPUT_DIR
  print('�[1;32mResuming Training...�[0m')
  resuming="Yes"
elif Resume_Training and not os.path.exists(OUTPUT_DIR+'/unet/diffusion_pytorch_model.bin'):
  print('�[1;31mPrevious model not found, training a new model...�[0m')
  MODELT_NAME=MODEL_NAME
  while MODEL_NAME=="":
    print('�[1;31mNo model found, use the "Model Download" cell to download a model.')
    time.sleep(5)
    
    
Enable_text_encoder_training= True
Enable_Text_Encoder_Concept_Training= True

if Text_Encoder_Training_Steps==0 :
   Enable_text_encoder_training= False
else:
  stptxt=Text_Encoder_Training_Steps

if Text_Encoder_Concept_Training_Steps==0:
   Enable_Text_Encoder_Concept_Training= False
else:
  stptxtc=Text_Encoder_Concept_Training_Steps


Save_Checkpoint_Every_n_Steps = f_Save_Checkpoint_Every_n_Steps.value
Save_Checkpoint_Every = int(f_Save_Checkpoint_Every.value)

if Save_Checkpoint_Every == None:
  Save_Checkpoint_Every = 1

stp = 0
Start_saving_from_the_step = int(f_Start_saving_from_the_step.value)
if Start_saving_from_the_step == None:
  Start_saving_from_the_step = 0
if (Start_saving_from_the_step < 200):
  Start_saving_from_the_step = Save_Checkpoint_Every
stpsv = Start_saving_from_the_step
if Save_Checkpoint_Every_n_Steps:
  stp = Save_Checkpoint_Every
    
    
Disconnect_after_training = f_Disconnect_after_training.value
    
   
PT=""

INSTANCE_NAME = fieldsei.value

Session_Name = INSTANCE_NAME
SESSION_DIR = OUTPUT_DIR
MDLPTH = str(OUTPUT_DIR+"/"+Session_Name+'.ckpt')

def dump_only_textenc(trnonltxt, MODELT_NAME, INSTANCE_DIR, OUTPUT_DIR, PT, Seed, precision, Training_Steps):
    
    !accelerate launch /home/jovyan/workspace/DB/diffusers/examples/dreambooth/train_dreambooth.py \
    $trnonltxt \
    $extrnlcptn \
    --image_captions_filename \
    --train_text_encoder \
    --dump_only_text_encoder \
    --pretrained_model_name_or_path="$MODELT_NAME" \
    --instance_data_dir="$INSTANCE_DIR" \
    --output_dir="$OUTPUT_DIR" \
    --instance_prompt="$PT" \
    --seed=$Seed \
    --resolution=512 \
    --mixed_precision=$precision \
    --train_batch_size=1 \
    --gradient_accumulation_steps=1 $GC \
    --use_8bit_adam \
    --learning_rate=$txlr \
    --lr_scheduler="linear" \
    --lr_warmup_steps=0 \
    --max_train_steps=$Training_Steps

def train_only_unet(stpsv, stp, SESSION_DIR, MODELT_NAME, INSTANCE_DIR, OUTPUT_DIR, PT, Seed, Res, precision, Training_Steps):
    clear_output()
    if resuming=="Yes":
      print('�[1;32mResuming Training...�[0m')
    print('�[1;33mTraining the UNet...�[0m')
    !accelerate launch /home/jovyan/workspace/DB/diffusers/examples/dreambooth/train_dreambooth.py \
    $extrnlcptn \
    $ofstnse \
    --image_captions_filename \
    --train_only_unet \
    --save_starting_step=$stpsv \
    --save_n_steps=$stp \
    --Session_dir=$SESSION_DIR \
    --pretrained_model_name_or_path="$MODELT_NAME" \
    --instance_data_dir="$INSTANCE_DIR" \
    --output_dir="$OUTPUT_DIR" \
    --captions_dir="$CAPTIONS_DIR" \
    --instance_prompt="$PT" \
    --seed=$Seed \
    --resolution=$Res \
    --mixed_precision=$precision \
    --train_batch_size=1 \
    --gradient_accumulation_steps=1 $GCUNET \
    --use_8bit_adam \
    --learning_rate=$untlr \
    --lr_scheduler="linear" \
    --lr_warmup_steps=0 \
    --max_train_steps=$Training_Steps
    
    
if os.path.exists(INSTANCE_DIR+"/.ipynb_checkpoints"):
  %rm -r $INSTANCE_DIR"/.ipynb_checkpoints"

if os.path.exists(CONCEPT_DIR+"/.ipynb_checkpoints"):
  %rm -r $CONCEPT_DIR"/.ipynb_checkpoints"

if os.path.exists(CAPTIONS_DIR+"/.ipynb_checkpoints"):
  %rm -r $CAPTIONS_DIR"/.ipynb_checkpoints"
os.chdir('/home/jovyan/workspace/DB/')

if Enable_text_encoder_training :
  print('�[1;33mTraining the text encoder...�[0m')
  if os.path.exists(OUTPUT_DIR+'/'+'text_encoder_trained'):
    %rm -r $OUTPUT_DIR"/text_encoder_trained"
  dump_only_textenc(trnonltxt, MODELT_NAME, INSTANCE_DIR, OUTPUT_DIR, PT, Seed, precision, Training_Steps=stptxt)

if Enable_Text_Encoder_Concept_Training:
  if os.path.exists(CONCEPT_DIR):
    if os.listdir(CONCEPT_DIR)!=[]:
      clear_output()
      if resuming=="Yes":
        print('�[1;32mResuming Training...�[0m')
      print('�[1;33mTraining the text encoder on the concept...�[0m')
      dump_only_textenc(trnonltxt, MODELT_NAME, CONCEPT_DIR, OUTPUT_DIR, PT, Seed, precision, Training_Steps=stptxtc)
    else:
      clear_output()
      if resuming=="Yes":
        print('�[1;32mResuming Training...�[0m')
      print('�[1;31mNo concept images found, skipping concept training...')
      Text_Encoder_Concept_Training_Steps=0
      time.sleep(8)
  else:
      clear_output()
      if resuming=="Yes":
        print('�[1;32mResuming Training...�[0m')
      print('�[1;31mNo concept images found, skipping concept training...')
      Text_Encoder_Concept_Training_Steps=0
      time.sleep(8)

if UNet_Training_Steps!=0:
  train_only_unet(stpsv, stp, SESSION_DIR, MODELT_NAME, INSTANCE_DIR, OUTPUT_DIR, PT, Seed, Res, precision, Training_Steps=UNet_Training_Steps)
if UNet_Training_Steps==0 and Text_Encoder_Concept_Training_Steps==0 and Text_Encoder_Training_Steps==0 :
  print('�[1;32mNothing to do')
else:
  if os.path.exists(OUTPUT_DIR+'/unet/diffusion_pytorch_model.bin'):
    prc="--fp16" if precision=="fp16" else ""
    !python /home/jovyan/workspace/DB/diffusers/scripts/convertosdv2.py $prc $OUTPUT_DIR $SESSION_DIR/$Session_Name".ckpt"
    clear_output()
    if os.path.exists(SESSION_DIR+"/"+INSTANCE_NAME+'.ckpt'):
      clear_output()
      print("�[1;32mDONE, the CKPT model is in your Gdrive in the sessions folder")
      if Disconnect_after_training :
        time.sleep(20)
        runtime.unassign()
    else:
      print("�[1;31mSomething went wrong")
  else:
    print("�[1;31mSomething went wrong")
from subprocess import getoutput

qwe = getoutput('nvidia-smi')

nvc = getoutput('nvcc --version')
if not 'nvcc: not found' in nvc:
    asd = nvc
else:
    asd = ''

xfo = getoutput('python -m xformers.info')
if not 'Error while finding module specification' in xfo:
    zxc = xfo
else:
    zxc = ''

print('\033[0;36m\033[1m',"\n",qwe,"\n\n",asd,"\n\n",zxc,'\033[0m')

@axvellyledmy
Copy link

~~

@axvellyledmy
Copy link

5\u001b[1;31m


import os, time
from IPython.display import display, clear_output
from subprocess import getoutput


import ipywidgets as widgets
from ipywidgets import Layout
from ipywidgets import GridspecLayout


passdesks = True
passlexss = True

lvs = int(widgets.__version__[:1])
if lvs==8:
    passdesks = False

commands_regex = getoutput('pip list | grep regex')# if "regex" in v_diffusers:
if "regex" in commands_regex:
    passlexss = False
    
if passdesks and passlexss:
    
    !pip install regex
    !pip install --upgrade ipywidgets
    clear_output(wait=False)
    print ('     \033[0;36m\033[1mipywidgets established\033[0m')
    time.sleep(0.5)
    os._exit(00)
    
else:
    
    import regex
    
    enable = {'button_color': '#3d85c6', 'text_color': '#033932'}
    emdown = {'button_color': '#008081', 'text_color': '#053c3c'}

    #ifoCOMifoCOMifoCOMifoCOMifoCOM

    opens = '<p style="text-align:center;"><span style="color:#25323b;font-family:"Courier New", Courier, monospace;"><strong>'
    cloug = '</strong></span></p>'
    migse = {'background': '#a3b8c8'}

    nunlfs = widgets.HTML(value=opens+'git-lfs'+cloug, style = migse ,layout=Layout(width="120px",height="28px"))
    nunxformers = widgets.HTML(value=opens+'xformers'+cloug, style = migse ,layout=Layout(width="120px",height="28px"))
    nundiffusers = widgets.HTML(value=opens+'diffusers'+cloug, style = migse ,layout=Layout(width="120px",height="28px"))
    nunfastapi = widgets.HTML(value=opens+'fastapi 0.90.1'+cloug, style = migse ,layout=Layout(width="120px",height="28px"))
    nunautomatic = widgets.HTML(value=opens+'automatic'+cloug, style = migse ,layout=Layout(width="120px",height="28px"))
    nuncontrolnet = widgets.HTML(value=opens+'controlnet'+cloug, style = migse ,layout=Layout(width="120px",height="28px"))

    onoffcolos = ["solid arrow-down","solid rotate-right","solid check"]
    onoffcolosS = [enable, emdown]
    onoffcolosD = [False, True]

    nunlfsU = widgets.Button(disabled=onoffcolosD[0],button_style='',tooltip='',icon=onoffcolos[0],layout=Layout(width="38px",height="28px"),style = onoffcolosS[0])
    nunxformersU = widgets.Button(disabled=onoffcolosD[0],button_style='',tooltip='',icon=onoffcolos[0],layout=Layout(width="38px",height="28px"),style = onoffcolosS[0])
    nundiffusersU = widgets.Button(disabled=onoffcolosD[0],button_style='',tooltip='',icon=onoffcolos[0],layout=Layout(width="38px",height="28px"),style = onoffcolosS[0])
    nunfastapiU = widgets.Button(disabled=onoffcolosD[0],button_style='',tooltip='',icon=onoffcolos[0],layout=Layout(width="38px",height="28px"),style = onoffcolosS[0])
    nunautomaticU = widgets.Button(disabled=onoffcolosD[0],button_style='',tooltip='',icon=onoffcolos[0],layout=Layout(width="38px",height="28px"),style = onoffcolosS[0])
    nuncontrolnetU = widgets.Button(disabled=onoffcolosD[0],button_style='',tooltip='',icon=onoffcolos[0],layout=Layout(width="38px",height="28px"),style = onoffcolosS[0])

    ifoCOM = GridspecLayout(2,6,width='500px',height='auto')

    ifoCOM[0, 0] = nunlfs
    ifoCOM[0, 1] = nunlfsU

    ifoCOM[1, 0] = nunxformers
    ifoCOM[1, 1] = nunxformersU

    ifoCOM[0, 2] = nundiffusers
    ifoCOM[0, 3] = nundiffusersU

    ifoCOM[1, 2] = nunfastapi
    ifoCOM[1, 3] = nunfastapiU

    ifoCOM[0, 4] = nunautomatic
    ifoCOM[0, 5] = nunautomaticU

    ifoCOM[1, 4] = nuncontrolnet
    ifoCOM[1, 5] = nuncontrolnetU

    def upload_ifoCOM ():

        upload_ifoCOM_lfs = False
        upload_ifoCOM_xfo = False
        upload_ifoCOM_diffusers = False
        upload_ifoCOM_ivs = False
        upload_ifoCOM_wui = False
        upload_ifoCOM_col = False

        commands_lfs = getoutput('git lfs install')
        if "Git LFS initialized" in commands_lfs:
             upload_ifoCOM_lfs = True

        commands_xfo = getoutput('python -m xformers.info')
        if not "Error while finding module specification" in commands_xfo:
            upload_ifoCOM_xfo = True

        commands_diffusers = getoutput('pip list | grep diffusers')
        if "diffusers" in commands_diffusers:
            upload_ifoCOM_diffusers = True

        AGfloats = False#DIFFUSE

        try:
            import accelerate
            avs = str(accelerate.__version__)
        except:
            avs = str("except")
        if avs == '0.12.0' or avs == 'except':
            AGfloats = True

        DIfloats = False

        try:
            import diffusers
            jvs = str(diffusers.__version__)
        except:
            jvs = str("except")
        if jvs == '0.9.0.dev0' or jvs == 'except':
            DIfloats = True
            
        if AGfloats or DIfloats:
            upload_ifoCOM_diffusers = False#DIFFUSE
            
        try:
            import fastapi
            ivs = str(fastapi.__version__)
        except:
            ivs = str("except")
        if ivs == '0.90.1':
            upload_ifoCOM_ivs = True

        if os.path.exists('/home/jovyan/workspace/stable-diffusion-webui'):
            upload_ifoCOM_wui = True

        if os.path.exists('/home/jovyan/workspace/stable-diffusion-webui/extensions/sd-webui-controlnet'):
            upload_ifoCOM_col = True

        if not upload_ifoCOM_lfs:
            nunlfsU.disabled=onoffcolosD[0]; nunlfsU.icon=onoffcolos[0]; nunlfsU.style=onoffcolosS[0]
        else:
            nunlfsU.disabled=onoffcolosD[1]; nunlfsU.icon=onoffcolos[2]; nunlfsU.style=onoffcolosS[1]
        if not upload_ifoCOM_xfo:
            nunxformersU.disabled=onoffcolosD[0]; nunxformersU.icon=onoffcolos[0]; nunxformersU.style=onoffcolosS[0]
        else:
            nunxformersU.disabled=onoffcolosD[1]; nunxformersU.icon=onoffcolos[2]; nunxformersU.style=onoffcolosS[1]
        if not upload_ifoCOM_diffusers:
            nundiffusersU.disabled=onoffcolosD[0]; nundiffusersU.icon=onoffcolos[0]; nundiffusersU.style=onoffcolosS[0]
        else:
            nundiffusersU.disabled=onoffcolosD[1]; nundiffusersU.icon=onoffcolos[2]; nundiffusersU.style=onoffcolosS[1]
        if not upload_ifoCOM_ivs:
            nunfastapiU.disabled=onoffcolosD[0]; nunfastapiU.icon=onoffcolos[0]; nunfastapiU.style=onoffcolosS[0]
        else:
            nunfastapiU.disabled=onoffcolosD[1]; nunfastapiU.icon=onoffcolos[2]; nunfastapiU.style=onoffcolosS[1]
        if not upload_ifoCOM_wui:
            nunautomaticU.disabled=onoffcolosD[0]; nunautomaticU.icon=onoffcolos[0]; nunautomaticU.style=onoffcolosS[0]
        else:
            nunautomaticU.disabled=onoffcolosD[0]; nunautomaticU.icon=onoffcolos[1]; nunautomaticU.style=onoffcolosS[0]
        if not upload_ifoCOM_col:
            if os.path.exists('/home/jovyan/workspace/stable-diffusion-webui'):
                nuncontrolnetU.disabled=onoffcolosD[0]
            else:
                nuncontrolnetU.disabled=onoffcolosD[1]
            nuncontrolnetU.icon=onoffcolos[0]; nuncontrolnetU.style=onoffcolosS[0]
        else:
            nuncontrolnetU.disabled=onoffcolosD[1]; nuncontrolnetU.icon=onoffcolos[2]; nuncontrolnetU.style=onoffcolosS[1]

    upload_ifoCOM ()

    #ifoCOMifoCOMifoCOMifoCOMifoCOM
    #widCOMwidCOMwidCOMwidCOMwidCOM

    ckptsize =[]

    widV15 = widgets.Button(description='V15',disabled=False,button_style='',tooltip='',layout=Layout(width="50px",height="28px"),style = enable)
    widV21 = widgets.Button(description='V21',disabled=False,button_style='',tooltip='',layout=Layout(width="50px",height="28px"),style = enable)
    widDSS = widgets.Button(description='DSS',disabled=True,button_style='',tooltip='',layout=Layout(width="50px",height="28px"),style = emdown)

    widSELES = widgets.Select(options=ckptsize,disabled=False,layout=Layout(width="358px",height="95px"))

    emgNUN = widgets.Button(description='WUI',disabled=False,button_style='',tooltip='',layout=Layout(width="80px",height="auto"),style = enable)

    widCOM = GridspecLayout(3,3,width='500px',height='100px')

    widCOM[0, 0] = widV15
    widCOM[1, 0] = widV21
    widCOM[2, 0] = widDSS
    widCOM[:, 1] = widSELES
    widCOM[:, 2] = emgNUN

    def upload_widCOM ():

        global ckptsize

        if os.path.exists('/home/jovyan/workspace/stable-diffusion-webui'):
            emgNUN.disabled=False
        else:
            emgNUN.disabled=True

        if os.path.exists('/home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion/V15.ckpt'):
            widV15.disabled=True;widV15.style=emdown;
        else:
            widV15.disabled=False;widV15.style=enable;

        if os.path.exists('/home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion/V21.ckpt'):
            widV21.disabled=True;widV21.style=emdown;
        else:
            widV21.disabled=False;widV21.style=enable;

        if os.path.exists('/home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion/DSS.ckpt'):
            widDSS.disabled=True;widDSS.style=emdown;
        else:
            widDSS.disabled=False;widDSS.style=enable;

        if os.path.exists('/home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion/'):
            ckptsize = []
            for e in os.listdir("/home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion/"):
                name, ext = os.path.splitext(e)
                if ext == '.ckpt':
                    ckptsize.append(name)
            widSELES.options=ckptsize

    upload_widCOM ()

    #widCOMwidCOMwidCOMwidCOMwidCOM
    #sizCOMsizCOMsizCOMsizCOMsizCOM

    SZ = widgets.IntProgress(min=0,max=102400,
                             bar_style='',
                             style={'bar_color': '#3d85c6', 'description_width': 'initial'},
                             layout=Layout(width="315px",height="28px"),
                             orientation='horizontal'
                            )
    sizesU = widgets.Button(disabled=False,button_style='',tooltip='',icon="solid rotate-right",layout=Layout(width="80px",height="28px"),style = enable)
    sizesD = widgets.Button(disabled=False,button_style='',tooltip='',icon="sharp solid trash",layout=Layout(width="80px",height="28px"),style = enable)

    sizCOM = GridspecLayout(1,3,width='500px',height='auto')

    sizCOM[0, 0] = sizesD
    sizCOM[0, 1] = sizesU
    sizCOM[0, 2] = SZ

    def upload_sizCOM ():

        getpt = str(os.path.abspath(os.getcwd()))
        os.chdir('/')
        comsiz = str(getoutput('du -s')).split("\n")
        outsiz = int(int(regex.findall("\d+", comsiz[len(comsiz)-1])[0])/1024)
        os.chdir(getpt)
        SZ.value=outsiz

    upload_sizCOM ()

    #sizCOMsizCOMsizCOMsizCOMsizCOM

    allsizezCOMPIL = GridspecLayout(3,1,width='auto',height='233px')

    allsizezCOMPIL[0, 0] = ifoCOM
    allsizezCOMPIL[1, 0] = widCOM
    allsizezCOMPIL[2, 0] = sizCOM

    #bittenfigitten


    #downline

    def lisau():
        getpt = str(os.path.abspath(os.getcwd()))
        os.chdir('/home/jovyan') 
        !find -name '.ipynb_checkpoints' -exec rm -rf {} \;
        os.chdir(getpt)
        if os.path.exists("/home/jovyan/.local/share/Trash/files"):
            !rm -rf /home/jovyan/.local/share/Trash/files

    def sizesD_function(aug):
        lisau()
        upload_sizCOM()

    def sizesU_function(aug):
        upload_sizCOM()

    sizesU.on_click(sizesD_function)
    sizesD.on_click(sizesD_function)

    #downline

    #hensline

    intes = [nunlfsU,nunxformersU,nundiffusersU,nunfastapiU,nunautomaticU,nuncontrolnetU,widV15,widV21,widDSS,emgNUN,sizesD,sizesU]
    poses = [False,False,False,False,False,False,False,False,False,False,False,False]

    def setup_loads():
        global poses
        for i in range(len(poses)):
            poses[i]=intes[i].disabled
        for i in range(len(poses)):
            intes[i].disabled=True

    def exele_loads():
        for i in range(len(poses)):
            intes[i].disabled=poses[i]

    def nunlfsU_function(aug):

        setup_loads()

        with light_output:
            clear_output()
            !curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
            !sudo apt-get install git-lfs

        upload_sizCOM ()

        with light_output:
            clear_output()

        exele_loads ()

        upload_ifoCOM ()

    def nunxformersU_function(aug):

        setup_loads()

        with light_output:
            # clear_output()
            # !mamba install -q -c nvidia cuda-nvcc=11.7 python=3.9.13 --yes
            # clear_output()
            # !mamba install -q -c nvidia -c pytorch pytorch-cuda=11.7 python=3.9.13 --yes
            # clear_output()
            # !mamba install -q -c fastai python=3.9.13 fastai=2.7.11 --yes
            # clear_output()
            # !mamba install -q -c conda-forge python=3.9.13 huggingface_hub=0.12.1 --yes
            # clear_output()
            # !mamba install -q -c nvidia -c pytorch -c 'xformers/label/dev' python=3.9.13 pytorch=1.13.1 xformers --yes
            # clear_output()
            # !pip install --upgrade triton==2.0.0a2
            
            clear_output()
            !mamba install -q -c nvidia cuda-nvcc=11.7 python=3.9.13 --yes
            clear_output()
            !mamba install -q -c conda-forge python=3.9.13 transformers --yes
            clear_output()
            !mamba install -q -c nvidia -c pytorch -c 'xformers/label/dev' python=3.9.13 xformers --yes
            clear_output()
            !pip install --upgrade triton==2.0.0a2
            clear_output()
            !pip install --upgrade transformers==4.25.1
            

        upload_sizCOM ()

        with light_output:

            clear_output()

            qwe = getoutput('nvidia-smi')

            nvc = getoutput('nvcc --version')
            if not 'nvcc: not found' in nvc:
                asd = nvc
            else:
                asd = ''

            xfo = getoutput('python -m xformers.info')
            if not 'Error while finding module specification' in xfo:
                zxc = xfo
            else:
                zxc = ''

            print('\033[0;36m\033[1m',"\n",qwe,"\n\n",asd,"\n\n",zxc,'\033[0m')

        exele_loads ()

        upload_ifoCOM ()

    def nundiffusersU_function(aug):

        setup_loads()

        with light_output:
            clear_output()

            !pip install --upgrade --no-deps accelerate
            clear_output()

            !pip install --upgrade --no-deps git+https://github.com/huggingface/diffusers
            clear_output()

        upload_sizCOM ()

        # with light_output:
        #     !pip install transformers==4.25.1
        #     clear_output()

        exele_loads ()

        upload_ifoCOM ()

    def nunfastapiU_function(aug):

        setup_loads()

        with light_output:
            clear_output()

        upload_sizCOM ()

        with light_output:
            !pip install --upgrade fastapi==0.90.1
            clear_output()

        exele_loads ()

        upload_ifoCOM ()

    def nunautomaticU_function(aug):

        setup_loads()

        with light_output:

            clear_output()

            if not os.path.exists("/home/jovyan/workspace/stable-diffusion-webui"):
                os.chdir('/home/jovyan/workspace/')
                !git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui stable-diffusion-webui
            else:
                os.chdir('/home/jovyan/workspace/stable-diffusion-webui')
                !git pull

        upload_sizCOM ()

        with light_output:
            clear_output()

        exele_loads ()

        upload_ifoCOM ()

    def nuncontrolnetU_function(aug):

        setup_loads()

        with light_output:
            clear_output()

            os.chdir('/home/jovyan/workspace/stable-diffusion-webui/extensions')
            !git clone https://github.com/Mikubill/sd-webui-controlnet.git

            from torch.hub import download_url_to_file
            from urllib.parse import urlparse

            mdldir="/home/jovyan/workspace/stable-diffusion-webui/extensions/sd-webui-controlnet/models"

            os.chdir('/home/jovyan/workspace/')
            !wget -q -O CN_models.txt https://github.com/TheLastBen/fast-stable-diffusion/raw/main/AUTOMATIC1111_files/CN_models.txt

            with open("CN_models.txt", 'r') as f:
                mdllnk = f.read().splitlines()

            for lnk in mdllnk:
                clear_output()
                download_url_to_file(lnk, os.path.abspath(os.path.join(mdldir, os.path.basename(urlparse(lnk).path))), hash_prefix=None, progress=True)

            !rm CN_models.txt

        upload_sizCOM ()

        with light_output:
            clear_output()

        exele_loads ()

        upload_ifoCOM ()



    nunlfsU.on_click(nunlfsU_function)
    nunxformersU.on_click(nunxformersU_function)
    nundiffusersU.on_click(nundiffusersU_function)
    nunfastapiU.on_click(nunfastapiU_function)
    nunautomaticU.on_click(nunautomaticU_function)
    nuncontrolnetU.on_click(nuncontrolnetU_function)


    #hensline

    #midasline

    def widV15_function(aug):
        with light_output:

            clear_output()
            os.chdir('/home/jovyan/workspace/') 
            !mkdir "/home/jovyan/workspace/tmp"
            os.chdir('/home/jovyan/workspace/tmp')
            !git init
            !git lfs install --system --skip-repo
            !git clone --depth 1 --branch fp16 "https://huggingface.co/runwayml/stable-diffusion-v1-5"
            !rm -rf /home/jovyan/workspace/tmp/.git

        lisau()
        with light_output:

            os.chdir('/home/jovyan/workspace/tmp')
            if os.path.exists('/home/jovyan/workspace/tmp/stable-diffusion-v1-5/unet/diffusion_pytorch_model.bin'):
                !wget -q -O stable-diffusion-v1-5/vae/diffusion_pytorch_model.bin https://huggingface.co/stabilityai/sd-vae-ft-mse/resolve/main/diffusion_pytorch_model.bin
                !wget -O convertosd.py https://github.com/TheLastBen/fast-stable-diffusion/raw/main/Dreambooth/convertosd.py
                !sed -i '201s@.*@    model_path = "/home/jovyan/workspace/tmp/stable-diffusion-v1-5"@' /home/jovyan/workspace/tmp/convertosd.py
                !sed -i '202s@.*@    checkpoint_path= "/home/jovyan/workspace/V15.ckpt"@' /home/jovyan/workspace/tmp/convertosd.py      
                !python /home/jovyan/workspace/tmp/convertosd.py
            if os.path.exists("/home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion"):
                !mv /home/jovyan/workspace/V15.ckpt /home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion/V15.ckpt
                widV15_function_out = "/home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion/V15.ckpt"
            else:
                widV15_function_out = "/home/jovyan/workspace/V15.ckpt"

            os.chdir('/home/jovyan/workspace/')
            !rm -rf /home/jovyan/workspace/tmp

        lisau()
        with light_output:

            upload_sizCOM()

            upload_widCOM()

            clear_output()

            if os.path.exists(widV15_function_out):
                print ('\033[0;36m\033[1m'+widV15_function_out+'\033[0m')

    def widV21_function(aug):
        with light_output:

            clear_output()

            os.chdir('/home/jovyan/workspace/') 
            !mkdir "/home/jovyan/workspace/tmp"
            os.chdir('/home/jovyan/workspace/tmp')
            !git init
            !git lfs install --system --skip-repo
            !git remote add -f origin  "https://huggingface.co/stabilityai/stable-diffusion-2-1"
            !git config core.sparsecheckout true
            !echo -e "scheduler\ntext_encoder\ntokenizer\nunet\nvae\nfeature_extractor\nmodel_index.json\n!*.safetensors" > .git/info/sparse-checkout
            !git pull origin fp16
            !rm -rf /home/jovyan/workspace/tmp/.git


        lisau()
        with light_output:

            os.chdir('/home/jovyan/workspace/')
            !wget -O convertosdv2.py https://github.com/TheLastBen/fast-stable-diffusion/raw/main/Dreambooth/convertosdv2.py
            !python /home/jovyan/workspace/convertosdv2.py --fp16 /home/jovyan/workspace/tmp /home/jovyan/workspace/V21.ckpt

            if os.path.exists("/home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion"):
                !mv /home/jovyan/workspace/V21.ckpt /home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion/V21.ckpt
                widV21_function_out = "/home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion/V21.ckpt"
            else:
                widV21_function_out = "/home/jovyan/workspace/V21.ckpt"

            !rm -rf /home/jovyan/workspace/tmp
            !rm -rf /home/jovyan/workspace/convertosdv2.py

        lisau()
        with light_output:

            upload_sizCOM()

            upload_widCOM()

            clear_output()

            if os.path.exists(widV21_function_out):
                print ('\033[0;36m\033[1m'+widV21_function_out+'\033[0m')

    def widDSS_function(aug):
        with light_output:

            clear_output()
            os.chdir('/home/jovyan/workspace/') 
            !mkdir "/home/jovyan/workspace/tmp"
            os.chdir('/home/jovyan/workspace/tmp')
            !git init
            !git lfs install --system --skip-repo
            !git clone "https://huggingface.co/dream-textures/texture-diffusion"
            !rm -rf /home/jovyan/workspace/tmp/.git

        lisau()
        with light_output:
            
            os.chdir('/home/jovyan/workspace/')
            !wget -O convertosdv2.py https://github.com/TheLastBen/fast-stable-diffusion/raw/main/Dreambooth/convertosdv2.py
            !python /home/jovyan/workspace/convertosdv2.py --fp16 /home/jovyan/workspace/tmp/texture-diffusion /home/jovyan/workspace/DSS.ckpt

            if os.path.exists("/home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion"):
                !mv /home/jovyan/workspace/DSS.ckpt /home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion/DSS.ckpt
                widDSS_function_out = "/home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion/DSS.ckpt"
            else:
                widDSS_function_out = "/home/jovyan/workspace/DSS.ckpt"

            !rm -rf /home/jovyan/workspace/tmp
            !rm -rf /home/jovyan/workspace/convertosdv2.py
            

        lisau()
        with light_output:

            upload_sizCOM()

            upload_widCOM()

            clear_output()

            if os.path.exists(widDSS_function_out):
                print ('\033[0;36m\033[1m'+widDSS_function_out+'\033[0m')

    widV15.on_click(widV15_function)
    widV21.on_click(widV21_function)
    widDSS.on_click(widDSS_function)

    def emgNUN_function(aug):
        with light_output:

            clear_output()
            saind_widSELES = str(widSELES.value)

            alpha = str('cd /home/jovyan/workspace/stable-diffusion-webui\nCOMMANDLINE_ARGS="--share --enable-insecure-extension-access --xformers --lowram ')
            betas = str('" REQS_FILE="requirements.txt" python launch.py')

            if saind_widSELES == 'None':
                print ('\033[0;36m\033[1m'+alpha+betas+'\033[0m')
            else:
                modes = str('--ckpt /home/jovyan/workspace/stable-diffusion-webui/models/Stable-diffusion/') + saind_widSELES + str('.ckpt')
                print ('\033[0;36m\033[1m'+alpha+modes+betas+'\033[0m')

    emgNUN.on_click(emgNUN_function)

    #midasline

    #bittenfigitten

    light_output = widgets.Output()

    display(allsizezCOMPIL,light_output)


import subprocess

empyelouds = '/home/jovyan/workspace/DB/value-v1-5/empye.png'

def empye():
    
    subprocess.call("ylsed=123 apt='low_dark_space' \
    nenamefile='empye' nunamodel='/home/jovyan/workspace/DB/value-v1-5' \
    nunafile='/home/jovyan/workspace/DB/value-v1-5' python /home/jovyan/workspace/SCD/simple.py", shell=True)
    
if not os.path.exists(empyelouds):
    empye()

gen2value = GridspecLayout(3,6,width='1020px',height="258px")

empyefile = open("/home/jovyan/workspace/DB/value-v1-5/empye.png", "rb").read()
empyewidget = widgets.Image( format='png', width=190, layout=Layout(visibility = 'visible')) # visible hidden

S_Fielde = []
M_Fielde = []
Y_Fielde = []

SizeFielse = 5

for i in range(SizeFielse):
    
    S_A = widgets.BoundedIntText(value=1,min=1,max=999999,step=1,disabled=False,layout=Layout(flex='1 1 0%', width="190px",height="100%"))
    M_A = widgets.Text(value='',placeholder='CPT',layout=Layout(flex='1 1 0%', width="190px",height="100%"))
    Y_A = widgets.Image(value=empyefile, format='png', width=190, layout=Layout(visibility = 'hidden')) # visible hidden
    S_Fielde.append(S_A)
    M_Fielde.append(M_A)
    Y_Fielde.append(Y_A)

for i in range(SizeFielse):
    
    gen2value[0, i+1] = S_Fielde[i]
    gen2value[1, i+1] = M_Fielde[i]
    gen2value[2, i+1] = Y_Fielde[i]
    
gen2dousy = widgets.Button(disabled=False,button_style='',tooltip='',icon="thin atom",layout=Layout(width="auto",height="auto"),style = onoffcolosS[0])

gen2value[:, 0] = gen2dousy

gen2likewools = widgets.Output()

def likewools(aug):
    
    with gen2likewools:
        
        nunamodel = outputSesion
        nunafile = outputSesion
        
        model_ylsed = ''
        model_apt = ''
        
        for i in range(SizeFielse):
        
            sed = gen2value[0,i+1].value
            cpt = gen2value[1,i+1].value
            
            ylsed = str(sed)
            apt = str(cpt).replace(" ","_")
            
            if apt == '':
                apt = str('_')
                
            if i == 0:
                model_ylsed = ylsed
                model_apt = apt
            else:
                model_ylsed += str('MASSIV') + ylsed
                model_apt += str('MASSIV') + apt
            
        nenamefile = str("modelAMASSIVmodelBMASSIVmodelCMASSIVmodelDMASSIVmodelE")
        gen2table = ["modelA","modelB","modelC","modelD","modelE"]
        
        subprocess.call("ylsed="+model_ylsed+" apt="+model_apt+" \
        nenamefile="+nenamefile+" nunamodel="+nunamodel+" \
        nunafile="+nunafile+" python /home/jovyan/workspace/SCD/simple.py", shell=True)
        
        time.sleep(1.05)
        clear_output()
        
        for i in range(SizeFielse):
            
            gen2valuefile = open(nunafile+"/"+gen2table[i]+".png", "rb").read()
            gen2value[2, i+1].value = gen2valuefile
            gen2value[2, i+1].layout.visibility = 'visible'
        
gen2dousy.on_click(likewools)

display(gen2value)

/home/jovyan/workspace/SCD/simple.py


import os
import time
import torch


from diffusers import StableDiffusionPipeline
    
aspipe = StableDiffusionPipeline.from_pretrained(os.environ['nunamodel'], torch_dtype=torch.float16).to("cuda")
        
checkMassive = False

if 'MASSIV' in os.environ['apt']:
    checkMassive = True
    
if checkMassive:
    
    sedMassive = []
    cptMassive = []
    filMassive = []
    
    SizeFielse = 5
    
    slides_sedMassive = os.environ['ylsed'].split("MASSIV")
    slides_cptMassive = os.environ['apt'].split("MASSIV")
    slides_filMassive = os.environ['nenamefile'].split("MASSIV")
    
    for i in range(SizeFielse):
        sedMassive.append(int(slides_sedMassive[i]))
        cptMassive.append(str(slides_cptMassive[i]).replace("_"," "))
        filMassive.append(str(slides_filMassive[i]))
        
    for i in range(SizeFielse):
        sgenerator = torch.Generator("cuda").manual_seed(sedMassive[i])
        filemodel = aspipe(cptMassive[i], num_inference_steps=50, guidance_scale=7.5, generator=sgenerator).images[0]
        filemodel.save(os.environ['nunafile']+"/"+filMassive[i]+".png")
        
else:
    if not os.environ['ylsed']=='':
        longnewsed=int(os.environ['ylsed'])
        sgenerator = torch.Generator("cuda").manual_seed(longnewsed)
        aspipe = aspipe(os.environ['apt'].replace("_"," "), num_inference_steps=50, guidance_scale=7.5, generator=sgenerator).images[0]
    else:
        aspipe = aspipe(os.environ['apt'].replace("_"," "), num_inference_steps=50, guidance_scale=7.5).images[0]

    aspipe.save(os.environ['nunafile']+"/"+os.environ['nenamefile']+".png")

time.sleep(1.05)

###aaa@aab@aac@aac@aad@aad@aaf@aaf@aag@aah@aaj@aaj@aak@aal@aal@aam@aam@aan@aan@aap@aap@aar@aar@aas@aas@aat@aat@aau@aay@aay@aaz@aba@aba@abb@abb@abc@abc@abd@abe@abe@abh@abh@abi@abi@abo@abo@abq@abr@abs@abs@abt@abu@abu@abv@aby@aby@abz@aca@acc@acc@ace@ace@acf@ach@ach@aci@aci@ack@ack@acl@acl@acm@aco@aco@acp@acr@acs@act@act@acu@acu@acy@acy@ada@ada@adb@adc@add@add@ade@ade@adh@adi@adi@adl@adm@adm@adn@ado@ado@adp@adr@ads@adu@adu@adv@adv@ady@ady@aea@aed@ael@ael@aen@aer@aes@aes@aew@afa@afb@afc@afc@afd@afe@afe@aff@aff@afg@afi@afi@afl@afl@afm@afp@afs@aft@aga@aga@age@age@agg@agh@agh@agi@agi@agm@agn@ago@ago@agp@agr@ags@agt@agu@agu@aha@aha@ahe@ahh@ahi@ahi@ahl@ahn@aho@aho@ahs@ahu@ahu@aia@aib@aic@aid@aid@aig@aig@aii@aik@ail@ail@aim@aim@ain@ain@air@air@ais@ais@ait@ait@aja@aja@aje@aje@aji@aji@ajo@aju@aka@aka@akb@ake@ake@akh@akh@aki@aki@ako@ako@aks@aku@aku@aky@ala@ala@alb@ald@ald@ale@ale@alf@ali@ali@alk@alk@all@all@alm@aln@alo@alo@alp@alp@als@als@alt@alt@alu@alu@alv@aly@aly@alz@alz@ama@ama@amb@amb@amc@amc@amd@ame@ame@amg@ami@ami@aml@amn@amo@amo@amp@amp@amr@ams@amu@amu@amy@amy@ana@ana@anc@anc@and@and@ane@ane@ang@ang@ani@ani@anj@ank@ank@ann@ann@ano@ano@ans@ans@ant@ant@anu@anu@any@any@anz@anz@aoa@aoc@aol@aon@aon@aor@aos@apa@apa@apc@apd@ape@ape@aph@aph@api@api@apk@apo@apo@app@app@apr@apr@aps@apt@apu@aqu@ara@ara@arc@arc@ard@ard@are@are@arg@ari@ari@ark@ark@arl@arm@arm@arn@arn@aro@aro@arr@arr@ars@ars@art@art@aru@aru@ary@ary@asa@asa@asb@asc@asc@asd@ase@ase@asf@asg@ash@ash@asi@asi@ask@ask@asl@asm@aso@aso@asp@asp@asr@ass@ass@ast@ast@asu@asu@asx@asy@asy@ata@atc@atd@ate@ate@atf@ath@ath@ati@ati@atl@atl@atm@ato@ato@atp@atp@atr@ats@ats@att@att@atu@atu@atv@atx@atx@aty@aty@atz@aua@aub@auc@aud@aud@auf@aug@aug@auk@aul@aul@aun@aun@aur@aur@aus@aus@aut@aux@aux@ava@ave@ave@avg@avi@avi@avl@avo@avo@avs@avy@awa@awa@awd@awe@awe@awg@awh@awi@awk@awk@awn@awp@aws@aww@awx@axe@axi@axx@aya@aye@aye@ayi@ayo@ayo@ayr@ayr@ays@ayu@ayy@aza@aze@aze@azi@azi@azo@azu@azu@azy@azz@azz@añ@baa@bab@bab@bac@bac@bad@bad@bae@bae@baf@bag@bag@bah@bah@bai@bai@baj@bak@bak@bal@bal@bam@bam@ban@ban@bao@bao@bap@bap@bar@bar@bas@bas@bat@bat@bau@bau@bav@baw@bax@bay@bay@baz@baz@bba@bbb@bbc@bbc@bbe@bbi@bbl@bbm@bbn@bbo@bbq@bbq@bbs@bby@bby@bcc@bce@bch@bcn@bcs@bcu@bdg@bds@bea@bea@bec@bec@bed@bed@bee@bee@beg@beg@beh@beh@bei@bei@bek@bek@bel@bel@ben@ben@ber@ber@bes@bes@bet@bet@beu@bev@bev@bex@bex@bey@bey@bez@bez@bfc@bff@bfi@bgc@bgs@bgt@bha@bha@bhi@bhi@bhk@bhm@bho@bhp@bhs@bhu@bia@bib@bib@bic@bic@bid@bid@bie@bie@big@big@bih@bij@bik@bil@bil@bim@bim@bin@bin@bio@bio@bir@bir@bis@bis@bit@bit@bix@biz@biz@bjj@bjp@bjp@bkk@bla@bla@ble@ble@bli@bli@blk@blk@blm@bln@blo@blo@blr@bls@blu@blu@bly@bly@bma@bmc@bmi@bmo@bms@bmw@bmw@bmx@bnb@bnp@bnw@boa@bob@bob@boc@boc@bod@bod@boe@boe@bog@bog@boh@boi@boi@bok@bok@bol@bol@bom@bom@bon@bon@boo@boo@bop@bor@bor@bos@bos@bot@bot@bou@bou@bow@bow@box@box@boy@boy@bpa@bpd@bpl@bpm@bps@bra@bra@brb@brc@bre@bre@bri@bri@bro@bro@brs@brt@bru@bru@bry@bry@bsa@bsb@bsc@bsd@bse@bsf@bsp@bst@bsu@btc@btn@bto@btr@bts@bts@btv@btw@bub@bub@buc@bud@bud@buf@bug@bug@buh@buk@buk@bul@bul@bum@bum@bun@bun@bur@bur@bus@bus@but@but@buu@buy@buy@bvb@bwo@bye@bye@byl@byn@byn@byo@byr@bys@byu@byu@byz@bé@bü@caa@cab@cab@cac@cac@cad@cad@cae@caf@caf@cag@cah@cai@cai@cak@cal@cal@cam@cam@can@can@cao@cap@cap@car@car@cas@cas@cat@cat@cau@cau@cav@cav@caw@caw@cay@cay@caz@cba@cbb@cbc@cbc@cbd@cbe@cbi@cbj@cbn@cbp@cbr@cbs@cbs@cca@ccc@ccd@ccg@cch@cci@cci@ccl@ccm@cco@ccp@ccs@ccu@cda@cdc@cdc@cdn@cdn@cdo@cdp@cds@cdt@cea@cec@cec@ced@ced@cee@cee@cek@cel@cel@cem@cen@cen@ceo@ceo@cep@cep@cer@cer@ces@ces@cet@ceu@cey@cfa@cfb@cfc@cfd@cfl@cfl@cfo@cfp@cfr@cfs@cgc@cgi@cha@cha@chc@chd@che@che@chf@chi@chi@chk@chl@cho@cho@chp@chr@chs@chs@cht@chu@chu@chy@chy@cia@cic@cic@cid@cie@cif@cii@cil@cil@cim@cin@cin@cio@cio@cip@cir@cir@cis@cis@cit@cit@ciu@civ@cke@cke@cki@cki@cko@cks@cky@cky@cla@cla@clc@cle@cle@clg@cli@cll@clo@cls@clt@clt@clu@cly@cma@cma@cmc@cme@cmo@cmp@cms@cmt@cmu@cna@cnc@cng@cnn@cnn@cns@cny@coa@cob@cob@coc@coc@cod@cod@coe@cog@cog@col@col@com@com@con@con@coo@coo@cop@cop@cor@cor@cos@cos@cot@cot@cou@cov@cov@cow@cow@cox@cox@coy@coy@coz@coz@cpa@cpc@cpd@cpi@cpl@cpr@cps@cpt@cpu@cra@cra@crc@cre@cre@cri@cri@crm@cro@cro@crs@crt@cru@cru@cry@cry@csa@csc@csc@csd@cse@csg@csi@csi@csk@csm@csn@cso@csp@csr@csr@css@css@cst@csu@csu@csw@cta@ctc@cte@ctf@cto@ctr@ctr@cts@ctu@ctv@ctv@cub@cub@cud@cue@cuk@cul@cum@cum@cun@cun@cup@cup@cur@cur@cus@cut@cut@cuz@cvs@cwc@cws@cyn@cyp@cze@cé@cé@daa@dab@dab@dac@dac@dad@dad@dae@dae@daf@daf@dag@dag@dah@dah@dai@dai@dak@dak@dal@dal@dam@dam@dan@dan@dao@dap@dap@daq@dar@dar@das@das@dat@dat@dau@dau@dav@dav@daw@daw@dax@day@day@daz@daz@dbs@dbz@dca@dcc@dci@dcs@dcu@dda@ddc@ddd@ddi@ddr@dds@ddu@ddy@ddy@dea@deb@deb@dec@dec@ded@ded@dee@dee@def@def@deg@deh@dei@dei@dek@del@del@dem@dem@den@den@deo@deo@dep@dep@der@der@des@des@det@det@deu@dev@dev@dew@dew@dex@dex@dey@dez@dez@dfc@dfs@dfw@dge@dge@dha@dha@dhe@dhi@dhi@dho@dhs@dhu@dia@dia@dic@dic@did@did@die@die@dif@dif@dig@dig@dih@dii@dik@dik@dil@dil@dim@dim@din@din@dio@dio@dip@dip@dir@dir@dis@dis@dit@dit@div@div@dix@dix@diy@diy@diz@dji@dji@djo@djs@dlc@dle@dle@dly@dma@dmc@dms@dmv@dmx@dna@dnb@dnc@dnd@dnr@dns@dnt@doa@dob@doc@doc@dod@dod@doe@dof@dog@dog@doh@doi@doj@dok@dok@dol@dol@dom@dom@don@don@doo@doo@dop@dop@dor@dor@dos@dos@dot@dot@dou@dou@dov@dow@dow@dox@dox@doz@dps@dra@dra@drc@dre@dre@dri@dri@drm@dro@dro@drs@dru@dru@dry@dry@dsa@dsb@dsb@dsc@dsd@dsm@dsp@dss@dtm@dts@dua@dub@dub@duc@duc@due@duf@dug@dug@duh@dui@duk@dul@dum@dum@dun@dun@duo@dup@dup@dur@dur@dus@dut@dux@dvd@dvn@dvr@dwp@dye@dye@dyk@dyn@dyn@dys@dys@dé@dü@dÃŃ@ead@ead@eae@eag@eal@ean@ear@ear@eas@eat@eat@eau@eba@ebo@eca@ecb@ecc@ece@ecg@ech@ech@eci@eck@eck@eco@eco@ecr@ecs@ect@ecu@ecu@ecz@eda@edc@edd@ede@edg@edi@edi@edm@edm@edo@edo@edp@eds@edt@edu@edu@edy@edy@eed@eee@eee@eek@eel@eem@een@een@eer@eer@ees@eet@eez@efa@efc@eff@eff@efl@efs@ega@egg@egg@ego@ego@egy@eha@ehr@ehs@eic@eid@eid@eil@ein@ein@eis@ela@ela@eld@ele@ele@elf@elf@elg@eli@eli@elk@elk@ell@ell@elm@elm@elo@elo@els@els@elt@elu@ely@ely@ema@ema@emb@emc@emc@eme@eme@emi@emi@emo@emo@emp@emp@ems@emt@emu@emu@emy@ena@enc@end@end@ene@ene@enf@eng@eng@enh@eni@eni@enn@eno@eno@ens@ens@ent@ent@enu@env@env@eny@enz@enz@eon@eos@epa@eph@eph@epi@epi@epl@epo@epp@epp@eps@equ@era@era@erc@erc@erd@ere@ere@eri@eri@erm@ern@ern@ero@ero@erp@err@err@ers@ers@ert@ert@eru@ery@ery@erz@esa@esa@esc@esc@ese@ese@esg@esh@esh@esi@esk@esl@eso@eso@esp@esp@esq@ess@ess@est@est@esy@eta@etc@ete@ete@etf@eth@eth@eti@eti@eto@eto@etr@ets@ett@ett@etu@etv@etv@ety@ety@etz@etz@eul@eun@eun@eup@eur@eur@eus@eux@eva@eve@eve@evi@evi@evo@evo@evp@evs@ewe@ews@exc@exe@exe@exi@exo@exo@exp@exp@ext@ext@eye@eye@eze@eze@faa@fab@fab@fac@fac@fad@fad@faf@faf@fag@fag@fah@fah@fai@fai@fal@fal@fam@fam@fan@fan@fao@faq@far@far@fas@fas@fat@fat@fau@fau@fav@fav@faw@fax@fax@fay@fay@faz@fbf@fbi@fbs@fca@fcb@fcb@fcc@fck@fck@fcs@fcu@fda@fdi@fdn@fdr@feb@fed@fed@fee@fee@fei@fei@fel@fel@fem@fem@fen@fen@fer@fer@fes@fet@feu@feu@few@fex@fex@fey@fey@fez@ffa@ffc@ffe@ffe@fff@ffi@ffl@ffo@ffs@ffy@ffy@fgm@fgo@fhs@fia@fib@fic@fic@fid@fid@fie@fie@fif@fig@fig@fik@fil@fil@fim@fin@fin@fir@fir@fis@fis@fit@fit@fiu@fix@fix@fla@fla@fle@fle@fli@flo@flo@flu@flu@fly@fly@fml@fmr@fnc@fob@fod@fod@foe@fog@fol@fol@fom@fon@fon@foo@foo@for@for@fos@fos@fou@fow@fox@fox@foy@fpl@fpp@fps@fpv@fra@fra@frc@fre@fre@fri@fri@frm@fro@fro@frs@fru@fry@fry@fsa@fsu@fsu@fta@ftc@ftp@fts@ftw@fty@fue@fug@fuk@ful@ful@fum@fun@fun@fur@fur@fus@fut@fut@fwd@fyi@fé@gaa@gab@gab@gac@gad@gad@gae@gaf@gaf@gag@gag@gah@gai@gai@gal@gal@gam@gam@gan@gan@gao@gap@gap@gar@gar@gas@gas@gat@gat@gau@gau@gav@gaw@gay@gay@gaz@gaz@gba@gbc@gbp@gbr@gby@gcc@gcu@gdc@gdp@gea@ged@ged@gee@gee@geh@gel@gel@gem@gem@gen@gen@geo@geo@ger@ger@ges@get@get@gey@gfs@gga@gge@gge@ggg@ggi@ggs@ggy@ggy@gha@gha@ghc@ghe@ghe@ghi@ghi@ghj@gho@ghs@ght@ght@ghu@ghz@gia@gib@gic@gic@gid@gid@gie@gie@gif@gif@gig@gig@gil@gil@gim@gin@gin@gio@gio@gir@gir@gis@gis@git@git@giu@giz@gla@gla@gle@gle@gli@gli@glo@glo@glu@glu@gly@gma@gmb@gmb@gmc@gmo@gms@gmt@gna@gne@gni@gno@gno@goa@gob@god@god@goe@gof@gog@goi@gol@gol@gom@gon@gon@goo@goo@gop@gop@gor@gor@gos@gos@got@got@gou@gou@gov@gov@gow@gow@gpa@gps@gpu@gra@gra@grc@gre@gre@gri@gri@grl@gro@gro@grp@grt@gru@gry@gry@gsa@gsc@gsm@gsp@gst@gta@gta@gti@gto@gtr@gts@gtx@gua@gud@gud@gue@gue@gug@gui@gui@guj@guk@gul@gul@gum@gum@gun@gun@gup@gup@gur@gur@gus@gut@gut@guy@guy@gwy@gya@gye@gym@gym@gyn@gyp@gö@gü@haa@hab@hab@hac@had@had@hae@hae@hag@hag@hah@hah@hai@hai@haj@haj@hak@hak@hal@hal@ham@ham@han@han@hao@hap@hap@haq@har@har@has@has@hat@hat@hau@hav@hav@haw@haw@hay@hay@haz@haz@hbd@hbd@hbo@hcs@hdd@hdr@hea@hea@heb@heb@hec@hed@hee@hee@hef@heg@heh@hei@hei@hel@hel@hem@hem@hen@hen@hep@hep@her@her@hes@hes@het@het@heu@hew@hew@hex@hex@hey@hey@hez@hfx@hhh@hhs@hia@hib@hic@hic@hid@hid@hie@hig@hii@hil@hil@him@him@hin@hin@hio@hip@hip@hir@hir@his@his@hit@hit@hiv@hiv@hle@hmm@hms@hmu@hmv@hns@hoa@hob@hoc@hod@hoe@hoe@hof@hof@hog@hog@hoh@hoi@hok@hok@hol@hol@hom@hom@hon@hon@hoo@hoo@hop@hop@hor@hor@hos@hos@hot@hot@hou@hou@hov@how@how@hoy@hoy@hpa@hpc@hpe@hpv@hra@hra@hrc@hrh@hri@hrs@hru@hrw@hsc@hse@hsv@hta@hta@htc@htc@hts@htt@hua@hub@hub@hud@hud@hue@hue@hug@hug@huh@hui@hul@hum@hum@hun@hun@hur@hur@hus@hus@hut@hut@hwa@hwy@hya@hyd@hye@hye@hyo@hyo@hyp@iac@iac@iaf@iah@ial@ial@iam@iam@ian@ian@ias@ias@iba@ibc@ibd@ibi@ibm@ibm@ibn@ibs@ibu@ibu@ica@icc@ice@ice@ich@ich@ici@ici@ick@ick@icn@ico@ico@ics@ict@icu@icu@icy@icy@icz@ida@ida@idc@ide@ide@idf@idh@idi@idi@idk@ido@ido@idr@ids@idu@idy@iec@ied@iel@iel@ier@ier@ies@ies@ifa@ifc@ife@ife@iff@ift@ifu@ify@iga@ige@igh@igh@igi@ign@ign@igs@igu@iii@iii@iit@iit@ija@ika@ike@ike@ikh@ikh@iko@iko@iku@ila@ild@ild@ile@ile@ili@ili@ill@ill@ilm@ilo@ilo@ils@ilt@ilu@ily@ily@ima@ima@imc@ime@ime@imf@img@imi@imo@imo@imp@imp@ims@imv@ina@ina@inc@inc@ind@ind@ine@ine@inf@inf@ing@ing@ini@ini@inj@ink@ink@inn@inn@ino@ino@inr@ins@ins@int@int@inu@inv@inv@iny@ioc@iom@iom@ion@ion@ior@ior@ios@iot@iot@iow@ipa@ipc@ipl@ipo@ipo@ipp@ips@ira@ira@irc@ird@ire@ire@iri@iri@irl@irl@irn@iro@iro@irr@irs@iru@iry@isa@isa@isc@isd@isd@ise@ise@isf@ish@ish@isi@isi@isk@isl@ism@ism@isn@iso@iso@isp@isp@iss@iss@ist@ist@isu@isu@ita@ita@itc@ite@ite@itf@ith@ith@iti@iti@ito@ito@its@its@itt@itt@itu@itu@itv@itv@ity@ity@itz@itz@ium@ius@iva@ive@ive@ivf@ivy@ivy@iwd@iwm@iya@iza@ize@izo@izz@izz@jab@jab@jac@jac@jad@jad@jae@jae@jaf@jag@jag@jah@jah@jai@jai@jak@jak@jal@jal@jam@jam@jan@jan@jap@jap@jar@jar@jas@jas@jat@jau@jav@jaw@jaw@jax@jax@jay@jay@jaz@jaz@jdm@jeb@jec@jed@jed@jee@jee@jef@jel@jem@jem@jen@jen@jer@jer@jes@jes@jet@jet@jew@jfc@jfk@jha@jha@jhb@jia@jic@jic@jid@jie@jig@jig@jil@jim@jim@jin@jin@jio@jis@jis@jit@jit@jiu@jiu@jkt@jlo@jnr@jnu@job@job@joe@joe@jog@jog@joh@jol@jol@jom@jon@jon@joo@joo@jop@jor@jor@jos@jos@jou@jou@joy@joy@jpg@jpn@jst@jud@jug@jul@jul@jum@jun@jun@jur@jus@jux@jyo@jä@kaa@kab@kab@kac@kad@kae@kaf@kag@kag@kah@kah@kai@kai@kaj@kaj@kak@kak@kal@kal@kam@kam@kan@kan@kap@kap@kar@kar@kas@kas@kat@kat@kau@kau@kav@kaw@kaw@kay@kay@kaz@kaz@kbs@kca@kcr@kea@ked@ked@kee@kee@keg@keh@keh@kei@kei@kej@kel@kel@kem@kem@ken@ken@keo@ker@ker@kes@kes@ket@ket@kev@kev@kew@kew@kex@key@key@kfc@kgs@kha@kha@khe@khi@khi@kho@kho@khs@khu@khy@khz@kia@kib@kic@kic@kid@kid@kie@kie@kii@kik@kil@kil@kim@kim@kin@kin@kio@kio@kip@kip@kir@kir@kis@kis@kit@kit@kja@kjv@kka@kke@kki@kkk@kko@kkr@kla@kle@kle@kli@klm@klo@klu@kly@kms@kne@kni@kno@kno@knu@knw@kof@koh@koh@koi@kok@kok@kol@kol@kom@kom@kon@kon@koo@koo@kop@kop@kor@kor@kos@kos@kot@kot@kou@kou@kov@kov@kow@kow@koz@kpa@kph@kpk@kra@kre@kri@kro@kru@kry@ksa@ksh@kst@ksu@ktm@ktn@kts@ktv@kud@kul@kul@kum@kum@kun@kun@kup@kur@kus@kus@kut@kut@kuz@kwa@kwa@kwe@kwi@kya@kyc@kyo@kyo@kyr@kyu@kyu@kzn@kö@laa@lab@lab@lac@lac@lad@lad@laf@lag@lag@lah@lah@lai@lak@lak@lal@lal@lam@lam@lan@lan@lao@lao@lap@lap@laq@lar@lar@las@las@lat@lat@lau@lau@lav@lav@law@law@lax@lax@lay@lay@laz@lbc@lbj@lbs@lcd@lcs@ldn@ldn@ldr@lds@lea@lea@lec@lec@led@led@lee@lee@lef@leg@leg@leh@leh@lei@lei@lek@lek@lel@lem@lem@len@len@leo@leo@lep@ler@ler@les@les@let@let@leu@lev@lev@lew@lew@lex@lex@ley@ley@lez@lfc@lfc@lfw@lga@lgb@lgm@lhp@lhs@lia@lia@lib@lib@lic@lic@lid@lid@lie@lie@lif@lig@lig@lik@lik@lil@lil@lim@lim@lin@lin@lio@lip@lip@lis@lis@lit@lit@liu@liv@liv@lix@liz@liz@lju@lka@lla@llc@lle@lle@lli@lli@lll@llo@llp@lls@lly@lma@lmp@lms@lng@lnp@loa@lob@lob@loc@loc@lod@loe@loe@lof@log@log@loh@loh@loi@lok@lok@lol@lol@lom@lon@lon@loo@loo@lop@lop@lor@lor@los@los@lot@lot@lou@lou@lov@lov@low@low@lox@loy@loy@lpc@lpg@lps@lrt@lsd@lse@lse@lsu@lsu@ltc@ltd@lte@lub@lub@luc@luc@lud@lue@luf@lug@luk@lul@lum@lum@lun@lun@lup@lur@lus@luv@luv@lux@lux@luz@lvl@lyf@lyk@lym@lyn@lyn@lys@lé@maa@maa@mab@mac@mac@mad@mad@mae@mae@mag@mag@mah@mah@mai@mai@maj@maj@mak@mak@mal@mal@mam@mam@man@man@mao@mao@map@map@mar@mar@mas@mas@mat@mat@mau@mau@mav@maw@maw@max@max@may@may@maz@maz@mba@mbb@mbc@mbe@mbe@mbi@mbo@mbo@mbs@mbu@mca@mca@mcc@mcd@mce@mcg@mcg@mci@mci@mck@mcl@mcm@mcn@mco@mcr@mcr@mcs@mcu@mdc@mdc@mds@mdt@mea@mea@mec@med@med@mee@mee@meg@meg@meh@meh@mei@mei@mek@mel@mel@mem@mem@men@men@meo@mep@mer@mer@mes@mes@met@met@meu@mew@mex@mex@mey@mey@mez@mez@mfa@mfc@mfg@mfw@mga@mgm@mgr@mgs@mgt@mha@mhs@mhz@mia@mib@mic@mic@mid@mid@mie@mie@mig@mii@mik@mik@mil@mil@mim@min@min@mio@mir@mir@mis@mis@mit@mit@mix@mix@miy@miz@miz@mke@mkt@mla@mlb@mlb@mlg@mlk@mlm@mln@mlp@mls@mma@mma@mmc@mme@mmi@mmj@mmm@mmm@mmo@mms@mmy@mmy@mna@mnd@mnf@mnl@mns@mnt@moa@mob@mob@moc@moc@mod@mod@moe@moe@mof@mog@moh@moh@moi@moi@moj@mok@mol@mol@mom@mom@mon@mon@moo@moo@mop@mor@mor@mos@mos@mot@mot@mou@mou@mov@mow@mow@moy@moy@moz@moz@mpa@mpc@mpd@mpg@mpg@mph@mpi@mpo@mpp@mps@mpu@mpy@mqm@mra@mrc@mri@mrs@mrs@mrt@mru@mrw@msa@msc@msc@msd@msd@msf@msg@msg@msh@msi@msi@msk@msl@msm@msn@msn@msp@msp@mss@mss@mst@msu@msu@msy@mta@mtb@mtb@mtc@mtg@mtg@mth@mtl@mtn@mtn@mtr@mts@mtv@mtv@mua@muc@mud@mud@mue@mue@muf@mug@mug@muh@muh@muj@muk@muk@mul@mul@mum@mum@mun@mun@mup@mur@mur@mus@mus@mut@mut@muy@mvc@mvp@mwc@mwf@mya@mye@myo@myr@mys@má@mé@mü@naa@nab@nab@nac@nac@nad@nad@nae@naf@naf@nag@nag@nah@nah@nai@nai@naj@nak@nak@nal@nal@nam@nam@nan@nan@nao@nap@nap@naq@nar@nar@nas@nas@nat@nat@nau@nau@nav@nav@naw@naw@nax@nay@nay@naz@naz@nba@nba@nbc@nbc@nbd@nbl@nca@ncc@ncc@ncr@ncs@nct@nct@nda@ndc@ndi@ndp@nds@nea@neb@nec@nec@ned@ned@nee@nee@neg@neh@neh@nei@nek@nel@nel@nem@nen@nen@neo@neo@nep@nep@ner@ner@nes@nes@net@net@neu@neu@nev@nev@new@new@nex@nex@ney@ney@nez@nfc@nfl@nfl@nga@ngc@ngo@ngo@nhc@nhl@nhl@nhm@nhq@nhs@nhs@nia@nib@nic@nic@nie@nie@nig@nig@nih@nik@nik@nil@nil@nim@nim@nin@nin@nip@nip@nir@nir@nis@nis@nit@nit@niu@niv@nix@nix@nko@nli@nlp@nmd@nme@nnn@noc@noc@nod@nof@nog@noh@noi@noi@nol@nom@nom@non@non@noo@noo@nor@nor@nos@not@not@nou@nou@nov@nov@now@now@nox@noy@npa@npc@npr@npr@nps@npt@nra@nrc@nrf@nrg@nrl@nrl@nsa@nsc@nsd@nsf@nsi@nsw@nsw@ntr@nts@ntt@ntv@ntv@nue@nug@nuh@nuk@nul@num@num@nun@nun@nup@nur@nur@nus@nus@nut@nut@nvi@nwa@nwo@nws@nws@nwt@nxt@nxt@nya@nyc@nyc@nye@nye@nyk@nyo@nyo@nyr@nys@nys@nyt@nyt@nyu@nyu@oak@oak@oat@oat@oax@oba@oba@obe@obe@obi@obi@obl@obo@obo@obs@oca@occ@ocd@oce@och@och@oci@ock@ock@oco@ocr@ocs@oct@ocu@oda@odd@odd@ode@ode@odi@odi@odo@odo@odu@odu@oec@oem@oes@ofa@ofc@ofe@off@off@ofi@ofi@oft@oga@ohh@ohi@ohl@ohl@ohn@ohs@oic@oid@oil@oil@oir@oir@ois@oit@oka@oka@okc@okc@oke@oke@oki@oko@oko@oku@oku@ola@ola@old@old@ole@ole@olf@oli@oli@oll@oll@olo@olo@ols@olt@olu@olu@oly@oly@oma@oma@omb@omd@ome@ome@omf@omg@omg@omi@omi@omo@omo@oms@omy@omy@ona@ond@ond@one@one@onf@ong@ong@oni@oni@ono@ono@ons@ons@ont@ont@onu@ony@ony@ood@ood@oof@ooh@ook@ook@ool@ool@oom@oom@oon@oon@ooo@oop@oor@oos@oot@opa@opd@ope@ope@oph@opi@opi@opp@opp@ops@opt@opt@opy@ora@orb@orb@orc@ord@ord@ore@ore@org@org@ori@ori@ork@ork@orl@orm@orn@orn@oro@oro@orr@ors@ort@oru@oru@ory@ory@osa@osa@osc@ose@ose@osh@osh@osi@osi@osm@oso@oso@osp@oss@oss@ost@ost@osu@osu@ota@ota@otc@otd@ote@ote@oth@oth@oti@oti@oto@oto@otp@otr@ots@ott@ott@otw@oud@oue@ouf@oui@ouk@oul@oul@oun@oun@oup@our@our@ous@ous@out@out@oux@oux@ova@ove@ove@ovi@ovo@ovo@owa@owe@owl@owl@own@own@owo@ows@oxi@oxi@oxo@oxy@oya@oye@paa@pab@pac@pac@pad@pad@paf@pag@pag@pah@pah@pai@pai@pak@pak@pal@pal@pam@pam@pan@pan@pao@pap@pap@par@par@pas@pas@pat@pat@pau@pau@pav@paw@paw@pax@pax@pay@pay@paz@pba@pbb@pbb@pbc@pbl@pbr@pbs@pca@pcb@pcc@pci@pcm@pcr@pcs@pct@pdc@pdf@pdp@pdt@pdx@pdx@pea@pec@pec@ped@ped@pee@pee@peg@peg@pei@pei@pel@pel@pen@pen@pep@pep@per@per@pes@pes@pet@pet@peu@pew@pew@pex@pey@pey@pez@pez@pfa@pfc@pff@pfi@pfw@pga@pgh@pgh@pgs@pha@pha@phc@phd@phd@phe@phe@phi@phi@phl@pho@pho@php@phs@phu@phx@phx@phy@phy@pia@pic@pic@pid@pie@pie@pig@pig@pik@pil@pil@pim@pim@pin@pin@pio@pip@pir@pir@pis@pis@pit@pit@pix@pix@pjs@pkg@pkk@pla@pla@plc@ple@ple@pli@pli@pll@pll@pln@plo@plo@pls@plu@ply@ply@plz@pmi@pmo@pms@pnc@pne@png@pnp@pnw@poa@poc@poc@pod@pod@poe@poe@pof@pok@pol@pol@pom@pom@pon@pon@poo@poo@pop@pop@por@por@pos@pos@pot@pot@pou@pov@pow@pow@pox@poy@poz@ppa@ppc@ppe@ppe@ppg@ppi@ppl@ppm@ppo@ppp@pps@ppv@ppy@ppy@pra@pra@prc@pre@pre@pri@pri@prk@pro@pro@prs@pru@pry@psa@psb@psc@psd@pse@pse@psg@psi@psi@psl@psn@pso@psp@pss@pss@pst@psu@psu@psv@psy@psy@pta@ptc@pte@pti@pti@pto@pto@pts@ptv@pub@pub@puc@pud@pue@pug@pug@puj@puk@pul@pul@pum@pun@pun@pup@pup@pur@pur@pus@put@put@pvc@pvp@pvt@pwc@pye@pyg@pé@qad@qbs@qld@qld@qpr@qtr@qua@que@que@qui@qui@quo@quo@qur@raa@rab@rab@rac@rac@rad@rad@rae@rae@raf@raf@rag@rag@rah@rah@rai@rai@raj@raj@rak@rak@ral@ral@ram@ram@ran@ran@rao@rap@rap@raq@raq@rar@rar@ras@ras@rat@rat@rau@rav@rav@raw@raw@rax@ray@ray@raz@raz@rbc@rbi@rbs@rca@rcb@rcn@rda@rdr@rds@rea@reb@reb@rec@rec@red@red@ree@ree@ref@ref@reg@reg@reh@rei@rei@rek@rek@rel@rel@rem@rem@ren@ren@reo@reo@rep@rep@req@rer@rer@res@res@ret@ret@reu@reu@rev@rev@rew@rex@rex@rey@rey@rez@rez@rfc@rgb@rgv@rha@rhe@rhi@rho@rhp@rhs@rhu@rhy@ria@rib@rib@ric@ric@rid@rid@rie@rie@rif@rig@rig@rij@rik@rik@ril@ril@rim@rim@rin@rin@rio@rio@rip@rip@rir@ris@ris@rit@rit@riv@rix@rix@riz@riz@rly@rmb@rms@rna@rnb@rnc@roa@rob@rob@roc@roc@rod@rod@roe@roe@rof@rog@rog@roh@roh@roi@rok@rol@rol@rom@rom@ron@ron@roo@roo@rop@ror@ror@ros@ros@rot@rot@rou@rou@rov@row@row@rox@rox@roy@roy@roz@roz@rpa@rpg@rpm@rps@rrp@rrr@rsa@rsc@rsd@rsi@rsl@rsp@rss@rss@rtc@rte@rte@rtg@rti@rtr@rts@rtw@rub@rub@rud@rue@rue@rug@rug@rui@ruk@rum@rum@run@run@rup@rup@rus@rus@rut@rut@ruz@rva@rwa@rwc@rye@rye@ryn@ryo@rys@ryu@ryu@ré@saa@sab@sab@sac@sac@sad@sad@sae@sae@saf@saf@sag@sag@sah@sah@sai@sai@saj@sak@sak@sal@sal@sam@sam@san@san@sao@sap@sap@sar@sar@sas@sas@sat@sat@sau@sau@sav@sav@saw@saw@sax@sax@say@say@saz@sba@sbc@sbi@sbk@sbs@sbu@sbu@sby@sby@sca@scc@scd@sch@sch@sci@sci@sco@sco@scp@scr@scs@sct@scu@scu@scy@sda@sdc@sdf@sdg@sdk@sdn@sea@sea@seb@seb@sec@sec@sed@sed@see@see@sef@seg@seh@seh@sei@sei@sek@sek@sel@sel@sem@sem@sen@sen@seo@seo@sep@sep@seq@ser@ser@ses@ses@set@set@seu@sev@sev@sew@sex@sex@sey@sey@sez@sfa@sfb@sfc@sff@sfo@sfw@sfx@sga@sgh@sgo@sgo@sgt@sha@sha@shc@shd@she@she@shh@shi@shi@sho@sho@shp@shq@shr@shs@sht@shu@shu@shy@shy@sia@sic@sic@sid@sid@sie@sie@sif@sig@sig@sii@sik@sik@sil@sil@sim@sim@sin@sin@sio@sip@sir@sir@sis@sis@sit@sit@siu@six@six@sjo@ska@skc@ske@ske@ski@ski@sko@sko@sks@sku@sky@sky@sla@sla@slc@sle@sli@sli@slo@slo@slp@slr@sls@slt@slu@slu@slv@sly@sly@sma@sma@smb@smc@smc@smd@sme@sme@smg@smh@smi@smi@smm@smo@smo@smp@sms@smt@smu@smu@smw@smx@smy@sna@snc@sne@sne@snf@sng@sni@sni@snl@sno@sno@snp@sns@snt@snu@sny@snz@soa@sob@sob@soc@soc@sod@soe@soe@sof@sof@sog@soi@sok@sol@sol@som@som@son@son@soo@soo@sop@sop@sor@sor@sos@sos@sot@sot@sou@sou@sov@sow@sox@sox@soy@soy@spa@spa@spc@spd@spd@spe@spe@spf@spg@sph@sph@spi@spi@spl@spl@spn@spn@spo@spo@spp@spr@spr@sps@spu@spx@spy@spy@sql@sql@sqm@sqn@squ@src@sre@sri@sri@srk@srk@srl@srp@srs@srt@sru@ssa@ssb@ssc@ssc@ssd@sse@sse@ssf@ssg@ssh@ssi@ssi@ssl@ssn@sso@sso@ssp@ssr@sss@sst@ssu@ssw@ssy@ssy@sta@sta@stc@std@ste@ste@stg@sth@sth@sti@sti@stl@stl@stm@stn@sto@sto@stp@str@str@sts@stu@stu@stv@stv@stx@sty@sty@sua@sub@sub@suc@sud@sud@sue@sue@suf@suf@sug@sui@suk@suk@sul@sul@sum@sum@sun@sun@sup@sup@sur@sur@sus@sus@sut@sut@suv@suz@svc@sve@svp@svt@svu@swa@swa@swc@swe@swe@swi@swi@swo@swt@swx@sya@syd@syd@syl@sym@sym@syn@syn@sys@sze@szn@sé@taa@tab@tab@tac@tac@tad@tad@tae@tae@taf@tag@tag@tah@tah@tai@tai@taj@taj@tak@tak@tal@tal@tam@tam@tan@tan@tao@tao@tap@tap@tar@tar@tas@tas@tat@tat@tau@tau@taw@taw@tax@tax@tay@tay@taz@taz@tba@tbc@tbd@tbh@tbi@tbl@tbo@tbr@tbs@tbt@tca@tch@tch@tcm@tcm@tcs@tcu@tdf@tdi@tdp@tds@tea@tea@tec@tec@ted@ted@tee@tee@teh@teh@tej@tek@tek@tel@tel@tem@tem@ten@ten@teo@tep@ter@ter@tes@tes@tet@tet@teu@tex@tex@tey@tez@tfc@tfl@tfw@tha@tha@thc@thd@the@the@thi@thi@thm@thn@thn@tho@tho@thr@thr@ths@tht@thu@thu@thx@thy@thy@tia@tib@tic@tic@tid@tid@tie@tie@tif@tig@tik@tik@til@til@tim@tim@tin@tin@tio@tip@tip@tir@tir@tis@tis@tit@tit@tiv@tix@tiz@tko@tks@tlc@tle@tle@tls@tly@tly@tmc@tml@tmr@tms@tmw@tmz@tna@tng@tnt@tnx@toa@tob@toc@toc@tod@tod@toe@toe@tof@tog@toh@toi@toi@tok@tok@tol@tol@tom@tom@ton@ton@too@too@top@top@tor@tor@tos@tot@tot@tou@tou@tov@tow@tow@tox@tox@toy@toy@tpp@tps@tra@tra@trc@tre@tre@tri@tri@tro@tro@trs@tru@tru@trx@try@try@tsa@tsb@tsc@tsd@tse@tsh@tsi@tsi@tsk@tsm@tsn@tsn@tsp@tsu@tsu@tta@ttc@tte@tte@tti@ttm@tto@tto@ttp@ttr@tts@ttt@ttu@ttv@tty@tty@tua@tub@tub@tuc@tuc@tue@tuf@tug@tug@tuk@tuk@tul@tul@tum@tum@tun@tun@tup@tup@tur@tur@tus@tus@tut@tux@tux@tvc@tvd@tvn@tvs@twa@twc@twd@twd@twe@twi@two@two@twp@twt@twx@twy@txt@tya@tye@tyl@tym@tyr@tzu@té@té@uab@uae@ual@uan@uas@uav@uba@ubc@ubc@ube@ubi@ubs@uca@ucc@ucc@ucd@ucd@ucf@uch@uch@uci@uci@uck@ucl@ucl@ucn@uda@ude@ude@uel@uer@ues@ufc@ufc@uff@ufo@uga@ugh@ugh@ugu@uhc@uhh@uhm@uil@uit@uit@uji@uka@uke@uke@uki@uki@uko@uku@uku@ula@ula@ule@ulf@uli@uli@ull@ulo@ulo@ult@ulu@ulu@uly@uma@uma@umb@umc@umd@ume@umi@umi@umm@umm@ump@ums@umu@una@unc@unc@und@und@une@une@unf@ung@ung@unh@uni@uni@unk@unl@unn@uno@uno@uns@unt@unt@uof@uon@upa@upd@uph@upl@upp@upp@ups@ura@ura@urd@ure@ure@urg@uri@uri@url@urn@uro@uro@urs@urt@uru@uru@ury@ury@usa@usa@usb@usc@usc@usd@use@use@usf@usf@ush@ush@usi@usl@usm@usn@uso@usp@uss@uss@ust@ust@usu@usu@uta@uta@utc@utd@ute@ute@uth@uth@uti@utm@uto@uto@utr@uts@utt@utv@utz@uuu@uuu@uva@uwe@uwu@vaa@vac@vac@vad@vae@vag@vah@vai@vai@vaj@vak@vak@val@val@vam@van@van@vap@var@var@vas@vas@vat@vat@vau@vaw@vay@vaz@vcs@vcu@vea@vec@ved@ved@vee@vee@veg@veg@vel@vel@ven@ven@ver@ver@ves@ves@vet@vet@vex@vex@vey@vey@vez@vez@vfl@vfx@vhs@via@vic@vic@vid@vid@vie@vie@vig@vig@vii@vik@vik@vil@vil@vin@vin@vio@vio@vip@vip@vir@vir@vis@vis@vit@vit@viv@viv@vix@vix@viz@viz@vla@vma@voc@voc@vod@vod@vol@vol@vom@von@von@voo@vor@vor@vos@vot@vou@vow@vox@vox@voy@voy@vpn@vre@vre@vss@vue@vue@vul@waa@wab@wab@wac@wac@wad@wad@waf@wag@wag@wah@wah@wai@wai@waj@wak@wak@wal@wal@wam@wan@wan@wap@wap@waq@war@war@was@was@wat@wat@wau@wav@waw@wax@wax@way@way@waz@waz@wba@wbb@wbc@wbo@wbz@wcc@wcc@wcs@wcw@wdw@wea@wea@web@web@wec@wed@wed@wee@wee@wef@weg@weg@weh@weh@wei@wei@wel@wel@wen@wen@wer@wer@wes@wes@wet@wet@wex@wey@wey@wfa@wfc@wfp@wga@wgn@wha@wha@whe@whi@whi@whl@who@who@whs@wht@why@why@wib@wic@wid@wid@wie@wie@wif@wig@wig@wii@wil@wil@wim@wim@win@win@wip@wir@wir@wis@wis@wit@wit@wiv@wiz@wiz@wks@wku@wns@wnt@wny@wob@woc@wod@wof@woj@wok@wol@wol@wom@won@won@woo@woo@wor@wot@wou@wow@wow@woz@wpg@wps@wra@wra@wrc@wre@wri@wri@wro@wrs@wsb@wsj@wsl@wsu@wsu@wsw@wta@wtc@wtf@wth@wti@wto@wts@wud@wul@wur@wut@wvu@wvu@wwc@wwe@wwe@wwf@wwg@wwi@www@www@wwx@wyd@wye@wye@wyn@wyn@xan@xen@xer@xia@xia@xie@xie@xii@xim@xin@xin@xis@xit@xiv@xma@xon@xon@xox@xox@xpo@xrp@xvi@xxl@xxx@xxx@yaa@yaa@yab@yad@yad@yaf@yag@yah@yah@yak@yak@yal@yal@yam@yam@yan@yan@yao@yap@yap@yar@yar@yas@yas@yat@yat@yav@yaw@yay@yay@yaz@yaz@yds@yea@yed@yed@yee@yee@yeg@yeg@yeh@yel@yel@yen@yen@yeo@yeo@yep@yer@yer@yes@yes@yet@yev@yew@yey@ygk@ygo@yin@yin@yle@yle@ymc@ymi@ymm@yne@ynn@yof@yog@yog@yoh@yol@yol@yom@yom@yon@yon@yoo@yoo@yor@yor@yos@yot@you@you@yoy@ypg@yql@yqr@yrs@ysl@ysm@yst@ytd@yte@yuh@yui@yuk@yuk@yul@yum@yum@yun@yun@yup@yur@yuv@yvr@yxe@yya@yyc@yyc@yyj@yyy@yü@zab@zac@zac@zad@zad@zaf@zag@zag@zah@zah@zai@zai@zak@zak@zal@zal@zam@zam@zan@zan@zap@zar@zar@zas@zay@zeb@zed@zed@zee@zee@zek@zel@zel@zen@zen@zer@zer@zes@zet@zey@zhu@zia@zid@zie@zie@zig@zig@zik@zil@zil@zim@zim@zin@zin@zio@zip@zip@zir@zoe@zoe@zog@zol@zom@zon@zon@zoo@zoo@zor@zou@zul@zum@zun@zur@zyk@zyn@zza@zzi@zzo@zzy@zzy@zzz

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants