Inspiration
I consume lot of content and I see a lot of creators using ai to create their content but it feels different to me it has no human touch. Though you can prompt better on AI and almost all of them claim to make human like content but we all can spot clear difference between them.
What it does
VoiceLock learns a person's writing voice from their past work, writes new content in that voice, and then proves the result sounds like them. Paste in 10 to 30 past pieces. Sixty seconds later you have a voiceprint. Give it a brief "LinkedIn post about our pricing change" and it returns a draft with a Voice Match Score out of 100, plus exactly which lines still sound like a machine. Three agents:
Voiceprint Agent. Half the profile is measured deterministically in Python, not guessed by an LLM: sentence-length mean and variance, paragraph rhythm, punctuation fingerprint (em-dash / ellipsis / semicolon rates), contraction rate, type-token ratio, reading level. The other half is extracted by Claude: how this person opens a piece, how they close it, recurring analogies, verbal tics, and the words they never use.
Writer Agent. Receives the voiceprint, the three most topically relevant verbatim past samples (retrieved by local TF-IDF similarity), and the brief. Real examples beat any adjective.
Critic Agent. Recomputes the same metrics on the draft and diffs them against the voiceprint, then runs an AI-slop detector over the text. It returns line-level fixes, and anything scoring below threshold goes back to the Writer for one revision pass. The score is the product. "Trust me, it sounds human" is not a feature. A number that goes from 62 to 91 in front of you is.
How we built it
Streamlit + Python. Three tabs: Train Voice / Generate / Score. Google Gemini 3.6 Flash drives all three agents. Provider-agnostic by design. Everything talks the OpenAI-compatible chat protocol, so Gemini, Groq, OpenRouter, Cerebras and OpenAI are drop-in swappable. The app autodetects whichever key you have, free providers first, and you can override the model per agent role. VoiceLock runs end to end on a free API key and no credit card — which matters, because the people who need this most are individual creators. Pydantic schemas validate every structured response. Zero heavy dependencies. The whole project is openai, streamlit, python-dotenv, pydantic. The TF-IDF retriever is 63 lines of pure Python and the readability scoring is hand-rolled — at tens of samples per brand, an exact cosine ranker beats a vector database on every axis, and pulling in scikit-learn to rank 20 documents would have been all setup and no benefit. The metrics layer makes no LLM calls at all. That is what makes the score trustworthy: we aren't asking a language model whether its own output sounds human, we're measuring it.
Challenges we ran into
Humans write a 4-word sentence, then a 31-word one. LLMs write six 17-word sentences in a row. Sentence-length variance turned out to be a stronger AI signal than any vocabulary choice, and it's the metric our critic weights most heavily.
The critic was too agreeable. Given a draft and a profile, it scored everything 85–95. Scores only became useful once we grounded them in the measured statistics instead of asking for a judgment.
Accomplishments that we're proud of
Voice capture takes about a minute, not a training run. The score is grounded in measurable properties of the text rather than a model's opinion of itself. And the system tells you why a draft failed, at the line level, instead of just regenerating and hoping.
What we learned
We seriously evaluated per-user fine tuning and rejected it. At 10–30 writing samples, retrieval plus measured style constraints beats supervised fine-tuning outright and per-user fine-tunes don't scale as a product: one model per brand means cost, latency, and a cold start measured in hours instead of seconds. Fine tuning becomes the right answer later, once a user has accepted and edited a few hundred drafts. Not on day one. The broader lesson: "sounds like AI" isn't a vague vibe. It's a measurable set of statistical properties, and once you can measure something you can optimize against it.
What's next for VoiceLock
Ingestion connectors paste a LinkedIn or X profile URL and pull 50 posts automatically Multi-channel generation one brief becomes a post, a newsletter, and a thread, each in the correct register of the same voice Edit capture log every change a user makes to a draft and feed the diff back into the voiceprint. After a few hundred accepted-and-edited pairs, that dataset is finally worth fine-tuning on. That's the moat. Voice drift tracking see how someone's style has changed over two years, and write as the current version of them
Built With
- api
- google-gemini
- groq
- natural-language-processing
- openai-api
- openrouter
- pydantic
- python
- streamlit
- tf-idf
Log in or sign up for Devpost to join the conversation.