Quick start
Run these commands in PowerShell after enabling Local automation.
Find your displays
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%
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
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.
DisplayDimmer.Cli.exe --set-brightness 40 --target primary
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.
DisplayDimmer.Cli.exe --set-contrast 60 --target primary
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.
DisplayDimmer.Cli.exe --set-temperature 4000 --temperature-unit kelvin --target primary
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.
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.
DisplayDimmer.Cli.exe --set-temperature 0 --target primary
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.
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.
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.
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
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
DisplayDimmer.Cli.exe --update-external-temperature 4000 --temperature-unit kelvin --source desk-controller --target primary
Release this source
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
DisplayDimmer.Cli.exe --set-brightness 35 --brightness-mode gamma --target dd_your_stable_id
Enable the DDC-capable brightness path
DisplayDimmer.Cli.exe --set-brightness 70 --brightness-mode ddc --target dd_your_stable_id
Change the saved DDC/CI preference
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
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
DisplayDimmer.Cli.exe --get-vcp input-source --target dd_your_stable_id --pretty
Input-switching example
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
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:
(Get-Command DisplayDimmer.Cli.exe -ErrorAction Stop).Source
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.
Need the complete CLI reference?
Find exact command options, JSON fields, exit codes, version details, and runnable integration examples in the official documentation.