[general] # log_level is the logging level # CRITICAL=50 # ERROR=40 # WARNING=30 # INFO=20 # DEBUG=10 # NOTSET=0 log_level=20 # Control Modules # display_ctrl is a boolean parameter to enable/disable control of the display resolution (limited to desktop OS) # audio_ctrl is a boolean parameter to enable/disable control of audio devices # plugin_ctrl is a boolean parameter to enable/disable control of 3rd party audio backends (A2DP/AirPlay/PlexAmp/Spotify/etc) display_ctrl=True audio_ctrl=True plugin_ctrl=False [audio_ctrl] # audio_mode instructs the system to use either manual or automatic mode # io_device_mode determines the type of source for an input/output card (mic or aux) *Blank defaults to the device description audio_mode=automatic io_device_mode=aux # audio_listener_mode determines the type of audio listening mode (supports either local or usb) # audio_listener_enabled determines whether or not to listen for audio files # audio_listener_random determines whether or not to randomize playback of audio files audio_listener_mode=local audio_listener_enabled=False audio_listener_random=True # Local audio listening allows you to specify a media location (local must also be specified in audio_listener_mode) # local_listener_path the path to listen for physical audio files local_listener_enabled=True local_listener_path= # usb_listener_enabled determines whether or not to listen for USB devices (usb must also be specified in audio_listener_mode) # To remove USB prompt on Desktop OS goto file explorer -> Edit -> Preferences -> Volume Management -> Disable show available options for removable media when they are inserted usb_listener_enabled=True [automatic] # sink_device_type defines whether or not to use internal or an external sound card for sound output. Leave blank for either. # sink_device_volume is the desired output from .00 - 1.0 *Must be a float sink_device_type= sink_device_volume=1.0 # source_device_type defines whether or not to use mic or aux input devices. Leave blank to use either # source_device_volume is the desired output from .00 - 1.0 *Must be a float # Note: aux input device is handled through looback-modules whereas mic is not to avoid echos source_device_type= source_device_volume=1.0 # card_profile_types defines the type of card profile in the order listed (input|input-output|output) # card_profile_modes defines the type of formats accepted card_profile_types=input-output,input,output card_profile_modes=analog-stereo,analog-mono,stereo-fallback,mono-fallback,hdmi-stereo [manual] # For more granular device control you can manually specify devices. # Please refer to the audio configurations where devices can be defined # combined_sink_volume is the desired output from .00 - 1.0 *Must be a float combined_sink_volume=1.0 [projectm] # If set to true, the application will start in fullscreen mode window.fullscreen = true # If set to true, the application windows will have no window decorations if the OS supports it. # This will possibly make the window immovable. window.borderless = false # Set the monitor to initially display the window on. # 0 will use system defaults for placement, 1 and above select a specific monitor. # If the number is too large, that last available monitor is used. window.monitor = 0 # Fullsceen resolution settings. For 'desktop' OS this will enforce the display resolution using Wayland or X # For 'lite' OS this will leverage fullscreen exclusive mode to enforce the resolution. # To ensure a smooth experience, ensure you have your resolution set accordingly: # - Raspberry Pi 4 (HDMI): width: 720 height:576 # - Raspberry Pi 4 (Composite): width: 720 height:480 # - Raspberry Pi 5 (HDMI): width: 1280 height:720 # - Raspberry Pi 5 (Composite): width: 720 height:576 window.fullscreen.width = 1280 window.fullscreen.height = 720 # Window size if not in fullscreen window.width = 800 window.height = 600 # If overridePosition is true, the window will be placed at these coordinates. # Note this will include any window decoration, to the actual window contents might be offset to the bottom-right. window.left = 0 window.top = 60 # Wait for vertical sync interval before displaying the next frame. # This will limit max FPS to the vertical sync frequency but prevents tearing. window.waitForVerticalSync = true # Tries to use adaptive vertical sync if waitForVerticalSync is enabled. # When using a monitor capable of adaptive sync, setting projectM.fps to 0 gives the best results. window.adaptiveVerticalSync = true # If true, displays the current preset name (and locked state) in the window title. # If false, the window title is fixed to "projectM". window.displayPresetNameInTitle = true ### projectM settings # Default path where ProjectMAR will search for presets and textures. The directory will be searched recursively. # To add additional preset paths, add them as shown in the examples below. projectM.presetPath = /opt/ProjectMAR/presets #projectM.presetPath.1 = /yet/another/preset/path #projectM.presetPath.2 = /yet/another/preset/path # Default setting/path where ProjectMAR will backup presets that were deleted projectM.presetDeleteBachupEnabled = True projectM.presetDeleteBachupPath = /opt/ProjectMAR/preset_backup # Default path where ProjectMAR will search for additional textures. The directory will be searched recursively. # To add additional texture paths, add them as shown in the examples below. projectM.texturePath = /opt/ProjectMAR/textures #projectM.texturePath.1 = /yet/another/texture/path #projectM.texturePath.2 = /yet/another/texture/path # If true, displays the built-in projectM logo preset on startup. projectM.enableSplash = false # Preset display duration in seconds. If the time has passed, a soft cut is done to the next preset. projectM.displayDuration = 60 # If enabled, presets are selected randomly from the current playlist. Otherwise, they are played in order. projectM.shuffleEnabled = True # If enabled, the current/initial preset can only be changed manually. projectM.presetLocked = false # Target FPS, usually 60. projectM.fps = 60 # Per-pixel mesh size. This is the grid in which "per-pixel" code is executed, once per cell. # Do not set this value too high, as it severely impacts performance. On low-end hardware, set this to a small # value, e.g. 64x32. This does *NOT* affect the actual render/shader resolution! projectM.meshX = 64 projectM.meshY = 32 # Transition time in seconds for soft cuts projectM.transitionDuration = 0 # ProjectM's sensitivity to music, to better match the music's rhythm projectM.beatSensitivity = 2.0 # Hard cuts are immediate presets transitions on an intensive beat. # If enabled, after "hardCutDuration" seconds have passed and an intensive beat is detected, # a hard cut is performed. "hardCutDuration" should be set lower than "displayDuration" to have an effect. # Adjust hardCutSensitivity to better match the music's rhythm projectM.hardCutsEnabled = true projectM.hardCutDuration = 30 projectM.hardCutSensitivity = 2.0 # Controls aspect ration correction in presets. Not all presets use aspect ratio, so this setting only has an effect # on presets using the aspect ration actively. projectM.aspectCorrectionEnabled = true # Touch screen support for preset navigation # Left half of screen = previous preset, Right half = next preset touch.enabled = true # Touch rotation in degrees clockwise to map physical panel rotation # Controls which region of the screen is used for previous/next preset navigation # Allowed values: 0, 90, 180, 270 touch.rotation_degrees = 0