Skip to main content

A library for communicating with Yongnuo LED video lights.

Project description


Lantern is a library that allows for control of Yongnuo YN-series Bluetooth-enabled video lights via Python.

Currently, Lantern supports the following models:

Lantern has been tested on the following operating system(s):

  • Ubuntu 16.10

The protocol for communicating with the lights was reverse-engineered during a YouTube livestream: Reverse Engineering the Yongnuo YN 360 Bluetooth Protocol. The author uses the lights for studio lighting, and will be using the library in automation tools to ensure that each scene is properly lit.


Lantern requires bluepy – an wrapper around the BTLE portions of Linux's official Bluetooth protocol stack, BlueZ. Although the bluepy installation usually goes smoothly, you may encounter issues. It is recommended that you visit the bluepy project page to review their installation instructions.

Once you've got bluepy's dependencies installed, you can run the following command from your virtual environment:

$ pip install yn-lantern

NOTE: Lantern was written for Python 3, and has not been tested (and will most likely not work) in Python 2.x.

Getting Started

Getting started with Lantern is simple. Once you've installed the library using the steps provided above, you may import and use Lantern in your code. Please keep in mind that, on some systems, root privileges will be required to manage the bluetooth interface.

Lantern will attempt to render color temperatures from 1,000 to 40,000 kelvin. Color temperatures between 3,200 and 5,500 kelvin will be rendered using high-intensity, high-CRI LEDs when possible.

from lantern import Light

for light in
    # connect to the light
    # set the color temperature of the light
    light.color_temperature = 4800
    # set the output of the light to 50% intensity
    light.intensity = 0.5
    # once we're done, disconnect

For some types of lights (specifically, the YN-360), RGB colors can be rendered. In the following example, we connect to a specific light, and render RGB colors in two ways, pausing two seconds between each change.

import time

from lantern import Light

l = Light("e8:53:aa:45:db:c6")

# set an RGB color using a packed hex value
l.color = 0xFF9900
# sleep two seconds, as promised
# set red, green, and blue components of the color individually
l.color = (0xff, 0x99, 0x00)



Please fork and open a PR to contribute. Feel free to submit issues if you run into issues. I'll do my best to help.


This project is licensed under the MIT License, and is Copyright 2017 Kenneth Keiter.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yn-lantern-1.1.0.tar.gz (6.0 kB view hashes)

Uploaded source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page