--- license: apache-2.0 datasets: - ATH-MaaS/TextRefinementBench tags: - pytorch - text-rendering - arxiv:2610.18284 - image-editing ---
](examples/pipeline_case/input_boxed.png) | [
](examples/pipeline_case/meanflow_output_boxed.png) | [
](examples/pipeline_case/teacher_output_boxed.png) |
Each row pairs two targets; every target shows input, MeanFlow output and Teacher output.
| # | Input | MeanFlow · 4 steps | Teacher · 25 steps | # | Input | MeanFlow · 4 steps | Teacher · 25 steps |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 1 喜 |
|
|
| 8 给 |
|
|
|
| 2 发 |
|
|
| 9 解 |
|
|
|
| 3 甜 |
|
|
| 10 馋 |
|
|
|
| 4 初 |
|
|
| 11 满 |
|
|
|
| 5 恋 |
|
|
| 12 满 |
|
|
|
| 6 鞭 |
|
|
| 13 畜 |
|
|
|
| 7 炮 |
|
|
| | | | |
**English tagline repair.** [`examples/english_case`](examples/english_case) repairs three damaged spots in a printed tagline: a broken letter plus two words, leaving the surrounding logo untouched.
| Input | MeanFlow · 4 steps | Teacher · 25 steps |
| --- | --- | --- |
| [
](examples/english_case/input_boxed.png) | [
](examples/english_case/meanflow_output_boxed.png) | [
](examples/english_case/teacher_output_boxed.png) |
Each row shows one repaired region: input, MeanFlow output and Teacher output.
| Region | Input | MeanFlow · 4 steps | Teacher · 25 steps |
| --- | --- | --- | --- |
| Worldwide |
|
|
|
| Excellence |
|
|
|
| Quality |
|
|
|
Both cases use seed 42, and the adjacent JSON files record the reproduction metadata. To reproduce them, run the code from [ATH-MaaS/PixText](https://github.com/ATH-MaaS/PixText) with `--model` pointing at the packages in `models/`.
Full-resolution images: [pipeline input](examples/pipeline_case/input.png), [MeanFlow](examples/pipeline_case/meanflow_output.png), [Teacher](examples/pipeline_case/teacher_output.png); [tagline input](examples/english_case/input.png), [MeanFlow](examples/english_case/meanflow_output.png), [Teacher](examples/english_case/teacher_output.png).
## Method

## Installation
The inference code is at [github.com/ATH-MaaS/PixText](https://github.com/ATH-MaaS/PixText). Use Python 3.11 or newer and a CUDA GPU. Install a CUDA build of PyTorch and torchvision appropriate for your machine, then install the package:
```bash
pip install "git+https://github.com/ATH-MaaS/PixText.git"
```
Pillow must support RAQM. The system must provide HarfBuzz (`libharfbuzz0` on Debian/Ubuntu). Font files are loaded from the model packages in this directory; no system font installation is required.
## What is in this release
This directory contains both model packages, their fonts, example images and checksums. The inference code lives at [github.com/ATH-MaaS/PixText](https://github.com/ATH-MaaS/PixText).
| Path | Contents |
| --- | --- |
| `models/PixText-Teacher/` | 25-step teacher weights, configuration, and bundled fonts. |
| `models/PixText-MeanFlow/` | 4-step MeanFlow weights, configuration, and bundled fonts. |
| `examples/` | Input and output images for both cases, with reproduction metadata. |
| `docs/assets/` | Pipeline figure. |
| `model_index.json` | Model identifiers and weight checksums. |
| `manifest.sha256` | SHA-256 checksums for every model file, configuration file, and font. |
Verify the release from its root:
```bash
sha256sum -c manifest.sha256
```
The benchmark for this model, TextRefinementBench, ships as a separate dataset package with its own card.
## Model packages
Both packages are included under `models/`, laid out as follows:
```text
models/
PixText-Teacher/
PixText-MeanFlow/
model.safetensors
config.json
inference_config.json
manifest.json
README.md
fonts/
AlibabaPuHuiTi-3-55-Regular.ttf
GoNotoCJKCore-v7.0.ttf
OFL-GoNoto.txt
README.md
```
Teacher uses the same package layout. [`model_index.json`](model_index.json) lists the model identifiers and weight checksums. `from_pretrained` loads a local directory and checks the files listed in its manifest, including the weights, configuration and fonts. A missing or modified bundled font is reported before weights are loaded. Complete packages can be moved without changing their configuration.
## Python
```python
from pixtext import PixTextPipeline, TextEdit
pipeline = PixTextPipeline.from_pretrained("models/PixText-MeanFlow")
result = pipeline.edit(
"input.png",
edits=[TextEdit(bbox=(120, 80, 160, 125), text="鹿")],
seed=42,
)
result.image.save("output.png")
```
Use `models/PixText-Teacher` to load Teacher. Both variants can coexist in one process. Results contain `image` and `metadata`, including model identity, seed, sample identity, sampling settings, and crop geometry.
## Command line
Create `edits.json`:
```json
[{"bbox": [120, 80, 160, 125], "text": "鹿"}]
```
```bash
pixtext --model models/PixText-MeanFlow \
--image input.png --edits edits.json --output output.png --seed 42
```
The CLI saves a PNG and a matching JSON metadata file. `python -m pixtext` provides the same command. `--steps` and `--guidance-scale` override the package defaults.
## Batch editing
```python
results = pipeline.edit_batch(
["first.png", "second.png"],
[
[TextEdit((120, 80, 160, 125), "鹿")],
[TextEdit((20, 30, 100, 70), "PixText")],
],
seeds=[42, 43],
sample_ids=["first", "second"],
)
```
## Inputs and pixel preservation
- Inputs are Pillow images or local image paths, converted to upright RGB using EXIF orientation. Coordinates refer to that upright image.
- Boxes use original-image pixel coordinates `(x0, y0, x1, y1)` and half-open intervals. Invalid or out-of-image boxes are rejected.
- Supply one character or a text line per target.
- Crops align to 16-pixel patches. Pixels outside those footprints remain identical to the original RGB image.
- Arbitrary image dimensions are supported.
- Targets are processed in input order, up to 12 per pass. For overlapping aligned crops, the last target written wins. An empty edit list returns the original RGB image.
- The renderer selects the first bundled font covering the entire target string, using PuHuiTi then Go Noto. Unsupported text produces a coverage error instead of missing-glyph squares.
- Editing requires CUDA FlexAttention.
Glyph-present and glyph-absent predictions provide guidance on the open interval `(0.1, 1.0)`. At the default guidance setting, four MeanFlow updates use seven model forwards. Initial execution also includes compilation overhead.
## License
Model weights and documentation are released under the Apache License 2.0; see [LICENSE](LICENSE). The inference code is at [ATH-MaaS/PixText](https://github.com/ATH-MaaS/PixText). Bundled fonts keep their own terms, described in each model package's `fonts/` directory.