NeoTextSynthesizer - High-performance OCR training data generator
Project description
NeoTextSynthesizer (neots)
A high-performance, multi-threaded synthetic OCR training data generator built with C++.
NeoTextSynthesizer generates realistic text images with diverse fonts, backgrounds, and visual effects — ideal for training Text Recognition models.
Features
- High Performance: Multi-threaded C++ core with shared glyph cache, background image cache, and lock-free rendering pipeline
- Multi-language Support: Built-in support for Chinese (Simplified & Traditional), Japanese, Korean, English, German, French, Italian, Spanish, Russian, and extensible to any language
- Flexible Text Sampling: Sequential corpus streaming and random character sampling with nested probability-weighted groups
- Rich Visual Effects: Random fonts, font sizes, scale variations, italic/underline/strikethrough effects, diverse backgrounds (solid colors, gradients, real images)
- Python Integration: Full Python API via nanobind with NumPy/PIL support
- CLI Tools:
neotsfor workspace initialization and batch generation,flat-wikifor Wikipedia corpus generation - Cross-platform: Supports Linux x86_64, Linux AArch64, macOS ARM64, and Windows x86_64
Installation
Install pre-built wheels from PyPI:
pip install neots
Quick Start
CLI Usage
# Initialize a workspace
neots init
# Generate 10,000 images
neots generate --total 10000
# Generate with custom config and workers
neots generate --config config.yaml --total 50000 --workers 8
# Show help
neots help
Wikipedia Corpus Generation (CLI)
# Generate a Chinese corpus from Wikipedia
flat-wiki --lang zh --output ./corpuses/zh.txt --min_len 5 --sample_count 10000
# Generate with vocabulary filter
flat-wiki -l en -o ./corpuses/en.txt -v dictionary.txt -n 5000
Python API
from neots import NeoTextSynthesizer
# Initialize from config file
synth = NeoTextSynthesizer.from_config_file("config.yaml")
# Initialize from a dictionary
config = NeoTextSynthesizer.get_default_config()
config["generate"]["output_height"] = 64
synth = NeoTextSynthesizer.from_config(config)
# Initialize from built-in default preset
synth = NeoTextSynthesizer.from_default() # full preset
synth = NeoTextSynthesizer.from_default("minimal") # minimal preset
# Batch generate (blocks until complete)
synth.generate(total=10000, workers=8, show_progress=True)
# Generate single image as PIL Image
img = synth.generate_instance("Hello World", type="PIL")
img.save("sample.png")
# Generate as NumPy array (H, W, 3) RGB
arr = synth.generate_instance("测试文本", type="numpy")
# Save directly to file
synth.generate_instance("サンプル", type="file", path="output.png")
# Export default config
NeoTextSynthesizer.output_default_dict("my_config.yaml", type="yaml")
NeoTextSynthesizer.output_default_dict("my_config.json", type="json")
Corpus Generation (Python API)
from neots import FlattenWikipediaGenerator
gen = FlattenWikipediaGenerator(
lang="zh", # Language code
output="./corpuses/zh.txt", # Output file path
vocab="dictionary_extended.txt", # Optional: filter by vocabulary
min_len=5, # Minimum line length
sample_count=10000, # Number of articles to process
)
gen.generate()
Configuration
Configuration is structured into three sections. See config.yaml for a complete example after initialization.
text_sampler
Defines how text strings are sampled for rendering. Each entry has a probability weight and a data source.
| Type | Description |
|---|---|
sequential |
Streams text from a flat file. Ideal for natural language corpuses. |
random |
Randomly samples from character files or nested sub-groups. |
text_sampler:
# Stream Chinese text from a corpus file
- type: sequential
prob: 0.20
from_file: ./corpuses/zh.txt
# Random character sampling with nested groups
- type: random
prob: 0.20
sub_items:
- prob: 0.4
from_file: ./symbols_characters/characters.txt
section: [~, 3500] # First 3500 lines only
- prob: 0.1
from_string: " " # Inline source
Key parameters:
prob: Probability weight (auto-normalized)from_file/from_string: Data sourcesection: [start, end]: Slice of lines (~= null = beginning/end)sub_items: Nested probability groups (recursive)traditional_prob: Probability of simplified → traditional Chinese conversion
image_processor
Controls visual appearance:
| Parameter | Default | Description |
|---|---|---|
bg_image_prob |
0.3 | Probability of using a real background image |
gray_bg_prob |
0.7 | Probability of gray vs. colored background |
effect_prob |
0.2 | Probability of text effects (italic/underline/strikethrough) |
font_size |
55 | Base font size in pixels |
scale_range |
[0.7, 1.1] | Random scale factor range |
margin_range |
[-5, 20] | Horizontal margin range (pixels) |
offset_prob |
0.5 | Probability of random position offset |
generate
Controls output structure:
| Parameter | Default | Description |
|---|---|---|
min_targets / max_targets |
5 / 50 | Character count range per image |
output_height |
48 | Output image height (width auto-calculated) |
default_font_dir |
./default_fonts | Primary fonts directory |
fallback_font_dir |
./fallback_fonts | Fallback fonts directory |
out_dir |
./generated | Output image directory |
out_jsonl |
./generated.jsonl | Annotation file path |
hierarchical_structure |
[100, 625] | Directory nesting levels |
Font Setup
Primary Fonts (default_fonts/)
Place diverse .ttf / .otf font files here. A random font is selected for each image. More fonts = better model generalization. Aim for 50-200+ fonts covering your target scripts.
Fallback Fonts (fallback_fonts/)
When the primary font doesn't cover certain characters, the system falls back to these fonts. Place comprehensive Unicode fonts here (e.g., Noto Sans CJK, Noto Sans).
System Default
If no fallback fonts are provided, the system automatically tries:
- Linux:
/usr/share/fonts/truetype/DejaVuSans.ttf - macOS:
/System/Library/Fonts/Courier New.ttf - Windows:
C:\Windows\Fonts\Arial.ttf
If the system font is also unavailable, initialization fails.
Background Images
For realistic training data, add images to backgrounds/ and set bg_image_prob > 0.
Supported formats: .jpg, .jpeg, .png, .bmp, .webp
Output Format
Generated images are saved as PNG files in a hierarchical directory structure:
generated/
├── 00000001/
│ ├── 00000001/
│ │ ├── 00000001.png
│ │ ├── 00000002.png
│ │ └── ...
│ └── ...
└── ...
Annotations are saved in JSONL format (generated.jsonl):
{"image":"00000001/00000001/00000001.png","text":"示例文本","length":248}
{"image":"00000001/00000001/00000002.png","text":"Sample text","length":315}
Each line contains:
image: Relative path to the image filetext: The rendered text contentlength: Image width in pixels
Development
This project uses vcpkg to manage native C++ dependencies, and uses scikit-build-core + nanobind for the Python/C++ bridge. Development is now based on configuring the environment with vcpkg and building from source.
Supported Platforms
- Linux x86_64
- Linux AArch64
- macOS ARM64
- Windows x86_64
Build from Source with vcpkg
Windows
git clone https://github.com/microsoft/vcpkg.git
.\vcpkg\bootstrap-vcpkg.bat
$env:CMAKE_TOOLCHAIN_FILE="$PWD\vcpkg\scripts\buildsystems\vcpkg.cmake"
pip install -e . --no-build-isolation
macOS
git clone https://github.com/microsoft/vcpkg.git
./vcpkg/bootstrap-vcpkg.sh
export CMAKE_TOOLCHAIN_FILE="$PWD/vcpkg/scripts/buildsystems/vcpkg.cmake"
pip install -e . --no-build-isolation
Linux
git clone https://github.com/microsoft/vcpkg.git
./vcpkg/bootstrap-vcpkg.sh
export CMAKE_TOOLCHAIN_FILE="$PWD/vcpkg/scripts/buildsystems/vcpkg.cmake"
pip install -e . --no-build-isolation
If you prefer to build the native extension directly with CMake, make sure CMAKE_TOOLCHAIN_FILE points to the vcpkg toolchain before configuring the project.
Donate
This project is maintained by a single person, so the documentation is not yet fully comprehensive and the feature set is still relatively limited.
If you would like to support the project, the most valuable help is:
- submitting pull requests
- actively opening issues when you encounter problems during usage
License
This project is licensed under the MIT License. See LICENSE for details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file neots-0.1.2.tar.gz.
File metadata
- Download URL: neots-0.1.2.tar.gz
- Upload date:
- Size: 126.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b2abeb842264e5c7a7d1284062ed9bc71a6d07d706b1d4ec6406d1b566fe789
|
|
| MD5 |
ccab7364a01776f04ec933e321ab7433
|
|
| BLAKE2b-256 |
96b4df096b7bc1c16bcfd88499c4a5306fe9f804b70cc9f84edd175883636038
|
Provenance
The following attestation bundles were made for neots-0.1.2.tar.gz:
Publisher:
workflow.yml on reactor-no8/NeoTextSynthesizer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
neots-0.1.2.tar.gz -
Subject digest:
4b2abeb842264e5c7a7d1284062ed9bc71a6d07d706b1d4ec6406d1b566fe789 - Sigstore transparency entry: 1239377836
- Sigstore integration time:
-
Permalink:
reactor-no8/NeoTextSynthesizer@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/reactor-no8
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Trigger Event:
release
-
Statement type:
File details
Details for the file neots-0.1.2-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: neots-0.1.2-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 2.4 MB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
37fd0b8a0d3bb9b2627499e0632201319ffa7b6e508e95cfb8319d87cc341f63
|
|
| MD5 |
7ba9360c5acab57c188523b580be12b6
|
|
| BLAKE2b-256 |
6edf44dc0fb910f5313cf3d09d66713b9e22f353eb5942d378eb4632be30d032
|
Provenance
The following attestation bundles were made for neots-0.1.2-cp313-cp313-win_amd64.whl:
Publisher:
workflow.yml on reactor-no8/NeoTextSynthesizer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
neots-0.1.2-cp313-cp313-win_amd64.whl -
Subject digest:
37fd0b8a0d3bb9b2627499e0632201319ffa7b6e508e95cfb8319d87cc341f63 - Sigstore transparency entry: 1239377853
- Sigstore integration time:
-
Permalink:
reactor-no8/NeoTextSynthesizer@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/reactor-no8
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Trigger Event:
release
-
Statement type:
File details
Details for the file neots-0.1.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: neots-0.1.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 3.8 MB
- Tags: CPython 3.13, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
55dc6d8caf54fa0c0cf884706c39fc00c88fd25f956cd2ccbc2d0b67838915bc
|
|
| MD5 |
ab1f20e4148692e8b36cb1a0d5a9c6cd
|
|
| BLAKE2b-256 |
c82c4821a56eb63cc8b0b85a9056d9bb2644587a593100113d97fb1af1ed4a7d
|
Provenance
The following attestation bundles were made for neots-0.1.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
workflow.yml on reactor-no8/NeoTextSynthesizer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
neots-0.1.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
55dc6d8caf54fa0c0cf884706c39fc00c88fd25f956cd2ccbc2d0b67838915bc - Sigstore transparency entry: 1239377838
- Sigstore integration time:
-
Permalink:
reactor-no8/NeoTextSynthesizer@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/reactor-no8
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Trigger Event:
release
-
Statement type:
File details
Details for the file neots-0.1.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: neots-0.1.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 3.6 MB
- Tags: CPython 3.13, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1eaef201d723b6b3e57514d966acf03bb8546daf0c89a74fbd0d51a4d3276ac7
|
|
| MD5 |
877d7da4e3fcac708356fd10c45ea644
|
|
| BLAKE2b-256 |
e981a97450aa21d0160139196d060313ba25ab91ac13dd769f7a7ff013dcf01c
|
Provenance
The following attestation bundles were made for neots-0.1.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:
Publisher:
workflow.yml on reactor-no8/NeoTextSynthesizer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
neots-0.1.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl -
Subject digest:
1eaef201d723b6b3e57514d966acf03bb8546daf0c89a74fbd0d51a4d3276ac7 - Sigstore transparency entry: 1239377843
- Sigstore integration time:
-
Permalink:
reactor-no8/NeoTextSynthesizer@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/reactor-no8
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Trigger Event:
release
-
Statement type:
File details
Details for the file neots-0.1.2-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: neots-0.1.2-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 3.1 MB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b06411ebfe3237bed35c11761b879c2339ce96369dec35b56622a1f925aefd02
|
|
| MD5 |
8931b57f7e202b0d2949d9a44e4358b9
|
|
| BLAKE2b-256 |
ac8fa5c46c06fee27f67ba33372a610c98513c4595a9c109493b393a793f9e6d
|
Provenance
The following attestation bundles were made for neots-0.1.2-cp313-cp313-macosx_11_0_arm64.whl:
Publisher:
workflow.yml on reactor-no8/NeoTextSynthesizer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
neots-0.1.2-cp313-cp313-macosx_11_0_arm64.whl -
Subject digest:
b06411ebfe3237bed35c11761b879c2339ce96369dec35b56622a1f925aefd02 - Sigstore transparency entry: 1239377858
- Sigstore integration time:
-
Permalink:
reactor-no8/NeoTextSynthesizer@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/reactor-no8
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Trigger Event:
release
-
Statement type:
File details
Details for the file neots-0.1.2-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: neots-0.1.2-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 2.4 MB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1b03faa68c1ea7e74cbc8633779975ae65252827b3335ce2f73e3734173a5a9
|
|
| MD5 |
278a8da49c37b59b7537e244dab83541
|
|
| BLAKE2b-256 |
9cbe6b771b788aa4e00a73e9b79f6abd8fd611429eda2737e0e19cad96cc294e
|
Provenance
The following attestation bundles were made for neots-0.1.2-cp312-cp312-win_amd64.whl:
Publisher:
workflow.yml on reactor-no8/NeoTextSynthesizer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
neots-0.1.2-cp312-cp312-win_amd64.whl -
Subject digest:
a1b03faa68c1ea7e74cbc8633779975ae65252827b3335ce2f73e3734173a5a9 - Sigstore transparency entry: 1239377860
- Sigstore integration time:
-
Permalink:
reactor-no8/NeoTextSynthesizer@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/reactor-no8
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Trigger Event:
release
-
Statement type:
File details
Details for the file neots-0.1.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: neots-0.1.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 3.8 MB
- Tags: CPython 3.12, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e0fdc2422f02be8f1c30c697ed357c3727813fa18c44d51dd03f149a56b35ef8
|
|
| MD5 |
92b9809056d3b9f43194e080a0ebe750
|
|
| BLAKE2b-256 |
ee4699ace775536be5d12d1981bde3a218673f63ff46fb15f31b2fa9ab45fad6
|
Provenance
The following attestation bundles were made for neots-0.1.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
workflow.yml on reactor-no8/NeoTextSynthesizer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
neots-0.1.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
e0fdc2422f02be8f1c30c697ed357c3727813fa18c44d51dd03f149a56b35ef8 - Sigstore transparency entry: 1239377842
- Sigstore integration time:
-
Permalink:
reactor-no8/NeoTextSynthesizer@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/reactor-no8
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Trigger Event:
release
-
Statement type:
File details
Details for the file neots-0.1.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: neots-0.1.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 3.6 MB
- Tags: CPython 3.12, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b7e35ae795e4f0d972b0b0c9434b41eb9077fc7c70dbc2c683cf4f61628ba5ed
|
|
| MD5 |
8c39d2b48acd634c85dc2461ad1140bc
|
|
| BLAKE2b-256 |
c46fd2de63e4a4af4e795442cd066f15c5d2d261158c0cc7ff5c5cb1c8161785
|
Provenance
The following attestation bundles were made for neots-0.1.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:
Publisher:
workflow.yml on reactor-no8/NeoTextSynthesizer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
neots-0.1.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl -
Subject digest:
b7e35ae795e4f0d972b0b0c9434b41eb9077fc7c70dbc2c683cf4f61628ba5ed - Sigstore transparency entry: 1239377837
- Sigstore integration time:
-
Permalink:
reactor-no8/NeoTextSynthesizer@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/reactor-no8
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Trigger Event:
release
-
Statement type:
File details
Details for the file neots-0.1.2-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: neots-0.1.2-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 3.1 MB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2f507a5644e9fc7b8791570b95f2e4ce3d5b0fc3b3de0546b0b5483624cc6eac
|
|
| MD5 |
76de50c2c5d5c4f54a468288f079f3ef
|
|
| BLAKE2b-256 |
90a6af5b5d275aa4c17bb9438ba928d5e86ce5da8d25f325a2c11e777fb64b14
|
Provenance
The following attestation bundles were made for neots-0.1.2-cp312-cp312-macosx_11_0_arm64.whl:
Publisher:
workflow.yml on reactor-no8/NeoTextSynthesizer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
neots-0.1.2-cp312-cp312-macosx_11_0_arm64.whl -
Subject digest:
2f507a5644e9fc7b8791570b95f2e4ce3d5b0fc3b3de0546b0b5483624cc6eac - Sigstore transparency entry: 1239377855
- Sigstore integration time:
-
Permalink:
reactor-no8/NeoTextSynthesizer@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/reactor-no8
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Trigger Event:
release
-
Statement type:
File details
Details for the file neots-0.1.2-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: neots-0.1.2-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 2.4 MB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e2bd33e815217843cb3a609566e23605cba1a3ae09a6f11b906316bb09be8811
|
|
| MD5 |
5bf4d1d40246f9e19b026f829a98067e
|
|
| BLAKE2b-256 |
4033f8d1e48adbb791122be995283dcb2c43d5211be025c0252eb351ff75a80d
|
Provenance
The following attestation bundles were made for neots-0.1.2-cp311-cp311-win_amd64.whl:
Publisher:
workflow.yml on reactor-no8/NeoTextSynthesizer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
neots-0.1.2-cp311-cp311-win_amd64.whl -
Subject digest:
e2bd33e815217843cb3a609566e23605cba1a3ae09a6f11b906316bb09be8811 - Sigstore transparency entry: 1239377856
- Sigstore integration time:
-
Permalink:
reactor-no8/NeoTextSynthesizer@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/reactor-no8
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Trigger Event:
release
-
Statement type:
File details
Details for the file neots-0.1.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: neots-0.1.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 3.8 MB
- Tags: CPython 3.11, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b85de93eaedbf1cf44cf1544641b85459c547a795df4db7e2be8d555908106f0
|
|
| MD5 |
781196cb4b1ef2658d4bb27b41d23264
|
|
| BLAKE2b-256 |
3c6ffe249ec9e8b421d0997b1d288a550eaa5669400ece9a0efd3012cc9d10de
|
Provenance
The following attestation bundles were made for neots-0.1.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
workflow.yml on reactor-no8/NeoTextSynthesizer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
neots-0.1.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
b85de93eaedbf1cf44cf1544641b85459c547a795df4db7e2be8d555908106f0 - Sigstore transparency entry: 1239377870
- Sigstore integration time:
-
Permalink:
reactor-no8/NeoTextSynthesizer@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/reactor-no8
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Trigger Event:
release
-
Statement type:
File details
Details for the file neots-0.1.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: neots-0.1.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 3.6 MB
- Tags: CPython 3.11, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
85b55c17ef2f6969d9d067b6c8a2897e96ecbd81e47b92941fadca2ddc2ad951
|
|
| MD5 |
b0e130834d8ace341a9bad793834c761
|
|
| BLAKE2b-256 |
e980e0064f289bd18f03a02422077584b9115ba9f8042f4d21ad3218a7fc1d8d
|
Provenance
The following attestation bundles were made for neots-0.1.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:
Publisher:
workflow.yml on reactor-no8/NeoTextSynthesizer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
neots-0.1.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl -
Subject digest:
85b55c17ef2f6969d9d067b6c8a2897e96ecbd81e47b92941fadca2ddc2ad951 - Sigstore transparency entry: 1239377864
- Sigstore integration time:
-
Permalink:
reactor-no8/NeoTextSynthesizer@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/reactor-no8
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Trigger Event:
release
-
Statement type:
File details
Details for the file neots-0.1.2-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: neots-0.1.2-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 3.1 MB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e3645b151d659d5506ead2587a08f489e20bb5419f453dd62c9997856ed57b57
|
|
| MD5 |
44ea8257eb64cdb278f557760b30e627
|
|
| BLAKE2b-256 |
7c65024bd0c29801a23ad273186086b837c6315e36b277f99d12490ecf15ccce
|
Provenance
The following attestation bundles were made for neots-0.1.2-cp311-cp311-macosx_11_0_arm64.whl:
Publisher:
workflow.yml on reactor-no8/NeoTextSynthesizer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
neots-0.1.2-cp311-cp311-macosx_11_0_arm64.whl -
Subject digest:
e3645b151d659d5506ead2587a08f489e20bb5419f453dd62c9997856ed57b57 - Sigstore transparency entry: 1239377871
- Sigstore integration time:
-
Permalink:
reactor-no8/NeoTextSynthesizer@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/reactor-no8
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Trigger Event:
release
-
Statement type:
File details
Details for the file neots-0.1.2-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: neots-0.1.2-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 2.4 MB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c758e567014ed0573175c56a3d859252ba3eb4e210af460b1debb92fc2b456a5
|
|
| MD5 |
82d64bebc649ad689be564eba105c6b0
|
|
| BLAKE2b-256 |
e5bdedf516ea68bc9f45814772f49278f5d8b3494c6608f428e6fc39acb40cb6
|
Provenance
The following attestation bundles were made for neots-0.1.2-cp310-cp310-win_amd64.whl:
Publisher:
workflow.yml on reactor-no8/NeoTextSynthesizer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
neots-0.1.2-cp310-cp310-win_amd64.whl -
Subject digest:
c758e567014ed0573175c56a3d859252ba3eb4e210af460b1debb92fc2b456a5 - Sigstore transparency entry: 1239377840
- Sigstore integration time:
-
Permalink:
reactor-no8/NeoTextSynthesizer@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/reactor-no8
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Trigger Event:
release
-
Statement type:
File details
Details for the file neots-0.1.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: neots-0.1.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 3.8 MB
- Tags: CPython 3.10, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dd6644e6e3b29f42501131129fac670cd8b1042fcdc437bdacfe0cb5c1df9fbe
|
|
| MD5 |
bdbd241f39ee44270377bfe9e263eb18
|
|
| BLAKE2b-256 |
f39b5bf92bac6a9b2e3478b6909ed562c47afc09dd1f83d2753dd877a51df39a
|
Provenance
The following attestation bundles were made for neots-0.1.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
workflow.yml on reactor-no8/NeoTextSynthesizer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
neots-0.1.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
dd6644e6e3b29f42501131129fac670cd8b1042fcdc437bdacfe0cb5c1df9fbe - Sigstore transparency entry: 1239377850
- Sigstore integration time:
-
Permalink:
reactor-no8/NeoTextSynthesizer@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/reactor-no8
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Trigger Event:
release
-
Statement type:
File details
Details for the file neots-0.1.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: neots-0.1.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 3.6 MB
- Tags: CPython 3.10, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b129b870a57a0184ab062230a371d4847fa2d59e3b200466098dda4636be75de
|
|
| MD5 |
1c54d50983b87f9e42fb54863e6ea28d
|
|
| BLAKE2b-256 |
eee195623b4b3911a5fbd241be29f1268f34497ca22d0d774d09a9dc58727266
|
Provenance
The following attestation bundles were made for neots-0.1.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:
Publisher:
workflow.yml on reactor-no8/NeoTextSynthesizer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
neots-0.1.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl -
Subject digest:
b129b870a57a0184ab062230a371d4847fa2d59e3b200466098dda4636be75de - Sigstore transparency entry: 1239377866
- Sigstore integration time:
-
Permalink:
reactor-no8/NeoTextSynthesizer@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/reactor-no8
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Trigger Event:
release
-
Statement type:
File details
Details for the file neots-0.1.2-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: neots-0.1.2-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 3.1 MB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3c903b60f812e8f5b734bcc1834607f57368b9ba277bd426f777a03559a6c91e
|
|
| MD5 |
8a475934dbac5d1a7b5d3e97f0db71af
|
|
| BLAKE2b-256 |
b1e5015b14a88938519f95646543aa38fe1467cc32977e7f81e60ba8bb81272e
|
Provenance
The following attestation bundles were made for neots-0.1.2-cp310-cp310-macosx_11_0_arm64.whl:
Publisher:
workflow.yml on reactor-no8/NeoTextSynthesizer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
neots-0.1.2-cp310-cp310-macosx_11_0_arm64.whl -
Subject digest:
3c903b60f812e8f5b734bcc1834607f57368b9ba277bd426f777a03559a6c91e - Sigstore transparency entry: 1239377851
- Sigstore integration time:
-
Permalink:
reactor-no8/NeoTextSynthesizer@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/reactor-no8
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@e4bf6ac72e7998fcf1dfb2dba59821c64d1658f2 -
Trigger Event:
release
-
Statement type: