desert-ant-labs/eye

Model

Eye

1

4 commits

1 linked in READMEs

updated Oct 16, 2026

See the code

README

Eye

Eye tags photos on the device so apps can find and filter them: what a photo is (screenshot, receipt, selfie), what is in it (558 scenes), how it came out (blurry, eyes closed), who is in it (group shot, portrait) and whether it is sensitive, each with a calibrated confidence where 0.5 is the recommended cutoff and 0.9 a strict one. It also scores photos, finds people, pets and faces, and picks crops.

Files

FileFormatSizeRuns on
eye.mlmodelcCompiled Core ML, one function per task48MBApple platforms; fastest on the Neural Engine, also runs on CPU and GPU
eye.tfliteLiteRT, one signature per task66MBAndroid, Linux, Windows, Node, the browser
eye_meta.jsonJSON880KBInputs, outputs, decoding constants and the tags (calibration curves and rules)

Functions

Both files hold the same functions under the same names. Every input is RGB (or gray for sharpness) in 0...1, shape (1, C, H, W): float16 for Core ML, float32 for LiteRT. eye_meta.json has the exact preparation and how to decode each output.

FunctionInputOutputs
photo384x384 centre cropembedding, type, reject reasons, sensitive content, scenes, rotation, aesthetic, keeper, cover, focus and bokeh, pet attributes
photo_peakas photophoto's outputs and the peak moment
spatialwhole frame squashed to 384x384where people look, pet and person boxes, shot type, scores for 1,296 crop boxes
faces_detect768x768, the photo letterboxedface heatmap, size, offset, landmarks
faces_analyze128x128 crop, 1.4x a face boxeyes open, blink, smile, gaze, expression, pose, quality and more
sharp_4x3, sharp_3x4, sharp_16x9, sharp_9x16gray, the shape closest to the photo's aspectsharpness, blur map

Tags

Every tag has a confidence calibrated so 0.5 is the recommended cutoff and 0.9 a strict one. At 0.5: photo types 0.8 to 1.0 precise (screenshot 0.98, receipt 1.00), scenes 0.88 median, people 0.95, eyes closed 0.92. The keep-or-delete reasons (forgettable, bad framing, ...) are less reliable; use them for suggestions. For anything automatic, such as hiding sensitive photos, use the strict cutoff.

Accuracy

On the same test sets, through the same scoring code:

Test setMetriceye.mlmodelceye.tflite (CPU)
KonIQ-10kaesthetic SRCC0.62880.6291
COCO val2017person AP500.38140.3837
MIT1003where people look, CC0.71530.7195
CUHK croppingcrop IoU0.82440.8241
WIDER Face valAP, hard0.68060.6812
CEWeyes open AUC0.99430.9945

Speed

One photo, photo_peak, on a Mac with an Apple M6:

Runtimems
Core ML, Neural Engine5.5
LiteRT, GPU (Metal)30
LiteRT.js, WebGPU, in Chrome41
LiteRT, CPU, 4 threads49
LiteRT.js, wasm with threads, in Chrome176

Limitations

  • eye.tflite is not yet measured on Android devices.
  • Face analysis describes a face. It doesn't identify who someone is.
  • Eye is trained on photos. Scores for illustrations, screenshots and heavily edited images are less reliable.

Built on

  • Image encoder: PE-Core S/16-384 by Meta, Apache 2.0, fine-tuned and with heads trained by Desert Ant Labs.
  • The face detector, face analyzer and sharpness model are Desert Ant Labs' own, trained from scratch.

Attribution and license texts for third-party components are in THIRD_PARTY_NOTICES.md.

License

Released under the Desert Ant Labs Source-Available License v1.0 (see LICENSE.md). Free for commercial use up to 100,000 MAU per Model. Contact [email protected] for commercial licensing at larger scale.

aesthetic
core-ml
image
image-classification
image-quality
litert
on-device
tflite

desert-ant-labs/eye

Model

Eye

1

4 commits

1 linked in READMEs

updated Oct 16, 2026

See the code

README

Eye

Eye tags photos on the device so apps can find and filter them: what a photo is (screenshot, receipt, selfie), what is in it (558 scenes), how it came out (blurry, eyes closed), who is in it (group shot, portrait) and whether it is sensitive, each with a calibrated confidence where 0.5 is the recommended cutoff and 0.9 a strict one. It also scores photos, finds people, pets and faces, and picks crops.

Files

FileFormatSizeRuns on
eye.mlmodelcCompiled Core ML, one function per task48MBApple platforms; fastest on the Neural Engine, also runs on CPU and GPU
eye.tfliteLiteRT, one signature per task66MBAndroid, Linux, Windows, Node, the browser
eye_meta.jsonJSON880KBInputs, outputs, decoding constants and the tags (calibration curves and rules)

Functions

Both files hold the same functions under the same names. Every input is RGB (or gray for sharpness) in 0...1, shape (1, C, H, W): float16 for Core ML, float32 for LiteRT. eye_meta.json has the exact preparation and how to decode each output.

FunctionInputOutputs
photo384x384 centre cropembedding, type, reject reasons, sensitive content, scenes, rotation, aesthetic, keeper, cover, focus and bokeh, pet attributes
photo_peakas photophoto's outputs and the peak moment
spatialwhole frame squashed to 384x384where people look, pet and person boxes, shot type, scores for 1,296 crop boxes
faces_detect768x768, the photo letterboxedface heatmap, size, offset, landmarks
faces_analyze128x128 crop, 1.4x a face boxeyes open, blink, smile, gaze, expression, pose, quality and more
sharp_4x3, sharp_3x4, sharp_16x9, sharp_9x16gray, the shape closest to the photo's aspectsharpness, blur map

Tags

Every tag has a confidence calibrated so 0.5 is the recommended cutoff and 0.9 a strict one. At 0.5: photo types 0.8 to 1.0 precise (screenshot 0.98, receipt 1.00), scenes 0.88 median, people 0.95, eyes closed 0.92. The keep-or-delete reasons (forgettable, bad framing, ...) are less reliable; use them for suggestions. For anything automatic, such as hiding sensitive photos, use the strict cutoff.

Accuracy

On the same test sets, through the same scoring code:

Test setMetriceye.mlmodelceye.tflite (CPU)
KonIQ-10kaesthetic SRCC0.62880.6291
COCO val2017person AP500.38140.3837
MIT1003where people look, CC0.71530.7195
CUHK croppingcrop IoU0.82440.8241
WIDER Face valAP, hard0.68060.6812
CEWeyes open AUC0.99430.9945

Speed

One photo, photo_peak, on a Mac with an Apple M6:

Runtimems
Core ML, Neural Engine5.5
LiteRT, GPU (Metal)30
LiteRT.js, WebGPU, in Chrome41
LiteRT, CPU, 4 threads49
LiteRT.js, wasm with threads, in Chrome176

Limitations

  • eye.tflite is not yet measured on Android devices.
  • Face analysis describes a face. It doesn't identify who someone is.
  • Eye is trained on photos. Scores for illustrations, screenshots and heavily edited images are less reliable.

Built on

  • Image encoder: PE-Core S/16-384 by Meta, Apache 2.0, fine-tuned and with heads trained by Desert Ant Labs.
  • The face detector, face analyzer and sharpness model are Desert Ant Labs' own, trained from scratch.

Attribution and license texts for third-party components are in THIRD_PARTY_NOTICES.md.

License

Released under the Desert Ant Labs Source-Available License v1.0 (see LICENSE.md). Free for commercial use up to 100,000 MAU per Model. Contact [email protected] for commercial licensing at larger scale.

aesthetic
core-ml
image
image-classification
image-quality
litert
on-device
tflite