Lynote humanize-text: a four-step pipeline you can actually read
Open-source text humanization pipeline with every intermediate step published. Two LLM rewrites at temp 1.3, then two hops across different NMT engines. Four documented methodologies you can read, modify, and run locally.
At a glance
- What is it?
- The repository publishes its whole chain: two LLM rewrites at temperature 1.3, then two hops across different NMT engines. It is a reference implementation, not a finished product, and the README says the team has moved past it.
- Who is it for?
- Adopt this repository if you want to read, modify or benchmark a documented humanization chain locally, and you accept that its author describes it as an early-2026 exploration with a ceiling. Do not adopt it if you need a maintained production service, a guarantee about detector scores, or per-passage tier selection.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 3 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 1, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What Lynote humanize-text actually solves
Most humanizers are closed services. You paste text, you get text back, and the only thing you can inspect is the output. This repository takes the opposite position: it publishes the pipeline so you can read what happens between input and output. The README states the motive directly, that most humanizers are a black box with marketing claims attached, and that this one is open source so you can read what it does.
The audience is narrow and specific. It is for developers who want to run the chain locally, change a step, and see what that does to the result. The README's own framing is that the interesting part is not the LLM rewriting, since everyone does that, but the translation chain. If you are a writer looking for a paste-and-go tool, this is the wrong repository, and the README says so by pointing at lynote.ai for that use case.
There is a second, less advertised audience: people who want to compare methodologies. The repository ships four documented methodologies, with the v1.0 reference implementations kept under an optional legacy extra in setup.py. That is unusual. Most projects delete their old approaches. Keeping them runnable makes the repository useful as a record of what was tried, not just as a tool.
The four-step chain: LLM rewrites, then two NMT hops
The pipeline is four sequential steps, and the README publishes them as a table with engine, direction and purpose.
Step 1 sends the input to an LLM at temperature 1.3 and rewrites it into Chinese. Step 2 sends the Chinese to the same kind of LLM, again at temperature 1.3, and rewrites it into Japanese, carrying step 1 as conversation history so the two rewrites stay coherent. Step 3 is the first translation hop, Japanese into Finnish, through Google Translate. Step 4 is the second hop, Finnish into English, through Niutrans.
The design rationale has three parts. The two LLM passes break statistical fingerprints through creative variation. The two translation hops use different engines, so no single-engine fingerprint survives the round trip. And the language sequence is chosen for distance: Chinese to Japanese to Finnish to English maximizes how much the text is restructured before it comes back.
The LLM provider is configurable. DeepSeek is the default, OpenRouter is an option, and the config example shows both. The second translation engine is not optional in the same way. Without a Niutrans key the chain has no step 4. That asymmetry is worth noting before you start: one API key is a preference, the other is a dependency.
Installing it and running your first rewrite
The README gives a quick start that clones the repository, installs dependencies, copies the config template and runs the standard pipeline. The package requires Python 3.10 or later, and the runtime dependencies are httpx, toml, click, rich and deep-translator.
git clone https://github.com/lynote-ai/humanize-text.git
cd humanize-text
pip install -r requirements.txt
cp config/config.example.toml config/config.toml
python -m src.standard.pipeline --input draft.txtThe fourth line copies the example config into place. You then edit config/config.toml and add your keys. The README shows a DeepSeek configuration with a DeepSeek key and a Niutrans key, and an OpenRouter variant using an openrouter_api_key instead. The DeepSeek block looks like this:
[api_keys]
deepseek_api_key = "sk-..."
niutrans_api_key = "your-key"
[llm]
provider = "deepseek"If you prefer to pass text directly rather than a file, the README's Python section shows the same module invoked with an inline string: python -m src.standard.pipeline --input "Your AI-generated text here". The setup.py file also declares a console script named humanize-text that maps to src.standard.pipeline:main, so an installed package exposes the same entry point under that name.
There is a second route for people who do not want to touch Python. The repository ships n8n/humanize_standard.json, an importable n8n workflow. And docker-compose.yml builds a service on port 8000, mounting ./config into /app/config and setting CONFIG_PATH=/app/config/config.toml. The compose file does not document which endpoint the service exposes, so treat the container as a way to run the same pipeline with your config mounted, not as a documented HTTP API.
Three tiers, and what each one costs you
The repository describes three tiers. Standard is the chain above: two LLM rewrites plus two machine translation hops. Advanced adds multi-round LLM rewriting on top of the chain. Focus adds a detection-guided feedback loop for what the README calls maximum restructuring.
The trade-off table in the README ranks them on style preservation and speed. Standard preserves style best and is fastest. Advanced is good on style and medium speed. Focus preserves style moderately and is slower. That ordering is the honest part of the document: the more you restructure, the more the original voice erodes.
Only the standard tier is the subject of the quick start and the module path src.standard.pipeline. The README presents advanced and focus as tiers available through Lynote.ai, and the repository's tier table is framed as a comparison rather than as three local entry points. If you clone this repository expecting to run all three locally, check src/ before you plan around it. The naming of the module path, standard, suggests the other two are not shipped the same way.
Where the chain breaks, and when not to use it
The README carries two disclaimers that matter more than any feature list. The first: detector scores are probabilistic, the project does not guarantee that rewritten text will be classified as human, and it should not be used to misrepresent authorship or evade institutional policies. The second, aimed at academic users: follow your institution's policies on AI use and disclosure.
Beyond the disclaimers, the architecture imposes real costs. Four sequential steps mean four points of failure and four sources of latency. The chain crosses two commercial translation services and one LLM provider, so a single outage stops the run. The output is a reconstruction from Finnish, which means idiom, terminology and named entities have made three language crossings. For technical writing, legal text or anything where a specific word must survive, that is a bad trade.
The README is also explicit that the team has moved past this code. It describes the pipeline as an early-2026 exploration, the most effective approach found at the time, and states that Lynote.ai now runs proprietary models trained with adversarial methods. It gives two relative figures for the current product against this chain: roughly 30 percent higher detector-bypass rate and roughly 50 percent higher output quality. Those are the vendor's own comparisons, and the repository publishes no benchmark harness that would let you reproduce them. Treat them as a claim, not a measurement.
Finally, the repository does not document rollback. There is no described way to undo a rewrite or to diff the output against the input automatically.
How it differs from Quillbot, Undetectable AI and the rest
The obvious alternatives are hosted humanizers such as Quillbot and Undetectable AI, and the general-purpose route of asking ChatGPT or Claude to rewrite a passage. The difference is not output quality, which none of these can be compared on from the published documentation. The difference is what you can inspect and change.
A hosted humanizer gives you a text box. You cannot see the steps, you cannot swap the translation engine, and you cannot run it on a machine with no network egress to a third party. This repository gives you the four steps as code, with a config file that names the LLM provider and the API keys. If your requirement is that the rewriting logic be auditable, that is the whole argument.
The trade is operational. With Quillbot or Undetectable AI, someone else runs the infrastructure. Here you supply two API keys, manage a Python 3.10 environment, and accept that the code is a reference implementation its authors have stopped developing toward. The README's own positioning makes this explicit: the repository stays a runnable reference, and the current best results live elsewhere.
A third option is worth naming because the README's pipeline is really a special case of it: chaining translation services yourself. deep-translator, one of the runtime dependencies, can call translation backends directly. You could build a simpler two-hop chain without the LLM steps. You would lose the temperature-1.3 rewriting, which the README credits with breaking statistical fingerprints, and you would still be writing the orchestration this repository already provides.
Licence, maintenance and what an upgrade costs
The project is MIT licensed, and setup.py declares it as such in its classifiers. MIT is permissive: you can modify, redistribute and use it commercially, provided the copyright notice and permission notice travel with it. That is a statement about the licence text, not legal advice, and the API services the pipeline calls have their own terms, which the repository does not reproduce.
On maintenance, the last push to the default branch was on 2026-09-14, three days before this writing, and the most recent release is v1.5.2 from 2026-08-05. The repository is not archived. Activity is recent, but the README's own statement that the team has moved beyond this chain is the more useful signal about where future work goes. The version number in setup.py matches the v1.5.2 release tag, so the packaging tracks releases.
Upgrade cost is mostly configuration drift. The config lives in config/config.toml, copied from config/config.example.toml, and the docker-compose file mounts the same directory at /app/config with CONFIG_PATH pointing at the file. If the example config gains keys, your copy will not. There is no documented migration path between versions, and the CHANGELOG.md at the repository root is the place to check before pulling. The optional litellm extra is pinned to a narrow range, litellm>=1.80.0,<1.87.0, which suggests the integration is sensitive to that dependency's releases. The legacy extra pulls transformers, torch, nltk and langdetect for the v1.0 methodology implementations, and that is a heavy install for anyone who only wants the standard chain.
Editorial conclusion
Adopt this repository if you want to read, modify or benchmark a documented humanization chain locally, and you accept that its author describes it as an early-2026 exploration with a ceiling. Do not adopt it if you need a maintained production service, a guarantee about detector scores, or per-passage tier selection. Before running anything, confirm you have both a DeepSeek or OpenRouter key and a Niutrans key, because the chain stops without the second translation engine. The first thing to read is docs/research-notes.md, not the marketing page.
Frequently asked questions
Does humanize-text get detected?
The README does not promise an answer either way. It states that detector scores are probabilistic and that the project does not guarantee rewritten text will be classified as human.
Can ChatGPT be used to humanize text in this pipeline?
The pipeline takes a configurable LLM provider. The README shows DeepSeek as the default and OpenRouter as an option, and it does not document a ChatGPT or OpenAI provider setting.
How can I humanize my text with humanize-text?
Clone the repository, install requirements.txt, copy config/config.example.toml to config/config.toml, add your API keys, then run python -m src.standard.pipeline --input draft.txt. The chain then performs two LLM rewrites and two translation hops before returning English text.
How to humanize text to avoid AI detection with humanize-text?
The README frames the pipeline as improving readability and natural cadence in AI-assisted drafts, and explicitly says it should not be used to misrepresent authorship or evade institutional policies.
What is humanize text?
In this project it means rewriting AI-generated prose through a four-step chain: an LLM rewrite into Chinese, a second LLM rewrite into Japanese, a Google Translate hop to Finnish, and a Niutrans hop back to English.
What is the best way to humanize text with this repository?
The README recommends the standard tier as the default balance between restructuring and style preservation, and describes advanced and focus as deeper but slower tiers. It does not publish a benchmark comparing them.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/lynote-ai-humanize-text)