| ---
|
| library_name: silva
|
| pipeline_tag: image-classification
|
| license: mit
|
| base_model: google/siglip2-so400m-patch14-384
|
| base_model_relation: adapter
|
| tags:
|
| - aesthetic
|
| - siglip2
|
| - ordinal-regression
|
| metrics:
|
| - spearmanr
|
| - pearsonr
|
| - mae
|
| model-index:
|
| - name: silva-luna
|
| results:
|
| - task:
|
| type: image-classification
|
| name: Distilled Aesthetic Scoring
|
| dataset:
|
| type: Jannchie/silva-luna-25k
|
| name: silva-luna-25k
|
| metrics:
|
| - type: spearmanr
|
| value: 0.8105
|
| - type: pearsonr
|
| value: 0.7986
|
| - type: mae
|
| value: 0.4331
|
| ---
|
|
|
| <p align="center">
|
| <img src="https://raw.githubusercontent.com/Jannchie/silva/main/assets/silva-header.png" alt="SILVA" width="100%">
|
| </p>
|
|
|
| # SILVA β Distilled VLM Judge
|
|
|
| **[βΆ Try it in your browser](https://huggingface.co/spaces/Jannchie/silva-aesthetic-demo)** β upload an illustration, see this judge's score live.
|
|
|
| Scores an illustration by the taste of a **VLM judge**, distilled β not a universal quality
|
| model, so it won't match anyone else's preferences. Output is a single number in
|
| `[0, 1]`; higher means more to this judge's liking.
|
|
|
| **Only the head ships here (~7 MB), not an image model.** It runs on top of the frozen
|
| `google/siglip2-so400m-patch14-384` backbone, which `silva[backbone]` installs and loads for you.
|
|
|
| ## Quickstart
|
|
|
| ```python
|
| # pip install "silva-scorer[backbone] @ git+https://github.com/Jannchie/silva"
|
| from silva import SilvaScorer
|
|
|
| scorer = SilvaScorer.from_pretrained("Jannchie/silva-luna")
|
| print(scorer.score("your_image.jpg")) # 0.73
|
| print(scorer.score(["a.jpg", "b.jpg"])) # [0.73, 0.41]
|
| ```
|
|
|
| Already have `google/siglip2-so400m-patch14-384` embeddings? Skip the backbone and score them directly:
|
|
|
| ```python
|
| # pip install "silva-scorer @ git+https://github.com/Jannchie/silva"
|
| from silva import EmbeddingAestheticModel
|
|
|
| head = EmbeddingAestheticModel.from_pretrained("Jannchie/silva-luna").eval()
|
| score = head(embedding)["calibrated_score"] # calibrated to the label distribution; ["score"] for raw. embedding: [B, 1152] pooler_output
|
| ```
|
|
|
| ## Scores (held-out test split)
|
|
|
| | Spearman | Pearson | MAE (1β5) | Top-5% |
|
| |---|---|---|---|
|
| | 0.8105 | 0.7986 | 0.4331 | 0.4672 |
|
|
|
| Architecture: `embedding[1152] β LayerNorm β MLP [1024, 512, 256] β ordinal head`. Trained on
|
| rankings from `openai:gpt-5.6-luna`, which ordered eight illustrations at a time; the orderings were pooled with Plackett-Luce into one latent per picture (degree 14, split-half reliability 0.827). The labels ARE published -- see the dataset link above. [Source](https://github.com/Jannchie/silva)
|
|
|
| ## Citation
|
|
|
| ```bibtex
|
| @software{pan2026silva,
|
| author = {Pan, Jianqi},
|
| title = {{SILVA}: {SigLIP}-based Illustration Visual Aesthetic Scorer},
|
| year = {2026},
|
| url = {https://github.com/Jannchie/silva},
|
| }
|
| ```
|
|
|