Art from outer space
Find a file
2026-01-04 01:39:16 +01:00
.forgejo-disabled/workflows no more ci 2025-12-27 17:14:30 +01:00
.helix base stuff 2025-12-17 00:47:46 +01:00
.sqlx woops 2026-01-03 13:57:18 +01:00
assets split off css file 2026-01-04 01:39:16 +01:00
migrations tag pages 2026-01-01 12:33:05 +01:00
nix check in 2025-12-16 19:49:03 +01:00
src split off css file 2026-01-04 01:39:16 +01:00
vendor/axum-oidc vendor auth library so we can cache user_info (god...) 2026-01-01 14:36:37 +01:00
.dockerignore hotfix for Dioxus 0.7.2 issue 2025-12-26 17:36:49 +01:00
.env.sample admin access, error styling 2025-12-31 16:20:31 +01:00
.gitignore upload almost works! 2025-12-23 23:27:30 +01:00
Cargo.lock vendor auth library so we can cache user_info (god...) 2026-01-01 14:36:37 +01:00
Cargo.toml vendor auth library so we can cache user_info (god...) 2026-01-01 14:36:37 +01:00
Dioxus.toml check in 2025-12-16 19:49:03 +01:00
Dockerfile back to kaniko I guess 2025-12-27 01:49:37 +01:00
flake.lock check in 2025-12-16 19:49:03 +01:00
flake.nix add first store stuff 2025-12-21 15:18:10 +01:00
LICENSE check in 2025-12-16 19:49:03 +01:00
README.md vendor auth library so we can cache user_info (god...) 2026-01-01 14:36:37 +01:00
rust-toolchain.toml check in 2025-12-16 19:49:03 +01:00

Art from outer space

Self-hosted booru for small communities. Doesn't scale and hopefully doesn't need to.

Simple and straightforward, and quite definitely too much so! All files are stored on disk (with a CAS-like tree structure because much like most beings, I fear the unknown), everything else is stored in a single SQLite file.

For my small deployments, this has proven to be incredible. Searches are so fast they feel client-side. Computers are pretty fast, you probably don't need kubernetes and fancy databases.

Authentication is currently done through OpenID Connect because that's what I have already set up for other stuff. This is currently the only option because I'm the only user, let me know if you'd like something less annoying than having to set up Authentik.

Features include:

  • Mass uploading, just drag all your files and see them go (not as cool as copyparty though).
  • Mass tagging, so you can clear your "huge_breasts" backlog all at once.
  • An annoying footer about its unfinished status (soon gone?)

Deploying

Just build the docker container and yeet it somewhere, I personally do something like this:

services:
  afos:
    image: git.fromouter.space/hamcha/afos
    restart: unless-stopped
    volumes:
      - data:/data
      - uploaded:/uploaded
    env_file:
      - .env
    ...

You will need to provide env values, look at .env.sample for what's required and what's optional, every env variable has a description attached!

Developing

Copy .env.sample to .env (it's gitignore'd), fill the missing env vars if you wanna test fancy things like OIDC authentication locally.

This command gets all the dependencies and starts a server with hot reload:

dx serve

A nix flake is provided for compiling and setting up the environment with the correct version of dioxus and all required dependencies. Just nix develop and you should be good to go!

Before committing, remember to run this command to generate a sqlx cache so CI can compile (if you added migrations/queries):

cargo sqlx prepare -- --features server

License

AGPL-3.0-only

This software uses a modified version axum-oidc crate, which is licensed under MPLv2, provided under vendor/axum-oidc. Find the original source here