distributable:
  url: https://github.com/AUTOMATIC1111/stable-diffusion-webui/archive/refs/tags/v{{version}}.tar.gz
  strip-components: 1

versions:
  github: AUTOMATIC1111/stable-diffusion-webui

# YES! capitalization is correct per project homepage
display-name: Stable Diffusion web UI

#TODO there's inefficient duplication we can overcome
# eg. pytorch-vision bundles its own libpng and libjpeg, which we could provide

dependencies:
  python.org: ~3.10
  tea.xyz: ^0  # our scripts use tea/cli
  # we clear out all the git repos before uploading but something
  # still tries to use git. hopefully nothing is broken because we
  # clear out all the git repos (they were 100s of MB)
  git-scm.org: ^2
  # For replacing Pillow's vendorized libwebp
  darwin/x86-64:
    google.com/webp: '*'

#FIXME pls make this work on Linux thanks
platforms: darwin

build:
  dependencies:
    pip.pypa.io: '*'
    gnu.org/wget: '*'
    protobuf.dev: '>=21'
    rust-lang.org: ^1  # docs say this is needed but I’m not convinced…
  script:
    # don’t download the models RN
    # --exit just installs deps and exits rather than boots the web server
    - echo 'export COMMANDLINE_ARGS="
      --no-download-sd-model
      --exit
      $COMMANDLINE_ARGS"' > webui-user.sh

    # or it clones HEAD and uses that
    - mkdir -p .git

    # installs python virtual-env
    - ./webui.sh

    # Pillow ships dylibs that don't have room for our header rewrites.
    # If we delete them, we can use ours.
    - run: rm libwebp.7.dylib
      working-directory: venv/lib/python3.10/site-packages/PIL/.dylibs
      if: darwin/x86-64

    # torchvision .whl dylibs are broken out the box :/
    - run:
        install_name_tool
          -add_rpath @loader_path/../torch/lib
          venv/lib/python3.10/site-packages/torchvision/image.so
      if: darwin

    # change CWD for remainder of our execution
    - |
      mkdir -p {{prefix}}
      cd {{prefix}}

    # move this installation into its prefix
    - run: |
        cp -a $SRCROOT lib
        mkdir -p bin

    # install our scripts and shims
    - |
      cp lib/props/webui-user.sh lib
      cp lib/props/entrypoint.sh .
      cp lib/props/stable-diffusion-webui bin

    # removes the prepare_environment() step since we have already done that
    - run: |
        sed -i.bak \
          -e '/with launch_utils\.startup_timer\.subcategory("prepare environment"):/{N;N;N;d;}' \
          -e '/if not args\.skip_prepare_environment:/{N;N;d;}' \
          -e '/prepare_environment()/d' \
          launch.py
        rm launch.py.bak
      working-directory:
        lib

    # delete our crap
    - rm -rf lib/props lib/xyz.tea.* lib/tea.yaml

    # we set this as a symlink to ~/.local/share/models in our stub scripts
    - rm -rf lib/models/Stable-diffusion lib/extensions lib/outputs

    # delete all the .git stuff to save >1GB
    # NOTE that this would cause the prepare_environment() step to fail
    - find . -name .git\* | xargs rm -rf

provides:
  - bin/stable-diffusion-webui

entrypoint: ./entrypoint.sh

test:
  qa-required: true
  script: stable-diffusion-webui --help
