Build Max for Live devices. Use when working with .amxd files or .maxpat files containing live.* objects, including theming and device UI design.
Objects like live.dial, live.tab, live.text, live.numbox, live.menu require:
{
"parameter_enable": 1,
"saved_attribute_attributes": {
"valueof": {
"parameter_longname": "UniqueParamName",
"parameter_shortname": "Display",
"parameter_type": 0,
"parameter_modmode": 0
}
},
"varname": "UniqueParamName"
}
Parameter types: 0 = float, 2 = enum/int, 4 = blob (live.drop)
Important: parameter_longname must be unique across the entire device — duplicates cause silent parameter conflicts.
Key valueof fields:
parameter_mmax / parameter_mmin — value rangeparameter_enumparameter_unitstyle — display units (1=float, 2=ms, 4=dB, 9=custom)parameter_exponent — curve exponent for non-linear scaling (e.g., 3.0 for time dials)parameter_invisible: 2 — hides from automation view but keeps parameter functionalparameter_linknames: 1 — links varname to parameter longnameparameter_initial / parameter_initial_enable — set default value on loadparameter_exponent: 3.0 for time-based parameters (attack, decay)mode: 0 for momentary (bang), omit for toggletext = off label, texton = on labelpictures: ["off.svg", "on.svg"], usepicture: 1, usesvgviewbox: 1remapsvgcolors: 1 — SVGs inherit theme colors (essential for theming)ignoreclick: 1 — display-only (pair with ubutton overlay for interaction)appearance: 2 — bordered button style. Gives an orange-bordered look automatically via the theme, with no custom color properties needed. Use for toggle/momentary buttons on dark LCD backgrounds. Title case text (e.g., "Audio", "Sample"), typical size ~59x15px. Reference: Surround Panner's "Share Setup" button.num_lines_presentation: 1 = horizontal, N = vertical (one tab per line)parameter_enum arraylcdbgcolor with transparent alpha for floating-on-panel looklcdcolor with themecolor.live_value_arc for accent colorlive.comment — dynamic text, updateable at runtimecomment — static labelscurvecolor, sustaincolor for theme colorsenable_final: 0, enable_initial: 0, enable_peak: 0 to simplify to basic ADSRdecodemode, legend (placeholder text)waveform~ at the same positionColors reference the Live theme instead of being hardcoded, via saved_attribute_attributes:
"saved_attribute_attributes": {
"bgfillcolor": {
"expression": "themecolor.live_lcd_bg"
}
}
live_lcd_bg — dark panel/LCD background (for visual/content areas)live_surface_bg — control group panel background (Device Inspector: Live Theme Colors: Device Background)Live Theme Colors: Control Headerlive_value_arc — primary accent (cyan dial arcs, active values, active view icons)live_active_automation — automation indicator (orange/amber)live_control_fg — general control foregroundlive_control_fg_off — inactive control foregroundlive_lcd_control_fg — text/controls on dark backgroundslive_lcd_frame — borders on dark backgroundslive_output_curve_color — waveform display colorlive_control_selection — selection highlight_zombie suffix = dimmed/inactive variant (e.g., live_lcd_control_fg_zombie for secondary labels)_off_zombie = doubly dimmedbgfillcolor — panel backgroundstextcolor, activetextcolor, activetextoncolor — text statesbordercolor, focusbordercolor — borderslcdcolor, lcdbgcolor — numbox colorscurvecolor, sustaincolor — envelope editorsThe patcher can have a top-level "parameters" object that registers all live.* parameter objects:
"parameters": {
"obj-id": [ "LongName", "ShortName", defaultValue ],
"inherited_shortname": 1
}
For multi-state visual indicators (mode icons, filter type, view toggles):
live.text objects at the same presentation_rect, each with a different SVGhidden: 1 and ignoreclick: 1 except the active oneremapsvgcolors: 1 so SVGs adapt to themeubutton for click handlinghidden to show the correct iconThe correct pattern for switching between views uses ubutton + live.text icons + hidden toggling, not live.tab:
live.text with SVG icon (ignoreclick: 1) — display-onlyubutton (transparent) overlaid on the icon — handles clicks, stores statebpatcher objects at the same presentation_rectthispatcher receives script sendbox <varname> hidden $1live.tab?live.tab doesn't integrate with the dark-panel visual style. The ubutton + icon pattern gives full control — icons on dark backgrounds, theme-colored active states, seamless panel integration.
activetextoncolor → themecolor.live_value_arc (cyan)activetextcolor → grayparameter_invisible: 2 on the ubutton (hidden from automation)Max for Live devices cannot exactly replicate native Ableton device designs. Native devices (Simpler, Hybrid Reverb, etc.) use proprietary UI elements and fonts not available in Max. When designing M4L devices:
live.text with appearance: 2 for bordered toggle buttons — this gives the standard M4L orange-bordered style with full theme support.Initial Window Size to the exact width and height of the device (set origin to 0. 0.)Row of dials, optionally with a visual area above.
Large visual area in center, controls on left and right.
Distinct functional sections side by side, each with its own dark panel and header label.
Controls stacked vertically.
Collapsed (compact) and expanded (visual display) views via disclosure triangle.
Left-to-right: input controls → processing/visuals → output controls. Dry/Wet nearly always bottom-right.
themecolor.live_lcd_bg)themecolor.live_surface_bg)live.line for thin dividers within sectionslive.tab page-switching is rarelive.text) more common than live.tabcomment, "Ableton Sans Medium" 9.5pt (or "Arial Bold" 10pt)themecolor.live_lcd_control_fg_zombieCorrect ordering (top to bottom of boxes array):
live_surface_bg)live_lcd_bg)