SPECIMEN 001 · LOCAL · v2.7.0

Presence + keyless text

Hidden message decryption

follow @suddenlyjon on X

Drop a PNG or JPEG. This tab hunts sequential LSB, scanline tokens, PNG tEXt/zTXt/iTXt, and JPEG comments, then prints the string. Presence, JPEG container inspect, and FSNet stay on the local CLI. Nothing is uploaded. Nothing is stripped.

Decode stays in this tab. Scan, inspect, doctor, and bench run on your machine.

Local tab No upload No strip CLI presence

Drop a PNG or JPEG to read keyless text. Nothing leaves this tab.

LAMP 365 nm FIELD UV HEAD local X -- Y --

READOUT · KEYLESS PLAINTEXT

Family
--
Layout
--
Conf
--
Drop a plate or load the marked specimen.

LSB, scanline tokens, PNG tEXt/zTXt/iTXt, JPEG comments. Encrypted and vendor marks will not print.

002

Four readings. Never a lift.

PRESENT

A veil showed up.

Spatial, frequency, residual, ResidualCNN, or FSNet agreed something is hiding. CLI only. JPEG files take the FSNet blend. Default present uses the generator-photo cut (~0.67).

ABSENT

No mark on this pass.

The ensemble did not fire. That is a reading, not a promise the file is clean in every latent space.

READ

Plaintext came out.

Sequential LSB, a scanline token, a PNG tEXt/zTXt/iTXt chunk, or a JPEG comment held a string. This tab can print it.

UNKNOWN

The lamp is honest.

Encrypted stego, SynthID, Digimarc, and neural marks stay silent. A miss is better than a fake strip.

003

Complementary specialists

LSB lives in bits. Tree-rings live in frequency. Training one net on both drowns the other. VeilScan keeps ResidualCNN on LSB and FSNet on frequency, then fuses only the heads that earned a peak. Decode is a separate walk. JPEG files are inspected as JPEG, not guessed from 8x8 ringing.

  • Spatial Chi-square · RS · SPA Bit-plane entropy, histogram comb. Patchwork weight 0.
  • Frequency DCT · DWT · FFT rings Haar, spread, Tree-Ring circular FFT.
  • JPEG file SOI · Q-table · 4:2:0 quality_est sets jpeg_freq_weight. Q50 blends more than Q95.
  • Decode LSB · scanlines · tEXt/zTXt/iTXt · COM Tokens without coordinates. This tab.
  • Deep ResidualCNN · FSNet LSB vs frequency. Native 128 windows on large stills.
  • Inspect scan + decode + HUD One JSON, schema 5. doctor checks hashes and operating points.

004

Run it on the metal

SPECIMEN PROTOCOL · LOCAL ONLY

cd veilscan
py -3 -m pip install -e .
py -3 -m veilscan inspect path/to/image.jpg
py -3 -m veilscan decode path/to/image.png

Python 3. Optional CUDA. GUI is Gradio on your box, not this site.

  • py -3 -m veilscan scan image.jpg --json --heatmap overlay.png
  • py -3 -m veilscan inspect image.jpg --policy both
  • py -3 -m veilscan decode image.png --json
  • py -3 -m veilscan doctor
  • py -3 -m veilscan batch folder --json
  • py -3 -m veilscan selftest --per-detector
  • py -3 -m veilscan bench --covers photos --n 50 --attacks identity,jpeg_70,jpeg_50 --write-operating-point

Lab note

What the lamp will not pretend

  • Keyless plaintext only. Passwords, Steghide, and OpenStego with a key stay opaque.
  • SynthID, Digimarc, Tree-Ring, HiDDeN, and other neural or vendor marks are not a printed string.
  • Spatial LSB usually dies after JPEG. Scanlines still hunt the original PNG. Comments and EXIF can still print.
  • LSB and Patchwork can defeat frequency-only nets. That is why spatial heads exist.
  • A VeilScan score is not a copyright ruling. There is no remover.
  • CLI present uses a generator-photo cut (~0.67). BSDS camera false-fires at that cut are about 0.08. Camera sidecar ~0.756. Large stills use native 128 windows (corners plus center). JPEG blend is heavier at Q50 than at Q95. JPEG Q50 DCT TPR at 128px is 0.46. Patchwork unsupported. This tab does not score presence.
  • Scan files you own or are authorized to inspect.
Macro paper fibers under a UV beam, phosphor rings in the grain.
Fiber under the lamp. The mark is a stain in the grain, not a sticker on top.

005

Quick answers

Does a JPEG file change the score?
Yes, on the CLI. Q-table quality sets jpeg_freq_weight (0.25 at Q90+, 0.70 at Q50). This tab still only prints keyless text, including JPEG comments.
What is inspect versus decode?
decode prints keyless plaintext. inspect runs presence then decode, writes one JSON (schema 5) and a HUD overlay. doctor checks checkpoint hashes and operating points. Presence never runs in this tab.
Do I upload images here?
No. Drop and decode run in this tab from the file bytes. The ensemble still runs locally.
Can it read hidden text?
Yes, if it is keyless plaintext: sequential LSB, a short scanline token, PNG tEXt/zTXt/iTXt, or JPEG comments. Encrypted and vendor marks will not print.
Can it strip a watermark?
No. Presence and read. There is no strip path on purpose.
Where is the source?
Private local tree. This site is the public lamp, not a GitHub dump.
What threshold does present use?
Default present uses the generator-photo lock around 0.67 (`--policy generator`). Pass `--policy camera` to use the BSDS sidecar (~0.756). `--policy both` prints both. Stills larger than 128px use native 128 windows. inspect prints luma Q at DCT bins (3,4) and (4,3) next to DCT pair energy. JPEG Q50 DCT TPR at 128px is 0.46. This tab does not score presence.
Who made this?
Jon Bailey / Pitchfork-and-Torch. Peer to Ghost and Trench Coat on the constellation.
What does the marked plate say?
Marked plate: the veil is in the pixels. Token plate: a scanline tag like INV_WM without a prior box.