home / skills / openclaw / skills / holocube

holocube skill

/skills/andrewjiang/holocube

This skill enables controlling the HoloCube HelloCubic-Lite, sending drawing commands and managing pomodoro timers to boost focus.

npx playbooks add skill openclaw/skills --skill holocube

Review the files below or copy the command above to add this skill to your agents.

Files (3)
SKILL.md
7.8 KB
---
name: holocube
description: Control GeekMagic HelloCubic-Lite holographic cube display with HoloClawd firmware. Supports drawing API, pomodoro timer with lobster mascot, GIF uploads, and procedural animations.
homepage: https://github.com/andrewjiang/HoloClawd-Open-Firmware
metadata: {"clawdbot":{"emoji":"🦞","os":["darwin","linux"]}}
triggers:
  - holocube
  - holo cube
  - holoclawd
  - cubic
  - geekmagic
  - display gif
  - cube animation
  - pomodoro
  - lobster timer
  - water tracker
  - hydration
  - drink water
---

# HoloCube Controller

Control the GeekMagic HelloCubic-Lite with HoloClawd firmware via REST API.

**Firmware:** https://github.com/andrewjiang/HoloClawd-Open-Firmware

## Device Info

- **Model:** HelloCubic-Lite with HoloClawd Firmware
- **Display:** 240x240px ST7789 TFT
- **Default IP:** 192.168.7.80 (configurable)

## Quick Start

**Pomodoro Timer**:

```bash
# Run pomodoro timer with lobster mascot (25 min work, 5 min break)
cd ~/Bao/TimeToLockIn/HoloClawd-Open-Firmware/examples && uv run --script pomodoro.py

# With custom task label (max 20 chars)
cd ~/Bao/TimeToLockIn/HoloClawd-Open-Firmware/examples && uv run --script pomodoro.py --task "BUILD NETWORK"

# With Spotify integration
cd ~/Bao/TimeToLockIn/HoloClawd-Open-Firmware/examples && uv run --script pomodoro.py --task "LP UPDATE" --spotify-work "spotify:episode:5yJKH11UlF3sS3gcKKaUYx" --spotify-break "spotify:episode:4U4OloHPFBNHWt0GOKENVF"

# Custom timings
cd ~/Bao/TimeToLockIn/HoloClawd-Open-Firmware/examples && uv run --script pomodoro.py --work 50 --short 10 --long 20
```

**Drawing API** (requires holocube_client.py from repo):

```bash
# Draw something on the display
python3 -c "
from holocube_client import HoloCube, Color, draw_lobster
cube = HoloCube('192.168.7.80')
cube.clear(Color.BLACK)
draw_lobster(cube, 120, 120)  # Draw lobster in center
"
```

## Python Client Library

The `holocube_client.py` module provides full programmatic control:

```python
from holocube_client import HoloCube, Color, draw_lobster, draw_confetti

cube = HoloCube("192.168.7.80")

# Drawing primitives
cube.clear("#000000")                              # Clear screen
cube.pixel(x, y, color)                            # Single pixel
cube.line(x0, y0, x1, y1, color)                   # Line
cube.rect(x, y, w, h, color, fill=True)            # Rectangle
cube.circle(x, y, r, color, fill=True)             # Circle
cube.triangle(x0, y0, x1, y1, x2, y2, color)       # Triangle
cube.ellipse(x, y, rx, ry, color, fill=True)       # Ellipse
cube.roundrect(x, y, w, h, r, color, fill=True)    # Rounded rectangle
cube.text(x, y, "Hello", size=3, color="#00ffff")  # Text

# High-level helpers
cube.centered_text(y, "Centered", size=2)
cube.show_message(["Line 1", "Line 2"], colors=[Color.CYAN, Color.WHITE])
cube.show_timer(seconds, label="FOCUS")
cube.show_progress(0.75, label="Loading")

# Lobster mascot
draw_lobster(cube, 120, 120)                       # Normal lobster
draw_lobster(cube, 120, 120, happy=True, frame=0)  # Party mode with confetti
draw_confetti(cube, 120, 120, frame=1)             # Animate confetti
```

## Pomodoro Timer

Full pomodoro timer with cute lobster buddy located in the HoloCube firmware repo:

```bash
# Always run from the examples directory
cd ~/Bao/TimeToLockIn/HoloClawd-Open-Firmware/examples

# Default: 25 min work, 5 min break
uv run --script pomodoro.py

# With custom task label
uv run --script pomodoro.py --task "CODE REVIEW"
uv run --script pomodoro.py --task "BUILD NETWORK"

# With Spotify integration (Andrew's favorite URIs)
uv run --script pomodoro.py --task "LP UPDATE" \
  --spotify-work "spotify:episode:5yJKH11UlF3sS3gcKKaUYx" \
  --spotify-break "spotify:episode:4U4OloHPFBNHWt0GOKENVF"

# Custom timings
uv run --script pomodoro.py --work 50 --short 10 --long 20

# With trackers
uv run --script pomodoro.py --water 2 --exercise 1 --focus 3
```

**Location**: `~/Bao/TimeToLockIn/HoloClawd-Open-Firmware/examples/pomodoro.py`
- Uses `spotify.sh` in the same directory for playback
- Supports icon-based trackers (water, exercise, focus, pills)
- Interactive command listener for live controls

Options:
- `--task`: Task label displayed during work (max 20 chars, auto-uppercased)
- `--work`: Work duration in minutes (default: 25)
- `--short`: Short break in minutes (default: 5)
- `--long`: Long break in minutes (default: 15)
- `--sessions`: Sessions before long break (default: 4)
- `--spotify-work`: Spotify URI for work sessions
- `--spotify-break`: Spotify URI for break sessions
- `--water`: Water glasses consumed today
- `--exercise`: Exercise sessions completed
- `--focus`: Focus sessions completed
- `--pills-done`: Mark daily pills as taken

Features:
- Lobster mascot watches you work (focused expression)
- During breaks: happy lobster with twinkling confetti
- Flashing alerts between sessions
- Tracks completed sessions
- Optional Spotify playback via AppleScript (macOS)
- Icon-based trackers displayed on screen
- Interactive command listener via keyboard

## Trackers

The pomodoro timer supports visual trackers using the Kyrise icon pack. Pass tracker values as arguments to display them during your session:

```bash
cd ~/Bao/TimeToLockIn/HoloClawd-Open-Firmware/examples

# Water tracking (glasses consumed)
uv run --script pomodoro.py --water 3

# Exercise sessions
uv run --script pomodoro.py --exercise 1

# Focus sessions completed
uv run --script pomodoro.py --focus 2

# Pills taken today
uv run --script pomodoro.py --pills-done

# Combine multiple trackers
uv run --script pomodoro.py --task "DEEP WORK" --water 3 --exercise 1 --focus 2
```

Tracker icons appear on the HoloCube display with their current counts.

## Stock Firmware Tools

### holocube.py - GIF Upload (Stock Firmware)

```bash
uv run --script holocube.py upload animation.gif
uv run --script holocube.py show animation.gif
uv run --script holocube.py list
```

### gifgen.py - Procedural Animation Generator

```bash
uv run --script gifgen.py fire output.gif
uv run --script gifgen.py plasma output.gif
uv run --script gifgen.py matrix output.gif
uv run --script gifgen.py sparkle output.gif
```

## Drawing API Endpoints

HoloClawd firmware exposes these REST endpoints:

```bash
# Clear screen
curl -X POST http://192.168.7.80/api/v1/draw/clear -d '{"color":"#000000"}'

# Draw shapes
curl -X POST http://192.168.7.80/api/v1/draw/circle -d '{"x":120,"y":120,"r":50,"color":"#ff0000","fill":true}'
curl -X POST http://192.168.7.80/api/v1/draw/rect -d '{"x":10,"y":10,"w":100,"h":50,"color":"#00ff00"}'
curl -X POST http://192.168.7.80/api/v1/draw/triangle -d '{"x0":120,"y0":50,"x1":80,"y1":150,"x2":160,"y2":150,"color":"#0000ff"}'
curl -X POST http://192.168.7.80/api/v1/draw/ellipse -d '{"x":120,"y":120,"rx":60,"ry":30,"color":"#ffff00"}'
curl -X POST http://192.168.7.80/api/v1/draw/line -d '{"x0":0,"y0":0,"x1":240,"y1":240,"color":"#ffffff"}'
curl -X POST http://192.168.7.80/api/v1/draw/text -d '{"x":60,"y":100,"text":"Hello","size":3,"color":"#00ffff"}'

# Batch multiple commands
curl -X POST http://192.168.7.80/api/v1/draw/batch -d '{"commands":[...]}'
```

## Firmware

**Source:** https://github.com/andrewjiang/HoloClawd-Open-Firmware

Build and flash:
```bash
git clone https://github.com/andrewjiang/HoloClawd-Open-Firmware.git
cd HoloClawd-Open-Firmware
pio run                    # Build
curl -X POST -F "[email protected]/build/esp12e/firmware.bin" http://192.168.7.80/api/v1/ota/fw
```

## Color Reference

```python
Color.BLACK   = "#000000"
Color.WHITE   = "#ffffff"
Color.RED     = "#ff0000"
Color.GREEN   = "#00ff00"
Color.BLUE    = "#0000ff"
Color.CYAN    = "#00ffff"
Color.MAGENTA = "#ff00ff"
Color.YELLOW  = "#ffff00"
Color.ORANGE  = "#ff6600"
Color.PURPLE  = "#9900ff"
```

## Troubleshooting

- **Can't connect**: Check WiFi, device should be at 192.168.7.80
- **Drawing slow**: Each HTTP call takes ~50ms, use batch API for complex drawings
- **Screen flickers**: Only clear screen on first frame, use background colors for text updates

Overview

This skill controls the GeekMagic HelloCubic-Lite running HoloClawd firmware, exposing drawing primitives, animation helpers, and a full pomodoro timer with a lobster mascot. It provides a Python client and REST endpoints to draw shapes, upload GIFs, run procedural generators, and display trackers and timers. Use it to programmatically render UI, run focused work sessions, or drive procedural animations on the 240×240 display.

How this skill works

The skill talks to the HoloClawd device over HTTP or via the provided Python client module. REST endpoints accept JSON draw commands (pixels, shapes, text, batch commands) and firmware endpoints handle GIF uploads and OTA updates. The Python client wraps those APIs and adds helpers like draw_lobster, confetti, show_timer, and show_progress for easy scripting.

When to use it

  • Programmatically draw UI, text, and sprites on a 240×240 HoloCube display
  • Run the built-in pomodoro timer with lobster mascot and visual trackers
  • Upload and show animated GIFs or generate procedural animations
  • Batch complex frame sequences to reduce latency and flicker
  • Integrate lightweight device control into desktop scripts or automation

Best practices

  • Use the batch draw endpoint for multiple commands to reduce HTTP overhead
  • Avoid clearing the screen on every frame; update layers or use background fills to reduce flicker
  • Keep task labels under 20 characters to fit the timer UI
  • Pre-generate GIFs or procedural frames and upload them before playback
  • Specify device IP or confirm DHCP address; default 192.168.7.80 is configurable

Example use cases

  • Start a 25/5 pomodoro with the lobster mascot and Spotify integration for work/break music
  • Script a daily dashboard showing trackers (water, exercise, focus) and a progress bar
  • Upload a hand-crafted GIF to play as an idle animation on the HoloCube
  • Generate a ‘matrix’ or ‘plasma’ procedural GIF, upload it, and display it in a loop
  • Draw a centered message or realtime progress indicator from a CI or home automation hook

FAQ

What is the default IP address and can I change it?

The default device IP is 192.168.7.80; it is configurable in device network settings or via your router/DHCP.

Why does my drawing flicker or feel slow?

Each HTTP draw call is ~50ms; use the /draw/batch endpoint for many commands and avoid clearing the screen every frame to reduce flicker and latency.