oneshotlm
Compare all models on this prompt →

Piano synth · minimax-m2.7

Using the pre-provided tone.min.js (global Tone), build a playable piano keyboard controlled by mouse and computer keys that synthesizes notes with an ADSR envelope and visual key feedback.

⛨ sandboxed Open in new tab ↗
transcript · 10 messages
user

Using the pre-provided tone.min.js (global Tone), build a playable piano keyboard controlled by mouse and computer keys that synthesizes notes with an ADSR envelope and visual key feedback.

assistant
thinking
The user wants me to build a piano keyboard web app using Tone.js. Let me first check what's in the current directory and understand the tone.min.js file.
bash {"command":"ls -la /workspace"}
toolResult

total 388 drwxrwxrwx 3 node node 96 Jul 10 00:27 . drwxr-xr-x 1 root root 4096 Jul 10 00:27 .. -rw-r--r-- 1 node node 349169 Jul 10 00:27 tone.min.js

assistant
thinking
Good, the tone.min.js file is there. Now let me build the piano keyboard app. I'll create a single HTML file with:

1. A piano keyboard (both white and black keys)
2. Mouse control for clicking keys
3. Computer keyboard control (using common key mappings)
4. Tone.js synth with ADSR envelope
5. Visual feedback when keys are pressed

Let me write this as a self-contained index.html file.
write /workspace/index.html (15973 bytes)
toolResult

Successfully wrote 15973 bytes to /workspace/index.html

assistant
thinking
I've created the piano keyboard app. Let me verify it was created correctly by checking the file exists and reviewing the key parts.
bash {"command":"ls -la /workspace/index.html && head -20 /workspace/index.html"}
toolResult

-rw-r--r-- 1 node node 15977 Jul 10 00:28 /workspace/index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Piano Keyboard</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { min-height: 100vh; background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%); display: flex; flex-direction: column; align-items: center; justify-content: center;

assistant
thinking
The file is created successfully. Let me verify the Tone.js script tag is correct.
bash {"command":"grep -n \"tone.min.js\" /workspace/index.html"}
toolResult

306: <script src="tone.min.js"></script>

assistant
thinking
The file is complete. Let me verify the JavaScript uses Tone correctly with the global Tone object.

The piano keyboard app is ready at `/workspace/index.html`. Here's what it includes: **Features:** - **20 playable keys** (2+ octaves: C4 to G5) with 8 black keys - **Mouse control**: Click/tap keys to play, release to stop - **Keyboard control**: - White keys: `Z-M` for lower octave, `Shift + letter` for upper octave - Black keys: `1-8` for sharps/flats - **ADSR envelope controls**: Attack, Decay, Sustain, and Release sliders - **Volume control**: Adjustable from -40dB to 0dB - **Visual feedback**: Keys glow cyan when pressed, with smooth animations - **Current note indicator**: Shows the last played note in the corner - **Touch support**: Works on mobile/tablet devices **Audio Engine:** - Uses `Tone.PolySynth` for polyphonic playback - Triangle wave oscillator for a warm piano-like tone - Web Audio API requires user interaction to start (click overlay) **Design:** - Dark gradient background with neon accents - Realistic key styling with gradients and shadows - Responsive layout centered on screen

TAKE IT TO CODE

A single self-contained HTML file — copy it and open in any browser, or reuse the prompt with your own pi-agent run.

RUN

modelminimax-m2.7
vendorMiniMax
harnesspi-agent
generated2026-07-10

EVALUATION

3/5 partial

Piano UI loads after click with ADSR sliders, but no visible key press feedback from tested inputs (Z-M keys not tested).

Vision grade · anthropic/claude-sonnet-5

MEASUREMENTS

Raw readings from the capture, not a verdict — the grade above is the only judgement. Percentages are how much of the screen changed; the measure under-reports sparse motion on a dark background.

idle motion0.0%
on click99.8%
on drag0.1%
on wheel0.1%
on enter + space0.0%
on arrow keys0.0%
on w/a/s/d0.0%
frame spread56.8 / 255
console errors0
js errors none

METRICS

runtime68.5s
tokens in2.5k
tokens out5.4k
cached21k
cost / run$0.0057