Dream Recorder is an open-source venture by Modem. Developed in close collaboration with Mark Hinch (software & hardware), Ben Levinas and Joe Tsao (industrial design), and Alexis Jamet (illustrations).
See the codeTo build a Dream Recorder, these are the components you will need. The overall cost for these components from the provided links is approximately €285 (Last updated May 2025).
| Item | URL |
|---|---|
| Waveshare 7.9 inch HDMI IPS-TFT-LCD Display 1280x400 | https://www.tinytronics.nl/nl/displays... |
| Raspberry Pi 5 8GB | https://www.amazon.nl/Raspberry-Pi... |
| USB-C adapter for 5.1V, 5A, 27W (these specs are important) | https://www.amazon.nl/dp/B0D41VN574 |
| Waveshare Active Cooler | https://www.amazon.nl/dp/B0CPLQB4RK |
| MicroSDXC UHS-I-Card - 64 GB | https://www.amazon.nl/dp/B0B7NXBM6P |
| TTP223B Capacitive Touch Sensor | https://www.amazon.nl/dp/B07XPMH2NZ |
| Dupont Jumper Wires - 10 cm (you need 3 x female-female) | https://www.amazon.nl/dp/B07GJLCGG8 |
| USB microphone | https://www.amazon.nl/dp/B0BWFTQL95 |
| 90 degree right-angled FPV male-male HDMI ribbon cable (20cm) | https://www.amazon.nl/dp/B08C7G4J6B |
| 90 degree down-angled FPV male-male Micro-HDMI ribbon cable (20cm) | https://www.amazon.nl/dp/B0177EWVMQ |
| Up-angled USB 2.0 male Type-A to male Micro-USB ribbon cable (20cm) | https://www.amazon.nl/dp/B095LVLTLJ |
| 90 degree USB-C adapter | https://www.amazon.nl/dp/B0DGD52DL3 |
| M2.5 nylon screwset (you need 4 x 15mm male-female stands) | https://www.amazon.nl/dp/B0DCS5C7SN |
| PLA filament - 1.75mm, transparant | https://www.amazon.nl/dp/B07Q1PGH4B |
In order to generate dreams, this application uses OpenAI and LumaLabs' APIs. The approximate costs are as follows (last updated May 2025):

You now need to find the IP address that your local network has assigned to the Raspberry Pi. You can do this in one of three ways:
nmapifconfig | grep "inet "192.168.X.X)nmap -sn 192.168.1.0/24 | grep dreamernmap -sn 192.168.1.0/24 | grep dreamerssh dreamer@<DREAM_RECORDER_IP_ADDRESS>sudo raspi-configssh dreamer@<DREAM_RECORDER_IP_ADDRESS>git clone <repo_ssh_url>cd dream-recorder./pi_installer.shsudo reboot
You should be good to go with your Dream Recorder now! Everything below is mostly for those that want to take things further to start tinkering and contributing
To change the default settings for the Dream Recorder, you can use the command line configuration tool:
ssh dreamer@<DREAM_RECORDER_IP_ADDRESS>cd dream-recorder./dreamctl configdocker compose restartIn the ./3DAssets folder you will find STL and G-code files for the translucent two-part 3D-printable enclosure. Designed with accessibility in mind, it should print reliably on most FDM printers using basic slicer settings.
| Filename | Description |
|---|---|
dream-recorder_front.stl | Front half of the enclosure |
dream-recorder_back.stl | Back half of the enclosure |
dream-recorder_front.gcode | Pre-sliced G-code for front shell |
dream-recorder_back.gcode | Pre-sliced G-code for back shell |
G-code was sliced for a 0.4 mm nozzle with standard PLA settings at 0.2 mm layer height.
| Setting | Value |
|---|---|
| Layer height | 0.2 mm |
| Nozzle diameter | 0.4 mm |
| Infill | 15%, Rectilinear |
| Wall loops | 2 |
| Top/Bottom Layers | 4 (Monotonic pattern) |
| Supports | Enabled, Tree (Auto) |
| Support angle | 45° |
| Flush options | Flush into support: ✔️ |
| Material | Translucent PLA recommended |
Note: Prime tower is disabled to ensure simplicity and material efficiency.
.gcode files (assuming printer compatibility)git clone <repo_url>
cd dream-recorder
cp ./.env.example ./.env
cp ./config.example.json ./config.json
# Add your API keys using vim, nano or any text editor you're compfortable with
vim .env
docker compose -f docker-compose.dev.yml build
docker compose -f docker-compose.dev.yml up -d
# Edit the default config options (optional)
./dreamctl config
The app will be available at http://localhost:5000 (unless you choose to change the default port in the config)
To simulate sensor button presses, you can either use the on-screen developer console (available when running in dev mode), or:
python gpio_service.py --test
Run this command to run the tests:
./dreamctl test
Run this command to run the tests and see overall test coverage:./dreamctl test-covTo see how the application's architecture and communication works visually, please refer to the Mermaid diagrams:
You can access the dream management page from your computer by going to http://dreamer:5000/dreams
docker compose logs -f./dreamctl gpio-logs (for on the Dream Recorder)tail -f logs/gpio_service.log (for during development on your local machine if using python gpio_service.py --test)docker ps
ps aux | grep gpio_service.py
ps aux | grep chromium-browser
docker compose down
systemctl --user stop dream_recorder_gpio.service
docker compose up -d
systemctl --user start dream_recorder_gpio.service
To make working with the Dream Recorder easier, you can use the dreamctl script in the project root. This script simplifies running common commands inside the Docker container.
Usage:
./dreamctl <command>
Available commands:
config Edit the Dream Recorder configurationtest Run unit teststest-cov Run unit tests with coverage reportgpio-logs Tail the GPIO service log (logs/gpio_service.log)help Show help messageFor example:
./dreamctl config will open the configuration editor./dreamctl test will run the test suite./dreamctl test-cov will run the test suite with coverage reporting./dreamctl gpio-logs will tail the GPIO service log (logs/gpio_service.log)You can extend dreamctl to add more commands as needed.
If you would like to contribute to the project, here are some areas we would love help / contribution towards:
Open an issue or contact the lead maintainer for help:
Dream Recorder is licensed under the MIT License. This means you are free to use, modify, and distribute the software, subject to the terms and conditions of the MIT License. For more details, please see the LICENSE.md file in the project repository.
3,501 followers · starred Jun 2025
515 followers · starred Jun 2025
2 followers · starred Jan 2026
33 followers · starred Feb 2026
Dream Recorder is an open-source venture by Modem. Developed in close collaboration with Mark Hinch (software & hardware), Ben Levinas and Joe Tsao (industrial design), and Alexis Jamet (illustrations).
See the codeTo build a Dream Recorder, these are the components you will need. The overall cost for these components from the provided links is approximately €285 (Last updated May 2025).
| Item | URL |
|---|---|
| Waveshare 7.9 inch HDMI IPS-TFT-LCD Display 1280x400 | https://www.tinytronics.nl/nl/displays... |
| Raspberry Pi 5 8GB | https://www.amazon.nl/Raspberry-Pi... |
| USB-C adapter for 5.1V, 5A, 27W (these specs are important) | https://www.amazon.nl/dp/B0D41VN574 |
| Waveshare Active Cooler | https://www.amazon.nl/dp/B0CPLQB4RK |
| MicroSDXC UHS-I-Card - 64 GB | https://www.amazon.nl/dp/B0B7NXBM6P |
| TTP223B Capacitive Touch Sensor | https://www.amazon.nl/dp/B07XPMH2NZ |
| Dupont Jumper Wires - 10 cm (you need 3 x female-female) | https://www.amazon.nl/dp/B07GJLCGG8 |
| USB microphone | https://www.amazon.nl/dp/B0BWFTQL95 |
| 90 degree right-angled FPV male-male HDMI ribbon cable (20cm) | https://www.amazon.nl/dp/B08C7G4J6B |
| 90 degree down-angled FPV male-male Micro-HDMI ribbon cable (20cm) | https://www.amazon.nl/dp/B0177EWVMQ |
| Up-angled USB 2.0 male Type-A to male Micro-USB ribbon cable (20cm) | https://www.amazon.nl/dp/B095LVLTLJ |
| 90 degree USB-C adapter | https://www.amazon.nl/dp/B0DGD52DL3 |
| M2.5 nylon screwset (you need 4 x 15mm male-female stands) | https://www.amazon.nl/dp/B0DCS5C7SN |
| PLA filament - 1.75mm, transparant | https://www.amazon.nl/dp/B07Q1PGH4B |
In order to generate dreams, this application uses OpenAI and LumaLabs' APIs. The approximate costs are as follows (last updated May 2025):

You now need to find the IP address that your local network has assigned to the Raspberry Pi. You can do this in one of three ways:
nmapifconfig | grep "inet "192.168.X.X)nmap -sn 192.168.1.0/24 | grep dreamernmap -sn 192.168.1.0/24 | grep dreamerssh dreamer@<DREAM_RECORDER_IP_ADDRESS>sudo raspi-configssh dreamer@<DREAM_RECORDER_IP_ADDRESS>git clone <repo_ssh_url>cd dream-recorder./pi_installer.shsudo reboot
You should be good to go with your Dream Recorder now! Everything below is mostly for those that want to take things further to start tinkering and contributing
To change the default settings for the Dream Recorder, you can use the command line configuration tool:
ssh dreamer@<DREAM_RECORDER_IP_ADDRESS>cd dream-recorder./dreamctl configdocker compose restartIn the ./3DAssets folder you will find STL and G-code files for the translucent two-part 3D-printable enclosure. Designed with accessibility in mind, it should print reliably on most FDM printers using basic slicer settings.
| Filename | Description |
|---|---|
dream-recorder_front.stl | Front half of the enclosure |
dream-recorder_back.stl | Back half of the enclosure |
dream-recorder_front.gcode | Pre-sliced G-code for front shell |
dream-recorder_back.gcode | Pre-sliced G-code for back shell |
G-code was sliced for a 0.4 mm nozzle with standard PLA settings at 0.2 mm layer height.
| Setting | Value |
|---|---|
| Layer height | 0.2 mm |
| Nozzle diameter | 0.4 mm |
| Infill | 15%, Rectilinear |
| Wall loops | 2 |
| Top/Bottom Layers | 4 (Monotonic pattern) |
| Supports | Enabled, Tree (Auto) |
| Support angle | 45° |
| Flush options | Flush into support: ✔️ |
| Material | Translucent PLA recommended |
Note: Prime tower is disabled to ensure simplicity and material efficiency.
.gcode files (assuming printer compatibility)git clone <repo_url>
cd dream-recorder
cp ./.env.example ./.env
cp ./config.example.json ./config.json
# Add your API keys using vim, nano or any text editor you're compfortable with
vim .env
docker compose -f docker-compose.dev.yml build
docker compose -f docker-compose.dev.yml up -d
# Edit the default config options (optional)
./dreamctl config
The app will be available at http://localhost:5000 (unless you choose to change the default port in the config)
To simulate sensor button presses, you can either use the on-screen developer console (available when running in dev mode), or:
python gpio_service.py --test
Run this command to run the tests:
./dreamctl test
Run this command to run the tests and see overall test coverage:./dreamctl test-covTo see how the application's architecture and communication works visually, please refer to the Mermaid diagrams:
You can access the dream management page from your computer by going to http://dreamer:5000/dreams
docker compose logs -f./dreamctl gpio-logs (for on the Dream Recorder)tail -f logs/gpio_service.log (for during development on your local machine if using python gpio_service.py --test)docker ps
ps aux | grep gpio_service.py
ps aux | grep chromium-browser
docker compose down
systemctl --user stop dream_recorder_gpio.service
docker compose up -d
systemctl --user start dream_recorder_gpio.service
To make working with the Dream Recorder easier, you can use the dreamctl script in the project root. This script simplifies running common commands inside the Docker container.
Usage:
./dreamctl <command>
Available commands:
config Edit the Dream Recorder configurationtest Run unit teststest-cov Run unit tests with coverage reportgpio-logs Tail the GPIO service log (logs/gpio_service.log)help Show help messageFor example:
./dreamctl config will open the configuration editor./dreamctl test will run the test suite./dreamctl test-cov will run the test suite with coverage reporting./dreamctl gpio-logs will tail the GPIO service log (logs/gpio_service.log)You can extend dreamctl to add more commands as needed.
If you would like to contribute to the project, here are some areas we would love help / contribution towards:
Open an issue or contact the lead maintainer for help:
Dream Recorder is licensed under the MIT License. This means you are free to use, modify, and distribute the software, subject to the terms and conditions of the MIT License. For more details, please see the LICENSE.md file in the project repository.
3,501 followers · starred Jun 2025
515 followers · starred Jun 2025
2 followers · starred Jan 2026
33 followers · starred Feb 2026