the product

One endpoint.
Fifty-two shapes.
A face that looks back.

Eyeconic turns any camera input into a complete avatar-rig payload — ARKit-compatible blendshapes, per-eye gaze, head pose, dilation, blink, squint. Drop the JSON into Unity, Unreal, Three or VRM. No middleware, no model glue, no per-rig retraining.

interactive demo

Pull a slider.
Watch it react.

These six controls are six of the fifty-two blendshapes we stream every frame. The real API does this from a webcam, automatically, in fifteen milliseconds.

Move your eyes off the puppet feeling. Squint. Dilate. Blink halfway. Notice how fast a face becomes a face when the eye-region carries weight.

look_x 0.00
look_y 0.00
blink 0.00
squint 0.00
dilate 0.00
eye_wide 0.00
+y · up stream · /v1 −x · in 52 · shapes

A dead stare.
And a glance back.

The thing every VTuber rig gets wrong: eyes drift on a fixed schedule, blink on a metronome, never react to the audience. Eyeconic changes one variable — the eye region — and the avatar wakes up.

before · industry default

Dead VTuber eyes

Linear blink loop. Fixed gaze. No dilation. The mouth talks; the face doesn't.

  • 4-second metronome blink
  • No per-eye gaze
  • No squint, no widen
  • Audience invisible
after · /v1/analyze

An Eyeconic face

Saccades. Asymmetric blinks. Dilation on attention. Eyes that follow the camera.

  • 3–4 saccades / sec
  • Independent left/right gaze
  • 12 eye-specific shapes
  • 15 ms / frame, CPU

What lands in every response.

eyes.left / right
gaze vector2D · normalized
eyes.* openness
0 → 1per eye
eyes.* squint
0 → 1per eye
iris_center_px
sub-pixelimage space
blink_state
open / closing / closed / opening
head_pose_deg
yaw · pitch · roll
blendshapes
52 ARKit-compatiblestable schema
landmarks_count
4783D pts
emotion
7-class+ confidence
processing_ms
~15CPU · p50

Plug it into your rig.

Unity package, Unreal plugin, Three.js helper, raw WebSocket. Pick a transport.