# 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` after 12 seconds of idle time or listening silence, then waits 60 seconds before it can trigger again.
- Optional NVS settings in namespace `fatigue`:
  - `enabled` (`bool`, default `true`)
  - `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
```
