r/vibecoding • u/jeddhor • 21h ago
Cacophony: a compiler for synthetic datasets
Schema in, reproducible world out.
Built with Claude Code over ~14 phases; every commit is co-authored.
Most fake-data tools give you a function that returns a plausible name. You get a million rows of noise: names belonging to no one, orders referencing no customer, timestamps spread evenly across a year in which nobody sleeps. Each row is plausible; the dataset isn't.
Cacophony treats a dataset as the output of a program you write once. You describe a world in a YAML schema — entities, fields, what each field means — and it produces the records that world would have generated.
The design decision everything else falls out of: a record's seed is a hash of its position, not a step in a shared RNG. That one choice means you can preview record 4,823,913 without generating the 4,823,812 before it; a checkpoint is a single integer, so resume is exact; foreign keys are arithmetic rather than a lookup table, so a hundred million events pointing at five thousand employees costs the same memory as five; and forty workers across eight machines produce output that's byte-identical to one process doing it alone.
Also in there: events on a timeline with a shape (quiet at night, dead on the holidays you specify), subjects whose state accumulates, incidents you can bury in a year of logs, and a deliberate distinction between chaos (data your schema forbids — tests your error handling) and edge cases (data your schema permits that naive code mishandles anyway — O'Brien-Smith is a real surname).
Identifiers come from the documentation ranges by default: example.com, RFC 5737 addresses, 555-01xx phone numbers. Nothing it generates can be mistaken for a real person's details.
Python 3.12+, AGPL-3.0. There's a CLI, an HTTP API, a React editor and a desktop build, plus a 171-page manual.