Paper: Moonworks Lunara: Modeling Artistic Intelligence by Wang et al. (2026).
An image-generation evaluation dataset containing 8,000 generated images, their source prompts, model labels, and three per-image evaluation scores. It supports comparison of artistic quality, emotional expression, and content integrity across eight text-to-image models including GPT-Image-1-mini, HiDream-I1, Qwen-Image and Flux-Klein.
Dataset · Dataset Viewer · Paper · PDF
This follows the first two releases containing aesthetic images and aesthetic image variations:
Aesthetic dataset 1: https://huggingface.co/datasets/moonworks/lunara-aesthetic
Aesthetic dataset 2: https://huggingface.co/datasets/moonworks/lunara-aesthetic-image-variations
Lunara is built on a novel Diffusion Mixture Architecture and a new active-learning-inspired training paradigm that jointly optimize for creative exploration and content integrity. A selection of images generated by Moonworks Lunara is below.
FLUX.2 [klein] 4B |
Moonworks Lunara |
Z-Image-Turbo |
HiDream-I1 Fast |
Moonworks Lunara |
Qwen-Image |
AuraFlow |
Moonworks Lunara |
GPT Image 1 Mini |
| Property | Description |
|---|---|
| Examples | 8,000 images with prompts and scores |
| Evaluation prompts | 1,000 shared prompts |
| Models | 8; the paper reports 1,000 images per model |
| Prompt design | 500 prompts covering 14 artistic styles, plus 500 open-ended art prompts |
| Automated judge | GPT-5.6 Sol |
| Reported image resolution | 1024 × 1024 |
| Storage | 19 Parquet shards with embedded image bytes |
| Public columns | image, prompt, model, aesthetic, emotional_evocation, content_integrity |
Human evaluation, and evaluation protocol are described in Section 5.1 of the paper.
Each row represents one generated image and its evaluation scores.
| Field | Type | Meaning |
|---|---|---|
image | Hugging Face Image | Generated image, stored as embedded binary content in Parquet. Decodes to a Pillow image when loaded with datasets. |
prompt | String | Source text prompt used to generate the image. |
model | String | Display name of the model that generated the image. |
aesthetic | Floating-point score | Aesthetic Quality: visual composition, color, lighting, texture, and artistic expression. |
emotional_evocation | Floating-point score | Emotional Resonance: the affective impression and expressive impact of the image. |
content_integrity | Floating-point score | Content Integrity: the completeness and structural coherence of requested subjects, including anatomy and unintended artifacts. |
| Model | Aesthetic Quality ↑ | Aesthetic win rate | Emotional Resonance ↑ | Emotional win rate | Content Integrity ↑ | Content win rate | CLIPScore ↑ | LAION Aesthetic ↑ |
|---|---|---|---|---|---|---|---|---|
| Moonworks Lunara | 8.473 | 23.3% | 8.119 | 17.5% | 7.944 | 4.7% | 0.792 | 6.721 |
| GPT 1 Image Mini | 8.457 | 18.9% | 8.363 | 31.7% | 8.609 | 28.8% | 0.777 | 6.661 |
| Qwen Image | 8.366 | 15.9% | 7.979 | 10.7% | 8.345 | 29.6% | 0.789 | 6.561 |
| AuraFlow | 8.313 | 18.9% | 8.011 | 15.9% | 6.662 | 1.1% | 0.781 | 6.745 |
| SD 3.5 Turbo | 8.081 | 11.4% | 7.949 | 17.4% | 7.238 | 3.2% | 0.743 | 6.625 |
| HiDream-I1 Fast | 8.035 | 5.1% | 7.568 | 3.5% | 7.794 | 9.2% | 0.764 | 6.710 |
| FLUX-Klein-4B | 8.023 | 5.4% | 7.579 | 3.2% | 7.438 | 9.0% | 0.773 | 6.706 |
| Z-Image-Turbo | 7.230 | 1.2% | 6.721 | 0.7% | 7.875 | 17.8% | 0.719 | 6.033 |
Source: Wang et al., Moonworks Lunara: Modeling Artistic Intelligence, Table 1.
python -m pip install -U "datasets[vision]"
from datasets import load_dataset
ds = load_dataset(
"moonworks/lunara-art-eval",
"default",
split="train",
)
print(ds)
print(ds.column_names)
example = ds[0]
print("Model:", example["model"])
print("Prompt:", example["prompt"])
print("Aesthetic Quality:", example["aesthetic"])
print("Emotional Resonance:", example["emotional_evocation"])
print("Content Integrity:", example["content_integrity"])
# The image is decoded from bytes embedded in the Parquet shard.
example["image"].save("lunara_art_eval_example.png")
The first load downloads the Parquet files and caches them locally. Subsequent loads reuse the cache. To restrict a first inspection to the first shard, use:
from datasets import load_dataset
preview = load_dataset(
"moonworks/lunara-art-eval",
"default",
data_files={"train": "data/train-00000-of-00019.parquet"},
split="train",
)
print("Rows in first shard:", len(preview)) # 422 in this release
import math
import random
import textwrap
import matplotlib.pyplot as plt
# Build the comparison index without decoding images.
metadata = preview.select_columns(["prompt", "model"]).to_pandas()
metadata["row_id"] = range(len(preview))
models = sorted(
metadata["model"].unique(),
key=lambda name: (name != "Moonworks Lunara", name),
)
# Choose prompts that have an image from every model.
counts = metadata.groupby("prompt")["model"].nunique()
eligible = counts[counts == len(models)].index.tolist()
if not eligible:
raise ValueError("No shared prompts found across all models.")
N_PROMPTS = 2
prompts = random.Random().sample(
eligible, min(N_PROMPTS, len(eligible))
)
for prompt in prompts:
positions = (
metadata.loc[metadata["prompt"] == prompt]
.drop_duplicates("model")
.set_index("model")["row_id"]
)
columns = 4
rows = math.ceil(len(models) / columns)
fig, axes = plt.subplots(
rows, columns,
figsize=(16, 4.3 * rows),
squeeze=False,
constrained_layout=True,
)
for ax in axes.flat:
ax.axis("off")
for ax, model in zip(axes.flat, models):
example = preview[int(positions[model])]
ax.imshow(example["image"])
ax.set_title(
textwrap.fill(model, width=24),
fontsize=12,
fontweight="bold",
color="#7c3aed" if model == "Moonworks Lunara" else "#333333",
)
fig.suptitle(
textwrap.fill(f"Prompt: {prompt}", width=130),
fontsize=13,
)
plt.show()
This example uses the ds loaded above. Restricting the filter to model avoids decoding images while evaluating the condition.
lunara = ds.filter(
lambda model: model == "Moonworks Lunara",
input_columns=["model"],
)
print("Lunara examples:", len(lunara))
lunara[0]["image"].save("lunara_example.png")
The following analysis uses the metadata columns and skips image decoding. It computes means from the released per-image scores.
from collections import defaultdict
from statistics import mean
metrics = ("aesthetic", "emotional_evocation", "content_integrity")
grouped = defaultdict(lambda: {metric: [] for metric in metrics})
for row in ds.remove_columns("image"):
for metric in metrics:
grouped[row["model"]][metric].append(row[metric])
summary = [
{
"model": model,
"n": len(values["aesthetic"]),
**{metric: mean(values[metric]) for metric in metrics},
}
for model, values in grouped.items()
]
summary.sort(key=lambda row: row["aesthetic"], reverse=True)
for row in summary:
print(
f"{row['model']}: n={row['n']}, "
f"aesthetic={row['aesthetic']:.3f}, "
f"emotional_resonance={row['emotional_evocation']:.3f}, "
f"content_integrity={row['content_integrity']:.3f}"
)
Table 1 above records the published results. Recomputed means depend on the precision of the released scores. Reproducing CLIP, LAION, or win-rate results are not produced by this mean-score example.
Prompt text links generations across models in this six-column release.
prompt_text = ds[0]["prompt"]
same_prompt = ds.filter(
lambda prompt: prompt == prompt_text,
input_columns=["prompt"],
)
for row in same_prompt.remove_columns("image"):
print(
row["model"],
row["aesthetic"],
row["emotional_evocation"],
row["content_integrity"],
)
Apache 2.0 The images generated by the different models carry their respective restrictions and licenses.
If you use this dataset or its published benchmark results, cite the paper:
@misc{wang2026moonworkslunaramodelingartistic,
title={Moonworks Lunara: Modeling Artistic Intelligence},
author={Yan Wang and Yanzu Wang and Maitreyee Joshi and Samiha Sadeka and Partho Hassan and Reza Jarral and Sayeef Abdullah and Sabit Hassan},
year={2026},
eprint={2609.22272},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2609.22272},
}
Previous paper citations:
@misc{wang2026moonworkslunaraaestheticdataset,
title={Moonworks Lunara Aesthetic Dataset},
author={Yan Wang and Sayeef Abdullah and Partho Hassan and Sabit Hassan},
year={2026},
eprint={2601.07941},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2601.07941},
}
@misc{wang2026moonworkslunaraaestheticii,
title={Moonworks Lunara Aesthetic II: An Image Variation Dataset},
author={Yan Wang and Partho Hassan and Samiha Sadeka and Nada Soliman and Sayeef Abdullah and Sabit Hassan},
year={2026},
eprint={2602.01666},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2602.01666},
}
Paper: Moonworks Lunara: Modeling Artistic Intelligence by Wang et al. (2026).
An image-generation evaluation dataset containing 8,000 generated images, their source prompts, model labels, and three per-image evaluation scores. It supports comparison of artistic quality, emotional expression, and content integrity across eight text-to-image models including GPT-Image-1-mini, HiDream-I1, Qwen-Image and Flux-Klein.
Dataset · Dataset Viewer · Paper · PDF
This follows the first two releases containing aesthetic images and aesthetic image variations:
Aesthetic dataset 1: https://huggingface.co/datasets/moonworks/lunara-aesthetic
Aesthetic dataset 2: https://huggingface.co/datasets/moonworks/lunara-aesthetic-image-variations
Lunara is built on a novel Diffusion Mixture Architecture and a new active-learning-inspired training paradigm that jointly optimize for creative exploration and content integrity. A selection of images generated by Moonworks Lunara is below.
FLUX.2 [klein] 4B |
Moonworks Lunara |
Z-Image-Turbo |
HiDream-I1 Fast |
Moonworks Lunara |
Qwen-Image |
AuraFlow |
Moonworks Lunara |
GPT Image 1 Mini |
| Property | Description |
|---|---|
| Examples | 8,000 images with prompts and scores |
| Evaluation prompts | 1,000 shared prompts |
| Models | 8; the paper reports 1,000 images per model |
| Prompt design | 500 prompts covering 14 artistic styles, plus 500 open-ended art prompts |
| Automated judge | GPT-5.6 Sol |
| Reported image resolution | 1024 × 1024 |
| Storage | 19 Parquet shards with embedded image bytes |
| Public columns | image, prompt, model, aesthetic, emotional_evocation, content_integrity |
Human evaluation, and evaluation protocol are described in Section 5.1 of the paper.
Each row represents one generated image and its evaluation scores.
| Field | Type | Meaning |
|---|---|---|
image | Hugging Face Image | Generated image, stored as embedded binary content in Parquet. Decodes to a Pillow image when loaded with datasets. |
prompt | String | Source text prompt used to generate the image. |
model | String | Display name of the model that generated the image. |
aesthetic | Floating-point score | Aesthetic Quality: visual composition, color, lighting, texture, and artistic expression. |
emotional_evocation | Floating-point score | Emotional Resonance: the affective impression and expressive impact of the image. |
content_integrity | Floating-point score | Content Integrity: the completeness and structural coherence of requested subjects, including anatomy and unintended artifacts. |
| Model | Aesthetic Quality ↑ | Aesthetic win rate | Emotional Resonance ↑ | Emotional win rate | Content Integrity ↑ | Content win rate | CLIPScore ↑ | LAION Aesthetic ↑ |
|---|---|---|---|---|---|---|---|---|
| Moonworks Lunara | 8.473 | 23.3% | 8.119 | 17.5% | 7.944 | 4.7% | 0.792 | 6.721 |
| GPT 1 Image Mini | 8.457 | 18.9% | 8.363 | 31.7% | 8.609 | 28.8% | 0.777 | 6.661 |
| Qwen Image | 8.366 | 15.9% | 7.979 | 10.7% | 8.345 | 29.6% | 0.789 | 6.561 |
| AuraFlow | 8.313 | 18.9% | 8.011 | 15.9% | 6.662 | 1.1% | 0.781 | 6.745 |
| SD 3.5 Turbo | 8.081 | 11.4% | 7.949 | 17.4% | 7.238 | 3.2% | 0.743 | 6.625 |
| HiDream-I1 Fast | 8.035 | 5.1% | 7.568 | 3.5% | 7.794 | 9.2% | 0.764 | 6.710 |
| FLUX-Klein-4B | 8.023 | 5.4% | 7.579 | 3.2% | 7.438 | 9.0% | 0.773 | 6.706 |
| Z-Image-Turbo | 7.230 | 1.2% | 6.721 | 0.7% | 7.875 | 17.8% | 0.719 | 6.033 |
Source: Wang et al., Moonworks Lunara: Modeling Artistic Intelligence, Table 1.
python -m pip install -U "datasets[vision]"
from datasets import load_dataset
ds = load_dataset(
"moonworks/lunara-art-eval",
"default",
split="train",
)
print(ds)
print(ds.column_names)
example = ds[0]
print("Model:", example["model"])
print("Prompt:", example["prompt"])
print("Aesthetic Quality:", example["aesthetic"])
print("Emotional Resonance:", example["emotional_evocation"])
print("Content Integrity:", example["content_integrity"])
# The image is decoded from bytes embedded in the Parquet shard.
example["image"].save("lunara_art_eval_example.png")
The first load downloads the Parquet files and caches them locally. Subsequent loads reuse the cache. To restrict a first inspection to the first shard, use:
from datasets import load_dataset
preview = load_dataset(
"moonworks/lunara-art-eval",
"default",
data_files={"train": "data/train-00000-of-00019.parquet"},
split="train",
)
print("Rows in first shard:", len(preview)) # 422 in this release
import math
import random
import textwrap
import matplotlib.pyplot as plt
# Build the comparison index without decoding images.
metadata = preview.select_columns(["prompt", "model"]).to_pandas()
metadata["row_id"] = range(len(preview))
models = sorted(
metadata["model"].unique(),
key=lambda name: (name != "Moonworks Lunara", name),
)
# Choose prompts that have an image from every model.
counts = metadata.groupby("prompt")["model"].nunique()
eligible = counts[counts == len(models)].index.tolist()
if not eligible:
raise ValueError("No shared prompts found across all models.")
N_PROMPTS = 2
prompts = random.Random().sample(
eligible, min(N_PROMPTS, len(eligible))
)
for prompt in prompts:
positions = (
metadata.loc[metadata["prompt"] == prompt]
.drop_duplicates("model")
.set_index("model")["row_id"]
)
columns = 4
rows = math.ceil(len(models) / columns)
fig, axes = plt.subplots(
rows, columns,
figsize=(16, 4.3 * rows),
squeeze=False,
constrained_layout=True,
)
for ax in axes.flat:
ax.axis("off")
for ax, model in zip(axes.flat, models):
example = preview[int(positions[model])]
ax.imshow(example["image"])
ax.set_title(
textwrap.fill(model, width=24),
fontsize=12,
fontweight="bold",
color="#7c3aed" if model == "Moonworks Lunara" else "#333333",
)
fig.suptitle(
textwrap.fill(f"Prompt: {prompt}", width=130),
fontsize=13,
)
plt.show()
This example uses the ds loaded above. Restricting the filter to model avoids decoding images while evaluating the condition.
lunara = ds.filter(
lambda model: model == "Moonworks Lunara",
input_columns=["model"],
)
print("Lunara examples:", len(lunara))
lunara[0]["image"].save("lunara_example.png")
The following analysis uses the metadata columns and skips image decoding. It computes means from the released per-image scores.
from collections import defaultdict
from statistics import mean
metrics = ("aesthetic", "emotional_evocation", "content_integrity")
grouped = defaultdict(lambda: {metric: [] for metric in metrics})
for row in ds.remove_columns("image"):
for metric in metrics:
grouped[row["model"]][metric].append(row[metric])
summary = [
{
"model": model,
"n": len(values["aesthetic"]),
**{metric: mean(values[metric]) for metric in metrics},
}
for model, values in grouped.items()
]
summary.sort(key=lambda row: row["aesthetic"], reverse=True)
for row in summary:
print(
f"{row['model']}: n={row['n']}, "
f"aesthetic={row['aesthetic']:.3f}, "
f"emotional_resonance={row['emotional_evocation']:.3f}, "
f"content_integrity={row['content_integrity']:.3f}"
)
Table 1 above records the published results. Recomputed means depend on the precision of the released scores. Reproducing CLIP, LAION, or win-rate results are not produced by this mean-score example.
Prompt text links generations across models in this six-column release.
prompt_text = ds[0]["prompt"]
same_prompt = ds.filter(
lambda prompt: prompt == prompt_text,
input_columns=["prompt"],
)
for row in same_prompt.remove_columns("image"):
print(
row["model"],
row["aesthetic"],
row["emotional_evocation"],
row["content_integrity"],
)
Apache 2.0 The images generated by the different models carry their respective restrictions and licenses.
If you use this dataset or its published benchmark results, cite the paper:
@misc{wang2026moonworkslunaramodelingartistic,
title={Moonworks Lunara: Modeling Artistic Intelligence},
author={Yan Wang and Yanzu Wang and Maitreyee Joshi and Samiha Sadeka and Partho Hassan and Reza Jarral and Sayeef Abdullah and Sabit Hassan},
year={2026},
eprint={2609.22272},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2609.22272},
}
Previous paper citations:
@misc{wang2026moonworkslunaraaestheticdataset,
title={Moonworks Lunara Aesthetic Dataset},
author={Yan Wang and Sayeef Abdullah and Partho Hassan and Sabit Hassan},
year={2026},
eprint={2601.07941},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2601.07941},
}
@misc{wang2026moonworkslunaraaestheticii,
title={Moonworks Lunara Aesthetic II: An Image Variation Dataset},
author={Yan Wang and Partho Hassan and Samiha Sadeka and Nada Soliman and Sayeef Abdullah and Sabit Hassan},
year={2026},
eprint={2602.01666},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2602.01666},
}