# бирка-тян: электронная доска объявлений _В вашем деле нет пометки об этом!_ бирка-тян (birka-tyan) is a lightweight Danbooru-style imageboard engine for the purposes of self-hosting a tagged image gallery. It lacks many of the features one would expect of such an application (particularly use rauthentication), so if you have a use case other than being able to search through your pictures when you are not at home, you would be better off looking at an established solution such as [Danbooru](https://github.com/danbooru/danbooru). ## Features - A command-line tool for interacting with the tag database. ## Usage ### Command-Line There are two ways of interacting with бирка-тян: through the `birka-cli` command-line tool (i), and through the web interface (ii). The inclusion of (i) is in consideration for this being, essentially, a personal image gallery. One likely has a loosely-organized collection of images already; the command-line tool enables her to import images en masse with the full capabilities of the Unix shell at her fingertips. A brief summary of the command-line interface follows. In бирка-тян's tag database, every image is identified by a signed 64-bit integer. The command-line tool operates on these internal identifiers, so it is often helpful to obtain the identifier for an image in the filesystem. ```sh $ birka-cli id_for Cat.jpeg 2 ``` But, of course, the tag database must be populated with this "Cat.jpeg" before this command is to work. Images are introduced to the database with the `add` command, which takes zero or more tags. ```sh $ birka-cli add Cat.jpeg animal cat cute ``` Ah, drat. We should have tagged that image with "photograph", too. ```sh $ birka-cli add_tags $(birka-cli id_for Cat.jpeg) photograph ``` On second thought, that wasn't a particularly cute picture. ```sh $ birka-cli remove_tags $(birka-cli id_for Cat.jpeg) cute ``` Now, let's see all of the photographs in the tag database tagged with "photograph". ```sh $ birka-cli query photograph 1,Kww+tPLv/BsbU7M7qqW59ph54v6CSEiUPNpW4XbA0cpoyrrAZsAmT5Ptm30M+hATM71mimoo7PTaS8DEAq57cQ==,/home/jakob/Camera/Cat.jpeg ``` The `query` command outputs CSV; the first field is the internal identifier you would see from `id_for`, the second is a base64-encoded BLAKE2b hash for the image, and the third is the absolute path of the image. ### Web-Interface (API) The web interface for бирка-тян exposes a RESTful API for remotely interacting with the tag database. At the time of writing, this API is __not__ stabilized. Expect to rewrite any code depending on this API in the near future, in part because these will all be put behind a `/v1/` specifier. Suppose we denote the following shape of JSON object as a `ImageResult`. ``` { "id": number, "filename": string, "thumb_filename": string, "orig_filename": string, "tags": [string, ...], } ``` The images in the tag database can be enumerated with the 'posts' endpoint, which takes two parameters: `tags`, a comma-separated list of zero or more strings, and `last`, which is the last `ImageResult` identifier which was seen. This endpoint will return, at most, 50 entries, which is why the `last` parameter is necessary. ``` GET /api/posts?last=number,tags=[string, ...] [zero or more ImageResult] ``` Information about a specific image in the database can be obtained with the following endpoint, where `id` is the identifier (number) of the image in the database: ``` GET /api/posts/[id] ImageResult ``` To upload an image to the database, the blob of data may be POSTED to the following endpoint, where `filename` is the desired filename of the image (a string): ``` POST /api/posts/[filename] ```