alt.freeweights.text / PaddleOCR-VL-1.6-4bit
From: mlx-community <huggingface.co/mlx-community>Newsgroups: alt.freeweights.textSubject:

PaddleOCR-VL-1.6-4bit

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

Image text to text model with 906M parameters. Safetensors weights, 715 MB in all. Published by mlx-community under Apache-2.0.

906M params715MBPaddleOCR-VL-1.6-4bitsafetensorspermissive
FactsParams906MSize715 MBFormatssafetensorsTaskimage text to textLicenseApache-2.0From sourcepermissive
$ fw get mlx-community/PaddleOCR-VL-1.6-4bit
# manifest sha256 48f0cf4defdf… · 715 MB · 17 files
$ fw verify ./PaddleOCR-VL-1.6-4bit mlx-community/PaddleOCR-VL-1.6-4bit
From sourceHosted (signed)mlx-community/PaddleOCR-VL-1.6-4bitLast check: 2026-11-15 05:03 UTC

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

Quantized of PaddleOCR-VL-1.6.

Works with

Overview

Size
715 MB
Weights
704 MB (safetensors)
Parameters
906M
Formats
safetensors
Task
image text to text
License
Apache-2.0 (permissive)
Files
17, each with a sha256
Publisher
mlx-community
Added
2026-11-15
Section
alt.freeweights.text
Lineage

Original release from the publisher.

Base model: PaddlePaddle/PaddleOCR-VL-1.6

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 05:03 UTCpassed

Model card

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

mlx-community/PaddleOCR-VL-1.6-4bit#

4-bit MLX quantization of PaddlePaddle/PaddleOCR-VL-1.6, a 958M-parameter OCR / document-parsing VLM. Converted with mlx-vlm 0.6.10 (mlx 0.32.0) for inference on Apple Silicon.

Fidelity was measured against the unquantized bf16 source, not assumed. The numbers below and the method that produced them are in the tables that follow.

pip install mlx-vlm
python -m mlx_vlm generate \
    --model mlx-community/PaddleOCR-VL-1.6-4bit \
    --image document.png \
    --prompt "Transcribe this document to markdown." \
    --max-tokens 512

Quantization#

Bits4
Group size64
Modeaffine
Effective bits/weight6.214
Size on disk0.68 GB
Quantized tensors212 (128 language model + 84 vision tower)
Unquantized tensors712 (scales, biases, norms, embeddings, bf16)

Unlike most mlx-vlm conversions, the vision tower is quantized here: visual.* carries 84 .scales entries (27 qkv + 27 out_proj + 27 fc1 + position_embedding + 2 projector linears). The effective figure still exceeds 4 because the language model also keeps its embeddings, layernorms and the group-64 scales/biases in bf16.

Measured fidelity#

Weight-level metrics compare dequantized weights against the bf16 source tensor by tensor, streamed from disk. No prompts, no sampling, hardware-independent. 27 fused visual.layers.N.self_attn.qkv tensors (source keeps q/k/v separate) are excluded -- they cannot be compared as single tensors; all other 185 quantized tensors are.

VariantbpwSNRRelative L2CosineDecode tok/sPeak RAM
4-bit6.21418.88 dB11.4%0.993542455.50.785 GB
5-bit7.06524.2 dB6.2%0.9981385.80.881 GB
bf16 (source)16n/an/an/a192.01.856 GB

Measured on an M2 Pro / 32 GB, greedy decoding.

OCR accuracy vs ground truth#

Because OCR has ground truth, transcription can be scored directly rather than inferred from token distributions. Six documents were rendered locally with exactly known content (invoice, clinical lab report, shipping label, receipt, motor-controller datasheet, and a second receipt rendered rotated 8 degrees to simulate a skewed photo scan), covering tabular line items, currency, dates, identifiers and an image-quality stressor. 76 required fields across the six.

VariantField accuracyContent accuracyNumeric recallCER vs bf16
4-bit1.01.01.00.0965
5-bit0.94740.94740.92160.1865
bf16 (source)0.96050.97370.97920.0000
  • Field accuracy: required strings present, exact match (format-sensitive).
  • Content accuracy: the same, ignoring markup and whitespace.
  • Numeric recall: ground-truth numbers present, ignoring markup. For an invoice or a datasheet the numbers are the payload.
The 4-bit-vs-5-bit ordering is template drift, not a fidelity ranking#

At 4 bits the variant transcribes all six documents perfectly; at 5 bits it confabulates tables on two of them (Item | Qty | Unit | Amount with duplicated amounts on the invoice, a hallucinated Name | Name / **Individuals** | **102** header on the lab report). The bf16 source itself is not exempt: it drops 24.00 and 16.00 on the invoice and concatenates PRIORITYOVERNIGHT.

This is template selection, verified, not assumed. Four controlled checks were run before publishing:

  1. The bf16 control is byte-identical to the unquantized HF source on all six documents (loaded directly from the Hub, same mlx-vlm code path, greedy). The control is faithful — its field score is the base model.
  2. All three variants agree on the first token's input (pixel values byte-identical) and diverge at the first generated token: the greedy path commits to a document template (markdown table vs plain lines) immediately, and a template mismatch costs whole fields, not characters.
  3. The base model can produce the "perfect" transcript when steered: the bf16 control with the prompt "plain text, line by line, no tables" scores 0.987 (it was 0.961 before) — the content was always there, the default template was hiding it.
  4. The ranking is not stable across prompts, which is the whole point: a real quality difference would survive a prompt change, and this one does not.
Prompt4-bit5-bitbf16
default ("markdown")1.00.94740.9605
"plain text, no tables"1.00.98680.9868
"markdown table"0.88160.90790.8816

Three prompts, three different orderings: the 4-bit wins only under the default prompt, the 5-bit wins only under "markdown table", and under the steering prompt they tie within one field (PRIORITYOVERNIGHT against PRIORITY OVERNIGHT, a single dropped space in one document).

So the OCR ordering is not a quality ranking: greedy decoding is a discontinuous function of the weights, and quantization noise flips the template commitment at token 0 in a direction that is uncorrelated with bit width. The weight-level table above is the reliable ordering -- 5-bit reconstructs the source strictly better (24.2 dB vs 18.9 dB, the expected ~6 dB per bit). Six synthetic documents are too small a sample to rank variants on the OCR layer; treat the per-doc detail below rather than the aggregate as the signal.

Per-document field accuracy (missed fields in parentheses):

Doc4-bit5-bitbf16
invoice1.00.75 (4471, 2026-03-14, Northwind Trading)0.8333 (24.00, 16.00)
lab_report1.00.9286 (2026-01-07)1.0
shipping_label1.01.00.8889 (PRIORITY OVERNIGHT)
receipt1.01.01.0
spec_table1.01.01.0
rotated_receipt1.01.01.0

The rotated receipt (8 degrees, simulated photo) does not break any variant at the default prompt — 4-bit keeps all 14 fields there too.

What was not measured#

  • No distributional metrics (perplexity, top-1 agreement, KL). This is an OCR specialist; on plain chat text the bf16 source itself degenerates (asked for the capital of Japan it starts an unrelated derivation, and arithmetic prompts produce incoherent output), so an aggregate over ordinary prose would measure domain mismatch in the source, not quantization error.
  • No standard OCR benchmark. No OmniDocBench, no DocVQA, no CER against a public dataset. The six documents are synthetic and rendered with a default font: exact ground truth, but not photographs, not handwriting, and not non-Latin scripts. The 8-degree rotation covers skewed scans in one controlled case, not the full variety.
  • No judged quality, no layout-structure scoring (reading order, cell spanning), no throughput figures for any chip other than an M2 Pro.
  • The 27 fused QKV tensors of the vision tower are not in the weight-level comparison (no single source tensor to compare them against).

Sibling variants#

VariantbpwOCR fieldsSize
PaddleOCR-VL-1.6-4bit6.2141.00.68 GB
PaddleOCR-VL-1.6-5bit7.0650.94740.75 GB

Credits#

All credit for the underlying model belongs to PaddlePaddle. This is a format conversion and quantization; no training or fine-tuning was performed. See the source model card for license, intended use and limitations.

Files

17 files · 715 MBWeights 704 MB (safetensors). Sizes and sha256 from the signed manifest.
Hide all 17 files with their sha256
FileSizesha256
.gitattributes1.57 KB34448b82c17d60fec9b65b1f093c115ddbaadc04beb1b0140b6bfed2e012a930
README.md7.93 KB8df822882d055d504a2b6a9777bb2eea6aaeb7a54b2285ba732b650c00c14cda
added_tokens.json25.4 KBf59f889088e0fe21c523e7cf121bb6dca3b0bb148cb7159fbb4572c74dfc5644
chat_template.jinja1.47 KB2f27812dab7f333e471884e0c803d807f11953d5453140dfb1aaba234f872bc8
config.json2.68 KBf3201c9d3ffb55873a844d10ca2c616c3e1dc4939ee0631c697905a9d245f504
configuration_paddleocr_vl.py8.10 KB753dd93654c3a9c8c85a3eaee1e3092dd12591b0f2dce0305e1abfb7a41ff160
generation_config.json133 Ba6701d78ab3b4d972307cdec3b69d4c13f46e0d5140514f50ab7d84259324b94
image_processing_paddleocr_vl.py25.0 KBa4fa521b9cb16e207f94b7f2d16427771776dfc634420d319fc4916ee58049ec
model.safetensors704 MB5d1ce8b52bf14c528a4b860ef8ed74a8136aecf21d98ed514c09522a19cdf559
model.safetensors.index.json69.9 KB7922fd298904bb4271d80f51bc7bb5d4cc7d3a038921cdbf5080bfb6c0556271
modeling_paddleocr_vl.py104 KBc5013dff57ca8b87dc1de64d0fd839a44313de09d230a4fb2d08289d2cad5111
preprocessor_config.json641 B111872ab1e8bb7fd040ac5087bfced7ab8f011f02139b088cba294964c3b1d0e
processing_paddleocr_vl.py12.3 KBe29cb1e5f275f2bd3ce051bd5c9983a33894e693b2823a0e13d4c07c8c4f9e13
processor_config.json609 B37e0b148483ccbd862ec95e5a4ccd9d5a6a8e79e8b49db95eeefcb94fcb436e2
special_tokens_map.json1.15 KBd3a125c03103deb2acaf7730791bdbbf196f620e5a2213b664511ff9b4b25bab
tokenizer.json11.2 MBf64dee5b500fd0737498420a95cfa25927990ecbe37c0c112a6c8fcea22bc7f9
tokenizer_config.json782 Bec27a60e0ac749b3820964af0511115d8e5a9b63ce22ff933ef6a09c36aa50fe
VersionsEach time the pinned upstream commit or file list changed in this repo. Newest first.
Upstream commitDateContents
c8987b277b pinned now2026-11-15 05:03 UTC17 files · 715 MB

Use it

$ fw get mlx-community/PaddleOCR-VL-1.6-4bit
# manifest sha256 48f0cf4defdf… · 715 MB · 17 files
$ fw verify ./PaddleOCR-VL-1.6-4bit mlx-community/PaddleOCR-VL-1.6-4bit
fw.pyChecks the signature and every sha256, tries each source in order, resumes.
$ python3 fw.py get https://freeweights.allternit.com/manifests/mlx-community/PaddleOCR-VL-1.6-4bit.json --dir ./PaddleOCR-VL-1.6-4bit $ python3 fw.py verify ./PaddleOCR-VL-1.6-4bit ./mlx-community__PaddleOCR-VL-1.6-4bit.json
hfThe Hugging Face CLI with one setting. Same repo id.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download mlx-community/PaddleOCR-VL-1.6-4bit --revision c8987b277bdd8aaec8bd265d154f391bd03ad165 --local-dir ./PaddleOCR-VL-1.6-4bit
transformersLoad the weights in Python.
import os os.environ["HF_ENDPOINT"] = "https://freeweights.allternit.com" from transformers import AutoModelForImageTextToText, AutoProcessor processor = AutoProcessor.from_pretrained("mlx-community/PaddleOCR-VL-1.6-4bit", revision="c8987b277bdd8aaec8bd265d154f391bd03ad165") model = AutoModelForImageTextToText.from_pretrained("mlx-community/PaddleOCR-VL-1.6-4bit", revision="c8987b277bdd8aaec8bd265d154f391bd03ad165", device_map="auto")
vLLMServe an OpenAI-compatible API.
$ HF_ENDPOINT=https://freeweights.allternit.com vllm serve mlx-community/PaddleOCR-VL-1.6-4bit --revision c8987b277bdd8aaec8bd265d154f391bd03ad165

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
README.md
Text sha256
8df822882d055d504a2b6a9777bb2eea6aaeb7a54b2285ba732b650c00c14cda
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: mlx-community <huggingface.co/mlx-community>Newsgroups: alt.freeweights.textSubject: PaddleOCR-VL-1.6-4bitDate: 2026-11-15Commit: c8987b2Signed: 2DC28CC7B26A283B ✓
Upstream
mlx-community/PaddleOCR-VL-1.6-4bit
Pinned commit
c8987b277bdd8aaec8bd265d154f391bd03ad165
Manifest
PaddleOCR-VL-1.6-4bit.json · .minisig
Manifest sha256
48f0cf4defdf05ced0f173bb7a9806a690bc411b6ef4f2ce0ede50eff5ceb596
Signature
minisign, Ed25519, key 2DC28CC7B26A283B
Created
2026-11-15 05:03 UTC
Generator
freeweights-manifest/0.1.0
Takedowns
None.

How to verify

$ curl -O https://freeweights.allternit.com/manifests/mlx-community/PaddleOCR-VL-1.6-4bit.json $ curl -O https://freeweights.allternit.com/manifests/mlx-community/PaddleOCR-VL-1.6-4bit.json.minisig $ minisign -Vm PaddleOCR-VL-1.6-4bit.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

PaddlePaddle/PaddleOCR-VL-1.6 · this model is a quantization of it

No model in the catalog names this one as its parent.

Get it
Download
$ HF_ENDPOINT=https://freeweights.allternit.com hf download mlx-community/PaddleOCR-VL-1.6-4bit
Open in Freeweights Studio

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

Signed manifest
minisign, key 2DC28CC7B26A283B. PaddleOCR-VL-1.6-4bit.json. Provenance. Takedown history: none.
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