Quick Start
1. Generate synthetic images
from ciagen import generate
result = generate(
source="data/real/train/images/",
output="data/generated/",
extractor="canny",
sd_model="fennecinspace/sd-v15",
cn_model="lllyasviel/sd-controlnet-canny",
num_per_image=3,
prompt="a person walking in a park",
)
print(f"Generated {result['total_generated']} images -> {result['output_path']}")
2. Evaluate quality
from ciagen import evaluate
scores = evaluate(
real="data/real/train/images/",
generated="data/generated/",
metrics=["fid", "mld"],
)
print(f"FID: {scores['dtd']['fid']}")
for path, distance in scores['ptd']['mld'].items():
print(f" {path}: {distance:.4f}")
3. Filter by quality
from ciagen import filter_generated
kept = filter_generated(
generated="data/generated/",
method="top-k",
value=100,
)
for metric_name, fe_data in kept.items():
for fe, images in fe_data.items():
print(f"{metric_name}/{fe}: kept {len(images)} images")
CLI alternative
ciagen generate \
--source data/real/train/images/ \
--output data/generated/ \
--extractor canny \
--sd-model fennecinspace/sd-v15 \
--cn-model lllyasviel/sd-controlnet-canny
ciagen evaluate \
--real data/real/train/images/ \
--generated data/generated/
ciagen filter \
--generated data/generated/ \
--method top-k \
--value 100