EYEM turns your eye blinks, typed text, or voice into Morse code — live, in your browser. No install, no data leaves your device.
How it works
- Turn on the camera (button or press
C). Face landmark tracking runs locally via MediaPipe Face Mesh. A 2–3s auto-calibration runs (purple vertical bar on the right side) — keep eyes open and face centered. Status pill shows Starting / Calibrating / No face / Off — Open/Closed is eye-icon only.
- Camera measures how open your eye is (smoothed over 5 frames). Closure length decides the symbol: quick blink (~0.15–0.70s) → dot (.) with 80ms beep, held closure (~0.70–2s) → dash (-) with 240ms beep at 700Hz. Under 0.15s is ignored as natural blink, over 2s is ignored. Toggle sound via the speaker button inside the Morse box (bottom-right, remembers choice).
- Symbols stream into the Type Morse box automatically while the camera is on. Eye status is shown only by the eye icon top-right (purple open / white closed / dim no face / pulsing while calibrating).
- The Translation box continuously decodes whatever is in the Morse box — and it works both ways: type English in Translation and Morse appears instantly. Voice input (press
M or mic button) also fills Translation and auto-converts.
Blink guide
- On start, a 2–3s auto-calibration runs — keep eyes open and face centered (purple vertical bar on the right side, disappears 1s after done)
- Eye icon top-right shows live status: open / closed / no face. Status pill below only shows Starting / Calibrating / No face / Off — Open/Closed is icon-only.
- Closure under 0.15s counts as a natural blink — ignored
- Blink (~0.15s–0.70s) → dot . (80ms beep)
- Held closure (~0.70s–2s) → dash - (240ms beep)
- Closure longer than 2s is ignored
- Double blink — two blinks in a row (~0.7s apart) → new letter (space inserted)
- Triple blink — three blinks in a row (~0.7s apart) → new word (/ inserted)
- Relaxed timing: 700ms window between blinks, 750ms to confirm — easier for word spacing
- Mistake? Press
F to delete the last morse symbol (or “ / ” / “ ” as one step). Press R while camera is on to clear all (toast “Cleared — blink again to start.”).
Typing & Controls guide
Whenever the camera is off, both boxes accept keyboard input and translate each other live. When camera is on, both boxes are locked — blinks and shortcuts are your input.
- In the Type Morse box (placeholder:
Type Morse Code) you type only . and -. Single space = new letter (... --- ... → SOS), two spaces or / = new word.
- Example:
-- --- .-. ... . .-- --- .-. .-.. -.. → MORSE WORLD.
- In the Translation box, simply type English and the matching Morse appears instantly.
- Inside each box at the bottom-left there is a Copy button (pill with copy icon) to copy the whole box — bottom padding keeps text clear. Inside Morse box at bottom-right there is a Sound button (custom speaker icon with waves → slash when muted) to toggle morse beeps. Inside Translation box at bottom-right there is a Voice button (mic icon) — tap or press
M, speak, and it auto-fills Translation + Morse. Uses Web Speech API (Chrome/Edge, HTTPS/localhost, respects camera lock and shows “Listening” pulse in red).
- Keyboard shortcuts (ignored while typing English, Esc closes About):
C = toggle Camera, M = toggle Mic, F = delete last Morse symbol, R = Reset/Clear (only while camera is on).
- All buttons play a light click sound (900→600Hz pop) on press — morse beeps are separate and mute-able.
Tips & Troubleshooting
- Good light + face centered — keep 40–60cm from camera, avoid backlight
- Camera won't start? Use Chrome/Edge, allow permission, and open via
https:// or localhost (not file://)
- Voice not working? Chrome/Edge only, HTTPS required, camera must be off — check mic permission
- No face / jitter? Wait for calibration to finish (purple bar disappears after 1s), then blink normally
Features