File size: 1,516 Bytes
b991a77
 
871ff87
 
b991a77
 
871ff87
b991a77
 
 
871ff87
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
---
title: Aesthetic Annotators
emoji: 🎨
colorFrom: purple
colorTo: pink
sdk: docker
app_port: 7860
pinned: false
---

# Aesthetic Annotators

Public-URL labeling server for the AestheticMCQ dataset. Any visitor is
auto-issued an anonymous annotator id on first hit; each session labels up
to `AAMCQ_PER_ANNOTATOR_CAP` items (default 20) pulled breadth-first from
the pool so every item receives one label before any receives a second.

## Configuration

Space secrets:

| name | required | default | notes |
|---|---|---|---|
| `HF_TOKEN` | yes | — | write scope on the companion dataset repo |
| `AAMCQ_DATASET_REPO` | no | `lanczos/aesthetic-annotators` | source of images + mcq + label backups |
| `AAMCQ_PER_ANNOTATOR_CAP` | no | `20` | items per session before "all done" |
| `AAMCQ_LABELS_PER_ITEM` | no | `3` | target labels per item |
| `AAMCQ_BACKUP_INTERVAL` | no | `60` | SQLite → dataset repo push interval (seconds) |

## Data flow

1. On boot, the Space pulls `images/*.png`, `mcq_unlabeled.jsonl`, and any
   prior `labels/annotations.sqlite` from the dataset repo.
2. Annotators land on the root URL → JS calls `POST /api/register` → server
   mints a fresh `anon_*` id + token, cached in localStorage.
3. `/api/task` hands out the least-labeled item the annotator hasn't seen.
4. Every `AAMCQ_BACKUP_INTERVAL` seconds the server pushes the SQLite back
   to `labels/annotations.sqlite` in the dataset repo, so Space
   restarts/sleeps lose at most one backup interval's worth of labels.