diff --git a/.github/workflows/generate_static_html.yml b/.github/workflows/generate_static_html.yml new file mode 100644 index 0000000..42a9c59 --- /dev/null +++ b/.github/workflows/generate_static_html.yml @@ -0,0 +1,79 @@ +name: Generate Static HTML + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + schedule: + - cron: '0 0,12 * * *' # 00:00 and 12:00 UTC + workflow_dispatch: + +permissions: + contents: write + pages: write + id-token: write + +# Allow one concurrent deployment +concurrency: + group: "pages" + cancel-in-progress: true + + +jobs: + generate: + runs-on: ubuntu-latest + steps: + - name: Setup + uses: BSFishy/pip-action@v1 + with: + packages: | + requests + huggingface_hub + pillow + bs4 + + - name: Checkout + uses: actions/checkout@v3 + with: + repository: ${{ github.repository }} + + - name: Generate Models Webpage + run: python ${{ github.workspace }}/generate_tx_models_html.py ${{ github.workspace }}/site/index.html + shell: sh + + - name: Commit Changes + uses: devops-infra/action-commit-push@master + with: + github_token: "${{ secrets.GITHUB_TOKEN }}" + add_timestamp: false + commit_prefix: "[AUTO] " + commit_message: "Update static page" + force: false + + deploy: + needs: generate + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + # Need this to force it to get the latest commit (always the one created by the generate job above). + # Otherwise it will always publish the previous job's output. + ref: 'main' + +# Alternative solution to the previous job issue? +# - name: Pull latest changes +# run: git pull --no-rebase + + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + with: + path: 'site' + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v1 diff --git a/.github/workflows/purge_workflow_runs.yaml b/.github/workflows/purge_workflow_runs.yaml new file mode 100644 index 0000000..7095bb2 --- /dev/null +++ b/.github/workflows/purge_workflow_runs.yaml @@ -0,0 +1,20 @@ +name: Delete old workflow runs +on: + workflow_dispatch: + inputs: + days: + description: 'Number of days.' + required: true + default: "20" + +jobs: + del_runs: + runs-on: ubuntu-latest + steps: + - name: Delete workflow runs + uses: Mattraks/delete-workflow-runs@main + with: + token: ${{ secrets.TOKEN_GITHUB }} + repository: ${{ github.repository }} + retain_days: ${{ github.event.inputs.days }} + keep_minimum_runs: 3 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ed8801e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +stable-diffusion-textual-inversion-models.html diff --git a/README.md b/README.md new file mode 100644 index 0000000..57d94e5 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# stable-diffusion-textual-inversion-models + +_Automated list of Stable Diffusion textual inversion models from sd-concepts-library._ + +[![Generate and Publish GitHub Pages](https://github.com/Cyberes/stable-diffusion-textual-inversion-models/actions/workflows/generate.yml/badge.svg)](https://github.com/Cyberes/stable-diffusion-textual-inversion-models/actions/workflows/generate.yml) + +Using GitHub Actions, every 12 hours the entire [sd-concepts-library](https://huggingface.co/sd-concepts-library) is scraped and a list of all textual inversion models is generated and published to GitHub Pages. + +View it here: [https://cyberes.github.io/stable-diffusion-textual-inversion-models/](https://cyberes.github.io/stable-diffusion-textual-inversion-models/) diff --git a/generate_tx_models_html.py b/generate_tx_models_html.py new file mode 100644 index 0000000..db7940b --- /dev/null +++ b/generate_tx_models_html.py @@ -0,0 +1,273 @@ +import argparse +import datetime +import os +import shutil +import sys +from urllib import request as ulreq + +from bs4 import BeautifulSoup +import requests +from huggingface_hub import HfApi +from PIL import ImageFile + + +def getsizes(uri): + # https://stackoverflow.com/a/37709319 + # get file size *and* image size (None if not known) + file = ulreq.urlopen(uri) + size = file.headers.get("content-length") + if size: + size = int(size) + p = ImageFile.Parser() + while True: + data = file.read(1024) + if not data: + break + p.feed(data) + if p.image: + return size, p.image.size + break + file.close() + return (size, None) + + +parser = argparse.ArgumentParser() +parser.add_argument('out_file', nargs='?', help='file to save to', default='stable-diffusion-textual-inversion-models.html') +args = parser.parse_args() + +print('Will save to file:', args.out_file) + +# Get list of models under the sd-concepts-library organization +api = HfApi() +models_list = [] +for model in api.list_models(author="sd-concepts-library"): + models_list.append(model.modelId.replace('sd-concepts-library/', '')) +models_list.sort() + +dt = datetime.datetime.now() +tz = dt.astimezone().tzname() + +html_struct = f""" + + + +
++ Page updates automatically daily. Last updated {datetime.datetime.now().strftime("%A %B %d, %Y")}. +
++ Generated from huggingface.co/sd-concepts-library +
+ ++ Models are downloaded straight from the HuggingFace repositories. There are currently {len(models_list)} textual inversion models in sd-concepts-library. The images displayed are the inputs, not the outputs. +
+ ++ Want to quickly test concepts? Try the Stable Diffusion Conceptualizer on HuggingFace. +
+ + ++ {model_name} is restricted and you must share your contact information to view this repository. + View Repository +
+ """ + else: + html_struct = html_struct + f""" ++ + View Repository +
++ + Page updates automatically daily. Last updated + + Sunday September 25, 2022 + + . + +
++ Generated from + + huggingface.co/sd-concepts-library + +
++ Models are downloaded straight from the HuggingFace repositories. There are currently 554 textual inversion models in sd-concepts-library. The images displayed are the inputs, not the outputs. +
++ Want to quickly test concepts? Try the + + Stable Diffusion Conceptualizer + + on HuggingFace. +
++ + + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ Akitsuki is restricted and you must share your contact information to view this repository. + + View Repository + +
++ Atako is restricted and you must share your contact information to view this repository. + + View Repository + +
++ RINGAO is restricted and you must share your contact information to view this repository. + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ faraon-love-shady is restricted and you must share your contact information to view this repository. + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ ina-art is restricted and you must share your contact information to view this repository. + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ osrsmini2 is restricted and you must share your contact information to view this repository. + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ rhizomuse-machine-bionic-sculpture is restricted and you must share your contact information to view this repository. + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ wheatland is restricted and you must share your contact information to view this repository. + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
++ + + View Repository + +
+