Our project recreates the Patina Engraver system, which transforms activity data (steps, sleep, distance) into physical patterns engraved onto a wearable wristband. The original paper by Moon-Hwan Lee, Seijin Cha, and Tek-Jin Nam (KAIST) explored how activity-tracking data could be engraved as patina-like patterns onto a wristband, turning personal data into a gradually accumulating, visible, material record rather than numbers on a screen. This project recreates that system using a Fitbit Inspire 3 and an AxiDraw V3 plotter, with our own zone layout, pattern encoding logic, and wristband construction. The original paper used a custom-built piercing device (solenoid + needle); our reproduction adapts this concept using a Sharpie marker of a different color for each week.
Demo Materials
The original paper introduces the idea of mapping activity data onto a wristband, but leaves many implementation details unspecified. In particular, it does not clearly define how multiple data types are structured spatially or how patterns are generated.
To make the system functional, we translated this concept into a precise, coordinate-based design that could be both programmed and physically rendered.
The wristband is 220 mm × 45 mm. The right 20 mm is hidden under the magnet clasp and never engraved, leaving 200 mm of engravable width. That space is divided into four zones separated by fixed gaps, arranged left to right:
Zone 2 (15%): Calories (Mon–Sun)
3 mm gap: Separator
Zone 1 (40%): Steps + Active Time
10 mm blank space: Tracker module cutout
Zone 3 (15%): Sleep / Time in Bed (Mon–Sun)
3 mm gap: Separator
Zone 4 (20%): Total Walking Distance
20 mm magnetic clasp section
Each zone operates within defined X/Y bounds using a shared coordinate system (in millimeters). This allowed us to generate patterns programmatically while ensuring all zones, separators, the tracker cutout, and clasp fit correctly within the physical wristband dimensions.
Because the paper does not explicitly specify how patterns should be generated, we adapted and developed our own mapping logic for each zone:
Steps + Active Time:
Steps are represented as diagonal zigzag lines (1000 steps = 1 line). To prevent visual overcrowding and respect the physical boundaries of Zone 1, the visualization is capped at a maximum of 10,000 steps (10 lines). The original paper referenced the notion that 10,000 steps a day is normal, so we adopted that as our baseline for the maximum cap.
Active time controls visual variation - higher activity produces smoother lines, while lower activity introduces noise for a more irregular pattern.
Calories:
A weekly view where each day is a vertical line. Following the paper's logic, we used a stippled pattern, but rather than vertical zigzags, we used straight lines to better accommodate the narrow space in Zone 2. We also advanced the original design by explicitly programming the line length to scale proportionally to a fixed daily maximum of 3,000 calories. This ensures visual consistency when comparing engravings across multiple weeks.
Sleep (Time in Bed):
Similar to the calorie zone, but drawn inverted (from the bottom up). Directly applying the original paper's logic, we filter the data to only engrave lines for sleep durations between 240 and 540 minutes (4 to 9 hours) to magnify the differences between days. Values outside this range leave deliberate blank gaps in the stippled pattern, serving as a stark physical highlight of highly irregular or inadequate sleep.
Distance:
Total weekly distance controls pattern complexity, ranging from simple shapes to dense, branching structures. The original paper noted that fractals are ideal for "showing distinct improvement," so we replicated their three-phase logic: Level 1 (0–20 km), Level 2 (20–40 km), and Level 3 (40+ km). As the user passes these specific thresholds, our recursive function generates a progressively denser, branching structure out from the center of Zone 4.
This approach shifts the system from exact numerical display to expressive, pattern-based visualization, aligning with the intent of the original paper.
To ensure the design could be safely and accurately produced by the AxiDraw without drawing off the material, we translated the physical wristband into a strict, millimeter-based coordinate system:
Wristband size: 220 mm width × 45 mm height (22 cm × 4.5 cm).
Usable Engraving Area: The active drawing width is capped at 200 mm, deliberately leaving a 20 mm blank space on the right side (CLASP_W) to account for the material hidden under the overlapping magnet clasp.
Margin Offsets: A strict 2 mm safety margin (MARGIN, MARGIN_Y) is applied from the AxiDraw home position and along the top and bottom edges to prevent the marker from slipping off the painted surface.
Fixed Zone Boundaries: Each zone is mathematically bounded within the 200 mm engravable area, separated by hard-coded fixed gaps: 3 mm separators between data zones and a precise 10 mm blank hole left perfectly bare for the Fitbit tracker module.
While data sourcing requires one manual step, our Python script (draw_wristband.py) automates the rest of the fabrication pipeline:
Manual Data Update: Users replace the repository's Fitbit folder with their latest Google Data Export.
Automated Parsing: The script instantly processes the raw CSVs and JSONs to compute daily averages and weekly totals.
Modular Rendering: Dedicated functions mathematically map each pattern to its specific physical zone without overlapping.
Hardware Optimization: Custom pyaxidraw settings (e.g., a 150ms pen-lift delay) prevent the Sharpie from dragging or smudging.
Layered wristband structure:We replicated the paper’s exact material stack (silicone base, PVC layer, and painted surface) to ensure high-contrast engravings.
Modular pouch: We improved the original design by adding a center cutout, allowing users to check the time and date on this later version of the Fitbit tracker without removing it. The pouch also securely holds the tracker.
Refined form factor: redesigned from a split band into a single continuous wristband, with the pouch centered to minimize interference with the engraving area. Magnets are placed on either side of the pouch for secure attachment, and the pouch is reinforced using staples
To support the engraving process, we also developed a stabilization setup. A support pad was created to stabilize the wristband during engraving. The magnet and pouch system holds the tracker in place, preventing shifting and ensuring consistent contact with the drawing surface:
Throughout the project, several design decisions were revised based on physical testing and usability constraints.
1. Layout Planning
Early sketches were used to plan spacing between zones, as well as placement for the pouch and magnets. This helped ensure that the engraving area remained usable while accommodating hardware constraints.
2. Marking Method
We tested different marking tools to determine which could produce visible and consistent patterns on the wristband surface. Fine-point Sharpie provided the clearest results, while pencil and gel pen lacked sufficient contrast or pressure.
3. Attachement Method
Initial attempts used silicone glue to secure the pouch, but this proved unreliable. We switched to stapling, which provided a stronger and more consistent hold.
Yellow, orange, and blue Sharpie were used to mimic the natural variation of patina on copper, enhancing visual contrast and aging effects.
First Four wristband Prototypes
We began by building the first version of the wristband using silicone, PVC, and paint layers. At the same time, we learned how to use the AxiDraw and Inkscape, creating initial designs on paper to better understand how patterns would translate onto the surface of the tracker.
System Integration & Transition to Code-Based Drawing:
After initial testing, we shifted away from manual design and from using Inkscape to control the Axidraw, focusing on programmatic control. We set up our Python environment, connected the AxiDraw API, and began writing scripts to generate simple shapes and lines. This step was important because laid the essential groundwork for our final data-driven system
AxiDraw Drawing Triangle from Our Code
Terminal output confirming the successful execution of our draw_triangle.py hardware test.
Testing the initial wearable prototype with the integrated tracker pouch.
We then integrated the raw Fitbit data into our workflow. As we developed scripts to process the weekly data, we simultaneously began writing and debugging the drawing functions for each specific zone. Alongside this software testing, we refined the physical wristband design, adding a modular pouch for the tracker and experimenting with magnet placement and attachment methods.
In the final stage, we integrated the logic for all four zones into a single script: draw_wristband.py. After rigorous testing to resolve exact scaling and spatial constraints, we used the AxiDraw V3 to physically plot the complete layout. To authentically mimic the natural aging and color variation of real copper patina, we deliberately used a different colored fine-point Sharpie for each week of our three-week experiment. As the weeks progressed, the physical history of the user's activity accumulated on the band: sparse patterns for low-activity weeks layered beneath dense and complex structures for high-activity weeks. This final step successfully transformed the raw Fitbit data into a tangible, multi-colored physical record, fully realizing the original paper’s concept.
Our initial model was a thin wristband with a split design. Sewn pouch, multiple small magnets for adjustability, and a black painted surface. During testing, we realized it lacked the physical stability and visual contrast needed for precise plotting. It was also hard to scratch the paint layer to reveal the PVC sheet underneath. We tested tools like needles and X-Acto knives, but the engraved patterns weren't visible enough. Ultimately, this design did not satisfy us in terms of its overall aesthetics.
A wider, continuous band with a stapled pouch and a white painted surface for maximum visibility. Because scratching the black paint didn't leave visible marks, we switched to drawing directly with colored Sharpies. This made the patterns much clearer. The image above shows our three-week progress: starting with sparse marks in Week 1 (top) and building up to a dense, richly colored pattern by Week 3 (bottom).
Week 1 Engraving: Lower activity week with fewer steps and low active time, resulting in simpler patterns and less variation across zones.
Week 2 Engraving: Moderate increase in activity, with more consistent movement and higher calorie output, producing more defined and varied patterns.
Week 3 Engraving: High activity week with significantly increased steps and active time, leading to denser, more complex patterns across the wristband.
Final Combined Zone Output (AxiDraw test):
Hardware:
Fitbit Inspire 3
AxiDraw V3 Plotter
Wristband materials (Silicone, PVC, paint layer)
Fine-point Sharpies (yellow, orange, and blue for the patina base; additional colors for weekly engraving)
Magnets, adhesive
Custom engraving support pad
Software & Data:
Python 3
Google Data Export (Fitbit CSV/JSON activity logs)
VS Code
GitHub
Libraries:
pyaxidraw (AxiDraw API), csv, json, math, random, pathlib
Galina Pokitko, Arohasina Ravoahanginiainaa
Patina Engraver 2026