PWNAGOTCHI FACE PACK GUIDE

Create Your Own Custom Art & Expressions

// TABLE OF CONTENTS
1. Overview - What Are Face Packs? 2. Requirements & Tools 3. File Structure 4. Image Dimensions & Formats 5. Required Face States 6. Creating Your Images 7. Python Integration (Optional) 8. Installation 9. Testing Your Pack 10. Sharing Your Creation

1 Overview - What Are Face Packs?

Pwnagotchi displays various facial expressions on its e-ink/LCD screen to show its current mood and status. Face packs are collections of custom images that replace the default expressions.

Face packs can be simple PNG replacements or full Python plugins that add animated faces, custom layouts, and interactive elements.

Popular third-party face packs include:

2 Requirements & Tools

Tool Purpose Recommended
Image Editor Create/edit face images GIMP, Photoshop, Aseprite
Python 3 For plugin-based faces Python 3.7+
SSH Client Transfer files to device OpenSSH, PuTTY
Text Editor Edit config/Python files VSCode, Nano, Vim
For e-ink displays, use 1-bit (black & white) or grayscale images for best results. Color displays (like Waveshare LCD) support full RGB.

3 File Structure

Your face pack should follow this directory structure:

my-face-pack/
README.md
faces/
look_r.png
look_l.png
look_r_happy.png
look_l_happy.png
sleep.png
sleep2.png
awake.png
bored.png
intense.png
cool.png
happy.png
grateful.png
excited.png
motivated.png
demotivated.png
smart.png
lonely.png
sad.png
angry.png
friend.png
broken.png
debug.png
upload.png
upload1.png
upload2.png
fonts/ (optional)
custom-font.ttf
my_faces.py (optional plugin)
install.sh (optional)
File names must match EXACTLY as shown above. Pwnagotchi looks for specific filenames to display each mood state.

4 Image Dimensions & Formats

Image dimensions depend on your display type:

Display Type Resolution Color Depth
Waveshare 2.13" V2 (e-ink) 250 x 122 pixels 1-bit B&W
Waveshare 2.13" V3 (e-ink) 250 x 122 pixels 1-bit B&W
Waveshare 2.7" (e-ink) 264 x 176 pixels 1-bit B&W
Waveshare 1.44" LCD HAT 128 x 128 pixels RGB 65K
Waveshare 1.3" LCD HAT 240 x 240 pixels RGB 65K
Pimoroni Inky pHAT 212 x 104 pixels Black/White/Red or Yellow
The face images don't need to be full-screen. They can be smaller and will be positioned in the face area of the UI (typically upper-left or center depending on config).

Recommended Face Image Size:

5 Required Face States

Pwnagotchi has multiple emotional states. Here's what each face represents:

( ^_^)
look_r.png
(^_^ )
look_l.png
(-_-) zzZ
sleep.png
(0_0)
awake.png
(-_-)
bored.png
(>_<)
intense.png
(B_B)
cool.png
(^_^)
happy.png
(^_^)
grateful.png
(*_*)
excited.png
(9_9)
motivated.png
(-.-)
demotivated.png
(^_~)
smart.png
(;_;)
lonely.png
(T_T)
sad.png
(`_')
angry.png
(^_^)
friend.png
(X_X)
broken.png
Face File When It's Displayed
look_r.png / look_l.png Default idle state, looking around
look_r_happy.png / look_l_happy.png Happy while looking around
sleep.png / sleep2.png AI is sleeping (low activity)
awake.png Just woke up from sleep
bored.png No interesting APs found
intense.png Actively attacking/deauthing
cool.png Successfully captured handshake
happy.png General positive state
grateful.png Received a reward/bonus
excited.png Found interesting targets
motivated.png High epoch/good performance
demotivated.png Poor performance/low rewards
smart.png AI learned something new
lonely.png No peers detected nearby
sad.png Lost a peer connection
angry.png Error occurred or attack failed
friend.png Peer pwnagotchi detected!
broken.png Critical error state
debug.png Debug mode active
upload.png / upload1.png / upload2.png Uploading handshakes (animated)

6 Creating Your Images

Method 1: Simple PNG Replacement

The easiest way - just create PNG images for each mood:

  1. Open your image editor (GIMP, Photoshop, Aseprite)
  2. Create a new image: 80x80 pixels, transparent background
  3. Draw your face design using black pixels only for e-ink displays
  4. Export as PNG with transparency
  5. Repeat for all required face states
Start with a base face and modify it for each emotion. This keeps your style consistent!

Method 2: ASCII/Text-Based Faces

You can also use text-based faces defined in the config:

# /etc/pwnagotchi/config.toml ui.faces.look_r = "( ^_^)" ui.faces.look_l = "(^_^ )" ui.faces.look_r_happy = "( ^o^)" ui.faces.look_l_happy = "(^o^ )" ui.faces.sleep = "(-_-) zzZ" ui.faces.sleep2 = "(-.-) zzZ" ui.faces.awake = "(0_0)" ui.faces.bored = "(-_-)" ui.faces.intense = "(>_<)" ui.faces.cool = "(B_B)" ui.faces.happy = "(^_^)" ui.faces.grateful = "(^_^)" ui.faces.excited = "(*_*)" ui.faces.motivated = "(9_9)" ui.faces.demotivated = "(-.-)" ui.faces.smart = "(^_~)" ui.faces.lonely = "(;_;)" ui.faces.sad = "(T_T)" ui.faces.angry = "(`_')" ui.faces.friend = "(^_^)" ui.faces.broken = "(X_X)" ui.faces.debug = "(#_#)" ui.faces.upload = "(~_~)" ui.faces.upload1 = "(-_~)" ui.faces.upload2 = "(~_-)"

Design Tips

7 Python Integration (Optional)

For advanced face packs with animations or dynamic content, create a Python plugin:

import pwnagotchi.plugins as plugins import pwnagotchi.ui.faces as faces from pwnagotchi.ui.components import LabeledValue from pwnagotchi.ui.view import BLACK import pwnagotchi.ui.fonts as fonts from PIL import Image import os class MyCustomFaces(plugins.Plugin): __author__ = 'YourName' __version__ = '1.0.0' __license__ = 'GPL3' __description__ = 'Custom face pack with special effects' __name__ = 'my_custom_faces' __help__ = 'Custom face pack plugin' __dependencies__ = { 'pip': ['pillow'] } __defaults__ = { 'enabled': False, } def __init__(self): self.faces_path = '/custom/plugins/my_faces/faces/' def on_loaded(self): # Load custom face images self.load_custom_faces() def load_custom_faces(self): # Override default faces with custom images face_files = { 'LOOK_R': 'look_r.png', 'LOOK_L': 'look_l.png', 'LOOK_R_HAPPY': 'look_r_happy.png', 'LOOK_L_HAPPY': 'look_l_happy.png', 'SLEEP': 'sleep.png', 'SLEEP2': 'sleep2.png', 'AWAKE': 'awake.png', 'BORED': 'bored.png', 'INTENSE': 'intense.png', 'COOL': 'cool.png', 'HAPPY': 'happy.png', 'GRATEFUL': 'grateful.png', 'EXCITED': 'excited.png', 'MOTIVATED': 'motivated.png', 'DEMOTIVATED': 'demotivated.png', 'SMART': 'smart.png', 'LONELY': 'lonely.png', 'SAD': 'sad.png', 'ANGRY': 'angry.png', 'FRIEND': 'friend.png', 'BROKEN': 'broken.png', 'DEBUG': 'debug.png', 'UPLOAD': 'upload.png', 'UPLOAD1': 'upload1.png', 'UPLOAD2': 'upload2.png', } for face_name, filename in face_files.items(): path = os.path.join(self.faces_path, filename) if os.path.exists(path): # Load and set the custom face img = Image.open(path) setattr(faces, face_name, img) def on_ui_setup(self, ui): # Optional: Add custom UI elements pass def on_ui_update(self, ui): # Optional: Update faces dynamically pass
Plugin-based faces require understanding of the pwnagotchi plugin API. Start with simple PNG replacements first!

8 Installation

Method 1: Config-Only (Text Faces)

# SSH into your pwnagotchi ssh [email protected] # Edit the config file sudo nano /etc/pwnagotchi/config.toml # Add your custom faces (see config example above) # Save and exit (Ctrl+X, Y, Enter) # Restart pwnagotchi sudo systemctl restart pwnagotchi

Method 2: PNG Face Pack

# SSH into your pwnagotchi ssh [email protected] # Create directory for custom faces sudo mkdir -p /usr/local/share/pwnagotchi/custom-faces/ # Copy your face images (from your computer) scp -r ./my-face-pack/faces/* [email protected]:/tmp/ # On the pwnagotchi, move to proper location sudo mv /tmp/*.png /usr/local/share/pwnagotchi/custom-faces/ # Update config to use custom faces path sudo nano /etc/pwnagotchi/config.toml

Add to your config.toml:

ui.faces.path = "/usr/local/share/pwnagotchi/custom-faces/"

Method 3: Plugin Installation

# Copy plugin file to custom plugins directory sudo cp my_custom_faces.py /usr/local/share/pwnagotchi/custom-plugins/ # Copy face images sudo mkdir -p /usr/local/share/pwnagotchi/custom-plugins/my_faces/faces/ sudo cp ./faces/*.png /usr/local/share/pwnagotchi/custom-plugins/my_faces/faces/ # Enable in config.toml sudo nano /etc/pwnagotchi/config.toml

Add to config:

main.custom_plugins = "/usr/local/share/pwnagotchi/custom-plugins/" main.plugins.my_custom_faces.enabled = true

9 Testing Your Pack

  1. After installation, restart pwnagotchi:
    sudo systemctl restart pwnagotchi
  2. Watch the logs for errors:
    sudo tail -f /var/log/pwnagotchi.log
  3. Check the web UI at http://10.0.0.2:8080 to see your faces
  4. Trigger different moods by:
    • Walking near WiFi networks (excited/intense)
    • Capturing handshakes (cool/happy)
    • Waiting with no activity (bored/lonely)
    • Finding another pwnagotchi (friend)
Use the webcfg plugin to quickly switch between face moods for testing without waiting for natural triggers.

Debug Mode Testing

# You can force mood changes via bettercap API # Connect to bettercap at http://10.0.0.2/ # Use the events tab to send mood triggers # Or via command line: curl -X POST http://10.0.0.2:8081/api/session \ -H "Content-Type: application/json" \ -d '{"cmd": "set wifi.show faces true"}'

10 Sharing Your Creation

Share your face pack with the community:

  1. Create a GitHub Repository
    • Include all face images in a /faces folder
    • Add a README.md with preview images
    • Include installation instructions
    • Add a LICENSE file (GPL3 recommended)
  2. README Template:
    # My Awesome Pwnagotchi Face Pack ## Preview ![Preview](preview.gif) ## Installation 1. SSH into your pwnagotchi 2. Clone this repo: `git clone https://github.com/you/face-pack` 3. Run: `./install.sh` 4. Restart pwnagotchi ## Faces Included | Mood | Preview | |------|---------| | Happy | ![happy](faces/happy.png) | | Sad | ![sad](faces/sad.png) | ... ## Credits Created by [YourName] ## License GPL3
  3. Share on Community Platforms:
Consider submitting your face pack to the pwnagotchi-plugins-contrib repository for wider distribution!

Quick Reference Cheat Sheet

Task Command/Path
Config file /etc/pwnagotchi/config.toml
Custom plugins /usr/local/share/pwnagotchi/custom-plugins/
Default faces /usr/local/lib/python3.*/dist-packages/pwnagotchi/ui/faces.py
Restart service sudo systemctl restart pwnagotchi
View logs sudo tail -f /var/log/pwnagotchi.log
Web UI http://10.0.0.2:8080
Bettercap API http://10.0.0.2:8081