npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@jackietreeh0rn/homebridge-blink-security

v1.8.0

Published

Homebridge plugin for Amazon Blink security cameras

Readme

verified-by-homebridge

npm version npm downloads GitHub Stars GitHub Last Commit GitHub pull requests GitHub issues FOSSA Status

Supported Devices

| Device | Model Type | Capabilities | | ------------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 📷 Blink Outdoor / Indoor | default, catalina | Live view (IMMI) + audioMotion sensorSnapshotsTemperatureBattery levelNight visionClip recordingPrivacy modeMotion enable/disable | | 📷 Blink XT / XT2 | white, xt | Live view (RTSP, video only)Motion sensorSnapshotsTemperatureBattery levelNight visionClip recordingPrivacy modeMotion enable/disable | | 📸 Blink Mini | owl | Live view (IMMI) + audioMotion sensorSnapshotsClip recordingPrivacy modeMotion enable/disable | | 📸 Blink Mini 2 | hawk | Live view (IMMI) + audioMotion sensorSnapshotsClip recordingPrivacy modeMotion enable/disable | | 🔦 Blink Wired Floodlight | superior_owl | Live view (IMMI) + audioMotion sensorSnapshotsClip recordingPrivacy modeMotion enable/disable | | 🚪 Blink Video Doorbell | lotus | Live view (IMMI) + audioMotion sensorSnapshotsDoorbell press notificationClip recordingPrivacy modeMotion enable/disable | | 🚨 Blink Siren | siren | On/off switch |

Architecture

graph TD
    Home["🏠 Apple Home"]

    subgraph Homebridge
        platform["<b>BlinkSecurityPlatform</b><br>DynamicPlatformPlugin"]
        acc_sec["<b>SecuritySystem</b><br>arm / disarm per network"]
        acc_cam["<b>Camera</b><br>live view · snapshots<br>motion · battery · temp"]
        acc_door["<b>Doorbell</b><br>press notification<br>+ camera features"]
        acc_siren["<b>Siren</b><br>on / off"]

        subgraph Streaming Pipeline
            delegate["<b>CameraDelegate</b><br>stream lifecycle"]
            immi_proxy["<b>ImmiTunnel</b><br>MPEG-TS over TLS"]
            rtsp_proxy["<b>RtspToH264Proxy</b><br>RTSP de-frame → MPEG-TS"]
            ffmpeg["<b>FFmpeg</b><br>H.264 + AAC-ELD → SRTP"]
        end
    end

    subgraph Blink Cloud
        auth["<b>OAuth 2.0 + PKCE</b><br>+ 2FA PIN · session persist"]
        api["<b>Blink REST API</b><br>immedia-semi.com"]
        immi_srv["<b>IMMI Server</b><br>TLS :443"]
        rtsp_srv["<b>RTSP Server</b><br>TLS :443"]
    end

    Home <-->|"HomeKit"| acc_sec
    Home <-->|"HomeKit"| acc_cam
    Home <-->|"HomeKit"| acc_door
    Home <-->|"HomeKit"| acc_siren

    platform --> acc_sec & acc_cam & acc_door & acc_siren
    platform -->|"polling<br>status · motion · thumbs"| api
    platform -->|"token refresh"| auth
    auth --> api

    acc_cam & acc_door --> delegate
    delegate -->|"Mini / Doorbell /<br>Outdoor / Indoor"| immi_proxy
    delegate -->|"XT / XT2"| rtsp_proxy
    immi_proxy -->|"TLS"| immi_srv
    rtsp_proxy -->|"TLS"| rtsp_srv
    immi_proxy & rtsp_proxy -->|"MPEG-TS"| ffmpeg
    ffmpeg -->|"SRTP"| Home

Features

  • Live view — IMMI and RTSP streaming via ffmpeg with automatic keepalive (H.264 video, AAC-ELD audio on IMMI cameras)
  • Security system — Arm/disarm per network, with optional manual arm switch
  • Multi-network — Supports multiple sync modules, each with independent arm/disarm
  • Motion detection — Configurable polling interval with debounce
  • Motion enable/disable — Per-camera switch to turn motion detection on or off
  • Snapshots — Periodic thumbnail refresh with caching and retry
  • Battery — Battery level and low-battery alerts (Outdoor/Indoor models)
  • Temperature — Ambient temperature sensor (Outdoor/Indoor models)
  • Doorbell press — Push notifications on doorbell button press
  • Privacy mode — Per-camera switch to suppress snapshots when disarmed
  • Night vision — IR illuminator toggle (Outdoor/Indoor models)
  • Clip recording — Trigger a clip recording via momentary switch
  • Live View clip saving — Configurable per-network lv_save toggle to save or suppress Live View clips
  • One-way audio — Listen-in on IMMI cameras (Mini, Mini 2, Outdoor/Indoor, Doorbell, Floodlight) transcoded to AAC-ELD for HomeKit
  • OAuth 2.0 + PKCE — Token refresh and persistent sessions across restarts
  • 2FA — One-time PIN verification for Blink's two-factor auth
  • Snapshot fallback — Streams the last thumbnail when live view is unavailable
  • Stale accessory cleanup — Removes devices no longer on your Blink account
  • Retry with backoff — Automatic retry on network errors and rate limiting

Installation

Install Homebridge, add it to Apple Home, then install and configure Homebridge Blink Security.

Recommended

  1. Open the Homebridge UI.

  2. Open the Plugins tab, search for homebridge-blink-security, and install the plugin.

  3. Configure your Blink credentials through the settings panel.

Manual

  1. Install the plugin using NPM:

    npm i -g @jackietreeh0rn/homebridge-blink-security
  2. Configure the BlinkSecurity platform in ~/.homebridge/config.json as shown in config.example.json.

  3. Start Homebridge:

    homebridge -D

2FA Setup

Blink requires two-factor authentication on first login:

  1. Configure your username and password and restart Homebridge
  2. Blink will send a verification code to your email/phone
  3. Add the code to the pin field in config and restart Homebridge
  4. After successful verification, remove the pin field — the session is persisted

Configuration

| Property | Type | Default | Description | | ---------------------------------- | ------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------- | | username | string | required | Blink account email | | password | string | required | Blink account password | | pin | string | | 2FA verification code (only needed once) | | hide-alarm | boolean | false | Hide the SecuritySystem accessory | | hide-manual-arm-switch | boolean | false | Hide the manual arm/disarm switch | | hide-temperature-sensor | boolean | false | Hide temperature sensors on cameras | | hide-enabled-switch | boolean | false | Hide motion enabled/disabled switch | | hide-privacy-switch | boolean | false | Hide privacy mode switch | | enable-liveview | boolean | true | Enable IMMI live view streaming | | enable-audio | boolean | false | Enable one-way audio in Live View. Also requires Audio Streaming in the Blink app under Device Settings → Privacy | | lv-save | boolean | false | Save Live View clips to Blink cloud | | disable-thumbnail-refresh | boolean | false | Disable automatic thumbnail refresh | | camera-thumbnail-refresh-seconds | integer | 3600 | Minimum seconds between Blink cloud thumbnail refreshes per camera (HomeKit polls and is served cached thumbnails between refreshes) | | camera-status-polling-seconds | integer | 30 | Status polling interval in seconds | | camera-motion-polling-seconds | integer | 15 | Motion detection polling interval in seconds | | logging | string | | "quiet" suppresses routine chatter (thumbnail refresh, reconfigure, clip recording, sleep). "verbose" or "debug" for extended logging | | enable-startup-diagnostic | boolean | false | Log diagnostic info on startup |

Development

Prerequisites

  • Node.js 18.20.4+, 20.18.0+, 22.10.0+, or 24.0.0+
  • Homebridge 1.8.0+ or 2.0.0-beta+

FFmpeg is bundled via the ffmpeg-for-homebridge dependency — no separate install is needed, and it ships with libfdk_aac enabled for AAC-ELD audio.

Setup

npm install
npm run build
npm link

Watch Mode

Automatically recompiles and restarts Homebridge on source changes:

npm run watch

This runs a local Homebridge instance in debug mode using the config at ./test/hbConfig/. Stop any other Homebridge instances first to avoid port conflicts. The watch behavior can be adjusted in nodemon.json.

Linting & Formatting

npm run lint        # check for lint errors
npm run lint:fix    # auto-fix lint errors
npm run prettier    # check formatting
npm run format      # auto-fix formatting

Commits must follow Conventional Commits — enforced by pre-commit hooks via commitlint and husky.

Troubleshooting

No Audio in Live View

One-way audio is supported on IMMI cameras (Mini, Mini 2, Outdoor/Indoor, Doorbell, Wired Floodlight). XT / XT2 cameras use RTSP and are video-only.

Audio is opt-in. To enable it:

  1. Set enable-audio: true in plugin config
  2. Open the Blink app → Device Settings → Privacy → enable Audio Streaming for each camera
  3. Restart the child bridge

If Audio Streaming is disabled in the Blink app, the camera sends malformed audio metadata that stalls the stream. That is why audio defaults to off.

Live View shows "Not responding"

If Live View spins and eventually shows "Not responding" in the Home app, the most common cause is audio being enabled in plugin config while Audio Streaming is disabled in the Blink app for that camera. Either enable Audio Streaming in the Blink app, or set enable-audio: false in plugin config.

VPN Interference

Blink's authentication servers may reject login requests made through a VPN, returning HTTP 406 with no 2FA code sent. If you're unable to complete initial setup:

  1. Disconnect your VPN
  2. Restart the Homebridge child bridge
  3. Complete 2FA verification
  4. You can re-enable your VPN after authentication succeeds — sessions are persisted

General

If you run into issues, check the Homebridge troubleshooting wiki first. If the problem persists, open an issue with as much detail as possible.

Contributing

See CONTRIBUTING.md for guidelines on bug reports, feature requests, and code contributions.

Useful Resources

Read the full write-up: Homebridge SmartRent & Blink — an architectural deep-dive into how both plugins map their respective APIs into HomeKit (HAP service composition, IMMI streaming, OAuth/2FA, motion polling).

License

GNU GENERAL PUBLIC LICENSE, Version 3

Disclaimer

This project is not endorsed by, directly affiliated with, maintained, authorized, or sponsored by Amazon.com, Inc., Immedia Semiconductor, or Apple Inc. All product and company names are the registered trademarks of their original owners. The use of any trade name or trademark is for identification and reference purposes only and does not imply any association with the trademark holder of their product brand.