OppaiOracle experimental-X1.1
experimental-X1.1 is the 448×448 continuation of experimental-X1. It is a multi-label anime and illustration tagger, released in FP32 ONNX and FP32 safetensors formats. Both contain the selected 448px epoch 9, update 55,719 weights. This continuation completed its nine-epoch schedule and WSD cooldown to zero learning rate on September 17, 2026.
This remains an experimental release. The shared-tag comparison below shows higher micro-F1 than V1.1 at development-tuned thresholds, with slightly lower overall exact mAP. Performance varies by tag and frequency; there is no blanket claim that X1.1 replaces V1.1 for every use.
Download and run
The complete download includes both weight formats, about 1.18 GB in total. Use a fresh Python environment, download the repository, then install the dependencies for your chosen format:
python -m pip install huggingface_hub
python -c "from huggingface_hub import snapshot_download; snapshot_download('Grio43/OppaiOracle-experimental-X1.1', local_dir='OppaiOracle-experimental-X1.1')"
cd OppaiOracle-experimental-X1.1
For ONNX Runtime on CPU:
python -m pip install -r requirements.txt
python infer.py image.jpg --format onnx --device cpu --output predictions.json
For safetensors with PyTorch:
python -m pip install -r requirements-torch.txt
python infer.py image.jpg --format safetensors --device cpu --output predictions.json
For a smaller download, obtain just download.py, install
huggingface_hub, and run one of the following from the directory containing it:
python download.py OppaiOracle-experimental-X1.1 --format onnx
python download.py OppaiOracle-experimental-X1.1 --format safetensors
Each command downloads the selected weights and required support files. The
helper resolves --revision (default main) to one commit before downloading,
keeping the configuration, vocabulary and weights aligned. Use --format all
to obtain both formats. The resulting directory supports the same install and
inference commands above.
The supplied PyTorch model code loads model.safetensors and the real architecture
configuration in config.json. These are inference weights; the safetensors file
does not contain a pickled training checkpoint or optimizer state. The release
preserves FP32 values without quantization or conversion to BF16/FP16.
Both inference paths apply the same preprocessing and return tag names with sigmoid
scores, excluding PAD and UNK. The default threshold is 0.7085427045822144, the
best micro-F1 threshold on the shared-tag development comparison's 200-point grid.
It is a useful starting point, not final deployment calibration, and was not
optimized independently for every tag or for the complete vocabulary. Set
--threshold for your application. Scores are not calibrated probabilities that a
label is correct.
To inspect the 30 highest scores regardless of the default threshold:
python infer.py image.jpg --format onnx --threshold 0 --top-k 30
Multiple image paths and --batch-size are supported. --device cuda requires
the corresponding CUDA-capable PyTorch or ONNX Runtime environment. Local
inference does not make network requests.
Training
The model lineage was trained from scratch, without an externally pretrained backbone. X1.1 starts from the released 320px X1 weights and adapts all model weights, rather than freezing the backbone.
| Stage | Recorded recipe |
|---|---|
| 320px source | V2 Phase 1, epoch 21, update 127,974; the checkpoint released as experimental-X1 |
| 320px optimization | Effective batch 1,024; AdamW8bit with FP32 head/position optimizer states; BF16 AMP; weight decay 0.05; 10,000-update warmup; stable LR 5.4e-4 |
| Source loss history | ASL negative gamma 4 initially, explicitly changed to 3 at update 41,223; positive gamma 0, probability clip 0.05, alpha 1, no label smoothing, detached focal weights |
| 448px continuation | Nine phase-local epochs, 55,719 optimizer updates, September 13–17, 2026 |
| Initialization | One-time bicubic positional-grid interpolation from 20×20 to 28×28; fresh optimizer, scheduler and phase-local history; learned weights and frozen vocabulary retained |
| 448px batch and precision | Microbatch 48 × 21 accumulation = 1,008; BF16 AMP; no activation checkpointing |
| 448px optimizer | AdamW8bit; FP32 head/position optimizer states; weight decay 0.05; gradient norm clipping 1.0 |
| 448px schedule | Base LR 1.5e-5, square-root scaling from batch 256 gives peak LR 2.97647022495e-5; one warmup epoch; budget-driven WSD cooldown begins at update 48,451, lasts 7,268 updates and ends at zero LR |
| 448px loss | Fixed ASL negative/positive gamma 3/0, probability clip 0.05, alpha 1, no label smoothing, detached focal weights; PAD/UNK excluded |
| Selection | Highest recorded cooldown validation binned mAP; epoch 9 is both the selected best and final checkpoint |
The 320px source did not complete its original planned cooldown. The separate 448px experiment did complete its own cooldown; it does not imply completion of a later 512px phase. Plateau-triggered cooldown was disabled for the nine-epoch continuation; its total budget included warmup and cooldown.
At 448px, drop-path was 0.15 and ordinary dropout was zero. Augmentation used
brightness/contrast/saturation jitter of 0.22/0.15/0.06, each at probability 0.5;
2–5-degree rotation at probability 0.30; Gaussian blur sigma 0.1–1.0 at probability
0.15; and horizontal flipping at probability 0.5. Images carrying any of
gen:left-handed, gen:left-to-right_manga, gen:right-over-left_kimono or
gen:right-to-left_comic were excluded from horizontal flips. Random erasing was
disabled.
Dataset and tag updates
The frozen prepared corpus contains 6,269,823 image/metadata pairs, split into 6,239,823 TRAIN and 30,000 EVAL images. The 448px continuation retained the same split, labels and vocabulary as X1.
| Source | Pairs |
|---|---|
| Danbooru | 6,142,955 |
| Real-life photos without people | 123,335 |
| Requested images and tags | 3,533 |
Dataset-maintainer provenance: the author reports that the Danbooru metadata was synchronized in August 2026, deprecated tags were removed, and renamed tags were updated to their correct canonical names. This describes the metadata preparation, not an assertion that every image was uploaded in August. These cleanup statements are supplied by the dataset maintainer; the release checks verify the frozen artifacts and model alignment.
General tags have a 450-image minimum, down from V1.1's 500. Counts are distinct images in the combined prepared corpus. Character, copyright, artist and metadata tags use a 550-image minimum; the four rating tags are mandatory. Despite the lower general-tag floor, the cleaned vocabulary has 14,994 tags versus 19,292 in V1.1. The overall reduction accompanies deprecated-tag removal, canonical-name updates and the changed vocabulary policy; it is not a count of deprecated tags alone.
| Category | Tags |
|---|---|
| General | 9,920 |
| Character | 3,069 |
| Copyright | 1,139 |
| Artist | 745 |
| Metadata | 117 |
| Rating | 4 |
| Total real tags | 14,994 |
The model has 14,996 output positions, including PAD at index 0 and UNK at index 1. Keep the supplied vocabulary ordering: V1.1 indices and tag counts are not compatible with this model.
Evaluation against V1.1
Both models were evaluated at 448px in FP32 ONNX, on the same frozen 30,000 EVAL images and recorded labels, with identical preprocessing and TF32 disabled. All source-sidecar hashes were verified. One-to-one shared names yielded 13,569 tags, with 13,394 supported tags contributing to macro AP. V1.1 results were reused from a verified archived evaluation of the same images and support.
| Shared-tag measurement | experimental-X1.1 | V1.1 |
|---|---|---|
| Exact mAP | 58.7513% | 59.2716% |
| 200-bin mAP | 58.5193% | 58.8611% |
| Best grid micro-F1 | 68.6410% | 66.5864% |
| Threshold for that micro-F1 | 0.708543 | 0.798995 |
| General-tag exact mAP, 8,676 supported shared tags | 43.7549% | 43.9700% |
X1.1's overall shared-tag exact mAP is 0.5203 percentage points lower; its micro-F1 is 2.0546 points higher at independently selected grid thresholds. Across supported shared tags, X1.1 has higher AP on 5,425, V1.1 on 6,271, and 1,698 tie. For general tags with at least 50 EVAL positives, X1.1's exact mAP is 54.893% versus 53.134%; V1.1 retains an advantage among the sparsest general tags.
These are development-set measurements, not an independent clean-label test. This EVAL set has informed training decisions and threshold selection. V1.1's training overlap with these images is unverified. Recorded labels may be missing or incorrect, and aggregate gains do not establish a gain for every tag. See comparison details and shared-tag AP results.
For the complete X1.1 supported vocabulary, the FP32 export's exact mAP was 57.7464% over 14,767 tags. The final BF16 training validation recorded exact mAP 57.7166%, binned mAP 57.5063%, and micro-F1 66.2121% at the inherited training diagnostic threshold 0.7927. These differ in numerical precision and/or tag scope from the shared-tag table; they should not be substituted for one another. The archived full FP32 measurement is in validation.json; training_metadata.json records the training provenance.
Architecture and preprocessing
The 147,706,932-parameter ViT uses patch size 16, width 896, 18 transformer layers, 14 attention heads, MLP width 2,320, QK normalization and LayerScale initialization 0.1. Its positional grid is 28×28 at 448px.
| ONNX input/output | Type | Shape |
|---|---|---|
pixel_values | float32 | [batch, 3, 448, 448] |
padding_mask | bool | [batch, 448, 448] |
probabilities | float32 | [batch, 14996] |
Batch size is dynamic; spatial dimensions are fixed. Apply EXIF orientation,
convert to RGB, composite transparency onto [114,114,114], and downscale with
LANCZOS while preserving aspect ratio, without upscaling. Center the result on
a 448×448 canvas with the same pad color. Padding-mask values are True for
padding. Divide pixels by 255, normalize using mean and standard deviation
[0.5,0.5,0.5], and arrange as NCHW. The supplied script implements this contract.
The ONNX output already includes sigmoid. The safetensors inference helper applies sigmoid to the PyTorch logits. Four rating scores are independent sigmoid outputs, not a softmax. A frontend must support the two inputs and this preprocessing; a raw-image, single-input tagger interface needs an adapter.
Files, integrity and download statistics
| File | Purpose |
|---|---|
model.onnx | FP32 inference graph, about 591 MB, with embedded vocabulary/preprocessing metadata |
model.safetensors | FP32 tensor-only weights, about 591 MB |
config.json | Real architecture and release configuration consumed by the supplied loader |
preprocessing.json | Image transform and input contract |
vocabulary.json, selected_tags.csv | Exact output ordering and tag categories |
infer.py, download.py | Standalone inference and selective release download helpers |
requirements.txt, requirements-torch.txt | Dependencies for CPU ONNX and PyTorch/safetensors inference |
training_metadata.json, validation.json | Training provenance and archived full FP32 evaluation |
inference_checks.json | Release-package checks using a bounded set of fixtures; not another full evaluation |
release_manifest.json, SHA256SUMS | Provenance and file-integrity records |
The normal repository download includes config.json, which the supplied loader
actually uses. Hugging Face download statistics
count requests to supported query files such as config.json. The public counter
is not a unique-user count; direct downloads of weights alone may not be reflected.
There are no extra telemetry calls or artificial counting requests in the
inference helper.
The selected source checkpoint SHA256 is:
d400c2e460e7287357f86083f84c187790a45b1d47985e908c52825373f888c3
This identifies the preserved local training source. The release manifest and checksums identify the distributed files; optimizer state and the pickled training checkpoint are not included. The release ONNX has refreshed descriptive metadata; its inference graph and learned weights are unchanged from the evaluated artifact. The manifest records both artifact identities.
Scope and license
X1.1 is intended for experimental tagging, comparison and feedback within the license terms. Training annotations are noisy and incomplete; rare concepts and visually similar tags can be unreliable. Review suggestions before applying bulk dataset edits. The vocabulary includes sexual-content labels and independent rating tags; this model has not been validated as a safety classifier.
The release retains the Educational Use Only License. It permits the educational uses described in that file and prohibits commercial use. Read the full license for attribution, redistribution and other conditions.