Graphics

In this section you will learn how to get information about installed graphics controllers and connected displays.

In version 6 the former graphics() function was split into two separate functions: gpu() (graphics controllers) and displays() (monitors / displays). Both return plain arrays.

On Windows, displays() reports physical monitors: in duplicate/mirror mode each mirrored monitor gets its own entry (sharing the resolution and position of the mirrored screen). All displays of such a mirrored set are flagged with mirror: true (Linux, macOS and Windows).

For function reference and examples we assume, that we imported systeminformation as follows:

const si = require('systeminformation');

Graphics Controllers

All functions in this section return a promise.

Function Result object Linux BSD Mac Win Sun Comments
si.gpu() [ { ...}] X X X array of graphics controllers
[0].vendor X X X e.g. ATI
[0].model X X X graphics controller model
[0].bus X X X on which bus (e.g. PCIe)
[0].vram X X X VRAM size (in MB)
[0].vramDynamic X X X true if dynamically allocated ram
[0].deviceId X (macOS only) - device ID
[0].vendorId X (macOS only) - vendor ID
[0].external X (macOS only) - is external GPU
[0].cores X (Apple silicon only) - GPU cores
[0].metalVersion X (macOS only) - Metal Version
[0].subDeviceId X X (optional nvidia-smi) - sub device ID
[0].driverVersion X X (optional nvidia-smi) - driver version
[0].name X X (optional nvidia-smi) - name
[0].pciBus X X (optional nvidia-smi) - PCI bus ID
[0].fanSpeed X X (optional nvidia-smi) - fan speed
[0].memoryTotal X X (optional nvidia-smi; Linux: DRM sysfs - see notes) - memory total
[0].memoryUsed X X (optional nvidia-smi; Linux: DRM sysfs - see notes) - memory used
[0].memoryFree X X (optional nvidia-smi; Linux: DRM sysfs - see notes) - memory free
[0].utilizationGpu X X (optional nvidia-smi; Linux: DRM sysfs - see notes) - utilization GPU
[0].utilizationMemory X X (optional nvidia-smi) - utilization memory
[0].temperatureGpu X X X (optional nvidia-smi; Linux: DRM sysfs - see notes; macOS: optional macos-temperature-sensor) - temperature GPU
[0].temperatureMemory X X (optional nvidia-smi) - temperature memory
[0].powerDraw X X (optional nvidia-smi; Linux: DRM sysfs - see notes) - power draw
[0].powerLimit X X (optional nvidia-smi; Linux: DRM sysfs - see notes) - power limit
[0].clockCore X X (optional nvidia-smi; Linux: DRM sysfs - see notes) - clock core
[0].clockMemory X X (optional nvidia-smi) - clock memory
Example
const si = require('systeminformation');
si.gpu().then(data => console.log(data));
[
  {
    vendor: 'Intel',
    model: 'Intel Iris Plus Graphics 655',
    bus: 'Built-In',
    vram: 1536,
    vramDynamic: true
  }
]

GPU metrics on Linux (Intel, AMD, NVIDIA)

Beside the optional nvidia-smi, gpu() reads the runtime values the kernel exposes per DRM card below /sys/class/drm/card*. This needs no additional tool and no root privileges, and it is matched to the controller by its PCI bus address. Values already delivered by nvidia-smi are never overwritten.

Attribute Source Intel (i915 / xe) AMD (amdgpu)
clockCore gt_act_freq_mhz, gt_cur_freq_mhz, tile0/gt0/freq0/act_freq, pp_dpm_sclk X X
temperatureGpu device/hwmon/hwmon*/temp1_input X (discrete cards; most iGPUs have no own sensor) X
powerDraw / powerLimit device/hwmon/hwmon*/power1_input, power1_max X (platform dependent) X
utilizationGpu device/gpu_busy_percent - X
memoryTotal / memoryUsed / memoryFree device/mem_info_vram_total, mem_info_vram_used - X

Intel GPU utilization is the one value that cannot be read this way: the i915 / xe drivers publish their engine busy counters through the perf / PMU interface instead of sysfs (#890). Every tool reading it - intel_gpu_top -J from intel-gpu-tools, nvtop - therefore needs root or the CAP_PERFMON capability, which a library like this cannot require. If you need the busy percentage of an Intel GPU, run intel_gpu_top yourself with the appropriate privileges; frequency, power and temperature are available through gpu().

Displays

Function Result object Linux BSD Mac Win Sun Comments
si.displays() [ { ...}] X X X array of monitors / displays
[0].vendor X monitor/display vendor
[0].vendorId X (macOS only) - monitor/display vendor ID
[0].deviceName X e.g. \\.\DISPLAY1
[0].model X X X monitor/display model
[0].productionYear X X production year
[0].serial X X serial number
[0].displayId X X display ID
[0].main X X X true if main monitor
[0].mirror X X X true if mirrored / duplicated display
[0].builtin X X true if built-in monitor
[0].connection X X X e.g. DisplayPort, HDMI
[0].sizeX X X size in mm horizontal
[0].sizeY X X size in mm vertical
[0].pixelDepth X X X color depth in bits
[0].resolutionX X X X pixel horizontal
[0].resolutionY X X X pixel vertical
[0].currentResX X X X current pixel horizontal
[0].currentResY X X X current pixel vertical
[0].positionX X X X display position X
[0].positionY X X X display position Y
[0].currentRefreshRate X X X current screen refresh rate
[0].scale X DPI scaling factor, e.g. 1.5 for 150%
Example
const si = require('systeminformation');
si.displays().then(data => console.log(data));
[
  {
    vendor: '',
    model: 'Color LCD',
    main: true,
    mirror: false,
    builtin: false,
    connection: 'Internal',
    sizeX: null,
    sizeY: null,
    pixelDepth: 24,
    resolutionX: 2560,
    resolutionY: 1600,
    currentResX: 2560,
    currentResY: 1600,
    positionX: 0,
    positionY: 0,
    currentRefreshRate: null,
    scale: null
  }
]