DannyD2 as a quick and easy solution, i'm just running this command in the background in a minimized terminal window to reset contrast enhancement to 0 every 2 seconds

while true; do /Applications/BetterDisplay.app/Contents/MacOS/BetterDisplay set -namelike=built -framebufferNumericProperty=0x0 -specifier=IOMFBContrastEnhancerStrength; sleep 2; done

async Recently was using a similar setup to you with 1600x1000 retina streamed to 1280x800 retina.

Agree that it's a great way to get the extra space when needed without the really obvious and annoying scaling artifacts (and whatever the heck else the DCP/TCON might do whenever its not actually rendering at its physical resolution…)

I personally chose 1600x1000 instead of 1680x1050, as the Windows laptop I was using for a while as my remote desktop "window into macOS" also ran at 1600x900 (non-Retina however) on a pretty much an identically sized 13.3-inch panel as my m1air.

That way (when needed) I can get pretty much identical UI sizing as the previous laptop I was used to for a while!

Of course, that's still Retina instead of "True Non-Retina", but a "blurry" Retina scaled down (and importantly, without sharpening artifacts) is still more comfortable than native 2x IMO as "everything is smoothed out". There's no "sharp rectangle edges" distracting away from text.

However, actually "seeing the pixels" with True Non-Retina is still superior IMO — but then I'm stuck with larger UI and a lot less screen space.

-

So far I'm enjoying both streaming 1600x1000 retina (bilinear filtering) and 1280x800 True Non-Retina (integer scaling) but crucially, using them at the right times and in the right places. They both have the ability to work great for me but each one has important strengths and weaknesses.

-

1600x1000 Retina streaming is working really well for outdoors use & semi-outdoors with natural sunlight. Obviously needed for using a lot of "pro" apps that require the space. In most cases feels like the optimal size for the macOS UI, same density as my previous Windows laptop so it's familliar to me. Specifically when I'm outdoors I sometimes actually prefer this mode over True Non-Retina.

-

But on the other hand, there's a certain magic to 1280x800 "True Non-Retina" streaming. Despite the large UI being limiting — planning, note taking, writing emails, reading long articles/books, any really in-depth web browsing where I'm trying to research something new or complex… ⬅️ I find it more comfortable doing these things in "True Non-Retina" mode than on any other screen I've used for a long, long time.

There are certain details and "patterns of symmetry and/or repetition" that I can only "see correctly" in True Non-Retina. Various websites and extremely information-dense content look entirely different to me while using this mode in a really magical way. Certain types of content take on a "whole new life" of reading comfort and "understandability" in this mode in a way that is legitimately a game changer for me.

  • I think one of the reasons is that I find it a lot easier to be idle for long periods of time — "thinking to myself, not actively using the laptop, but still staring into the screen" — in True Non-Retina. The screen feels the most "still and flat" it possibly can in this mode, I feel like I can actually slow down and think—

  • —instead of my brain suddenly getting really confused by a "still" hi-DPI desktop with no visible pixels. Even though this is still obviously wayyyyy more tolerable with Stillcolor vs. if it was also "moving" due to temporal dithering in this state — the lack of any sharp pixels to "lock focus onto" inherent to hi-DPI itself (aside from rectangles) can still just generally feel disorienting when not actively interacting with the laptop.

❗️❗️ For what it's worth, I was just feeling the most comfortable using 1600x1000 Retina streaming outdoors on a table further away from me. However, after recently getting back indoors and using it on my lap, I used Retina mode for only a tiny bit but then had the sudden urge to switch back to True Non-Retina. And now I'm feeling a lot more comfortable on that again…! ❗️❗️

⬆️ I feel like this will be very consistent for me, both streaming modes are able to work great in their own way, but seem to each rely on distinct optimal lighting + screen distance + environment conditions.

-

Pinging waydabber for this final section…

Despite streaming eliminating Apple's really annoying scaler sharpening artifacts due to allowing the physical display to maintain native resolution output… it's worth noting that there are still "some" artifacts, but very predictable ones.

At least on m1air, maybe differs based on video decoding hardware?

(Fortunately, I cannot notice any "moving" artifacts at all.)

Streaming seems to be using something similar to chroma subsampling — it seems to have "less color resolution than brightness resolution" especially on reds.

For example, red text on dark gray background in a True Non-Retina stream looks very blurry (vaguely similar to YCbCr artifacts). This is only true on the stream target. This can actually be really easily captured in a simple screenshot of the target display with the stream "window"!

However, this is predictable, doesn't seem to introduce any other "noise". It does NOT seem to act like a full-on "compression algorithm" like Sidecar or remote desktop — it's more of just a basic reduction in color resolution. Not sure what causes it.

Fortunately, these artifacts seem to not bother me, but it would be really nice to have some kind of option to enable/disable this "color compression" when needed for color accuracy (as long as the hardware is capable of it).

@waydabber is this reduction in "color resolution" while streaming coming from an intentional decision in BetterDisplay? or is it something that macOS is adding itself in the way it handles screen capture and video decoding

    Oh wow. I think I found all possible ioreg flags or something, as well as possible boot args. Many can't be set in ioreg, so how do we set them? I didn't try any of the bootargs yet. This is from /var/db/KernelExtensionManagement/KernelCollections/BootKernelCollection.kc @DisplaysShouldNotBeTVs

    Exported the found boot flags in case someone wants to dig thru them. It would be fairly easy to write something that extracts all possible bootargs from the entire filesystem, if someone has the time. As far as I know a list like this doesn't exist anywhere.

    cat BootKernelCollection.kc_pseudo_c.txt | grep boot_argn | sd '.*boot_argn\("([^"]*)".*' '$1' | grep -v boot_argn | sort | uniq > BootKernelCollection-flags.txt

     wlan.panic.postmessage
    -acpi_spurious_intr_assert
    -aeaa.fi0
    -aeaa_serdes_enabled
    -aes_spew
    -apfs_crypto_leak_panics
    -apfs_flink_panic
    -apfs_kbnh_disable
    -apfs_no_bc_defrag
    -apfs_pfkur_disable
    -apfs_shared_datavolume
    -apfs_spec_telemetry
    -arv_allow_fv
    -dcs_enable_thermal_loop
    -disable_mcc
    -dp2hdmi-update-mode
    -eee_enabled
    -hpmForceAllowUSB3
    -hpmUnplugForceUpdateMode
    -ignore_dpa
    -panic_notify
    -restore
    -sep_panic_mbox_to
    -tpo2_enabled
    -wdt-no-iokit
    -wdt-no-shutdown
    AFKMailboxEndpointBase_debug
    ATAPIdisk
    AppleBusPowerController-debug
    AppleEmbeddedUSBArbitrator-force…
    AppleI2CEthernetAquantiaControll…
    AppleSynopsysOTGDevice-debug
    AppleUSBCommon-debug
    AppleUSBController-debug
    AppleUSBDevice-debug
    AppleUSBHubPolicyMaker-debug
    AppleUSBPipe-debug
    AppleUSBUserHCI-isoch
    AppleUSBVHCIFirmwarePort-test
    AppleUSBXDCIEndpoint-debug
    AppleUSBXDCIEventHandler-debug
    AppleUSBXDCIIsocTRBBlock-debug
    AppleUSBXDCITRBBlock-debug
    AppleUSBiBridge-debug
    BATS_TESTPLAN_ID
    BootCacheOverride
    CoreKDL-ignore-signature
    IOUSBDeviceControlRequest-debug
    IOUSBDeviceController-configurat…
    IOUSBDeviceController-debug
    IOUSBHostFamily-debug-assert
    IOUSBHostFamily-debug-error
    IOUSBHostFamily-debug-level
    IOUSBUserClientLegacy-debug
    Limit2OneMega
    ProResHWKLogLevel
    SimulateAudioHwError
    SimulateNoAudioDC
    TargetDiskMode
    USBCardReader
    USBCardReader-104
    USBCardReader-25
    USBCardReader-50
    USBCardReader-ITP
    USBCardReader-PS
    _discard_airplay_records
    a7iop_enable_timeout
    abtm-auto-on
    abtm-console
    abtm-debug
    abtm-ld-panic
    abtm-no-pci
    abtm-timesync
    acc-allow-down-hvc
    acc-bwar-interval
    acc-bwar-limit
    acc-mpdms
    acc-mpdrms
    acc-pd-hvc
    acc-pd-log
    acc-pd-pow
    acc-pd-src-cap
    acc-pd-timeout
    acc-pdproxy-debounce
    acc-pdproxy-hvc
    acc-pdproxy-log
    acc-pdproxy-timeout
    acc-phms
    acc_config_stream_disable_comple…
    acc_config_stream_enable
    acc_config_stream_ignore_auth
    acc_debug
    acc_debug_config_stream_msg
    acc_debug_hid_msg
    acc_hid_use_draft_ver
    acc_ignore_vbus_drop_window_ms
    acc_roleswap_delayms
    acc_system_id
    acio
    acioPathDisable
    acioPathDisableByATC
    acioPortDisable
    acio_fw_debug
    acipc-aer
    acipc-bt-skywalkenable
    acipc-console
    acipc-debug
    acipc-dumplogs-wlflr
    acipc-no-core-after-d3
    acipc-no-mmio-core
    acipc-nodebug
    acipc-skip-flr-workarounds
    acm-ctrl-debug
    acpi
    acpi_layer
    acpi_level
    acpi_spurious_intr_skip_vector
    aea_debug
    aeaa-fw
    aeaa.clock.shift
    aebc.clock.shift
    aesdev
    aessnf.debug
    aessnf.reliability
    ahci
    ahcibatchqd
    ahcibatcht1throttlecount
    ahcibatchthrottlecount
    ahcidisk
    ahcipm
    ahciport
    ahciportmask
    ahcisatapi
    ahcitimeout
    aht-disable-eeprom
    aid-cache-logs
    aid-cache-logs-size
    aid-sniff
    aks-bfu
    aks-cache-device-state
    aks-endpoint
    aks-log-filter
    aks_default_class
    all-i2c.always-on
    all-spmi.irq
    allow-amd-usb
    als-logging
    amfi
    amfi_allow_3p_launch_constraints
    amfi_allow_any_signature
    amfi_allow_bni_as_platform
    amfi_allow_non_platform
    amfi_allow_only_tc
    amfi_allow_only_tc_override
    amfi_allow_research
    amfi_block_unsigned_code
    amfi_dev_mode_policy
    amfi_enforce_cc_types
    amfi_enforce_launch_constraints
    amfi_enforce_tcc_hardening
    amfi_force_cs_kill
    amfi_force_policy
    amfi_get_out_of_my_way
    amfi_hsp_disable
    amfi_hsp_logging
    amfi_no_aot_tc
    amfi_prevent_old_entitled_platfo…
    amfi_ready_to_roll
    amfi_unrestrict_task_for_pid
    amfi_unrestricted_local_signing
    amfm-abort
    amfm-debug
    amfm-extra-regon-delay
    amfm-link-speed-override
    amfm-match-timeout
    amfm-panic-on-br
    amfm-panic-on-ld
    amfm-panic-on-manuals2r-pe-failu…
    amfm-port-en-retry
    amfm-wl-reg-on-off-delay
    amfm-wl-reg-on-on-delay
    aneLoadBalancerEnabled
    aneLogging
    aneType
    aop-force-fw-loading
    aop-profile
    aop-profiler-config
    aop-profiler-disable
    aopvt-load-config
    ap_mac
    apcie
    apcie-aer-cap
    apcie-piodma-disable
    apfs_corruption_panics
    apfs_encryption_rolling_optin
    apfs_ier_log_level
    apfs_obj_cache_size
    apfs_obj_mem_mgr
    apfs_rangelist_verification
    apfs_specread_threads
    apfs_swcrypto_lbufcount
    apfs_swcrypto_lbufsize
    apfs_swcrypto_sbufcount
    apfs_swcrypto_sbufsize
    apfs_swcrypto_threads
    apple-axge-debug
    apple-vmxnet3-debug
    aqc-portmon-debug
    aqc113-dbg-pcierx
    aqc113-dbgdump
    aqc113-drv
    aqc113-efuse
    aqc113-fw
    aqc113-lom-v6offload
    aqc113-lomx
    aqc113-resetfail
    aqci2c-nostatus
    aqci2c-override
    aqci2c-reenable
    aqclom-fakeaddr
    asmedia-host-boot
    asp_disable_bastion
    asp_logging
    async_swap_opt_flags
    async_swap_pte_remap
    atadisk
    atcphy-unit-test-mode
    audio-engine-private
    authcp_fix_mode
    av_async_event_fail_hard
    av_audio_driver_level
    av_audio_driver_mask
    av_audio_interface_level
    av_audio_interface_mask
    av_audio_pattern
    av_cec_service_level
    av_cec_service_mask
    av_control_interface_level
    av_control_interface_mask
    av_controller_level
    av_controller_mask
    av_cp_failure_max_count
    av_cp_failure_mitigation_enabled
    av_cp_failure_window_ms
    av_cp_reprotect_enabled
    av_device_level
    av_device_mask
    av_filter_uncommon_modes
    av_hdcp_auth_policy
    av_hdcp_protocol_mask
    av_interface_level
    av_interface_mask
    av_log_level
    av_max_channel_count_lpcm
    av_max_sample_rate_lpcm
    av_max_sample_size_lpcm
    av_min_channel_count_lpcm
    av_min_sample_rate_lpcm
    av_min_sample_size_lpcm
    av_no_virtual_audio
    av_protection_delay_ms
    av_protection_enabled
    av_refresh_rate_threshold
    av_restart_interfaces_display_of…
    av_service_level
    av_service_mask
    av_video_interface_level
    av_video_interface_mask
    av_wav_buffer_size
    avb_local
    avb_trace
    ave-devid
    ave-flag
    ave-fwlogsize
    ave-fwsize
    ave-log
    ave-platform
    awdl_allow_40
    awdl_block_mdns
    awdl_bonjour_offload
    awdl_bssid
    awdl_debug_tooLong
    awdl_disable_dp_umi
    awdl_disable_serviceDiscovery3
    awdl_election_id
    awdl_enable
    awdl_fw_election
    awdl_log_flags
    awdl_log_flags_config
    awdl_log_flags_verbose
    awdl_low_latency_default_mapping
    awdl_low_latency_tx_requeue
    awdl_mac
    awdl_max_bw
    awdl_max_peers
    awdl_mdns_direct_path
    awdl_mdns_mode
    awdl_oper_mode
    awdl_sidecar
    axge-fw-rpf
    backlight-dim-step
    backlight-level
    backlight-logging
    batman
    batman-nosmc
    battery-alert-capacity
    battery-shutdown-voltage
    battery-state
    bc_cache_apple_silicon_macs
    bc_cache_nonroot_disks
    bc_cache_ssds
    bcm-ethernet-bjp
    bcm5701-fakeaddr
    bcom.feature.d11seq
    bcom.feature.flags
    bcom.feature.mfp
    bcom.feature.pmmcast
    bcom.feature.ps
    bcom.feature.roam
    bcom.feature.toe
    bcom.feature.wow
    bcom.scan.max-failures
    bcom.wte.thread-priority
    brightness
    brightness-nit-cap
    bt-hold-flr
    btdebug-allow-crashinfo
    btdebug-allow-logging
    btdebug-console
    btdebug-debug
    burnin-size
    ca.interval
    ca.maxcount
    ca.queue
    ca.ratespan
    camDisableAOP
    carrier-max-limit
    carrier-min-limit
    carrier-mode
    cc.debug.CollectLogAtLowPriority
    cc.debug.enable
    cc.debug.logAfterWD
    cc.debug.logThrottleCount
    cc.debug.logThrottleWindow
    cc.debug.pipe.statistics
    cc.debuglog.filter
    cc.debuglog.flags
    cc.debuglog.level
    cc.internal
    cc.logging.iolog
    cc.logging.oslog
    cdc-ctrl-debug
    cec_interface_level
    cec_interface_mask
    cec_snooping_enabled
    charger-curve
    charger-limit-display-on
    charger-load
    charger-ramp-on-wakeup
    charger-sleep-interval
    clpc-assert-energy
    clpc-assert-node-energy
    clpc-assume-new-budgets
    clpc-cpu-mhz
    clpc-cpu-min-perf-config
    clpc-debug
    clpc-disable-pmc
    clpc-enable-tg-block
    cpu-critical-create-enable
    cpus
    crnd
    cs42l84_dcid
    cs_enforcement_disable
    d240x-int-hack
    dart-all
    dart-map-seg-limit
    dart-segment-history
    dart-unmap-page-limit
    dbg-ncm-netif
    dcp-pmgr-scratch
    dcp-power-manage
    dcp-remote-power-state
    dcs-power-gating
    debug
    debug-usb
    debug_cs42l84_dcid
    debug_cs42l84_state_machine
    debug_disable
    device-ncm-data-debug
    device-ncm-ep0outdata
    device-ncm-maxntb
    device-ncm-maxseg
    device-ncm-promiscuous
    die_alarm1_temp
    die_alarm_temp
    dietempctl_interval
    dietempctl_kits
    dietempctl_kp
    dietempctl_release
    dis_assist_disc_timer
    disable-atv
    disable-auth-t818
    disable_external_storage
    disable_nan_keep_alive_timeout
    disable_p2pBssSteering
    disable_sd_reader
    display-sac
    dk.scsicontroller
    dk.scsiperipheral
    dk.serial
    dongle-factory-mode
    dp_controller_level
    dp_controller_mask
    dp_device_level
    dp_device_mask
    dp_log_level
    dp_service_level
    dp_service_mask
    dpsm
    dptxphy-panic-on-assert-failure
    dpxbar-active-pipe-mask
    dpxbar-deactivate-timeout-panic
    dpxbar-disable-split
    dpxbar-dual-pipe
    dpxbar-max-active-pixel-rate-per…
    dpxbar-max-bit-rate-per-internal…
    dpxbar-max-pixel-rate-per-pipe
    dpxbar-max-pixel-width-per-inter…
    dpxbar-max-pixel-width-per-pipe
    dpxbar-use-cycle-slip-wa
    dsid_mgmt
    dtrace_dof_mode
    dtrace_kernel_symbol_mode
    dynamic_buffer
    ean-debug
    ecm-ctrl-debug
    ecm-data-debug
    effaceable-enable-full-scan
    effaceable-enable-wipe
    effaceablebce
    ehciBWlogs
    ehciRL
    enable-IO-log
    enable-acsleep
    enable_aggressive_edca
    enable_awdl_nan_concurrency
    enable_forced_roam
    enable_nan
    enable_nan_data_if
    enable_nan_dfsp
    enable_nan_ps
    enable_p2p_dfsp
    enable_sd_reader
    event-log-panic-timeout-ms
    exbright_log_mask
    fastbm
    fb-caching
    fips_mode
    firewire
    force-usb-device
    force-usb-fullspeed
    force-usb-highspeed
    force-usb-host
    force-usb-power
    force-usb-superspeed
    force-usb-test-mode
    force_nonsdb_to_5g_avail
    forcecountry
    forced_shutdown_debug_delay
    forced_shutdown_debug_key_mask
    forced_shutdown_mode
    forceintcpu
    fwdebug
    fwdebug_ignorenode
    fwkdp
    fwkpf
    gg-eoc-enable
    gl3590fw-auto-update
    gl3590fw-force-update
    gl9755-ctrl-max-freq-dev
    gl9755-dir-count-recv-swthd
    gl9755-dir-count-trans
    gl9755-disable-decoding
    gl9755-enable-transition
    gl9755-layer-ver-sel
    gnss-force-ap-timemark
    gpu_no_zero_fill
    hdcp-fuse-mask
    hdcp_log_level
    hdcp_use_storedkm
    hdmi_cec_enabled
    hdmi_ced_error_injection
    hdmi_ced_monitor_delay_ms
    hdmi_ced_monitor_enabled
    hdmi_ced_monitor_min_stable_ms
    hdmi_ced_monitor_period_ms
    hdmi_ced_rate_max
    hdmi_drive_setting_0
    hdmi_drive_setting_1
    hdmi_drive_setting_2
    hdmi_link_status_monitoring_disa…
    hdmi_scrambling_disable
    hid-cache-depth
    hid-ipd-clear-wake-reason
    hid-legacy-shim
    hid_dtrace_debug
    hidq_force_usage_pair
    hidq_no_full_msg
    hidq_size
    hp-detect-invert
    hp-pop-workaround
    hp-switch-force-config
    hp-switch-ramp
    hpmAIDDis
    hpmAllowUsb3Restore
    hpmDebugFlags
    hpmDisableAppleUVDMSOP
    hpmDisableAppleUVDMSOPp
    hpmForcePlugUpsideDown
    hpmI2CNonCompliant
    hpmI2CRetries
    hpmI2CRetryInterval
    hpmLDCMEnableWaveAndPeriodic
    hpmLDCMMitigationsDisable
    hpmMuxSet
    hpmOverrideRTPC
    hpmRTPCDisable
    hpmlog
    hsaid-bd
    hsaid-sniff
    hsaid-verbose
    hvc-debug
    hwtrace
    i2c-debug-options
    i2c-verbose
    if80211_packet_pool_size
    if80211_packet_pool_size_be
    if80211_packet_pool_size_bk
    if80211_packet_pool_size_vi
    if80211_packet_pool_size_vo
    ignore-power-down
    intcpumax
    io80211.DPS
    io80211.DPSHighCCA
    io80211.DPSLowCCA
    io80211.DPSRate
    io80211.DPSSymptomsMonitoringPer…
    io80211.DPSSymptomsRate
    io80211.DPSminEnqueued
    io80211.DPSminFail
    io80211.DPSminQueued
    io80211.debug.enable
    io80211.dps.enabled
    io80211.dps.symp.cca
    io80211.dps.symp.enabled
    io80211.dps.symp.netScore
    io80211.dps.symp.rssi
    io80211.dps.symp.stallScore
    io80211.isNeedToUseIocExternalLe…
    io80211.isNeedToUseIocInteralLeg…
    io80211.maxDPSCapturePerHour
    io80211.processBSDCommand.trace
    io80211.skw.ff.on-demand-if-enab…
    ioaps_debug
    ioaupsd_debug
    iofence_ddd
    iognotifyto
    iogpu_debug
    iogpu_pagingoff_timeout
    iogpu_wired_lwm_mb
    iogt
    iogtl
    iohidps
    ioimageloader.debug.bootbase
    ioimageloader.debug.csr-access
    ioimageloader.debug.enable
    ioimageloader.debug.netbooting
    ioimageloader.debug.shastore-for…
    ioimageloader.logging
    iomfb_abort_swap_disable
    iomfb_add_heap_in_ios
    iomfb_disable_async_swap
    iomfb_disable_debug_info
    iomfb_disable_display
    iomfb_drop_noop_swap
    iomfb_drop_obsolete_swap
    iomfb_enable_async_swap_hw
    iomfb_enable_edr_scaling
    iomfb_ffr
    iomfb_ffr_high
    iomfb_finfo_enqueue_panic_enable
    iomfb_panic_on_boot_failure
    iomfb_plc_support
    iomfb_rack_debug
    iomfb_set_block_debug
    iomfb_swap_reject_panic
    iomfb_trace_nested_rpc_calls
    iomfb_version_check
    ionetwork_debug
    iosk_abfs_enable
    iosk_abfs_hysteresis_time
    iosk_abfs_min_limit
    iosk_bt_fix_enable
    iosk_debug
    iosk_doorbell_limit
    iosk_poll_interval
    iosk_tx_sub_pkt_threshold
    iosk_tx_sub_timeout
    iosurface_debug
    iouc.logFlags
    iouether_debug
    jtag
    kdp_match_mac
    kdp_match_name
    keepsyms
    kernPOST
    kernelrelay-debug-logs
    kernelrelay-perf-logs
    kernelrelay-send-recv-logs
    kernelrelay-serial-logs
    kiosk-mode
    kiosk-mode-voltage
    light-em-up
    lowlatency_awd_metric_time_lim
    lowlatency_stats_time_lim
    lpss_dmac
    lpss_dmac_chan
    lpss_gspi
    lpss_i2c
    lpss_i2c_ctlr
    lpss_i2c_dev
    lpss_i2c_disprobe
    lpss_i2c_user
    lpss_spi_ctlr
    mDNSOffloadUserClient
    mapper-all
    mapper-dynamic
    mapper-history
    max-bdrr
    max-charge-voltage
    max_msrs
    maxmem
    mb-acc-vlow
    mbasd
    mca-switch
    mcache-pmp
    mcc-power-gating
    mcc_analyze
    mcc_clampwaycount
    mcc_debug
    mesa-allowForcedCalibrationOverr…
    mesa-averaging
    mesa-disableTrimDAC
    mesa-dispatch-hid
    mesa-drive-1v8
    mesa-enrollmentTimeout
    mesa-esd-auto-start-capture
    mesa-esd-recovery
    mesa-full-status
    mesa-overrideDevSN
    mesa-patch-directly
    mesa-power-off-3v0-1v8-delay
    mesa-power-off-delay
    mesa-power-on-1v8-3v0-delay
    mesa-power-on-delay
    mesa-sensor-id
    mesa-skip-sanity-check
    mesa-spi-clock-phase
    mesa-spi-freq
    mesa-verbose
    mesa-wff-watchdog-period
    min-charge-voltage
    mipi-panic-on-error
    mipi-sac
    mipi-sad-sac
    mptcount
    mpthealth
    msr_compressed_buffer_validation
    msr_decompression_error_handling
    msr_direct_dart_power
    msr_disable_simd_opt
    msr_dump_on_timeout
    msr_dump_registers
    msr_hcu_no_hdr
    msr_idlepoweroff_supported
    msr_idlepoweroff_timeout_us
    msr_iosurface_purge
    msr_keep_power_on
    msr_ktrace_options
    msr_log_activity_length
    msr_log_header_mask
    msr_log_module_mask
    msr_log_verbosity
    msr_mask
    msr_msb_replication_war_disable
    msr_piodma_options
    msr_pm
    msr_post_transform_dump_high
    msr_post_transform_dump_low
    msr_power_gating_mode
    msr_workload_priority
    mt-bytes
    mt-disable-kill
    mt-strings
    nan_data_mac
    nan_mac
    nand-debug
    nand-io-timeoutms
    nand-qual
    ncm-ctrl-debug
    ncm-data-debug
    ncm-no-hide
    ncm-no-trm
    ncm_interface_flags
    nfc.controller
    nfc.dev_wake_delay
    nfc.log
    nfc.log.level
    nfc.log.size
    nfc.no_errors
    niog
    niogt
    nmca
    nmca-switch
    no-pc-stats
    no_panic_on_corr_ecc_err
    npci
    nvme
    nvme-clockgating-timeoutus
    nvme-coastguard-disable
    nvme-fw-minor-check-disable
    nvme-linear-sq-disable
    nvme-powergating-timeoutus
    nvme-s2r-timeout
    nvme-sptm
    nvram-log
    olyhal.internal
    orion-hs
    orion-hv-enable
    override_awdl_platform_type
    override_nan_platform_type
    panic-on-event-log-intr
    panic-wait-forever
    panic_on_gpu_hang
    partial-display
    pci-aspm-default
    pci-dev-mapper
    pci64
    pcie_cr_adap
    pcie_cr_null
    pctb
    pdmvr
    peer_channel_steer_max_attempt
    peer_channel_steer_timeout
    penalty-box-enable
    penalty-box-soc-lth
    penalty-box-soc-uth
    penalty-box-temp-lth
    penalty-box-temp-uth
    pm-policy
    pmc-max-bwr-latency-us
    pmc-pmgr
    pmgr-dock-fifo-client
    pmp-acc-ovrd-wa
    pmp-agx-stats
    pmp-assert-energy
    pmp-bw-stats
    pmp-clock-gating
    pmp-dart
    pmp-debug
    pmp-disable-energy-panic
    pmp-dock-fifo
    pmp-dram-capacity
    pmp-dram-energy
    pmp-dram-stats
    pmp-dram-vendor-id
    pmp-energy-breakdown
    pmp-fast-die
    pmp-msg-queue-panic
    pmp-msg-timout-panic
    pmp-pbatt
    pmp-pm-device-counter-mask
    pmp-pm-device-sampling-mask
    pmp-pmon
    pmp-pmu-telemetry
    pmp-power-gating
    pmp-rt-events
    pmp-sampler
    pmp-soc-energy
    pmp-test
    pmp-trace
    pmp-trace-capacity
    pmp-ut-stats
    pmu-bringup
    pmu-chargetrap
    pmu-debug
    pmu-debug-rtc
    pmu-debug-wake
    pmu-disable-panic
    pmu-enable-ulpm
    pmu-lpem-rev
    pmu-rtc-offset-readonly
    pmu-rtc-offset-use-nvram
    pmu-spmi-delay
    pmu-spmi-retry
    port-features
    power-button-usage
    power-button-usagepage
    ppm_cpms
    ppm_debug
    ppm_flags
    ppm_power
    private_audio_devices
    proresHWEnableLoad
    pthread_mutex_default_policy
    raid
    ramrod_disable_sep_load
    remote_nmi
    rfcoex-disable
    rfcoex-rf-cl
    rootdev
    rtb_enable_tracing
    sac_debug
    samtrace
    sanddollar-converter
    sb_serial_reporting
    sbp2disk
    sdxc
    sdxc-always-retrain
    sdxc-cd
    sdxc-current-sense-enable
    sdxc-delay1
    sdxc-delay1_uhs
    sdxc-delay2
    sdxc-delay3
    sdxc-eject-debounce
    sdxc-enable-aer
    sdxc-expected-link-speed
    sdxc-force-uhs1
    sdxc-initial-link-speed
    sdxc-insert-debounce
    sdxc-invert1
    sdxc-invert2
    sdxc-invert3
    sdxc-reg60-cd
    sdxc-reg60-cl
    sdxc-reg60-cl_sdr104
    sdxc-reg60-cl_sdr50
    sdxc-reg60-d0
    sdxc-reg60-d1
    sdxc-reg60-d2
    sdxc-reg60-d3
    sdxc-skip_all_trm
    sdxc-skip_id_trm
    sdxc-skip_trans_trm
    sdxc-ssc-enable
    sdxc-ssc-step
    sdxc-uhs_1_voltsel
    sdxc-uhs_2_voltsel
    sdxc-uhsiiphyrxs
    sdxc-uhsiiterm
    sdxc-wp
    sdxc_tuning
    sep-shmcon-size
    sep-trace-poll-us
    sep-trace-size
    sep_idle_delay
    serial
    sidecar_stats_lat_lim
    sidecar_stats_time_lim
    skip-sensor-calibration
    skipFWValidation
    smartio_debug
    smc-aop-debug
    smc-aop-use_ddr
    smc-charger-debug
    smc-ifc-debug
    smc-logsize
    smc-nmi-on-key-timeout
    smc-panic-on-key-timeout
    smc-pmu-debug
    smc-pmu-debug-wake
    smc-pmu-iclr
    smc_panic_on_keynotfound
    smcdebug
    soc-tuning
    sochot0
    sochot1
    sochot_tolerance
    softap_mac
    spiflash.debug
    spin_wait_for_gpu
    spmi-fault-dis
    spmi-fault-msg
    spmi-fault-panic
    spmi-intmode-dis
    spmi-logsize
    spmi-panic-dump-queue
    spmi-verbose
    spu-accel-historical
    spu-ignore-pras-calibration
    spu-ignore-sppo-calibration
    ssen_on
    sulu-historical
    t818-auth-timeout
    tGraphClient
    ta_keyroll_interval
    ta_reattach_timeout
    tb-port-debounce-period
    tb_acpi
    tb_clx_enable
    tb_clx_options
    tb_cp_bps
    tb_cp_burst
    tb_cp_timer
    tb_hb_sb
    tb_hi_ring_mask
    tb_packet_history
    tb_pci_retries
    tb_phy_wait_ms
    tb_timeout_scale
    tb_tmu_mode
    tb_trace_history
    tbdebug
    tbdisk
    tbdp
    tbdp_ar_d
    tbdp_ar_i
    tbdp_ar_s
    tbdp_at_d
    tbdp_at_i
    tbdp_at_s
    tbdp_dpouttmuconvergenceto
    tbdp_ssc
    tbdp_v_d
    tbdp_v_i
    tbdp_v_s
    tbhpddelay
    tbip
    tbips
    tblog
    tblogmode
    tbpciwd
    tbpollinterval
    tbrtpctime
    tbsc
    tbtflags
    timesync_announce_interval
    timesync_client_model
    timesync_local
    timesync_log
    timesync_max_jitter
    timesync_panic
    timesync_pdelay_denom
    timesync_pdelay_filter
    timesync_pdelay_interval
    timesync_pdelay_limit
    timesync_pdelay_numer
    timesync_priority1
    timesync_priority2
    timesync_softdma
    timesync_sync_denom
    timesync_sync_filter
    timesync_sync_interval
    timesync_sync_numer
    timesync_tod_filter
    timesync_trace
    timesync_ts_mode
    tpad_output_reports
    trm-disable-port
    trm_enabled
    trueuc-irq-enable
    turbolag
    turtle_temp_comp
    uart.debug.trap
    uart.log
    uart.log.level
    uart.log.size
    uart.panic_on_delay
    uart.skywalk
    uasMaxBusStall
    ui-update-interval
    uio_debug
    uio_matches
    uio_mem_size
    unifiedcountry
    upo-shutdown-delay
    usb-control-request-policy
    usb-dock-remote-wake
    usb-ethernet-debug
    usb-filter-debug
    usb-hvc-to-5V
    usb-no-rtd3
    usb-no-rtpc
    usb-port-wake-sources-policy
    usb-prevent-sleep
    usb-soft-retry-policy
    usb-stream-policy
    usb-testmode-device-id
    usb-testmode-force
    usb-testmode-type
    usb-tier-limit
    usb2-lpm-policy
    usb3-lpm-policy
    usb4-lpm-policy
    usb_bundling_timeout
    usb_compliance_mode
    usb_cr
    usb_dev_nmi
    usb_dev_reset
    usb_enumeration_timeout
    usb_max_current
    usbaudio_allowusbidling
    usbaudio_deviceModePanicOnWriteE…
    usbaudio_deviceModeWatchdog
    usbaudio_engines
    usbaudio_ignoreZLPInput
    usbaudio_ignoretapstreams
    usbaudio_outputsafetyoffset
    usbaudio_startupdelay
    usbaudio_tsoffset
    usbaudio_useAUASD
    usbdevice-disableparrotreset
    usbehci-interrupt-threshold
    usbmsDisconnectInterval
    usbmsdriver
    use-trinity
    usepayloadchain
    uvdmdebug
    uvdmlog
    v3.internal
    vhci
    watchdog
    wifibt-external
    wifibt.pcie.disableASPMWorkaroun…
    wifibt.pcie.panicOnPendingBackpl…
    wifioff.wd
    wlan-olyhal-abort
    wlan.11axasr.nopmf
    wlan.11d.ignore
    wlan.6GHzRoaming.enabled
    wlan.BypassDenyListLA.enabled
    wlan.PhyCalEcounter.enable
    wlan.PhyEconter.enable
    wlan.RssiCorrection.enabled
    wlan.adaptiveroaming.enabled
    wlan.advisory-period
    wlan.advisory.intervalMS
    wlan.aoac-allowed
    wlan.ap.channel
    wlan.ap.maxmpdu
    wlan.asrcapcheck.bypass
    wlan.autoCountry
    wlan.bss-info.checkIEOffset
    wlan.bss-info.logdata
    wlan.ccpipe.FWBusLogs.size
    wlan.ccpipe.FWEcounterLogs.size
    wlan.channelFilter
    wlan.chipuart.enable
    wlan.chswitchreport
    wlan.commander.ActiveThres
    wlan.commander.CCForCmdtOutlierA…
    wlan.commander.CCForCmdtOutlierS…
    wlan.commander.OutboundThres
    wlan.commander.PendingThresAsync
    wlan.commander.PendingThresSync
    wlan.commander.aqs_delay_limit
    wlan.commander.aqs_delay_limit_l…
    wlan.commander.command_complete_…
    wlan.commander.command_timeout
    wlan.commander.disablecmdwd
    wlan.commander.oqs_delay_limit
    wlan.commander.oqs_delay_limit_l…
    wlan.commander.panic_rateexceede…
    wlan.commander.paniconchecktimer
    wlan.commander.stats
    wlan.commander.testchecktimer
    wlan.commander.thresholdn
    wlan.commander.thresholdt
    wlan.dbg.biu
    wlan.debug.EEparams.beaconReport…
    wlan.debug.EEparams.enhancedDisA…
    wlan.debug.EEparams.osVersionRep…
    wlan.debug.abort-init
    wlan.debug.band-locked
    wlan.debug.chanswlimit
    wlan.debug.check-hwlimits
    wlan.debug.check-hwlimits-forced
    wlan.debug.checkmsf
    wlan.debug.checksrom
    wlan.debug.chip-provisioning
    wlan.debug.cto_wdcount
    wlan.debug.disable_filter_ie
    wlan.debug.disablebcndrift
    wlan.debug.disablebcnmute
    wlan.debug.disablenanho
    wlan.debug.dump-socram.boot
    wlan.debug.dump-socram.fwtrap
    wlan.debug.dump-socram.load
    wlan.debug.enable
    wlan.debug.enablescaneventlogs
    wlan.debug.force-verifyBSSID
    wlan.debug.generate-mac
    wlan.debug.getSSID
    wlan.debug.handle-dbgcmd
    wlan.debug.initfailure
    wlan.debug.linkdebug
    wlan.debug.lpsc
    wlan.debug.match-wake-reason
    wlan.debug.module-instance
    wlan.debug.nomsf
    wlan.debug.nowdogondisassoc
    wlan.debug.nowsku
    wlan.debug.osVersion
    wlan.debug.postmessage-error-cap…
    wlan.debug.postmessage.flags
    wlan.debug.postmessage.panic
    wlan.debug.productType
    wlan.debug.setpower-off.trap
    wlan.debug.setpower-off.trap.boo…
    wlan.debug.single-boot-only
    wlan.debug.skip_old_rx_cal
    wlan.debug.srom-mac
    wlan.debug.srom-sku
    wlan.debug.srom-version
    wlan.debug.tweak.ts
    wlan.debug.wnm
    wlan.debug.wpa-rsn
    wlan.dext-crash-behavior
    wlan.dext-respawn-timeout-ms
    wlan.disableEventSocket
    wlan.disableIOCTL
    wlan.dk
    wlan.dk.fwloading
    wlan.dsa.mode
    wlan.dsa.obswin
    wlan.dsa.params
    wlan.dsa.rssi.lower
    wlan.dsa.rssi.upper
    wlan.ecounters
    wlan.elogs
    wlan.elogs.size1
    wlan.elogs.size6
    wlan.elogs.size7
    wlan.enable.wol-ports
    wlan.enable.wol-prune
    wlan.enableLDDebounce
    wlan.enhancedlocale
    wlan.entitlement
    wlan.etrace
    wlan.factory
    wlan.forced.ts
    wlan.fwcap
    wlan.getDiags
    wlan.h5baud
    wlan.handle-dbgcmd.debug
    wlan.hotspot.support.sae
    wlan.icmp.enabled
    wlan.internal
    wlan.ior
    wlan.ivars->fPanicOnIOCTL
    wlan.keepalive.retrycnt
    wlan.llw.awdlbssid
    wlan.llw.tx.ring.size
    wlan.log.cclevel
    wlan.log.cflags
    wlan.log.flags
    wlan.log.level
    wlan.lowlatency.enable
    wlan.lowlatency.fw
    wlan.lpas-allowed
    wlan.lpscancore.disable
    wlan.lqm.analytics
    wlan.lqm.baseline
    wlan.lqm.bg
    wlan.lqm.cachesize
    wlan.lqm.cachetimeout
    wlan.lqm.decryptError
    wlan.lqm.detect
    wlan.lqm.fg
    wlan.lqm.iolog
    wlan.lqm.logging
    wlan.lqm.oslog
    wlan.lqm.pnreplay
    wlan.lqm.qperiod
    wlan.lqm.recovery
    wlan.lqm.unusable
    wlan.lqm.user
    wlan.lqmCT.debugLog
    wlan.lqmCT.enableCrashTracer
    wlan.lqmCT.ioLog
    wlan.lqmCT.ipsTriggerSuppressTim…
    wlan.lqmCT.lqmUpdatePeriodMSec
    wlan.lqmCT.ringBufferSize
    wlan.netmanager.colocated_nw_tra…
    wlan.netmanager.dbg-ip-timeout
    wlan.netmanager.stats-timer-inte…
    wlan.panic.aqs
    wlan.panic.factory
    wlan.panic.oqs
    wlan.panic.postmessage
    wlan.panic.pqs
    wlan.panic.problem
    wlan.panic.queuefull
    wlan.panic.queuestall
    wlan.pcie.D0AckLogsdisabled
    wlan.pcie.DSdisabled
    wlan.pcie.OLYHALToV3DextMsgSeque…
    wlan.pcie.OLYHALToV3DextMsgTimeo…
    wlan.pcie.badrequest_readSocRAM
    wlan.pcie.bounce
    wlan.pcie.commitcoalesce
    wlan.pcie.debugworkQueuetimeout_…
    wlan.pcie.delaystart_ms
    wlan.pcie.detectsabotage
    wlan.pcie.deviceWakeWaitBeforePa…
    wlan.pcie.disablebootmsi
    wlan.pcie.disablehostinitiatedfw…
    wlan.pcie.disablephasebitcheck
    wlan.pcie.disablerelaunch
    wlan.pcie.dumplogbtreset
    wlan.pcie.enableDeepSleepSupport
    wlan.pcie.enableMFD3AckSoCRAM
    wlan.pcie.enableptmsupport
    wlan.pcie.hmap-window-limit
    wlan.pcie.iokitmatch_ms
    wlan.pcie.mmiologdepth
    wlan.pcie.nolinkdownlogs
    wlan.pcie.oobdw
    wlan.pcie.paniconaer
    wlan.pcie.paniconcommitrings
    wlan.pcie.paniconhostpollfwtrap
    wlan.pcie.perstdelay_ms
    wlan.pcie.portenableretry
    wlan.pcie.reset_ms
    wlan.pcie.sleepBeforePanic
    wlan.pcie.tcmAccessWithInactiveC…
    wlan.pcie.tcmAccessWithTrapTimeo…
    wlan.pcie.tsicmpv6logingenabled
    wlan.pcie.tslogingenabled
    wlan.pcie.txdeq
    wlan.pcie.useOLYHALDriver
    wlan.platform.panic-on-error
    wlan.pm.os_log
    wlan.pmalert.dutycycle
    wlan.privmac.address
    wlan.privmac.scanbitmap
    wlan.proxd.dump
    wlan.qos.FCMask
    wlan.qos.enableFlags
    wlan.ranging.debug-aborts
    wlan.ranging.disableOutlierDisca…
    wlan.ranging.retry-limit
    wlan.rangingv2
    wlan.rc1cx.enable
    wlan.restrictedccode
    wlan.roam.unlockRoamOnPH
    wlan.roam_profile.enable-overrid…
    wlan.roam_td_th
    wlan.rssicomp.value
    wlan.rts.aggressive
    wlan.rts_prot_en
    wlan.rx.ring.size
    wlan.rxchipdelay.scale
    wlan.sac.enable
    wlan.sar.nocc
    wlan.scanalg
    wlan.scanmac.randommask
    wlan.sdb.support
    wlan.secureboot.darcheck
    wlan.setHardwareAddress.allowed
    wlan.setupFirmware.cur_etheraddr
    wlan.skip_reporter
    wlan.skywalk.ktrace
    wlan.skywalk.legacy-power-off-mo…
    wlan.skywalk.packetpoolsize
    wlan.socramdump.disable
    wlan.splitAWDLAFThread
    wlan.startdelay
    wlan.tcpka
    wlan.timesync.clkinfologid
    wlan.timesync.debugmissinggpio
    wlan.timesync.delayPostingTSMsgS…
    wlan.timesync.disableGPIOTogglin…
    wlan.timesync.enable
    wlan.timesync.filtercoeff
    wlan.timesync.filterdynamicstart
    wlan.timesync.filterinterval
    wlan.timesync.logPeriodMS
    wlan.timesync.maxclkid
    wlan.timesync.minclkid
    wlan.timesync.reportinvalidts
    wlan.timesync.sampleperiodms
    wlan.timesync.tracebuffercount
    wlan.trafficengineering.enabled
    wlan.trafficengineering.pktlogen…
    wlan.ts.aggr
    wlan.ts.fixed_rate
    wlan.ts.ignore.ifbmap
    wlan.ts.retry
    wlan.ts.rts
    wlan.tx.ring.size
    wlan.tx.submission-queue.size
    wlan.txchipdelay.scale
    wlan.txcomp.debug
    wlan.txinh.tout
    wlan.txprofile.disable
    wlan.txsdb.mode
    wlan.uartbaud
    wlan.useIOUCEventPipe
    wlan.useIOUCWhenPossible
    wlan.vpm
    wlan.wake-data.limit
    wlan.wdt.disableLogging
    wlan.workQueue.create
    wlan.wsec.disassoc
    wlan.wsec.reassoc
    wq_stall_panic_seconds
    xhci-interrupt-rmbs
    xhci-isochronous-rmbs
    xhcieps

    twomee Edit: I have MacBook Pro 16 M2 Pro model with latest software

    Stillcolor won't fix temporal dithering entirely on mini-LED models (14"/16") for internal display. Currently suspected that the TCON is still adding an additional dithering layer on these models in order to support the "hardware-level color reference modes" unique to mini-LED displays.

    (Since it was discovered by aiaf that the display is still 8-bit in the end, yet after activating Stillcolor, 10-bit images can still be seen. On the other hand, on a M1+ MacBook Air or Touch Bar 13" Pro, activating Stillcolor will reduce e.g. test pattern images to only 8-bit.)

    For me the only solution (for internal display) was to sell my 14" MBP and get an M1 Air, lol. Stillcolor didn't work for me at all on 14" but it is working perfectly on M1 Air!

    It also works on M2 Touch Bar Pro (Although on the M2 Touch Bar Pro it seems to only work on certain panels, if the panel ID starts with "FMX" it doesn't work for multiple people here including me. But if the panel ID includes "00000000" then it actually will work correctly.)

    Not sure about external monitor though. Is your monitor "HDR", have "local dimming", or is "10-bit capable" in any way? Those could interfere with things.

      DisplaysShouldNotBeTVs The ProMotion on these models induces flickering as well. Especially near the edges of the screen. Tons of threads around the web about it. Didn't find a way to stop it, so I reverted to 60 hz.. Could be anti burnin with VRR as shown in the flags above. I actually got some stuck pixels a few times while playing with the flags. Luckily they only stayed like that for a few minutes.

      Quick update on "True Non-Retina" UI scaling via betterdisplay screen streaming:

      For some reason I feel a lot better setting physical screen to "2560x1600 1x" (aka 2560x1600 with 100% UI zoom) — instead of "1280x800 2x" (aka 2560x1600 with 200% UI zoom).

      (In both cases the virtual screen is 1280x800 1x with integer scaling enabled to achieve true non-retina.)

      No idea what makes these different as they should be "the same" (1280x800 2x is "technically" just 2560x1600 with 200% UI zoom, both end up with a visually similar result of exactly 4 physical pixels representing 1 pixel).

      -

      But when using 2x on the physical screen I feel more tired, harder time focusing. Despite being able to "see the pixels" properly because of integer scaling, it looks ever so slightly blurry. Was using it in this mode for a few hours today and I realized I was starting to feel nausea.

      Using 1x on the physical screen (as in the "100% zoom" resolution that would usually make the UI extremely tiny, if it wasn't for the stream) it's sooo much quicker for me to focus and I can hold it for longer. The screen also looks noticeably sharper. Only downside is that I also feel like the screen gets slightly brighter. Literally right after using 2x native physical today as mentioned above, I switched to 2x native physical (and at first, not even really believing that this would help me since both are effectively 2560x1600) and immediately started to feel better. Nausea went away. It was really noticeable.

      My guess: in 2x-native mode on the physical display, macOS WindowServer itself is playing some kind of part in "scaling" BetterDisplay's streaming window because even if "1:1 pixel mapping" is checked the non-Retina stream will be the "correct" size of 13 inches. But in 1x-native mode, checking "1:1 pixel mapping" will shrink the 1280x800 1x stream to a quarter of the physical screen size (as would be expected).

      This means that in 1x mode BetterDisplay itself is entirely handling the scaling the non-Retina stream back up to the full 13 inches of my m1air. What's certain about that is there's one less step of OS post-processing when set to physical 2560x1600 1x instead of physical 1280x800 2x.

      My only guess is that there's some kind of really subtle additional smoothing that WindowServer adds via an additional Metal layer etc. (despite BetterDisplay integer scaling being enabled) that I'm sensitive to.

      I usually can tell when things feel like they may just be placebo. In this case, I do NOT think this is placebo.

      Current color profiles:

      Physical display is using the default Color LCD profile

      Streamed display is using the default virtual display color profile

      No Night Shift, no True Tone, no auto-brightness no keyboard backlight

      IOMFB contrast enhancement forced to 0 with repeating script while testing both physical display modes

        DisplaysShouldNotBeTVs ohh it sounds complicated…

        I feel that the problem is something related to software, not related to internal or external screen. Although I have a screen with 8 bit + FRC, I’m using it without a problem(at least in the past).

        I tried lot of things but still stuck with the eye strain.

        Maybe a color profile can help us?

        DisplaysShouldNotBeTVs I'm fairly certain that streaming uses some kind of compression as well. Patterns can break those.

        Try this:

        Filebin | 0h5azm59sctkdo1x

        Node.js — Download Node.js® (nodejs.org) (if you don't have npm already, LTS version is fine)
        cd ledstrain-overlay
        npm i
        npm run start

        It autoreloads so you can adjust the overlay real-time by modifying style.css. If it gets stuck just killall -9 Electron

        Edit:

        Try to add this suble repeating pattern to help your eyes keep track of where you are on the screen as well.

        .overlay-4 {
          background: url('https://i.stack.imgur.com/IeN9i.jpg') top center repeat;
          background-size: 100px;
          opacity: 0.15;
          filter: saturate(0.5);
        }

        DisplaysShouldNotBeTVs
        I believe I am experiencing the same issue as you. I own a Mac mini with a 4K screen. When I use the monitor at its native resolution, I don't encounter any nausea or brain fog. However, when I attempt to use it with 2x or other scaling HPDI resolutions, I immediately feel sick. My theory is that this phenomenon is caused by subtle pattern glare and pixel shifting. For instance, when I switch from 1080p low resolution to 1080p 2x resolution, I notice slight changes in the position of UI elements.

        If I understand correctly, you mentioned that BetterDisplay can tackle this scaling problem by utilizing a virtual monitor instead of relying solely on macOS. While I'm not very familiar with BetterDisplay, I would appreciate it if you could explain how the BetterDisplay app can assist me when using an external monitor. Thank you.

          For me the idea of grey flicker makes best sense. It affects both native and external monitors. However, even if I do believe still color and other innovations will eventually have good solution, by pressing apple so find a solution ir specific switch would also be a good route. With their resources, this would be quick solution. Also I bet with all Mac users at apple corporation there must be someone internally raising an issue. Unless of course that tcon is actually some faulty engineering, then probably they will be silent about it.

          anon123 utilizing a virtual monitor instead of relying solely on macOS

          yes, but not through BetterDisplay's usual "virtual screen mirroring" technique that's widely known. instead, you need virtual screen streaming (exclusive to BetterDisplay Pro) to achieve this

          1. create new virtual screen with aspect ratio as main screen
          2. set virtual screen resolution to non-retina 1920x1080 1x
          3. stream virtual screen to physical screen
          4. in streaming settings under the virtual display menu, choose "Integer Scaling" (Important!)
          5. set physical screen resolution to 3840x2160 1x (as in, the 1x res that usually would make everything extremely tiny)
          6. go to "arrangement" in macOS display preferences and position your physical screen at the bottom left corner of the virtual screen (to prevent cursor from accidentally moving to it)
          7. if your mouse pointer looks blurry, set a custom cursor color in display accessibility settings, after you close the color picker window and switch to a different app it will become clear again

          if BetterDisplay gets into a state where you can't see your primary desktop windows anymore (which happens the very first time you set it up, but not after), just blindly Cmd+Space Spotlight search for BetterDisplay, press enter, and then press Cmd+Q to quit it to get your windows back. then restart BetterDisplay

          after it's fully working check "Resume Stream on Connect" in the virtual display menu to keep the stream activated when resuming from sleep

          doing this will make your password screen after resuming from sleep "blank" since the streamed display window can't show there — the password field is offscreen. instead you can just blindly Touch ID/type password and press enter though and it'll still work.

          (you can also experiment with setting the virtual screen to 1920x1080 2x retina and leaving physical screen at 3840x2160 1x. in that case, do not check Integer Scaling.

          this may allow you to use retina resolutions without the shimmering issue, because it "tricks" your physical screen into running in 1x unscaled 4K mode while still "showing" scaled UI inside of a full-screen window.)

            Another discovery!

            Discovered that the logs on mac contain info about plist values it tries to access that doesn't exist. For example the Display Settings looks up a ton of things.

            Wrote a small command that cleans it up and highlights if the setting exists, as well as prevents outputting the same keys multiple times. Many of these can be added to preference files.

            log stream --predicate 'subsystem=="com.apple.defaults"' --info --debug | sed -unE 's/.* (found no value|looked up value).* for key ([^ ]+).*Domain: ([^ ,]+).*/\1 - \2 - \3/p' | awk '!seen[$0]++ {split($0, parts, " - "); if (parts[1] == "looked up value") {printf "\033[32m!\033[0m"} else {printf "\033[31mx\033[0m"}; printf " - \033[33m%s\033[0m - \033[37m%s\033[0m\n", parts[3], parts[2]}'

            To filter the output use grep like this to avoid issues with buffering: | grep -i --line-buffered Smooth

            I'm absolutely certain there exists values that affects how retina resolutions scale. Next step would be to turn on logging of debug entries from startup and filtering all the logs.

            Some info about setting defaults. Note that many can be set in local versions instead of overwriting the original. https://eclecticlight.co/2022/11/25/changing-preferences-isnt-so-simple/

            Useful tool to diff what prefs change after doing certain things. But do note that this DOES NOT show what things it tries to read that doesn't exist. macos-defaults/diff.sh at main · yannbertrand/macos-defaults (github.com)

            Discovering tons and tons of flags. It appears that these can be set in .GlobalPreferences.plist to affect apps after restarting them as well. See image below for this test. One of them is for dithering.

            Try this and restart notes or Safari. It stores the settings in the ByHosts file so it doesn't overwrite anything.

            defaults -currentHost write -g CADisableBackdrops -bool true
            defaults -currentHost write -g CADisableChameleon -bool true
            defaults -currentHost write -g CADisableShadingDither -bool true
            defaults -currentHost write -g CAEnableIOSurfaceCompression -bool false
            defaults -currentHost write -g CAEnableDeepFramebuffer -bool false
            defaults -currentHost write -g FramebufferServerUseLowQualityScaling -bool false

            The CA and framebuffer flags I've found so far.

            CACertificates
            CACertificatesWithConstraints
            CAContextPoolLimit
            CADebugTxHandlers
            CADisableAutoSeparateBackdropLayers
            CADisableBackdrops
            CADisableChameleon
            CADisableColorMatching
            CADisableShadingDither
            CADistrustedCertificates
            CADynamicBackendSwitching
            CAEnableDeepFramebuffer
            CAEnableIOSurfaceCompression
            CAEnableMetalWhippet
            CAHintCertificates
            CAPlatformIntegrationEnabled
            CAPluggedInStatus
            CASynchronizeHangReport
            AlwaysUseFramebufferServer
            CAEnableDeepFramebuffer
            FramebufferServerDisableMaskedSurfaces
            FramebufferServerGPUPolicy
            FramebufferServerRendererPolicy
            FramebufferServerUseLowQualityScaling

              async Wow this is amazing, years of people responding to e.g. stackexchange questions about customizing macOS with "you can't do this" seriously made me think that there were no more "defaults write" commands to be found. Absolutely mindblowing that there's actually a way to control for example the "blur behind" the titlebar in Safari/Finder with just a defaults write that simply "had never been found before".

              CADisableChameleon = wallpaper tinting (so it can also effectively be disabled through the Settings checkbox, but this forces it to never be used even if the box is checked)

              CADisableBackdrops = blur behind titlebars

              async defaults -currentHost write -g FramebufferServerUseLowQualityScaling -bool false

              This one i'm not actually sure if False or True is better — sometimes "high quality scaling" = extra filtering or smoothing algorithms and "low quality" = nearest neighbor/unprocessed. In that case False would probably be better. But this could also relate to compression where in that case True would be better

              BTW I was wrong about the m1air "lacking fake HDR entirely", it still has a really tiny amount of it (but still less than the M2 LCD Touch Bar Pro did)

              Whenever I have the Blender app running and unminimized the screen will get ever so slightly brighter and black levels will become lower contrast. This remains true even if the window is on another Space. If I minimize or hide it the screen will choppily animate back to normal brightness. (And since Stillcolor is activated, the amount of banding will shift while this is happening)

              The only time this doesn't happen is when the screen is on 100% backlight level. Seems like no one else has ever noticed this or talked about this online.

              Currently these are the issues on MBP M1 Max (mini-led) as I see them for anyone that still has energy to follow this 1000 post thread. Most of them are relevant for other models as well.

              Interested in any solution that solves more of them. I spend too much time on this as I find it rather fun to reverse engineer. Even tho I am still trying to solve the rest of the things I currently have pretty much zero strain from this screen.

              1. Dithering of the screen output. Solved by stillcolor. ✅
              2. Shitty darkness shifts all around. Solved with uniformity2d in stillcolor. ✅
              3. Issues with focusing my eyes at the right distance to the screen. Mostly solved by my Electron overlay app. ✅
              4. Dark blobs around things under bright lightning. Solved by blocking the light sensor next to the camera, and by setting the value of the contrast adjustment frequently as posted by @DisplaysShouldNotBeTVs ✅
              5. Cursor switching color when idling. Possibly related to buggy color profiles, but seems solved with IdleCachingMethod. ✅
              6. Random color shifts. Mostly solved with the ioreg flags for things like temperature. ✅
              7. Dithering applied directly in apps like Preview. Possibly solved by one of the flags I posted. 🤔
              8. Preventing local backlight dimming with PWM.
              9. Finding a way to force the display to stay at 8 bit, without having to use streaming.
              10. Finding a way to block all high gamut colors without having to use buggy color profiles.
              11. ProMotion flicker near the edges, as described all around the web, that is only solved by 60 hz. Unknown what causes it, but might be one of the seen VRR anti-burnin methods. Currently untested if keeping the framerate high with an overlay solves it.
              12. Disabling the ugly sharpening and text shadows that happens excessively at scaled resolutions. Might be solvable with flags.
              13. Blotching that appears under certain conditions. Seems like it might be related to compression in some video module and possibly metal overlays. Might be solvable with flags.
              14. Understanding other weird behaviour as it seems pretty certain that the display toggles different modes at different times, that significantly affect things. Severe ghosting can suddenly start out of nowhere. Especially when using many of the found flags. Might be based on the bandwidth required in the framebuffer, or things like temperature.
              15. Buggy and weird behaviour with BetterDisplay, drawing layers and color profiles. For example with a streaming display, if I apply my overlay app, I have to switch away from the virtual color profile and back before it applies properly.
              16. Some stuff with HDR content, headroom etc.
              17. Possible improvements from the startup flags posted. All untested.
                dev