Claude-skill-registry apc-code-samples

TypeScript and Node.js code samples for APC Mini MK2 development. Use when user needs "code example", "implementation", "easymidi", "@julusian/midi", "sample code", "how to implement", or wants working code for LED control, button handling, or MIDI communication.

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/apc-code-samples" ~/.claude/skills/majiayu000-claude-skill-registry-apc-code-samples && rm -rf "$T"
manifest: skills/data/apc-code-samples/SKILL.md
source content

APC Mini MK2 Code Samples

Quick start examples. For complete implementation details, see reference.md.

Library Setup

# Rapid development
npm install easymidi && npm install -D @types/easymidi

# Production
npm install @julusian/midi

Basic Connection

import easymidi from 'easymidi';

const createConnection = () => ({
  output: new easymidi.Output('APC mini mk2'),
  input: new easymidi.Input('APC mini mk2')
} as const);

Set Pad Color

// Red at full brightness (channel 6)
const setPad = (output: Output, note: number, velocity: number, channel = 6): void =>
  output.send('noteon', { note, velocity, channel });

// Turn off
const setPadOff = (output: Output, note: number): void =>
  output.send('noteon', { note, velocity: 0, channel: 0 });

Handle Button Press

const onPadPress = (input: Input, callback: (pad: number) => void): void =>
  input.on('noteon', (msg) => {
    if (msg.note < 64 && msg.velocity > 0) callback(msg.note);
  });

const onTrackButton = (input: Input, callback: (track: number) => void): void =>
  input.on('noteon', (msg) => {
    if (msg.note >= 100 && msg.note <= 107) callback(msg.note - 99);
  });

const onSceneButton = (input: Input, callback: (scene: number) => void): void =>
  input.on('noteon', (msg) => {
    if (msg.note >= 112 && msg.note <= 119) callback(msg.note - 111);
  });

Handle Fader

const onFader = (input: Input, callback: (fader: number, value: number) => void): void =>
  input.on('cc', (msg) => {
    if (msg.controller >= 48 && msg.controller <= 56) {
      callback(msg.controller - 47, msg.value);
    }
  });

Custom RGB

const encodeRGB = (v: number): readonly [number, number] =>
  [(v >> 7) & 0x01, v & 0x7F] as const;

const setRGB = (output: Output, pad: number, r: number, g: number, b: number): void =>
  output.send('sysex', [
    0xF0, 0x47, 0x7F, 0x4F, 0x24, 0x00, 0x08,
    pad, pad, ...encodeRGB(r), ...encodeRGB(g), ...encodeRGB(b),
    0xF7
  ]);

Color Constants

const Colors = {
  OFF: 0, WHITE: 3, RED: 5, ORANGE: 9, YELLOW: 13,
  GREEN: 21, CYAN: 33, BLUE: 45, PURPLE: 49, MAGENTA: 53
} as const;