From: jialinyyzz <huggingface.co/jialinyyzz>Newsgroups: alt.freeweights.textSubject:

humanizer

Date: 2026-11-15Commit: 2e57b65Signed: 2DC28CC7B26A283B ✓

Text generation model with 12B parameters. Gguf and safetensors weights, 87.6 GB in all. Published by jialinyyzz under Apache-2.0.

12B params87.6GBhumanizergguf safetensorspermissive
FactsParams12BSize87.6 GBFormatsgguf, safetensorsTasktext generationLicenseApache-2.0From sourcepermissive
$ fw get jialinyyzz/humanizer
# manifest sha256 5b6df8cd74fb… · 87.6 GB · 38 files
$ fw verify ./humanizer jialinyyzz/humanizer
From sourceHosted (signed)jialinyyzz/humanizerLast check: 2026-11-15 02:27 UTC

Get help: custom fine-tune or private deploy. We review your setup before we quote.

Fine-tune of gemma-4-12B.

Works with

Overview

Size
87.6 GB
Weights
3.89 GB (smallest of 6 GGUF variants)
Parameters
12B
Formats
gguf, safetensors
Task
text generation
License
Apache-2.0 (permissive)
Files
38, each with a sha256
Publisher
jialinyyzz
Added
2026-11-15
Section
alt.freeweights.text
Lineage

Original release from the publisher.

Base model: google/gemma-4-12B

Where these bytes come from
Publisher at the pinned commit→You

Sources are tried in order. A file counts only when its size and sha256 match the manifest. Sources are checked when you ask for them, not on a timer.

Sources
BadgeHostLast checkResult
From sourcehuggingface.co2026-11-15 02:27 UTCpassed

Model card

From the publisher at commit 2e57b65. Shown as plain text with links; images open at the publisher.

Image: humanizer: rewrites AI drafts so they read like a person wrote them

Image: The humanizer app running the 12B model locally: draft on the left, rewrite on the right, new wording highlighted

humanizer#

A 12B model that rewrites AI-written drafts (emails, essays, reports, forum posts; English and Chinese) so they read like a person wrote them. It is trained to keep every number, unit, date, name and quote and to add nothing, and it runs locally.

Quick start: get the app for Mac (Apple silicon) or Windows, open it and paste a draft; it works offline. Without the app: llama.cpp and other runtimes, or AGENTS.md for coding agents.

Before and after#

Drafts from the held-out evaluation set. For each we generated 8 samples with the Q8_0 file (llama.cpp, the app's settings) and picked the one that reads best among those the fact judge passed; it is shown unedited, and all 8 samples are on GitHub. These are picks: across the whole set the judge flagged 44 of the 420 English rewrites, 135 problems in all, 125 of them a single word or phrase. Read the result before you send it, especially numbers, dates and names. Results over the whole set are below.

Image: Work email: draft and rewrite

Image: Chinese work email: draft and rewrite

More examples (a forum answer, a Zhihu answer) are in the GitHub README.

Results#

Image: Evaluation card: 95% of English rewrites judged human by Originality.ai at its strictest setting (11 of 210 flagged; previous release 26); 376 of 420 English rewrites with no factual problem (previous release 369)

95% judged human by Originality.ai at its strictest setting (210 English drafts, bf16 weights, 2026-10-02): 11 of 210 rewrites were flagged as AI, against 26 for the previous release, and no AI detector was used anywhere in training. 376 of 420 English rewrites came back with no factual problem from a strict LLM judge, measured on the humanizer-12b-Q8_0.gguf file you download; where it did find one, more than 9 in 10 fixes are a single word or phrase. Method, every genre and the Chinese results: Evaluation details.

Quantization: smaller files, closer to the full model#

Image: Top-1 agreement with bf16 against file size: our GGUF files (green) sit above standard llama.cpp quantization (gray) at 2-bit, Q3 and Q4_K_M; at 3.9 GB, 87% against 70%

Most GGUF files come from one llama-quantize pass that rounds every weight to the target type; our 2-bit, Q3 and Q4_K_M files go further. In the 2-bit and Q3 files, we measured how much each weight tensor hurts the model when it is squeezed and gave the sensitive tensors more bits and the robust ones fewer. All three were then trained layer by layer to reproduce the full model (quantization-aware training) and distilled from the full bf16 model, used as the teacher, on English and Chinese rewriting data. For the 2-bit file, a standard build of the same size picks the same next token as bf16 70% of the time; these steps take it to 81%, 85% and then 87%. The result is still an ordinary GGUF that any recent llama.cpp runs; Q6_K and Q8_0 are standard builds, because at those sizes there is almost nothing left to recover.

Numbers behind every point, KL, per-file fact checks and how each file was made: docs/QUANTIZATION.md. All GGUF files also have their own repo: jialinyyzz/humanizer-GGUF.

Usage without the app · 不用 App 怎么用 · AGENTS.md · GitHub · GGUF files · Install guide · 中文说明

Setting this up with an AI agent? Point it at AGENTS.md: exact files, server command, prompt byte for byte, and a self-test.

Quick start#

App: download the .dmg (Mac with Apple silicon) or the Windows installer from Releases (current: app 0.3.2, which can import .docx and PDF files and keeps any passage you mark with Create fact word for word). On first run it suggests one of five sizes for your memory (Q8_0, Q6_K, Q4_K_M, Q3 or 2-bit, down to 8 GB machines; app 0.3.0 and later) and downloads it once; after that it works offline. Sizes and quality notes: Files.

Command line, for long documents and agents: pipx install git+https://github.com/sgaofen/humanizer-local-model, then hz paper.md -o paper.out.md (also .txt and .docx). It uses the app or a llama-server, keeps headings, code, tables and links, rewrites the prose piece by piece and flags any piece where a number went missing. See USAGE.md, section 14.

Without the app: pick a file below, then follow Usage without the app. The full guide, with a batch script, long documents, Chinese and troubleshooting, is USAGE.md (中文).

Files#

FileSizePeak memory (Mac) ¹Top-1 vs. bf16 ²Fact check: English rewrites flagged ³Flagged as AI, same 60 drafts ⁴For
humanizer-12b-Q8_0.gguf12,669,630,368 bytes (12.7 GB)13.7 GB98.4%44 / 4207 / 6032 GB of memory or more. Recommended, best quality.
humanizer-12b-Q6_K.gguf10,029,799,584 bytes (10.0 GB)about 11.0 GB97.7%56 / 420not measured16 GB. No measurable loss.
humanizer-12b-Q4_K_M.gguf7,625,160,864 bytes (7.6 GB)10.0 GB95.2%58 / 420not measuredAbout 14 GB, or when disk is tight. Slight loss; quantization-aware trained.
humanizer-12b-Q3-QAT.gguf5,587,794,816 bytes (5.6 GB)8.0 GB93.1%64 / 4204 / 6012 GB. Small loss; a few more fact slips in English.
humanizer-12b-IQ2_XS-QAT.gguf3,893,632,896 bytes (3.9 GB)6.2 GB87.4%70 / 4200 / 608 GB; the smallest (2-bit). Lowest AI-detector score, a few more fact slips: check numbers and names.
humanizer-12b-bf16.gguf23,832,049,568 bytes (23.8 GB)about 24.8 GB100% (reference)52 / 4204 / 60Unquantised weights as one GGUF, for reference or for quantising yourself.
model.safetensors + config.json, generation_config.json, tokenizer.json, tokenizer_config.jsonabout 24 GB (bf16)transformers, vLLM, converting to MLX (see Usage without the app).
prompt_format.jsontinyThe instruction and separator, verbatim.

¹ llama-server (Metal) on an M5 Max with the app's settings, while rewriting; Q6_K and bf16 are estimates. Leave room for the system (the app keeps about 4 GB free).

² How often the file's most likely next token is the same as bf16's, English and Chinese averaged (llama.cpp --kl-divergence).

³ The strict fact judge from Evaluation details (GLM-5.3, one vote per rewrite), all 420 English rewrites, run on each file. For every file about 9 in 10 of the problems it lists are a single word, number or phrase. Q8_0, Q6_K and Q4_K_M are within noise of bf16; Q3 and 2-bit make a few more slips.

⁴ Originality.ai, strictest setting, the same 60 English drafts for every file. Detectors change; this is one measurement on one date.

Quantized versions#

The same GGUF files are also in jialinyyzz/humanizer-GGUF; they stay here too, so existing download commands keep working. KL to bf16, the fact check and AI-detector results for every file, the full comparison with standard llama.cpp quantization and how each file was made: docs/QUANTIZATION.md. sha256 checksums are in USAGE.md.

Prompt format#

Text completion, not chat. No system prompt, no turn markers. Send exactly this text and let the model continue:

Rewrite the text below so it reads like a person wrote it, not a language model.

Reorganize it as you see fit. Vary sentence length on purpose. Cut hedging,
throat-clearing, and any sentence that only announces what comes next.
Prefer the concrete word over the abstract one. It is fine to sound uneven.

Every fact, number, unit, date, name and quotation must survive unchanged.

<YOUR DRAFT, with leading and trailing whitespace removed>

### Rewritten:
  • prompt = instr + "\n\n" + draft.strip() + "\n\n### Rewritten:\n\n"; both strings are in prompt_format.json. Reproduce it byte for byte: the first 16 hex characters of sha256(prompt for the draft "X") must be cc51d66b4c593fbe.
  • Use the same English instruction for Chinese drafts.
  • Stop on EOS only. No stop strings, especially not "###".
  • Sampling: temperature 1.0, top-p 0.95, nothing else (top-k 0, min-p 0, repetition penalty 1.0). llama.cpp defaults to top-k 40 and min-p 0.05, and the bundled generation_config.json sets top-k 64, so switch them off explicitly.
  • Context 8192 tokens for instruction + draft + rewrite. Split long documents at paragraph breaks (USAGE.md).
  • Built-in defaults: since 2026-10-04 every GGUF file also stores these sampling settings in its metadata, so llama.cpp and apps built on it use them when a request sets none.
  • Chat front ends: since 2026-10-04 the GGUF files carry a chat template that builds exactly this prompt from the last user message (system prompts and earlier turns are ignored). llama-server's /v1/chat/completions (with --jinja, the default in recent builds) then works, one draft per message: with the same seed it gave the same rewrite as the completion endpoint. Chat apps that use the file's template, such as LM Studio's Chat tab, should work the same way (not tested by us). Files downloaded earlier have no template, and the safetensors weights have none either.

Usage without the app#

All snippets below build the prompt from prompt_format.json and use the sampling above. More detail for each runtime, a script that rewrites a whole folder, and a troubleshooting table: USAGE.md.

brew install llama.cpp            # or: winget install llama.cpp / a zip from github.com/ggml-org/llama.cpp/releases
pip install -U "huggingface_hub[cli]"
hf download jialinyyzz/humanizer humanizer-12b-Q8_0.gguf prompt_format.json --local-dir ./humanizer-model
#   16 GB machine: humanizer-12b-Q6_K.gguf instead; tight: humanizer-12b-Q4_K_M.gguf or humanizer-12b-Q3-QAT.gguf; smallest: humanizer-12b-IQ2_XS-QAT.gguf
llama-server -m ./humanizer-model/humanizer-12b-Q8_0.gguf -c 8192 -np 1 -ngl 99 --host 127.0.0.1 --port 8080
import json, urllib.request

PF = json.load(open("humanizer-model/prompt_format.json", encoding="utf-8"))

def humanize(draft: str, url: str = "http://127.0.0.1:8080") -> str:
    body = {"prompt": PF["instr"] + "\n\n" + draft.strip() + PF["sep"],
            "temperature": 1.0, "top_p": 0.95, "top_k": 0, "min_p": 0, "repeat_penalty": 1.0,
            "n_predict": 2048}                    # no "stop": the model ends at EOS
    req = urllib.request.Request(url + "/completion", json.dumps(body).encode("utf-8"),
                                 {"Content-Type": "application/json"})
    with urllib.request.urlopen(req, timeout=900) as r:
        return json.load(r)["content"].strip()

print(humanize(open("draft.txt", encoding="utf-8").read()))

/completion works with every download. /v1/chat/completions also works with the GGUF files uploaded on or after 2026-10-04 (built-in chat template, see above), one draft per request. With curl and jq:

jq -n --rawfile d draft.txt --slurpfile f humanizer-model/prompt_format.json \
  '{prompt: ($f[0].instr + "\n\n" + ($d | sub("^\\s+"; "") | sub("\\s+$"; "")) + $f[0].sep),
    temperature: 1.0, top_p: 0.95, top_k: 0, min_p: 0, repeat_penalty: 1.0, n_predict: 2048}' \
| curl -s http://127.0.0.1:8080/completion -d @- | jq -r .content
MLX (Apple silicon, mlx-lm 0.32 or newer)#
pip install -U "mlx-lm>=0.32" huggingface_hub
mlx_lm.convert --hf-path jialinyyzz/humanizer --mlx-path humanizer-mlx-8bit -q --q-bits 8 --q-group-size 64
import json
from huggingface_hub import hf_hub_download
from mlx_lm import load, generate
from mlx_lm.sample_utils import make_sampler

PF = json.load(open(hf_hub_download("jialinyyzz/humanizer", "prompt_format.json"), encoding="utf-8"))
model, tok = load("humanizer-mlx-8bit")
draft = open("draft.txt", encoding="utf-8").read()
print(generate(model, tok, prompt=PF["instr"] + "\n\n" + draft.strip() + PF["sep"], max_tokens=2048,
               sampler=make_sampler(temp=1.0, top_p=0.95)).strip())

Pass a plain string; never apply the chat template (the mlx_lm.generate CLI needs --ignore-chat-template).

transformers (CUDA)#
import json, torch
from huggingface_hub import hf_hub_download
from transformers import AutoModelForCausalLM, AutoTokenizer

repo = "jialinyyzz/humanizer"
PF = json.load(open(hf_hub_download(repo, "prompt_format.json"), encoding="utf-8"))
tok = AutoTokenizer.from_pretrained(repo)
model = AutoModelForCausalLM.from_pretrained(repo, dtype=torch.bfloat16, device_map="auto")

draft = open("draft.txt", encoding="utf-8").read()
ids = tok(PF["instr"] + "\n\n" + draft.strip() + PF["sep"], return_tensors="pt").to(model.device)
out = model.generate(**ids, do_sample=True, temperature=1.0, top_p=0.95,
                     top_k=0,                    # switches off the top-k 64 in generation_config.json
                     max_new_tokens=2048)
print(tok.decode(out[0, ids["input_ids"].shape[1]:], skip_special_tokens=True).strip())

The bf16 weights are about 24 GB. Saved with transformers 5.14.1; on 4.x write torch_dtype= instead of dtype=.

vLLM#
import json
from huggingface_hub import hf_hub_download
from vllm import LLM, SamplingParams

repo = "jialinyyzz/humanizer"
PF = json.load(open(hf_hub_download(repo, "prompt_format.json"), encoding="utf-8"))
llm = LLM(model=repo, dtype="bfloat16", max_model_len=8192,
          limit_mm_per_prompt={"image": 0, "audio": 0, "video": 0})   # text only
params = SamplingParams(temperature=1.0, top_p=0.95, top_k=-1, min_p=0.0,
                        repetition_penalty=1.0, max_tokens=2048)      # top_k=-1: off

drafts = [open(p, encoding="utf-8").read() for p in ["draft1.txt", "draft2.txt"]]
for r in llm.generate([PF["instr"] + "\n\n" + d.strip() + PF["sep"] for d in drafts], params):
    print(r.outputs[0].text.strip(), "\n---")

This mirrors how our evaluation outputs were generated. As a server: vllm serve jialinyyzz/humanizer --dtype bfloat16 --max-model-len 8192 --generation-config vllm, then /v1/completions (never /v1/chat/completions) with the same parameters; --generation-config vllm keeps the top-k 64 from generation_config.json out of the defaults.

Ollama#

Ollama ignores the chat template stored in the GGUF and would apply its own Gemma template, which breaks this model. Use this Modelfile: its template takes the last user message as the draft and builds the prompt above (rendered with Go's text/template, byte for byte the same; not run in Ollama by us). Needs an Ollama version that supports Gemma 4 models.

FROM ./humanizer-12b-Q8_0.gguf
TEMPLATE """{{- $draft := "" }}{{- range .Messages }}{{- if eq .Role "user" }}{{- $draft = .Content }}{{- end }}{{- end }}Rewrite the text below so it reads like a person wrote it, not a language model.

Reorganize it as you see fit. Vary sentence length on purpose. Cut hedging,
throat-clearing, and any sentence that only announces what comes next.
Prefer the concrete word over the abstract one. It is fine to sound uneven.

Every fact, number, unit, date, name and quotation must survive unchanged.

{{ $draft }}

### Rewritten:{{ "\n\n" }}"""
PARAMETER temperature 1.0
PARAMETER top_p 0.95
PARAMETER top_k 0
PARAMETER min_p 0
PARAMETER repeat_penalty 1.0
PARAMETER num_ctx 8192
PARAMETER num_predict 2048
ollama create humanizer -f Modelfile
ollama run humanizer      # one draft per message, no leading or trailing blank lines
# or raw mode, which skips the template:
jq -n --rawfile d draft.txt --slurpfile f humanizer-model/prompt_format.json \
  '{model: "humanizer", raw: true, stream: false,
    prompt: ($f[0].instr + "\n\n" + ($d | sub("^\\s+"; "") | sub("\\s+$"; "")) + $f[0].sep),
    options: {temperature: 1.0, top_p: 0.95, top_k: 0, min_p: 0, repeat_penalty: 1.0,
              num_ctx: 8192, num_predict: 2048}}' \
| curl -s http://127.0.0.1:11434/api/generate -d @- | jq -r .response
LM Studio#

Untested by us. Load the GGUF with an 8192-token context; in the model's sampling settings set Temperature 1.0, Top P 0.95, Top K 0, Min P 0, Repeat Penalty 1.0 and remove stop strings. With a file downloaded on or after 2026-10-04, the Chat tab should work: leave the system prompt empty and paste one draft per message (the built-in template ignores system prompts and earlier turns). With any download, start the local server and send the full prompt to the text-completion endpoint /v1/completions:

import json, urllib.request

PF = json.load(open("humanizer-model/prompt_format.json", encoding="utf-8"))
draft = open("draft.txt", encoding="utf-8").read()
body = {"model": "humanizer-12b-q8_0",           # replace with the model id shown in LM Studio
        "prompt": PF["instr"] + "\n\n" + draft.strip() + PF["sep"],
        "temperature": 1.0, "top_p": 0.95, "top_k": 0, "min_p": 0, "repeat_penalty": 1.0, "max_tokens": 2048}
req = urllib.request.Request("http://127.0.0.1:1234/v1/completions", json.dumps(body).encode("utf-8"),
                             {"Content-Type": "application/json"})
print(json.load(urllib.request.urlopen(req, timeout=900))["choices"][0]["text"].strip())

If a chat reply greets you, repeats the instruction or doesn't stop, the file has no built-in template (downloaded before 2026-10-04): download it again or use /v1/completions.

More#

USAGE.md also covers: a one-shot llama-completion run, a script that rewrites a whole folder (splitting long files, resampling over-copied pieces, listing numbers to check), long documents, Chinese specifics, a quality checklist and troubleshooting. To verify a setup, run the self-test in AGENTS.md.

Evaluation details#

Evaluation set: 312 drafts (210 English, 102 Chinese), 18 genres, written from scratch by GLM-5.3, GPT-5.6 Luna and Claude Sonnet (about a third each), never used in training. Two samples per draft.

AI detection (external check only): 95% judged human. Originality.ai, API v3, AI Allowance 0% (strictest), 2026-10-02, 210 English drafts, first sample each, bf16 weights: 11 of 210 rewrites flagged as AI.

ModelFlagged as AIJudged human
humanizer 12B v2, this release (bf16)11 / 210 (5%)95%
humanizer 12B v1, previous release26 / 210 (12%)88%

Flagged less than half as often as the previous release: on the same drafts, 20 were flagged only for the previous release and 5 only for this one (paired test, p = 0.004). The humanizer-12b-Q8_0.gguf file measured 15 / 210 (7%), within noise of bf16 (p = 0.48).

Public baseline: the blader/humanizer skill (v3.1.0, 53k GitHub stars), applied by Claude Sonnet to the same 60 drafts: 60 / 60 flagged as AI (median AI score 100%). This release (bf16) on those 60: 4 / 60 flagged. Flagged as AI by genre (all 210 drafts, bf16, same setting): social posts with emoji, hashtags or "1/ 2/" threads 3 / 16, formal policy memos 2 / 13, paper sections 2 / 22, essays 2 / 38, work reports 1 / 20, forum answers 1 / 18, blog posts 0 / 16, Reddit posts 0 / 18, emails 0 / 35, product reviews 0 / 14 (total 11 / 210). The most templated genres are still the hardest. Detectors change; this is one measurement on one date, not a promise.

Fact fidelity. 376 of 420 English rewrites came back with no factual problem from a strict LLM judge (GLM-5.3, one vote per rewrite), measured on the humanizer-12b-Q8_0.gguf file you download. The previous release: 369 of 420. The chart is at the top of this page.

v2, this release (Q8_0 file)v1, previous 12B
No factual problem found (higher is better)376 / 420369 / 420
Dropped a format element (lower is better)28 / 42035 / 420
Median reuse, overlap with the draft (lower is better)0.1650.19
Outputs with reuse > 0.5 (lower is better)0.2%1.0%

Where the judge did find a problem, the fix is usually small: a second pass re-read each flagged rewrite against its draft and listed every problem, down to small wording nuances, and more than 9 in 10 of those fixes (125 of 135) are a single word or phrase (for example, the draft's "The remaining 37 complaints" came out as "The other 37% of complaints"). Chinese is still catching up with English: no factual problem in 149 of 204 Chinese rewrites (previous release: 135); where there was one, about 9 in 10 fixes (212 of 236) are a single word or phrase ("本月20日前后", around the 20th of this month, became "20号以前", before the 20th). Still, read the result before you send it, especially numbers, dates and names.

Note: the fact judge is deliberately strict. In a separate audit of the same judge model, a second judge (Claude Opus) re-read 150 rewrites it had flagged as serious (drawn from training, not from this evaluation set). On the fact the first judge pointed to, Opus agreed it was a serious error in 99, rated it minor in 41 (for example "may reduce" became "will help decrease", or a long name was shortened), and found the fact unchanged in 10. So some flags are harmless rewording. Still read numbers, dates and names before you send.

Training#

No AI detector was used anywhere in training: not as a reward, not as a filter, not to pick a checkpoint.

  1. SFT, 28,598 pairs of AI draft → real human original. The human side is always real human writing (paper abstracts, government reports, student essays, company and mailing-list email, Reddit, Hacker News, Zhihu…); the AI side is a draft a frontier model wrote back from the human text.
  2. DPO, 3,918 preference pairs, chosen only on fact fidelity and copying (LLM judge GLM-5.3).
  3. GRPO in three rounds, 500 steps in total: 200 steps with a strict single-vote fact judge, then two rounds of 150 steps (v1 was released after the first of these, v2 after the second) (16 drafts × 8 samples per step, temperature 1.0). Reward: an LLM judge reads the whole rewrite against the draft (severe errors, invented content, changed meaning and dropped formatting cost), plus a copy penalty on 5-gram and syntactic-skeleton reuse (free below .22, then linear). Round 3 drew its drafts from a genre-balanced pool of 8,268. In all, RL produced 41,600 rewrites, each scored by an LLM judge against its draft.
  4. This release (v2) = the final checkpoint of the last round.

Training data: every row used to train v2 is in jialinyyzz/humanizer-data (one config per step; openly licensed text in full, other sources as IDs with a rebuild script). How it was built: docs/DATA.md.

Image: Training pipeline

Speed#

Measured on an M5 Max. llama.cpp Q8_0 with Metal (what the app uses): about 36–38 tokens/s; a hundred-word email takes about 3.6 s, a Chinese email of about 300 characters about 8.5 s. MLX 8-bit: about 30 tokens/s in English and 38 tokens/s in Chinese; a hundred-word email takes about 9 s.

Community: faster decoding on Apple Silicon#

jayyun98 trained a speculative-decoding draft model for humanizer: Humanizer-12B-Draftfit-DSpark. On an M5 Pro with MLX it reports about 1.5× the speed (34.5 vs 22.8 tokens/s), and in their test the output was token-for-token identical to running humanizer alone. It runs alongside the main model and needs the MLX setup described in its model card. This is a community project; we have not benchmarked it ourselves.

Limitations#

  • It can still change a detail: on our set the judge found no factual problem in 376 of 420 English rewrites, and more than 9 in 10 of the fixes it did list are a single word or phrase. Proofread numbers, dates and names.
  • Chinese is still catching up with English (no factual problem in 149 of 204 Chinese rewrites; about 9 in 10 fixes are a single word or phrase).
  • Templated genres are still the hardest for detectors: emoji/hashtag social posts (3 / 16 flagged) and policy memos (2 / 13).
  • Formatting can change: 28 of 420 outputs dropped a format element; paragraph breaks, lists and headings sometimes merge or disappear.
  • Occasionally answers in the wrong language: on short, informal English drafts with technical jargon, it occasionally writes the whole rewrite in Chinese. The app (0.3.1 and later) and hz check the language and sample again automatically. If you call the model yourself through llama.cpp or another runtime: when an English draft comes back with more than a few Chinese characters, sample once more with the same settings.
  • In casual genres it sometimes adds slang or profanity that wasn't in the draft.
  • Detector results change over time. Nothing here guarantees any detector outcome.
  • It is a writing tool for your own drafts. Where a school, employer or publication has rules about AI assistance, follow them.

License#

Apache License 2.0, for both the weights and the code. Fine-tuned from google/gemma-4-12B, which Google releases under Apache 2.0. This project is not affiliated with or endorsed by Google.

Files

38 files · 87.6 GBWeights 3.89 GB (smallest of 6 GGUF variants). Sizes and sha256 from the signed manifest.
Show all 38 files with their sha256
FileSizesha256
.gitattributes3.73 KB863ad3700f0aa3a413849e2bf769c6ba2d40adea8e923603ea9cfc32cf0c2062
AGENTS.md20.9 KBa041e78bf0c5d9bfebd4292dc5d47819314ad11865b16221382e7e0ca0b11b0b
LICENSE11.4 KBcfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30
NOTICE486 Bb7b1c91b0ddbd70456cf10fabfa503d93b0f349e7e80317ded10d8256aef3ad0
README.md27.5 KB6d5b9329bc2c2afa751b1ca2607ec56d6a286e764541630f667977c0ca0e60cf
USAGE.md48.6 KB38262cf07eddb4882502739f8164c65658eb468292dbef00556b1aed405cc3b0
USAGE.zh.md47.1 KB1e88bbc6bfd42b532728e7b209d86c6192ce76162708893c40596dc4e93c516c
assets/app-en.png564 KB7036cbf414ca5e5c256ca29a477dc03886d1561eea8c23777790e72f782697e5
assets/app-showcase-en.png662 KB114a7dd013ff6f2ec3366fc81642a2e88d9e5a9243bb706172267f47d0bc628a
assets/app-showcase-zh.png791 KBb456891a53b7cdfa54b0899aa479abfd5a6ed2d9186178032d863c17ca45e436
assets/app-zh.png574 KB740aa257e3b04ab6246c180b0bd0b0ca790e06d8800586113583c3a1718c73f0
assets/banner-en.png211 KB3c32b66d7282d635a5c8c0135658b082f2ca33fb8abcf6486026fd4963997637
assets/banner-zh.png207 KB1b37b8822029aa54781b05c63a2d668cf8010d9f175c66d94c736fd0c8f5b72b
assets/compare-en-email.png548 KBbd5c29c469a36d9383e5ad08ad0179eb8de603de200143f755f4913faaf5a4f4
assets/compare-en-forum.png935 KB571d33a2950b51c63a298753c66d1870f36dbecd22c3b93c5e9e83f7ebb31e9f
assets/compare-zh-email.png685 KBd48c2cae61725ca0cd2ca86c712a6d8d9aaeb1e6ac0ea5c3efdffbe3cefba0fd
assets/compare-zh-zhihu.png1.03 MB9c027433564fa9ea8ff5ff5d7dcab0468cfde89e6aab35f3545e058ec1306538
assets/eval-en.png603 KBa0d9e2fd43bb3aeace2bf9d352006aecd4e6ceafe814b13042a4a494a88252c9
assets/eval-zh.png602 KB91bd3f823cc490d1a402c276a087c6f622ca9dca0592965bd60114ca08422369
assets/quant-top1-en.png280 KB4ee2e9443cc125ad3a58ffbb530efab092c0a331f9f9b610c51364f6ecba1798
assets/results-detector-en.png368 KB2399cca785d6e3a69144eb8fdd1d866f0e83e6413061d45ab7a49e60f9919fb5
assets/results-detector-zh.png362 KB5c4aa158e42e261bb9d2b137731ef2660eaa563b695ebc972cc7326bf17efe60
assets/results-fidelity-en.png336 KB7130711cf787031b31120c270c88a76914957d482211bf185406c7abdabb19a6
assets/results-fidelity-zh.png328 KBba1d178189d66c4e198ebdc2154f411876fa7fe120f6a7c4a7eb289456630333
assets/training-en.png433 KB4158823e90a4aa7f37b5414b42d7f33f99014f7e0638f4e00cd09b90195634a9
assets/training-zh.png432 KB12269f06aaf33fd300d8a2b364d275d0ea56ccd8ea97bcd02905bbdee40f68c6
config.json4.30 KBa9f6a5679ff252dce0845866c58992520171113e1e3489631ca8e2e7f47f7bb4
generation_config.json228 Bcfae0df2d24c68832b1913c3c37998867e07f55f548815eed77b7f7ed737a66c
humanizer-12b-IQ2_XS-QAT.gguf3.89 GB383e5ca8f1f48ab5f65013adbc1965fa70d1d1afa6c45d932c34b854e38edbb5
humanizer-12b-Q3-QAT.gguf5.59 GB307bbfdf66fb22bf98aaa93fe7d54a713bf167e646073dc0cf10870b1525eb94
humanizer-12b-Q4_K_M.gguf7.63 GB2229574dec5178629575ee4a153dfee7d9e924ab997d0ad9d2ac622b67e44834
humanizer-12b-Q6_K.gguf10.0 GBc98f03bb9e71456181f99b0e1d3391e07ce1afc357f9db4c33d6d379b8dd9f0d
humanizer-12b-Q8_0.gguf12.7 GB8d7a457b56de6530eaaf0151ccfa7550a4b20dab979737e259da9c63e960e0b0
humanizer-12b-bf16.gguf23.8 GB47d79b44c3e15ea2540f4edb63556f2b7e456067d7dd252a42ff103a26a51be9
model.safetensors23.9 GBf6e8c0d176f9340cc2af82efac085e4ba292781bb0783a08eef07540d6b95548
prompt_format.json553 B8eda4ace9d180481d87add6aba5ea70331ee9263ac00e730f037253d4093e50d
tokenizer.json32.2 MB12bac982b793c44b03d52a250a9f0d0b666813da566b910c24a6da0695fd11e6
tokenizer_config.json1.53 KB0e6fbdb3d0c08b5ccb59f7edfeace292f26092440e9952bfea4e280be4bd1c27
VersionsEach time the pinned upstream commit or file list changed in this repo. Newest first.
Upstream commitDateContents
2e57b6528a pinned now2026-11-15 02:27 UTC38 files · 87.6 GB

Use it

$ fw get jialinyyzz/humanizer
# manifest sha256 5b6df8cd74fb… · 87.6 GB · 38 files
$ fw verify ./humanizer jialinyyzz/humanizer
fw.pyChecks the signature and every sha256, tries each source in order, resumes.
$ python3 fw.py get https://freeweights.allternit.com/manifests/jialinyyzz/humanizer.json --dir ./humanizer $ python3 fw.py verify ./humanizer ./jialinyyzz__humanizer.json
hfThe Hugging Face CLI with one setting. Same repo id.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download jialinyyzz/humanizer --revision 2e57b6528a4070c33f3e09ca24e3325a84272f68 --local-dir ./humanizer
transformersLoad the weights in Python.
import os os.environ["HF_ENDPOINT"] = "https://freeweights.allternit.com" from transformers import AutoModelForCausalLM, AutoTokenizer tok = AutoTokenizer.from_pretrained("jialinyyzz/humanizer", revision="2e57b6528a4070c33f3e09ca24e3325a84272f68") model = AutoModelForCausalLM.from_pretrained("jialinyyzz/humanizer", revision="2e57b6528a4070c33f3e09ca24e3325a84272f68", device_map="auto")
llama.cppDownload one GGUF variant (humanizer-12b-IQ2_XS-QAT, 3.89 GB), then serve it.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download jialinyyzz/humanizer --include "humanizer-12b-IQ2_XS-QAT*" --local-dir ./humanizer $ llama-server -m ./humanizer/humanizer-12b-IQ2_XS-QAT.gguf
OllamaMake an Ollama model from the downloaded file.
$ printf 'FROM ./humanizer/humanizer-12b-IQ2_XS-QAT.gguf\n' > Modelfile $ ollama create humanizer -f Modelfile
vLLMServe an OpenAI-compatible API.
$ HF_ENDPOINT=https://freeweights.allternit.com vllm serve jialinyyzz/humanizer --revision 2e57b6528a4070c33f3e09ca24e3325a84272f68

License

Name
Apache License 2.0
Id
Apache-2.0
Class
Permissive
Redistribution
yes
Listing
Hosted (signed)
Decided
License as declared by the publisher. No person read it. 2026-11-15
Text in
LICENSE
Text sha256
cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30
Terms gate
No extra terms beyond the license.

Read the license text

Licenses are checked against the license table. A custom license passes only after a person reads it.

Provenance

From: jialinyyzz <huggingface.co/jialinyyzz>Newsgroups: alt.freeweights.textSubject: humanizerDate: 2026-11-15Commit: 2e57b65Signed: 2DC28CC7B26A283B ✓
Upstream
jialinyyzz/humanizer
Pinned commit
2e57b6528a4070c33f3e09ca24e3325a84272f68
Manifest
humanizer.json · .minisig
Manifest sha256
5b6df8cd74fb9c4ffe47a00455709ea88160b7dd6cd94c36bd40bc9147afb0d1
Signature
minisign, Ed25519, key 2DC28CC7B26A283B
Created
2026-11-15 02:27 UTC
Generator
freeweights-manifest/0.1.0
Takedowns
None.

How to verify

$ curl -O https://freeweights.allternit.com/manifests/jialinyyzz/humanizer.json $ curl -O https://freeweights.allternit.com/manifests/jialinyyzz/humanizer.json.minisig $ minisign -Vm humanizer.json -P RWQ7KGqyx4zCLXtUFOqvfv8L3g+8fpKJ1FsuxPyOYMF+4KufbUxKq1Oq $ shasum -a 256 <file> # compare with the Files tab

A manifest whose signature fails must be rejected. A file whose size or sha256 does not match must be discarded. Verify a download

Model tree

Parent

google/gemma-4-12B · this model is a finetune of it

1 model in the catalog name this one as their parent.

Quantizations
1
Get it
Download
$ HF_ENDPOINT=https://freeweights.allternit.com hf download jialinyyzz/humanizer
Open in Freeweights Studio

Pull, verify and run it in the Allternit app on Desktop, web or phone.

Signed manifest
minisign, key 2DC28CC7B26A283B. humanizer.json. Provenance. Takedown history: none.

Variants

1 quantized or adapter build of humanizer. Each has its own license check and page.

From: laion <huggingface.co/laion>Subject: a2-rl-e2egit_large-50-32B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_exp_rpt_e2egit-large-15-8B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_exp_rpt_e2egit-v2-10-8B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_exp_rpt_pymethods2test-large-80-8B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_exp_rpt_unitsyn-python-large-10-8B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_mix_h2_language_proportional-65-8B