The main goal of this repository is to be a set of scripts to create an archive for the art generated by the basepaint.xyz community, including metadata, stats and descriptions. This is the main development repository which only contains the code and instructions on how to run it. The actual archive and PDFs are available at the companion repository basepaint-media
The archive is available in PDF form there:
- Artworks from 001 to 100 in PDF
- Artworks from 101 to 200 in PDF
- Artworks from 201 to 300 in PDF
- Artworks from 301 to 400 in PDF
- Artworks from 401 to 500 in PDF
- Artworks from 501 to 600 in PDF
- Artworks from 601 to 700 in PDF
- Artworks from 701 to 800 in PDF
An extended PDF version is available, with twice as many pages as the Standard Edition. Every other page includes 12 thumbnails from the 24 hour creation process of each basepaint artwork. A sample follows:
- Artworks with WIP from 001 to 100 in PDF
- Artworks with WIP from 101 to 200 in PDF
- Artworks with WIP from 201 to 300 in PDF
- Artworks with WIP from 301 to 400 in PDF
- Artworks with WIP from 401 to 500 in PDF
- "Artworks with WIP from 501" PDF and beyond are unavailable. It would exceed GitHub's git lfs quota for free repositories. If you are interested, you'll need to clone this repo (or preferably basepaint-media) and generate them on your own.
This edition uses one page per artwork, and one line per element with the following format (X,Y) **Element**: Description. X and Y represent the coordinates of the element within the image, with (0,0) being the top left corner and (100,100) the bottom right. X is the horizontal coordinate and Y the vertical one.
The remaining blank space (in case there are not enough elements to fill the whole page) showcases a scaled down version of the original work with graded X and Y axis grids to help the reader locate the elements.
The description, location and meaning of each ((ir)relevant) artwork element are provided by Google's latest Gemini Generative AI/LLM freely available through API calls. It's a handy reference for those memes one may not be familiar with at first glance. Nevertheless, it's far from perfect.
Here is the depiction of the previous finished artwork as an example, where I highlighted with magenta numbers the elements that were initially not successfully identified by the AI, yet are notable. Here's the latest version:
- 1
⚠️ Gastly: Pokémon #0092. (AI is right 2/6 of the times) - 2 ✅ Casper: cartoon ghost turned CGI in a 1995 movie. (AI is right 6/6)
- 3 ❌ Meme from The Sixth Sense: (1999 movie), depicting the protagonist scared covered with a blanket. (AI thinks it's a random scared person 0/6)
- 4 ✅ Skeletor: supervillain from the 1980s franchise Masters of the Universe. (AI is right 6/6)
- 5 ❌ Guy Fawkes mask: (aka Anonymous mask), a symbol of protest and rebellion. (AI is right 0/6)
- 6
⚠️ Tombstone 272: depicting the number of the artwork. (AI is right 3/6) - 7
⚠️ Anarchy symbol: from approximately the 1970s. (AI is right 1/6)
- (16,22) Rick Sanchez Skull: A giant skull featuring the iconic spiky hairstyle of Rick Sanchez from Rick and Morty.
- (49,15) Necromancer Wizard: A skeletal sorcerer wearing a wizard hat and shades, conjuring spirits and dark magic.
- (38,80) Skeletor: The main antagonist of Masters of the Universe, shown in a celebratory or cackling pose.
- (85,24) Grim Reaper: The personification of death depicted as a hooded skeleton wielding a traditional scythe.
- (50,48) Inverted Pentagram: A large, glowing occult symbol placed centrally, serving as a focal point for the necromancy.
- (80,83) Papyrus: The energetic skeleton character from Undertale, recognizable by his armor and red scarf.
- (10,93) Scared Human: A terrified living person at the bottom corner, reacting to the surrounding undead horde.
- (91,05) Haunter: A ghostly Pokémon with disembodied, claw-like hands and a wide, sinister grin.
- (73,08) Casper-style Ghost: A friendly, floating spirit with a rounded shape similar to Casper the Friendly Ghost.
- (72,33) Sans-style Skull: A skull with a single glowing eye, referencing the character Sans from the game Undertale.
- (50,34) Staff Skull: A magical skull mounted atop the central necromancer's staff, glowing with power.
- (14,55) Left Hooded Skeleton: A skeletal figure on the left side, shrouded in a dark, hooded cloak.
- (76,55) Right Hooded Skeleton: A skeletal face peering out from under a hood, located on the right side of the scene.
- (93,62) Haunted Tombstone: A stone grave marker that appears to have a face or a spooky inscription.
- (93,91) Dapper Skeleton: A skeleton wearing a top hat and holding a glass, appearing to enjoy the afterlife.
- (56,94) Pac-Man Ghost: A small, simple ghost character resembling the spirits from the Pac-Man arcade game.
There is only 1-line of text per element. This severe limitation, along with superfluous words (e.g. "small", "large", "prominent") limits the information provided. Therefore, feel free to contribute and improve them and/or the prompt/model to generate them #8
Also, the descriptions in this archive may be provided by AIs and/or not be necessarily reviewed. Therefore they may contain errors, be incomplete and ultimately the responsibility one may be held accountable for is rather limited.
The descriptive PDF versions are available in PDF form there:
001-600 use gemini-2.5-flash-preview-04-17
- Artwork descriptions from 001 to 100 in PDF
- Artwork descriptions from 101 to 200 in PDF
- Artwork descriptions from 201 to 300 in PDF
- Artwork descriptions from 301 to 400 in PDF
- Artwork descriptions from 401 to 500 in PDF
- Artwork descriptions from 501 to 600 in PDF
601-700 use gemini-2.5-pro (free tier from 2025-08-01)
701-800 use gemini-3-flash-preview (free tier from 2025-12-17)
There's a custom made cover that is suitable for both PDF editions. It contains useful statistics on most popular colours
-
Clone the repository:
git clone git@github.com:isaacbernat/basepaint.git -
Move into the newly created directory:
cd basepaint -
Get python and install dependencies:
python3 -m venv venv source venv/bin/activate python -m pip install -r requirements.txt
-
Create the archive:
python3 create_archive.pyThis will create the following files:images/: directory containing the images in jpg format for the archive.pdf/: directory with pdf bundles containing the archive in book format.metadata.csv: csv file containing metadata for each image.videos/: directory containing the videos in mp4 format. They condense the 24h process of creating the image.video_images/: directory containing images in jpg format extracted from videos. Needed for the mosaic of Work In Progress pages that accompany each image in the pdf version.description.csv: csv file containing the description of each element for all the images.reduced_images/: directory containing the reduced images in png format. Used to generate the descriptions.
-
To create the cover (
-c) and/or the extended PDFs with video previews (-v) and/or the descriptions (-d) (with indexes-di) use the appropriate parameters.- E.g.
python3 create_archive.py -c -v -d -di
- E.g.
This archive is a non-commercial, community-driven project intended for educational and historical purposes. It is not officially endorsed by the BasePaint team. Every effort has been made to respect the collaborative nature of BasePaint and the potential copyrights of individual creators.
I couldn't find a convenient way to access the artworks generated by the basepaint.xyz community, especially offline and/or in pdf/printable format. I created this collection of tools to make it easier to access, share and promote the art created by the community.
Also, I wanted to have a public repo in GitHub to demonstrate common practices for projects with unreliable external dependencies like AI/LLMs. It uses third-party libraries (e.g., tenacity for retries with backoff, pydantic for output format) and standard techniques (e.g., asyncio semaphores to limit concurrency). Previous versions got the job done and were simpler, and the improvements reported in the issues tab are not strictly necessary.
All rights related to the images and metadata belong to the basepaint.xyz community. Enquire them for more information. With regards to the code, the LICENSE file contains the license for this repository.
All rights related to the images and metadata belong to the basepaint.xyz community. Individual creators may retain copyright of their work. Attribution for each image in the archive is based on the available information from BasePaint. We are actively working to improve the attribution process and welcome any information that can help us accurately credit creators.
This archive is provided as-is. The maintainers of this repository are not responsible for any copyright infringements that may occur. If you are a creator and have any concerns about the inclusion of your work in this archive, please open a GitHub Issue in this repository and I will promptly address your request, including removal of your work from the archive if desired.
The fonts used in this PDF and uploaded to this repo have permissible licenses that allow such uses and distribution to the best of my knowledge (mostly form Google Fonts). The specific use of MEK font for the heading of each image was chosen to mimic the look and feel BasePaint's landing page and its license info is available at https://mek.gallery/fonts-(cc0)


