CLI & local automation

Control Display Dimmer from your own tools.

Adjust brightness, contrast, and color temperature from scripts, shortcuts, and local controllers. Your tools send the commands; Display Dimmer handles the displays.

Before you start

You need Display Dimmer Pro, the app running in your Windows user session, and Local automation enabled.

Open Settings → General → Advanced. Under Local automation, select Manage…, then turn on Local automation.

Use the CLI bundled with the running app. Temperature commands require Display Dimmer 2.2.10 or later.

Need the app? Install Display Dimmer.

Temperature support is reported through API revision 1.1; the wire protocol remains version 1.
On this page
  1. Quick start
  2. Common tasks
  3. Temperature behavior
  4. Automation handoff
  5. Integrations
  6. Advanced controls
  7. Troubleshooting
  8. Local security
  9. Full reference

Quick start

Run these commands in PowerShell after enabling Local automation.

Find your displays

List connected displays PowerShell
DisplayDimmer.Cli.exe --list-displays

Find the display you want to control. For saved scripts, use its returned targetId, preferably a stable dd_... ID. The primary selector used below follows the current Windows primary display. A dd_... ID can identify a physical display or a linked display group, so check the returned target before using it.

Set the primary display to 70%

Set brightness to 70% PowerShell
DisplayDimmer.Cli.exe --set-brightness 70 --target primary

This applies a live 70% request and can interrupt active brightness schedules or app rules for that display. The app can accept the request before slower DDC/CI hardware finishes responding. It does not save the new brightness setting unless you add --save.

Read the current state

Read tracked state PowerShell
DisplayDimmer.Cli.exe --get-state --target all --json --pretty

Read Display Dimmer’s tracked display and automation state. For multi-display commands, check individual results as well as the overall result.

Command not found?

Make sure Display Dimmer is installed and has been started. Check Windows app execution aliases, or copy a command from the Local automation window.

Common tasks

Choose the control you need. Each example below targets the primary display; replace primary with your display’s targetId when a script should always use the same screen.

Brightness

Set a brightness value, or adjust it relative to the current level.

Set brightness to 40% PowerShell
DisplayDimmer.Cli.exe --set-brightness 40 --target primary
Reduce brightness by 10 percentage points PowerShell
DisplayDimmer.Cli.exe --adjust-brightness -10 --target primary

Contrast

Adjust Display Dimmer’s software contrast. This is separate from the monitor’s own hardware contrast setting.

Set contrast to 60% PowerShell
DisplayDimmer.Cli.exe --set-contrast 60 --target primary
Increase contrast by 5 percentage points PowerShell
DisplayDimmer.Cli.exe --adjust-contrast 5 --target primary

Color temperature

Choose warmer screen colors using the same temperature control as the app. Kelvin values are approximate settings, not measured display temperatures.

Use a warm 4,000 K setting PowerShell
DisplayDimmer.Cli.exe --set-temperature 4000 --temperature-unit kelvin --target primary
Reduce the temperature setting by 200 K PowerShell
DisplayDimmer.Cli.exe --adjust-temperature -200 --temperature-unit kelvin --target primary

Watch state changes

Stream Display Dimmer’s cached state as JSON Lines. This observes app state; it does not continually poll monitor hardware.

Stream cached state PowerShell
DisplayDimmer.Cli.exe --watch --json

Press Ctrl+C to stop. Do not add --pretty to this streaming command. For a single snapshot, use the state command in Quick start.

Temperature and automation behavior

The distinctions here matter when scripts share control with schedules and app rules.

Remove the tint—or release your override

These actions are different. Setting a neutral temperature removes the tint. Resuming releases your manual temperature override so automation can take over.

Set neutral temperature PowerShell
DisplayDimmer.Cli.exe --set-temperature 0 --target primary
Release your manual temperature override PowerShell
DisplayDimmer.Cli.exe --resume-temperature --target primary
Temperature units and saved settings

Native temperature values range from -100 (warmest) through 0 (neutral) to 100 (coolest). With --temperature-unit kelvin, the range is 2500–8300, with 6500 neutral. Native 0 does not mean 0 K.

Manual temperature changes are temporary by default and remain the session baseline beneath later rules. Add --save only to supported manual temperature set/adjust commands when you intend to update the saved baseline. Saving requires a strong, stable identity for the physical display and can fail even when a live temperature command works. Saving is queued; command completion does not confirm that the setting has reached disk. Named controllers cannot use --save.

API revision and feature detection

API revision 1.1 adds temperature features while retaining wire protocol 1. The --api-version command still reports 1. Use the running app’s apiRevision and capabilities, including the temperature capability, to discover feature support.

Choose how brightness scripts interact with rules

Use a manual command when your action should take priority. Use a named source when a sensor or helper should cooperate with schedules and app rules.

Take control now

This behaves like a manual brightness override. The same behavior applies when --source is omitted.

Use a manual source PowerShell
DisplayDimmer.Cli.exe --set-brightness 45 --target primary --source cli

Cooperate with automation

Apply the value when no schedule or app rule owns the target. Otherwise, retain a fresh handoff value without interrupting the active rule.

Use a named source PowerShell
DisplayDimmer.Cli.exe --set-brightness 45 --target primary --source desk-light-sensor

Refresh a standby value

Update the desired handoff value without changing brightness now or interrupting automation. Use the same source name as the cooperating controller.

Update handoff intent PowerShell
DisplayDimmer.Cli.exe --update-external-brightness 45 --target primary --source desk-light-sensor
Named temperature controllers

Temperature ownership is evaluated separately from brightness. A brightness-only rule does not block a temperature controller. A temperature-enabled rule can block it, even when the rule requests Neutral.

Apply a value or record standby intent

Set a named temperature value PowerShell
DisplayDimmer.Cli.exe --set-temperature 4000 --temperature-unit kelvin --source desk-controller --target primary

This applies unless a temperature rule or manual temperature override is active; otherwise, it records standby intent.

Refresh standby intent without changing the tint

Update temperature intent PowerShell
DisplayDimmer.Cli.exe --update-external-temperature 4000 --temperature-unit kelvin --source desk-controller --target primary

Release this source

Release the named source PowerShell
DisplayDimmer.Cli.exe --resume-temperature --source desk-controller --target primary

This releases the named source without clearing a newer controller.

Standby intent stays fresh for five seconds. An already-applied tint can remain after that; expired intent will not be reapplied after another rule replaces it. Explicitly release the source when stopping a controller. Named controllers cannot use --save.

Use it with your existing tools

Start with an example for your workflow, then adapt its commands and display targets.

Advanced display controls

For everyday brightness, contrast, and temperature changes, use the normal commands above. The options here are for scripts that intentionally change the brightness route or access monitor-specific controls.

Select a brightness route

A normal brightness command uses the app’s existing control path. The gamma route disables DDC/CI first and moves through a neutral 100% gamma handoff; the DDC route enables DDC/CI and uses the app’s DDC-capable path. These route options change the saved DDC/CI preference for the display. Requesting DDC does not make unsupported hardware compatible.

In the following examples, dd_your_stable_id is a placeholder. Replace it with the target ID for your display.

Use software/gamma brightness

Use the gamma route PowerShell
DisplayDimmer.Cli.exe --set-brightness 35 --brightness-mode gamma --target dd_your_stable_id

Enable the DDC-capable brightness path

Use the DDC-capable route PowerShell
DisplayDimmer.Cli.exe --set-brightness 70 --brightness-mode ddc --target dd_your_stable_id

Change the saved DDC/CI preference

Enable the saved DDC/CI preference PowerShell
DisplayDimmer.Cli.exe --set-ddc enabled --target dd_your_stable_id

The DDC/CI preference is saved automatically; it does not require --save. When the preference changes from enabled to disabled, Display Dimmer sets and saves gamma brightness at 100%, preserves gamma contrast, and cancels pending low DDC brightness to avoid stacked dimming. Enabling DDC/CI can reassert the current Display Dimmer level when display control is enabled.

Monitor-specific VCP controls

VCP exposes controls such as input source, monitor volume, and raw hardware contrast when the monitor supports them. These commands are separate from Display Dimmer’s normal slider state and automation handoff. VCP color presets and RGB gains are not the app’s Temperature slider.

In the examples below, replace dd_your_stable_id with the target ID for one physical display.

Inspect Display Dimmer-supported VCP controls

List VCP controls PowerShell
DisplayDimmer.Cli.exe --list-vcp --target dd_your_stable_id --pretty

This lists Display Dimmer-supported VCP features and advisory monitor-capability hints. It is not a full raw MCCS capability dump.

Read the input source

Read the current input PowerShell
DisplayDimmer.Cli.exe --get-vcp input-source --target dd_your_stable_id --pretty
Input-switching example
Use writes carefully.

Accepted values vary by monitor. High-impact writes require --force, exactly one explicit target (not all), and a target that currently resolves to one physical display. A linked group is allowed only when it currently expands to exactly one display. The flag does not bypass unsupported hardware or failed communication.

Switch a compatible monitor to HDMI 1

Switch to HDMI 1 PowerShell
DisplayDimmer.Cli.exe --set-vcp input-source hdmi1 --target dd_your_stable_id --force

Only use this example after checking the monitor’s supported inputs. Changing inputs can remove the picture from the current connection.

Troubleshooting and common questions

Start with the running app, the current Windows user session, and the target returned by --list-displays.

PowerShell cannot find the command. What should I check?

Start Display Dimmer and check Windows app execution aliases. You can also copy a command from the Local automation window. To check which executable PowerShell resolves, run:

Resolve the installed CLI PowerShell
(Get-Command DisplayDimmer.Cli.exe -ErrorAction Stop).Source
Why is the app unavailable?

Make sure Display Dimmer is running, Pro is unlocked, and Local automation is enabled. Run the script in the same Windows user session. For Task Scheduler, use that account and select Run only when user is logged on.

Why did my command succeed without changing brightness?

A named source may be cooperating with an active schedule or app rule. In that case it can update its handoff value without moving the display. Use manual override behavior only when you intend to interrupt the rule.

Can one command control every display?

Use --target all with commands that support display targeting. Check each display’s result: one monitor can succeed while another fails. For a saved script targeting a specific display, prefer its stable dd_... target ID.

Why are temperature commands unavailable?

Temperature commands require Display Dimmer 2.2.10 or later. Restart the updated app and use its matching CLI. Check the running server’s temperature capability before using these commands with older versions.

Need the complete CLI reference?

Find exact command options, JSON fields, exit codes, version details, and runnable integration examples in the official documentation.

Open the full CLI reference