Skip to main content

A reverse-engineered controller for the Chatman toy

Project description

🟡 Chatman Controller

Chatman Toy

A reverse-engineered controller for the Chatman toy, allowing you to bring it back to life! Originally designed as a USB-connected talking assistant for kids, Chatman is no longer supported by its manufacturer — but that doesn't mean it's useless. This project lets you control its LED matrix, eye, hand, and antenna movements using Python.


🎉 Features

  • ✅ Control Chatman's LED matrix (3x8) in real time
  • 👁️ Move eyes, hands, and antenna
  • 🖥️ GUI (chatman_gui) for easy control
  • 🧑‍💻 CLI (chatman_cli) for scripting or automation
  • 🔌 USB HID communication with the Chatman device

🧠 Why This Exists

The official Chatman software and website are now discontinued, leaving the hardware unsupported. This project reverse-engineers the USB commands sent to the toy, allowing anyone to repurpose it — whether for fun, education, or building a retro-styled virtual assistant.


🚀 Getting Started

1. Install Chatman Controller via pip

The chatman-controller package is now available on PyPI. To install it, simply run:

pip install chatman-controller

This will install all the necessary dependencies for communication with the Chatman device, including hidapi for USB HID communication.

2. Connect Your Chatman Toy

Make sure your Chatman device is plugged into a USB port before launching the app.


🖥️ Running the GUI

Chatman GUI Screenshot

chatman_gui

This will launch a control panel where you can:

  • Toggle the LED matrix (3x8 grid)
  • Choose eye, hand, and antenna movement
  • See the resulting hex code for your LED configuration

If the device fails to connect, an error will be shown.


🔧 Running the CLI

You can control Chatman directly from the terminal using the CLI tool chatman_cli.py.

▶ Interactive Mode

Run without arguments or use --interactive to enter an interactive session:

chatman_cli

In this mode, you'll be prompted to choose eye, hand, and antenna movements, as well as LED values for Chatman's face.

▶ One-Time Command Mode

Provide movement and LED values directly via command-line arguments:

chatman_cli --eyes EYES_OPEN --hands HANDS_UP --antenna ANTENNAS_OUT --leds FF 00 AA
  • --eyes: Choose from:

    • EYES_CLOSED, EYES_ONE_THIRD_OPEN, EYES_TWO_THIRDS_OPEN, EYES_OPEN, NO_MOVEMENT
  • --hands: Choose from:

    • HANDS_DOWN, HANDS_ONE_THIRD_UP, HANDS_TWO_THIRDS_UP, HANDS_UP, NO_MOVEMENT
  • --antenna: Choose from:

    • ANTENNAS_IN, ANTENNAS_CENTER, ANTENNAS_OUT, NO_MOVEMENT
  • --leds: Provide 3 hexadecimal values for the face LEDs:

    • e.g., --leds FF 00 AA

▶ No Reset Option

If you don’t want to reset Chatman on startup, use the --no-reset flag:

chatman_cli --no-reset --eyes EYES_OPEN --hands HANDS_UP --antenna ANTENNAS_CENTER --leds 00 FF 00

💡 You typically only need to reset Chatman once — usually on the first command after plugging it in. After that, you should use --no-reset.


🧑‍💻 Using the Chatman Controller in Python

If you'd prefer to control the Chatman toy directly from your Python code, you can use the ChatmanController class, which provides an easy-to-use API for controlling the toy's movements and LED matrix.

Example Usage:

from chatman_controller import ChatmanController, EyeMovement, HandMovement, AntennaMovement

# Initialize the ChatmanController
controller = ChatmanController()

# Move the eyes, hands, and antenna, and set the LED matrix
controller.move(
    EyeMovement.EYES_CLOSED,         # Eye movement
    HandMovement.HANDS_UP,           # Hand movement
    AntennaMovement.ANTENNAS_IN,     # Antenna movement
    [0x3C, 0x7E, 0x00]               # LED matrix (3x8)
)

Parameters:

  • EyeMovement: Controls the eye position.

    • Options: EYES_CLOSED, EYES_ONE_THIRD_OPEN, EYES_TWO_THIRDS_OPEN, EYES_OPEN, NO_MOVEMENT
  • HandMovement: Controls the hand position.

    • Options: HANDS_DOWN, HANDS_ONE_THIRD_UP, HANDS_TWO_THIRDS_UP, HANDS_UP, NO_MOVEMENT
  • AntennaMovement: Controls the antenna position.

    • Options: ANTENNAS_IN, ANTENNAS_CENTER, ANTENNAS_OUT, NO_MOVEMENT
  • LED Matrix: A list of 3 hexadecimal values representing the LED matrix (3x8 grid). Each value should be in the range 0x00 to 0xFF.


🛠️ Extend This Project

Here are a few fun ideas:

  • 🎙️ Add voice control
  • 🤖 Use a local LLM or OpenAI API to turn it into a chat-based assistant
  • 🎵 Make it dance to music by analyzing sound

🙌 Credits

Created by Mohammed N. Almadhoun

Email: mohelm97@gmail.com

Feel free to fork, improve, or reach out if you’ve built something cool with it!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

chatman_controller-0.1.2.tar.gz (8.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

chatman_controller-0.1.2-py3-none-any.whl (9.2 kB view details)

Uploaded Python 3

File details

Details for the file chatman_controller-0.1.2.tar.gz.

File metadata

  • Download URL: chatman_controller-0.1.2.tar.gz
  • Upload date:
  • Size: 8.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.0

File hashes

Hashes for chatman_controller-0.1.2.tar.gz
Algorithm Hash digest
SHA256 03da0e66335e44aa61b1485b42602a1778cce8a3e3e1cea85fd0eb61e4eecb41
MD5 b69ffc6e14f1fd056465c481b3c8f6d3
BLAKE2b-256 4036e1a96b67a6cfbc5a985cded11af8f01199d6b15cadb9efd2a247d76e9df3

See more details on using hashes here.

File details

Details for the file chatman_controller-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for chatman_controller-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d5bdbe9baf7fef8d4241aa3e67a5b0150fca8325d049a9e7747bc4b1c544da2e
MD5 7e42b61136241e75444ab66f8970c974
BLAKE2b-256 977b88c5c548b2b3cf8fcceb212b0a3a2e27869f76cecc3f2527a1977c781f04

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page