# Custom Emojis Put your custom PNG files in `png/` and custom GIF files in `gif/`. The filename without extension is used as the emotion name. Directory names are not part of the emotion name, so `png/neutral.png` is loaded as `neutral`. The display code looks up images by names such as: - `neutral.png` or `neutral.gif` - `happy.png` or `happy.gif` - `sad.png` or `sad.gif` - `angry.png` or `angry.gif` - `thinking.png` or `thinking.gif` - `confused.png` or `confused.gif` - `surprised.png` or `surprised.gif` - `shocked.png` or `shocked.gif` - `sleepy.png` or `sleepy.gif` - `relaxed.png` or `relaxed.gif` Recommended minimum set: - `neutral` - `happy` - `thinking` - `sad` - `angry` Fatigue reminder: - Add `wakeup.gif` or `wakeup.png` to make the idle-fatigue reminder show a custom idol animation. - The reminder defaults to `wakeup` when camera drowsiness is detected, then waits 60 seconds before it can trigger again. - Optional NVS settings in namespace `fatigue`: - `enabled` (`bool`, default `true`) - `camera_enabled` (`bool`, default `true`) - `camera_debug_preview` (`bool`, default `true`; shows the sampled frame with the eye ROI box) - `camera_interval_sec` (`int`, default `3`) - `camera_closed_samples` (`int`, default `2`) - `silence_enabled` (`bool`, default `false`) - `idle_timeout_sec` (`int`, default `12`) - `listening_timeout_sec` (`int`, default `12`) - `cooldown_sec` (`int`, default `60`) - `emotion` (`string`, default `wakeup`) - `message` (`string`, default Chinese wake-up line) - `sound_asset` (`string`, optional OGG filename in the assets partition) If an emotion-specific image is missing, the firmware falls back to `neutral` before using the built-in icon. For Zhengchen CAM boards, the build packages both subdirectories: - Put static/default faces in `png/`, such as `png/neutral.png`. - Put animated/special actions in `gif/`, such as `gif/wakeup.gif`. - If both folders contain the same emotion name, PNG wins. For example, `png/neutral.png` is used before `gif/neutral.gif`. After adding or replacing files, run a full flash so the assets partition is updated: ```bash idf.py flash ```