diff --git a/.github/workflows/update-supporters.yml b/.github/workflows/update-supporters.yml
new file mode 100644
index 00000000..4594b0be
--- /dev/null
+++ b/.github/workflows/update-supporters.yml
@@ -0,0 +1,31 @@
+name: Update Supporters in README
+
+on:
+ push:
+ paths:
+ - 'data/supporters.json'
+ branches:
+ - main
+ workflow_dispatch: # Allow manual trigger
+
+jobs:
+ update-readme:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Set up Python
+ uses: actions/setup-python@v5
+ with:
+ python-version: '3.10'
+
+ - name: Update README
+ run: python scripts/update_supporters.py
+
+ - name: Commit and push changes
+ uses: stefanzweifel/git-auto-commit-action@v5
+ with:
+ commit_message: "docs: auto-update supporters list in README"
+ file_pattern: "README.md"
diff --git a/README.md b/README.md
index 891c9179..5d8b6c8b 100644
--- a/README.md
+++ b/README.md
@@ -32,6 +32,28 @@ Enhance your Civitai browsing experience with our companion browser extension! S
---
+## 🤝 Supporter Recognition
+
+I'm incredibly grateful to everyone who has supported the development of this project. Seeing so many people value my work is the best motivation I could ask for. Your trust and support have played a vital role in shaping this tool into what it is today, and I want to personally recognize those who have helped make it possible.
+
+
+
+### 🌟 Special Thanks
+
+**dispenser**, **EbonEagle**, **DanielMagPizza**, **Scott R**
+
+### 💖 Supporters (620)
+
+
+Click to view all awesome supporters
+
+
+Insomnia Art Designs, megakirbs, Brennok, wackop, 2018cfh, Takkan, stone9k, $MetaSamsara, itismyelement, onesecondinosaur, Carl G., Rosenthal, Francisco Tatis, Tobi_Swagg, Andrew Wilson, Greybush, Gooohokrbe, Ricky Carter, JongWon Han, OldBones, VantAI, runte3221, FreelancerZ, Julian V, Edgar Tejeda, Birdy, Liam MacDougal, Fraser Cross, Polymorphic Indeterminate, Marc Whiffen, Kiba, Jorge Hussni, Reno Lam, Skalabananen, esthe, sig, Christian Byrne, DM, Sen314, Estragon, J\B/ 8r0wns0n, Snaggwort, Arlecchino Shion, ClockDaemon, KD, Omnidex, Tyler Trebuchon, Release Cabrakan, confiscated Zyra, SG, carozzz, James Dooley, zenbound, Buzzard, jmack, Adam Shaw, Tee Gee, Mark Corneglio, SarcasticHashtag, Anthony Rizzo, tarek helmi, Cosmosis, iamresist, RedrockVP, Wolffen, FloPro4Sho, James Todd, Steven Pfeiffer, Tim, Timmy, Johnny, Lisster, Michael Wong, Illrigger, whudunit, Tom Corrigan, JackieWang, fnkylove, Steven Owens, Yushio, Vik71it, lh qwe, Echo, Lilleman, Robert Stacey, PM, Todd Keck, Briton Heilbrun, Mozzel, Gingko Biloba, Felipe dos Santos, Penfore, BadassArabianMofo, Sterilized, Pascal Dahle, Markus, quarz, Greg, Douglas Gaspar, JSST, AlexDuKaNa, George, lmsupporter, Phil, Charles Blakemore, IamAyam, wfpearl, Rob Williams, Baekdoosixt, Jonathan Ross, Jack B Nimble, Nazono_hito, Melville Parrish, daniel dove, Lustre, JW Sin, contrite831, Alex, bh, Marlon Daniels, Starkselle, Aaron Bleuer, LacesOut!, Graham Colehour, M Postkasse, Tomohiro Baba, David Ortega, ASLPro3D, Jacob Hoehler, FinalyFree, Weasyl, Lex Song, Cory Paza, Tak, Gonzalo Andre Allendes Lopez, Zach Gonser, Big Red, Jimmy Ledbetter, Luc Job, dl0901dm, Philip Hempel, corde, Nick Walker, Bishoujoker, conner, aai, Yaboi, Tori, wildnut, Princess Bright Eyes, Damon Cunliffe, CryptoTraderJK, Davaitamin, AbstractAss, ViperC, Aleksander Wujczyk, AM Kuro, jean jahren, Ran C, tedcor, S Sang, MagnaInsomnia, Akira_HentAI, Karl P., Gordon Cole, yuxz69, MadSpin, andrew.tappan, dw, N/A, The Spawn, graysock, Greenmoustache, zounic, Gamalonia, fancypants, Vir, Joboshy, Digital, JaxMax, takyamtom, Bohemian Corporal, 奚明 刘, Dan, Seth Christensen, Jwk0205, Bro Xie, Draven T, yer fey, batblue, carey6409, Olive, 太郎 ゲーム, Some Guy Named Barry, jinxedx, Aquatic Coffee, Max Marklund, AELOX, Dankin, Nicfit23, Noora, ethanfel, wamekukyouzin, drum matthieu, Dogmaster, Matt Wenzel, Mattssn, Frank Nitty, John Saveas, Focuschannel, Christopher Michel, Serge Bekenkamp, LeoZero, Antonio Pontes, ApathyJones, nahinahi9, Anthony Faxlandez, Dustin Chen, dan, Blackfish95, Mouthlessman, Steam Steam, Paul Kroll, otaku fra, semicolon drainpipe, Thesharingbrother, Fotek Design, Bas Imagineer, Pat Hen, ResidentDeviant, Adam Taylor, JC, Weird_With_A_Beard, Prompt Pirate, Pozadine1, uwutismxd, Qarob, AIGooner, inbijiburu, decoy, Luc, ProtonPrince, DiffDuck, elu3199, Nick “Loadstone” D, Hasturkun, Jon Sandman, Ubivis, CloudValley, thesoftwaredruid, wundershark, mr_dinosaur, Tyrswood, linnfrey, zenobeus, Jackthemind, Stryker, Pkrsky, raf8osz, blikkies, Josef Lanzl, Griffin Dahlberg, 준희 김, Error_Rule34_Not_found, Gerald Welly, Shock Shockor, Roslynd, Geolog, Goldwaters, Neco28, Zude, Cristian Vazquez, Kyler, Magic Noob, aRtFuL_DodGeR, X, DougPeterson, Jeff, Bruce, CrimsonDX, Kevin John Duck, Kevin Christopher, Ouro Boros, DarkSunset, dd, Billy Gladky, Probis, shrshpp, Dušan Ryban, ItsGeneralButtNaked, sjon kreutz, Nimess, John Statham, Youguang, Nihongasuki, Metryman55, andrewzpong, FrxzenSnxw, BossGame, Ray Wing, Ranzitho, Gus, 地獄の禄, MJG, David LaVallee, ae, Tr4shP4nda, WRL_SPR, capn, Joseph, lrdchs, Mirko Katzula, dan, Piccio08, kumakichi, cppbel, starbugx, Moon Knight, 몽타주, Kland, Hailshem, ryoma, John Martin, Chris, Brian M, Nerezza, sanborondon, moranqianlong, Taylor Funk, aezin, Thought2Form, jcay015, Kevin Picco, Erik Lopez, Mateo Curić, Haru Yotu, Eris3D, m, Pierce McBride, Joshua Gray, Mikko Hemilä, Matura Arbeit, Jamie Ogletree, TBitz33, Emil Bernhoff, a _, SendingRavens, James Coleman, Martial, battu, Emil Andersson, Chad Idk, Michael Docherty, Yuji Kaneko, elitassj, Jacob Winter, Jordan Shaw, Sam, Rops Alot, SRDB, g unit, Ace Ventura, David, Meilo, Pen Bouryoung, shinonomeiro, Snille, MaartenAlbers, khanh duy, xybrightsummer, jreedatchison, PhilW, momokai, Janik, kudari, Naomi Hale Danchi, dc7431, ken, Inversity, Crocket, AIVORY3D, epicgamer0020690, Joshua Porrata, Cruel, keemun, SuBu, RedPIXel, MRBlack, Kevinj, Wind, Nexus, Mitchell Robson, Ramneek“Guy”Ashok, squid_actually, Nat_20, Kiyoe, Edward Weeks, kyoumei, RadStorm04, JohnDoe42054, BillyHill, humptynutz, emyth, michael.isaza, Kalnei, chriphost, KitKatM, socrasteeze, ResidentDeviant, Scott, gzmzmvp, Welkor, hayden, Richard, ahoystan, Leland Saunders, Andrew, Bob Barker, Robert Wegemund, Littlehuggy, Gregory Kozhemiak, mrjuan, Aeternyx, Brian Buie, YOU SINWOO, Sadlip, ja s, Eric Whitney, Doug Mason, Joey Callahan, Ivan Tadic, y2Rxy7FdXzWo, Jeremy Townsend, Mike Simone, Sean voets, Owen Gwosdz, Morgandel, Thomas Wanner, Kyron Mahan, Theerat Jiramate, Noah, Jacob McDaniel, kevin stoddard, Sloan Steddy, Jack Dole, Ezokewn, Temikus, Artokun, Michael Taylor, Derek Baker, Michael Anthony Scott, Atilla Berke Pekduyar, Maso, Nathan, Decx _, Kevin Wallace, Matheus Couto, Paul Hartsuyker, ChicRic, mercur, J C, Distortik, Yves Poezevara, Teriak47, Just me, Raf Stahelin, Вячеслав Маринин, Cola Matthew, OniNoKen, Iain Wisely, Zertens, NOHOW, Apo, nekotxt, choowkee, Clusters, ibrahim, Highlandrise, philcoraz, mztn, ImagineerNL, MrAcrtosSursus, al300680, pixl, Robin, chahknoir, Marcus thronico, nd, keno94d, James Melzer, Bartleby, Renvertere, Rahuy, Hermann003, D, Foolish, RevyHiep, Captain_Swag, obkircher, Tree Tagger, gwyar, D, edgecase, Neoxena, mrmhalo, dg, Whitepinetrader, Maarten Harms, OrganicArtifact, 四糸凜音, MudkipMedkitz, Israel, deanbrian, POPPIN, Muratoraccio, SelfishMedic, Ginnie, Alex Wortman, Cody, adderleighn, Raku, smart.edge5178, emadsultan, InformedViewz, CHKeeho80, Bubbafett, leaf, Menard, Skyfire83, Adam Rinehart, D, Pitpe11, TheD1rtyD03, EnragedAntelope, moonpetal, SomeDude, g9p0o, nanana, TheHolySheep, Monte Won, SpringBootisTrash, carsten, ikok, Buecyb99, 4IXplr0r3r, Coeur+de+cochon, David Schenck, han b, Nico, Wolfe7D1, Banana Joe, _ G3n, Donovan Jenkins, Ink Temptation, edk, Michael Eid, beersandbacon, Maximilian Pyko, Invis, Kalli Core, Justin Houston, james, elleshar666, OrochiNights, Michael Zhu, ACTUALLY_the_Real_Willem_Dafoe, gonzalo, Seraphy, 雨の心 落, AllTimeNoobie, jumpd, John C, Kauffy, Rim, Dismem, EpicElric, John J Linehan, Xan Dionysus, Nathan lee, Mewtora, Elliot E, Middo, Forbidden Atelier, Edward Kennedy, Justin Blaylock, Adictedtohumping, Devil Lude, Nick Kage, Towelie, Vane Holzer, psytrax, Cyrus Fett, Jean-françois SEMA, Kurt, hexxish, giani kidd, CptNeo, notedfakes, Chase Kwon, Goober719, Eric Ketchum, Chad Barnes, NICHOLAS BAXLEY, Michael Scott, James Ming, vanditking, kripitonga, Rizzi, nimin, OMAR LUCIANO, Jo+Example, BrentBertram, eumelzocker, dxjaymz, L C, Dude
+
+
+
+
+
## Release Notes
### v1.0.0
diff --git a/scripts/update_supporters.py b/scripts/update_supporters.py
new file mode 100644
index 00000000..a45073e0
--- /dev/null
+++ b/scripts/update_supporters.py
@@ -0,0 +1,63 @@
+import json
+import os
+import re
+
+def update_readme():
+ # 1. Read JSON data
+ json_path = 'data/supporters.json'
+ if not os.path.exists(json_path):
+ print(f"Error: {json_path} not found.")
+ return
+
+ with open(json_path, 'r', encoding='utf-8') as f:
+ data = json.load(f)
+
+ # 2. Generate Markdown content
+ special_thanks = data.get('specialThanks', [])
+ all_supporters = data.get('allSupporters', [])
+ total_count = data.get('totalCount', len(all_supporters))
+
+ md_content = "\n### 🌟 Special Thanks\n\n"
+ if special_thanks:
+ md_content += ", ".join([f"**{name}**" for name in special_thanks]) + "\n\n"
+ else:
+ md_content += "*None yet*\n\n"
+
+ md_content += f"### 💖 Supporters ({total_count})\n\n"
+ if all_supporters:
+ # Using a details block for the long list of supporters
+ md_content += "\nClick to view all awesome supporters
\n
\n\n"
+ md_content += ", ".join(all_supporters)
+ md_content += "\n\n \n"
+ else:
+ md_content += "*No supporters listed yet*\n"
+
+ # 3. Read existing README.md
+ readme_path = 'README.md'
+ with open(readme_path, 'r', encoding='utf-8') as f:
+ readme = f.read()
+
+ # 4. Replace content between placeholders
+ start_tag = ''
+ end_tag = ''
+
+ if start_tag not in readme or end_tag not in readme:
+ print(f"Error: Placeholders {start_tag} and {end_tag} not found in {readme_path}")
+ return
+
+ # Using non-regex replacement to avoid issues with special characters in names
+ parts = readme.split(start_tag)
+ before_start = parts[0]
+ after_start = parts[1].split(end_tag)
+ after_end = after_start[1]
+
+ new_readme = f"{before_start}{start_tag}\n{md_content}\n{end_tag}{after_end}"
+
+ # 5. Write back to README.md
+ with open(readme_path, 'w', encoding='utf-8') as f:
+ f.write(new_readme)
+
+ print(f"Successfully updated {readme_path} with {len(all_supporters)} supporters!")
+
+if __name__ == '__main__':
+ update_readme()