Photons from the command line

Photons provides the lifx command-line utility which can be used to perform several tasks. If multiple tasks are required, consider creating a script instead.

To access these tasks, ensure the lifx command is in your PATH by activating the virtual environment into which Photons is installed.

A simple example of running a task with the lifx utility:

$ lifx lan:transform match:label=kitchen -- '{"power": "off"}'

This command uses the lan target with the transform task to find a device with the label kitchen and powers it off.

The lifx utility uses the following command-line structure:

$ lifx <target>:<task> <reference> <artifact> -- <options>

Some tasks don’t need all of these items, like unpack doesn’t require a reference to be specified for example.

Photons includes a single lan target, which is configured to discover and communicate with devices on the local network using the default broadcast address of It’s possible to change the default broadcast address used by the lan target or create new targets by providing a custom configuration.

To list all available tasks, run lifx help. To get details about a specific task, run lifx help <task>, e.g. lifx help transform.


The options field must be valid JSON syntax which can be cumbersome to provide directly on the command line. For ease of use, the lifx utility accepts a file:// path instead:

$ lifx lan:transform -- file:///path/to/my/options.json

If the file is in the current directory:

$ lifx lan:transform -- file://options.json

Photons will output a lot of information by default which you can make go away with a --silent option or by setting PHOTONS_SILENT_BY_DEFAULT=1 in your environment where you are running photons commands. If that environment variable is set then you can override it with --unsilent.

Running CLI commands on Windows

Running the lifx utility from the Windows Command Prompt requires the JSON syntax to be escaped correctly, which can be challenging:

C:\Users\me> lifx lan:transform -- "{\"power\": \"on\"}"

An alternative method which doesn’t require escaping JSON is to write a simple Python script instead:

__import__("photons_core").run('lan:transform -- {"power": "on"}')

which can be run directly from the command prompt:

C:\Users\me> python