--- license: apache-2.0 datasets: - ATH-MaaS/TextRefinementBench tags: - pytorch - text-rendering - arxiv:2610.18284 - image-editing ---
# PixText [![arXiv](https://img.shields.io/badge/arXiv-2610.18284-b31b1b.svg)](https://arxiv.org/abs/2610.18284) [![Code](https://img.shields.io/badge/Code-GitHub-181717.svg?logo=github)](https://github.com/ATH-MaaS/PixText) [![License](https://img.shields.io/badge/License-Apache--2.0-blue.svg)](LICENSE) **English** | [简体中文](README.zh-CN.md)
PixText refines local text in pixel space. Provide an image, the regions to edit, and the target text. The model generates those regions using the image as context and preserves pixels outside the actual edited footprints. Multiple targets are generated jointly. | Model | Default sampling | Glyph guidance | | --- | --- | --- | | PixText-Teacher | 25-step Euler | 3.3 | | PixText-MeanFlow | 4-step interval Euler | 3.3 | MeanFlow is the default quick-start choice. Each model package contains its weights, configuration, fonts and SHA-256 checksums. MeanFlow needs no additional text encoder, OCR model, VAE, or teacher. ## Example Two input images and their targets are bundled in [`examples/`](examples). Cyan boxes mark the edited regions. Click an image to enlarge it. | Input | MeanFlow · 4 steps | Teacher · 25 steps | | --- | --- | --- | | [Input with edit regions](examples/pipeline_case/input_boxed.png) | [MeanFlow output with edit regions](examples/pipeline_case/meanflow_output_boxed.png) | [Teacher output with edit regions](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 喜 | 喜 input | 喜 meanflow | 喜 teacher | 8 给 | 给 input | 给 meanflow | 给 teacher | | 2 发 | 发 input | 发 meanflow | 发 teacher | 9 解 | 解 input | 解 meanflow | 解 teacher | | 3 甜 | 甜 input | 甜 meanflow | 甜 teacher | 10 馋 | 馋 input | 馋 meanflow | 馋 teacher | | 4 初 | 初 input | 初 meanflow | 初 teacher | 11 满 | 满 input | 满 meanflow | 满 teacher | | 5 恋 | 恋 input | 恋 meanflow | 恋 teacher | 12 满 | 满 input | 满 meanflow | 满 teacher | | 6 鞭 | 鞭 input | 鞭 meanflow | 鞭 teacher | 13 畜 | 畜 input | 畜 meanflow | 畜 teacher | | 7 炮 | 炮 input | 炮 meanflow | 炮 teacher | | | | | **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 | | --- | --- | --- | | [Tagline input with edit region](examples/english_case/input_boxed.png) | [Tagline MeanFlow output with edit region](examples/english_case/meanflow_output_boxed.png) | [Tagline Teacher output with edit region](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 | Worldwide input | Worldwide MeanFlow | Worldwide Teacher | | Excellence | Excellence input | Excellence MeanFlow | Excellence Teacher | | Quality | Quality input | Quality MeanFlow | Quality Teacher | 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 ![PixText pipeline](docs/assets/pipeline.png) ## 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.