moonworks/lunara-art-eval

Dataset

Moonworks Lunara Art Eval

44

43 commits

updated Oct 9, 2026

See the code

README

Moonworks Lunara Art Eval

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

Created with Lunara

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.

Lunara generated artwork 1 Lunara generated artwork 2 Lunara generated artwork 3
Lunara generated artwork 4 Lunara generated artwork 5 Lunara generated artwork 6
Lunara generated artwork 7 Lunara generated artwork 8 Lunara generated artwork 9

Visual model comparisons

Comparison 1: FLUX.2 [klein] 4B
FLUX.2 [klein] 4B
Comparison 1: Moonworks Lunara
Moonworks Lunara
Comparison 1: Z-Image-Turbo
Z-Image-Turbo
Comparison 8: HiDream-I1 Fast
HiDream-I1 Fast
Comparison 8: Moonworks Lunara
Moonworks Lunara
Comparison 8: Qwen-Image
Qwen-Image
Comparison 11: AuraFlow
AuraFlow
Comparison 11: Moonworks Lunara
Moonworks Lunara
Comparison 11: GPT Image 1 Mini
GPT Image 1 Mini

Dataset at a glance

PropertyDescription
Examples8,000 images with prompts and scores
Evaluation prompts1,000 shared prompts
Models8; the paper reports 1,000 images per model
Prompt design500 prompts covering 14 artistic styles, plus 500 open-ended art prompts
Automated judgeGPT-5.6 Sol
Reported image resolution1024 × 1024
Storage19 Parquet shards with embedded image bytes
Public columnsimage, prompt, model, aesthetic, emotional_evocation, content_integrity

Human evaluation, and evaluation protocol are described in Section 5.1 of the paper.

Data fields

Each row represents one generated image and its evaluation scores.

FieldTypeMeaning
imageHugging Face ImageGenerated image, stored as embedded binary content in Parquet. Decodes to a Pillow image when loaded with datasets.
promptStringSource text prompt used to generate the image.
modelStringDisplay name of the model that generated the image.
aestheticFloating-point scoreAesthetic Quality: visual composition, color, lighting, texture, and artistic expression.
emotional_evocationFloating-point scoreEmotional Resonance: the affective impression and expressive impact of the image.
content_integrityFloating-point scoreContent Integrity: the completeness and structural coherence of requested subjects, including anatomy and unintended artifacts.

Benchmark results: Table 1

ModelAesthetic Quality ↑Aesthetic win rateEmotional Resonance ↑Emotional win rateContent Integrity ↑Content win rateCLIPScore ↑LAION Aesthetic ↑
Moonworks Lunara8.47323.3%8.11917.5%7.9444.7%0.7926.721
GPT 1 Image Mini8.45718.9%8.36331.7%8.60928.8%0.7776.661
Qwen Image8.36615.9%7.97910.7%8.34529.6%0.7896.561
AuraFlow8.31318.9%8.01115.9%6.6621.1%0.7816.745
SD 3.5 Turbo8.08111.4%7.94917.4%7.2383.2%0.7436.625
HiDream-I1 Fast8.0355.1%7.5683.5%7.7949.2%0.7646.710
FLUX-Klein-4B8.0235.4%7.5793.2%7.4389.0%0.7736.706
Z-Image-Turbo7.2301.2%6.7210.7%7.87517.8%0.7196.033

Source: Wang et al., Moonworks Lunara: Modeling Artistic Intelligence, Table 1.

Usage

Install dependencies

python -m pip install -U "datasets[vision]"

Load the dataset and inspect an image

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()

Select images from one model

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")

Compute mean scores by model

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.

Compare models on the same prompt

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"],
    )

License

Apache 2.0 The images generated by the different models carry their respective restrictions and licenses.

Citation

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}, 
}


[email protected].

aesthetics
datasets
evaluation
image
image-generation
model-comparison
text

moonworks/lunara-art-eval

Dataset

Moonworks Lunara Art Eval

44

43 commits

updated Oct 9, 2026

See the code

README

Moonworks Lunara Art Eval

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

Created with Lunara

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.

Lunara generated artwork 1 Lunara generated artwork 2 Lunara generated artwork 3
Lunara generated artwork 4 Lunara generated artwork 5 Lunara generated artwork 6
Lunara generated artwork 7 Lunara generated artwork 8 Lunara generated artwork 9

Visual model comparisons

Comparison 1: FLUX.2 [klein] 4B
FLUX.2 [klein] 4B
Comparison 1: Moonworks Lunara
Moonworks Lunara
Comparison 1: Z-Image-Turbo
Z-Image-Turbo
Comparison 8: HiDream-I1 Fast
HiDream-I1 Fast
Comparison 8: Moonworks Lunara
Moonworks Lunara
Comparison 8: Qwen-Image
Qwen-Image
Comparison 11: AuraFlow
AuraFlow
Comparison 11: Moonworks Lunara
Moonworks Lunara
Comparison 11: GPT Image 1 Mini
GPT Image 1 Mini

Dataset at a glance

PropertyDescription
Examples8,000 images with prompts and scores
Evaluation prompts1,000 shared prompts
Models8; the paper reports 1,000 images per model
Prompt design500 prompts covering 14 artistic styles, plus 500 open-ended art prompts
Automated judgeGPT-5.6 Sol
Reported image resolution1024 × 1024
Storage19 Parquet shards with embedded image bytes
Public columnsimage, prompt, model, aesthetic, emotional_evocation, content_integrity

Human evaluation, and evaluation protocol are described in Section 5.1 of the paper.

Data fields

Each row represents one generated image and its evaluation scores.

FieldTypeMeaning
imageHugging Face ImageGenerated image, stored as embedded binary content in Parquet. Decodes to a Pillow image when loaded with datasets.
promptStringSource text prompt used to generate the image.
modelStringDisplay name of the model that generated the image.
aestheticFloating-point scoreAesthetic Quality: visual composition, color, lighting, texture, and artistic expression.
emotional_evocationFloating-point scoreEmotional Resonance: the affective impression and expressive impact of the image.
content_integrityFloating-point scoreContent Integrity: the completeness and structural coherence of requested subjects, including anatomy and unintended artifacts.

Benchmark results: Table 1

ModelAesthetic Quality ↑Aesthetic win rateEmotional Resonance ↑Emotional win rateContent Integrity ↑Content win rateCLIPScore ↑LAION Aesthetic ↑
Moonworks Lunara8.47323.3%8.11917.5%7.9444.7%0.7926.721
GPT 1 Image Mini8.45718.9%8.36331.7%8.60928.8%0.7776.661
Qwen Image8.36615.9%7.97910.7%8.34529.6%0.7896.561
AuraFlow8.31318.9%8.01115.9%6.6621.1%0.7816.745
SD 3.5 Turbo8.08111.4%7.94917.4%7.2383.2%0.7436.625
HiDream-I1 Fast8.0355.1%7.5683.5%7.7949.2%0.7646.710
FLUX-Klein-4B8.0235.4%7.5793.2%7.4389.0%0.7736.706
Z-Image-Turbo7.2301.2%6.7210.7%7.87517.8%0.7196.033

Source: Wang et al., Moonworks Lunara: Modeling Artistic Intelligence, Table 1.

Usage

Install dependencies

python -m pip install -U "datasets[vision]"

Load the dataset and inspect an image

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()

Select images from one model

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")

Compute mean scores by model

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.

Compare models on the same prompt

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"],
    )

License

Apache 2.0 The images generated by the different models carry their respective restrictions and licenses.

Citation

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}, 
}


[email protected].

aesthetics
datasets
evaluation
image
image-generation
model-comparison
text