Every section, every parameter, with values and ranges. The same names are used by templates, OSC mappings, setlist cues, and the external API.
Every section, every parameter, with values and ranges. The same names are used by templates, OSC mappings, setlist cues, and the external API.
bg_color — solid background colour (#hex). Behind any image/video.
bg_image_data / bg_image_name — uploaded image asset (PNG/JPG). bg_image_opacity 0–1.
bg_video_data / bg_video_name — uploaded video asset (MP4/WebM). bg_video_opacity 0–1.
Background sits at the back of the canvas and is not part of the draggable section stack.
Mode — app_mode
canvas (Abstract)quadratcurviclucid
particlecloudfusionmatrix
vectorfeedbackflowfieldmetaballs
wireframescopehudtopograph
lidardatamosh
pattern 0–9 — pattern index
shape 0–9 — shape index
color_mode 0–50 — colour palette index
particle_size 1–50
speed_x/y/z −2…2
opacity 0–1
emission 0–20
velocity 0.1–3
ambience 0–9
visual_x, visual_y −100…100 (%)
canvas_aspect film | social
custom_generator_id — id of the user's saved Python generator. Active when app_mode = "custom".
Manage at /pulsr/customvisuals.
strobe_enabled bool
strobe_shape 0–13
strobe_fill_color 0–50 — colour mode
strobe_opacity 0–1
strobe_size 5–200 (%)
strobe_rotation 0–360 (°)
strobe_flip_h, strobe_flip_v bool
Shape reference (0–13)
0 Square1 Circle2 Diamond3 Triangle
4 Star5 H-Bar6 V-Bar7 Cross
8 Rectangle9 Heart10 Spade11 Fast Fwd
12 Arrow13 Pause
Beat-sync reacts to pulsr-beat from the audio engine and to keys 0–9 when active.
Section 1 uses logo_* columns. Sections 2+ ride on extra_logos JSONB.
enable bool
image_data / image_name
position tl/tc/tr/ml/mc/mr/bl/bc/br
animation none, fade, slide-*, pulse, glow, shake, scroll-h/v, flicker, bounce, wave, rotate, zoom, blur
orientation horizontal | vertical
direction ltr | mirror | upside-down
size 10–1000 (px)
speed 0.3–12 (s)
opacity 0–1
fill-color, stroke-color, stroke-width — 3D-only
Section 1 uses dp_* columns. Sections 2+ ride on extra_texts JSONB.
enable bool
text string
family Google Font name (50+ choices)
weight 300/400/600/700/900
decoration none/underline/line-through
align left/center/right/justify
orientation horizontal/vertical
direction ltr/rtl/mirror/upside-down
spacing −5…40
color, stroke-color #hex
stroke-width 0–20
size 12–200 (px)
speed 0.3–12 (s)
opacity 0–1
position tl/tc/tr/ml/mc/mr/bl/bc/br
animation none, fade, slide-*, pulse, glow, shake, scroll-h/v, flicker, bounce, wave, rotate, zoom, typewriter, blur
Stored in threed_state.text_1 for section 1, or per extra_texts[N]. Text content/family/weight come from the parent Text section.
3d-enable bool
3d-material plastic/metal/glass/gold/chrome/matte/neon
3d-animation none/spin/float/pulse/wobble/swing
3d-depth 2–80
3d-pos-x/y/z −400…400
3d-rot-x/y/z −180…180 (°)
Stored in threed_state.logo_1 or per extra_logos[N]. Requires the uploaded asset to be an SVG file.
3d-enable, 3d-material, 3d-animation, 3d-depth
3d-pos-x/y/z, 3d-rot-x/y/z
Logo's fill-color overrides SVG fills
stroke-color + stroke-width add a 3D outline
Drawer state in threed_state.drawer. Per-shape entries in drawer.shapes[]; section also has global transforms.
Per-shape
type square/rectangle/circle/triangle/diamond/pentagon/hexagon/star/plus
color #hex
w, h width/height
depth 4–80
material plastic/metal/glass/gold/chrome/matte/neon
animate none/spin/float/pulse/wobble/swing
opacity 0.1–1
gx, gy grid coord (10×10)
Global
enabled bool
globalColorMode 0–50 — hue-shift
globalOpacity 0–1
globalPos { x,y,z } −400…400
globalRot { x,y,z } −180…180
cam_scale 10–200 (%)
cam_pos_x/y 0–100 (%)
cam_opacity 0–1
cam_fill_mode fit / fill / stretch
BG removal — AI body keying via MediaPipe Tasks Vision
Webcam selection + permission are session-only and not persisted in templates.
visual_x, visual_y −100…100 — pan the visual canvas.
canvas_aspect film (16:9) | social (9:16).
threed_state.section_order — array of group keys (visuals/custom/strobe/logo/text/threed/camera) reflecting the sidebar drag order. Top of the list = back of canvas (lower z-index); bottom = front. Background fixed at the back; Templates/Setlist/Stream/Recording fixed at the bottom.