{ "_comment": "Shining LED face mask (BLE). Driven by the FaceController subsystem (face/mask_face.py) which imports the standalone Mask project. Needs an env with bleak + Pillow (g1_env). Free the mask from the phone app before connecting.", "mask_dir": "", "_mask_dir": "Path to the Mask project (flat shiningmask lib). Empty -> auto: /Mask. Env override: SANAD_MASK_DIR.", "name_prefix": "MASK", "_name_prefix": "BLE scan prefix; the mask advertises e.g. 'MASK-02A711'. Env: SANAD_MASK_NAME_PREFIX.", "address": "", "_address": "Specific BLE MAC to connect to. Empty -> scan by name_prefix. Env: SANAD_MASK_ADDRESS.", "adapter": "", "_adapter": "BlueZ adapter (e.g. 'hci0'). Empty -> default. Env: SANAD_MASK_ADAPTER.", "brightness": 95, "_brightness": "0-128. Keep <=100 to avoid LED flicker (battery-limited).", "fps": 8.0, "_fps": "FaceAnimator (fallback driver) frame rate (PLAY commands/sec).", "lifelike": true, "_lifelike": "Use the LifelikeFace driver (face/face_motion.py): eye saccades, varied blinks, listening/thinking/speaking states, reactions, smooth lip-sync. false -> basic FaceAnimator.", "autostart": true, "_autostart": "Auto-connect + Start face on boot (best-effort, background — never blocks startup). After the one-time frame upload, later boots just connect + animate. false -> connect/start manually from the dashboard.", "connect_timeout": 15.0, "connect_attempts": 5, "eye_color": [0, 230, 255], "_eye_color": "Face eye/iris RGB (baked into the uploaded frames). Default cyan. Set via the dashboard 'Apply colors' (persisted here).", "mouth_color": [255, 50, 50], "_mouth_color": "Face mouth RGB. Default red.", "sclera_color": [255, 255, 255], "_sclera_color": "White-of-the-eye RGB. Default white." }