A booru imageboard implemention using the Gemini and Titan protocols
Find a file
2025-06-20 15:32:02 -05:00
etc Separate gemini/titan routing again since it means I don't have to check if its titan every time; also fixed some request parsing bugs 2025-06-20 15:32:02 -05:00
mod Separate gemini/titan routing again since it means I don't have to check if its titan every time; also fixed some request parsing bugs 2025-06-20 15:32:02 -05:00
.gitignore Save the file and redirect to an unimplemented endpoint lmao 2025-05-19 03:43:15 -05:00
gembooru.scm Separate gemini/titan routing again since it means I don't have to check if its titan every time; also fixed some request parsing bugs 2025-06-20 15:32:02 -05:00
LICENSE Bare minimum gemini server setup 2025-05-13 09:08:12 -05:00
README.md Pointless changes I made while thinking of what to do next and how 2025-06-19 23:37:15 -05:00

GemBooru

GemBooru is a booru implementation for the gemini+titan protocols. A booru is a type of imageboard where media is tagged based on its contents, allowing users to find media with specific content through the use of tag-based queries.

(Planned) Features

  • [x] Upload images via /upload endpoint
  • [ ] Create/delete tags; modify tag descriptions/aliases
  • [x] Add tags and metadata to images
  • [x] Query images based on tags and metadata
  • [ ] Comments and voting
  • [x] Configuration file and command-line argument parsing
  • [x] Template system to customise page layouts in Scheme
  • [x] Restrict uploads via token authorisation
  • [ ] Certificate-based authentication
  • [ ] Manual post approval with automatic denial after N days waiting
  • [ ] Metrics page
  • [ ] Non-TLS geminis://+titans:// variants over port 1966
  • [ ] JSON/XML API

(Planned) Endpoints

  • [x] /
  • [x] /upload
  • [x] /post/${ID}
  • [ ] /post/vote/${ID}
  • [ ] /post/note/${ID}?${COMMENT}
  • [x] /post/edit/${ID}?${QUERY}
  • [x] /post/view/${ID}.${EXT}
  • [ ] /tag/${ID}
  • [ ] /tag/vote/${ID}
  • [ ] /tag/note/${ID}?${COMMENT}
  • [ ] /tag/edit/${ID}?${QUERY}
  • [x] /search?${QUERY}
  • [ ] /register

Running

Gembooru depends on the following external code/libraries:

  • GNU Guile
  • GnuTLS with guile-gnutls
  • libmagic (provided by file)
  • (chibi crypto md5) (embedded, see mod/chibi/)

You'll want to generate a self-signed certificate (preferred), or use a CA certificate, before running. The following command assumes you generated a self-signed certificate for localhost in the current directory:

guile -L mod gembooru.scm       \
  --server-name "localhost"     \
  --certificate "localhost.crt" \
  --private-key "localhost.key"
  # other options...

Licensing

All original code in this repository has been relinquished to the public domain. The preferred license is the STRONGEST license (see: LICENSE), but CC0, WTFPL, Unlicense, 0BSD, or equivalent public domain licenses may be used instead.

The files in mod/chibi/ are not original code. See the file headers for their respective licensing. Any modifications of these files has been explicitly marked as such, and follow the same licensing as the rest of our original code.