DJ Visualizer Pi: standalone Node+WebSocket server with mobile PWA remote

New separate project (the Electron Mac app stays untouched). Reuses the visual
engine (WebGL shaders, effect catalog, Web Audio) verbatim and replaces Electron
IPC with a Node HTTP+WebSocket server:

- server.js: serves the kiosk output page + mobile control PWA, relays the same
  ctl/rpt JSON protocol over WebSocket, plus REST for media library/upload,
  JSON state (pads), waveform peaks and MP4 recording (ffmpeg).
- public/js/net.js: window.djv shim over WebSocket+HTTP so output.js runs intact.
- public/index.html + control.js: touch-first mobile remote (effects, media/queue,
  ticker, pads, audio/EQ, fullscreen + recording).
- PWA (manifest + service worker + generated icons).
- scripts/: Chromium kiosk launcher + install-pi.sh (systemd units for Pi 5).

Verified: REST endpoints, WebSocket relay both directions, control PWA loads the
2958-effect catalog and renders. (Headless WebGL output not testable without GPU.)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
lucianoandClaude Opus 4.8 committed 2026-06-29 13:06:15 +02:00
commit b94c787231
81 files changed
+23994

No files matched your search

+124
View File
@@ -0,0 +1,124 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="crowd" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="280px" height="317.708px" viewBox="0 0 280 317.708" enable-background="new 0 0 280 317.708" xml:space="preserve">
<filter id="AI_GaussianBlur_7">
<feGaussianBlur stdDeviation="7"></feGaussianBlur>
</filter>
<g id="construct_group">
<g id="shadows" filter="url(#AI_GaussianBlur_7)">
<path fill="#636363" d="M250.323,94.079c0,0-14.039-14.707-46.124-10.027c0,0-35.252,58.281-39.263,56.944
c-4.011-1.337-3.342-16.043-3.342-16.043l-5.349,0.668l-3.061-10.696c0,0-1.128-8.814-7.813-16.167l33.423-57.488l-4.679-3.343
c0,0,15.375-20.723,38.772-18.717c0,0-3.344-8.69,0.667-10.696c4.011-2.006,10.696,1.336,15.375,11.364
c0,0,18.049-2.675,28.744,22.059l2.006,24.733l-6.016-2.005L250.323,94.079z"/>
<path fill="#636363" d="M260.9,207.604l2.528-8.849l7.986-0.632l-1.265-17.234c0,0-10.055-3.792,0.059-12.64
c0,0,5.398-5.517-2.817-10.573c0,0,13.847-10.112,0.574-17.064l-2.813-27.577l-7.414-18.499c0,0,2.07-6.55-12.465-4.654
l-6.321-5.056c0,0-3.159-7.584-10.743-3.16c0,0-15.168-6.952-21.488,1.264c0,0-10.915,5.228-15.339,12.18l1.264,5.055
l-16.432,18.96l-12.64,30.335c0,0-10.742,12.007,2.529,14.536c1.69,4.781,10.359,9.785,14.699,12.559
c4.16,2.656,12.388,1.174,15.063,5.771c-5.617,6.57,4.881,8.231,7.033,12.001c0.438,0.766-3.612,21.289-4.105,21.41
C198.799,215.737,240.046,197.494,260.9,207.604z"/>
<path fill="#636363" d="M267.616,307.958l-1.307-99.904c0,0-30.036-26.119-65.296,4.571l-26.12,63.338
c0,0-5.877,11.753,11.102,15.671c0,0,0,3.919,5.876,5.225l0.653,11.1H267.616z"/>
<path fill="#636363" d="M210.206,307.645l-34.504-23.33l29.848-83.126c0,0,9.393-10.646-6.263-20.664
c0,0-13.151-18.161-50.723-25.675c0,0-16.282,1.252-21.918,3.131c-5.636,1.878-23.17,29.431-28.18,45.713l1.879,9.393
l-18.787,41.33c0,0-2.504,4.384,3.758,7.515c8.256,3.097,11.512,5.034,13.203,14.686c1.119,6.387-4.354,7.754,0.748,14.238
c4.421,5.62,12.817,5.928,19.238,4.892l7.515,11.898H210.206z"/>
<path fill="#636363" d="M113.862,307.645l-12.219-15.992c0,0,0.196-20.077-5.562-25.834c0,0-17.911-2.807-10.874-18.799
l4.738-10.378l10.235-19.829c0,0,9.595-7.677-8.315-24.947c0,0-8.316-2.559-11.514-7.036c-8.955-2.56-21.109,0-24.307,1.918
c-3.199,1.92,5.756,7.677-20.47,5.758c0,0-12.488,12.553-13.128,21.509c-0.64,8.955,12.703-6.148,12.063,3.447
c-0.64,9.595-28.229,51.934-28.229,51.934s12.023,3.067,18.419,10.744l-0.639,19.189l3.015,3.839l0.183,4.478H113.862z"/>
<path fill="#636363" d="M163.27,128.546c-1.175-3.566,0.27-5.719-1.7-8.668c-1.276-1.91-5.209-3.448-6.989-4.976
c0.075-6.439,0.072-7.903-4.204-12.476c-5.178-5.537-3.027-4.404-4.02-11.574c-1.509-10.914-11.36-12.975-17.067-19.476
c-2.258-2.573-5.338-9.215-8.867-11.563c-5.795-3.857-17.475-2.623-19.996-0.738s-3.604,3.856-3.758,3.923
c-10.754,4.694-20.885-4.327-27.202,10.396c-2.203,5.135,1.212,13.338-0.103,19.335c-1.228,5.588-5.688,11.255-7.957,16.141
c-2.309,4.973-4.955,10.092-7.311,14.494c-1.442,2.697-8.355,13.644-6.47,18.043c1.886,4.399,11.941,4.399,11.941,4.399
l2.514,8.799c0,0,9.168,4.325,9.427,6.913c0.628,6.285-7.922,7.814-5.533,10.821c2.39,3.006,9.031,4.945,13.291,5.405
c6.667,0.72,14.375,1.653,16.133,8.996c0.829,3.462-2.688,7.98-1.782,10.385c0.929,2.464,5.843,1.854,6.942,7.05
c4.009-10.093,12.105-29.676,16.505-32.817c4.399-3.143,7.866-9.212,14.779-11.097c6.914-1.885,14.713-3.124,18.637-3.325
c4.592-0.237,7.604,2.203,12.172,3.058c2.705-3.786,8.244-17.343,7.61-21.212C169.596,134.709,164.571,132.495,163.27,128.546z"/>
</g>
<g id="heads">
<path fill="#B7B7B7" stroke="#000000" stroke-width="2.2977" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M243.023,89.366c0,0-12.063-12.637-39.635-8.617c0,0-25.849,40.209-29.295,39.061s-2.872-13.786-2.872-13.786l-4.596,0.575
l-1.148-9.191c0,0-6.894,2.298-12.638-4.021l28.722-49.4l-4.021-2.872c0,0,13.212-17.807,33.316-16.083
c0,0-2.872-7.467,0.574-9.19c3.446-1.724,9.19,1.148,13.212,9.765c0,0,15.509-2.297,24.7,18.956l1.723,21.253l-5.17-1.723
L243.023,89.366z"/>
<path fill="#B7B7B7" stroke="#000000" stroke-width="2.2977" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M259.682,200.229l2.298-8.042l5.17-0.574L266,180.124c0,0-8.616-3.446,0.575-11.488c0,0,2.297-9.19-5.17-13.786
c0,0,12.063-9.191,0-15.509l0.574-22.977l-10.914-12.637c0,0,3.446-8.042-9.765-6.319l-5.744-4.595c0,0-2.872-6.893-9.766-2.872
c0,0-13.786-6.318-19.53,1.149c0,0-5.744,0.574-9.765,6.893l1.148,4.595L182.71,119.81l-11.488,27.572
c0,0-4.021,10.914,8.042,13.211c1.536,4.347,3.673,8.894,7.617,11.415c3.78,2.414,11.26,1.066,13.691,5.245
c-5.106,5.973,4.436,7.482,6.393,10.908c0.397,0.696,1.468,10.809,1.02,10.918C207.99,199.079,240.728,191.04,259.682,200.229z"/>
<path fill="#B7B7B7" stroke="#000000" stroke-width="2.2977" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M261.979,301.326l-1.148-87.886c0,0-26.424-22.977-57.442,4.021l-22.977,55.718c0,0-5.17,10.34,9.766,13.786
c0,0,0,3.447,5.169,4.596l0.575,9.765H261.979z"/>
<path fill="#B7B7B7" stroke="#000000" stroke-width="2.2977" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M188.454,301.326l-19.53-16.657l31.593-80.993c0,0,8.616-9.766-5.744-18.956c0,0-12.063-16.658-46.527-23.551
c0,0-14.936,1.148-20.105,2.872c-5.169,1.723-21.253,26.997-25.849,41.933l1.723,8.616c0,0-19.817,37.624-18.094,43.081
s8.904,4.883,8.904,4.883s8.329,2.297,12.35,6.893c-0.574,6.605-3.342,11.551-5.457,14.935
c-1.436,2.298,13.065,6.982,18.956,6.032l6.893,10.913H188.454z"/>
<path fill="#B7B7B7" stroke="#000000" stroke-width="2.2977" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M105.163,301.326l-11.488-14.36c0,0,1.723-14.935-3.447-20.104c0,0-16.083,0.574-9.765-13.786l6.319-15.509l9.19-17.808
c0,0,8.616-6.893-7.467-22.401c0,0-7.467-2.298-10.339-6.319c-8.042-2.297-18.956,0-21.828,1.724s5.17,6.893-18.381,5.17
c0,0-6.318,2.298-6.893,10.339c-0.574,8.042-5.169,7.468-5.169,7.468s14.935-8.042,14.36,0.574S12.682,268.01,12.682,268.01
s9.765,1.723,15.509,8.616l-0.574,17.232l6.318,3.446l-3.446,4.021H105.163z"/>
<path fill="#B7B7B7" stroke="#000000" stroke-width="2.2977" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M158.584,128.734c-1.073-3.259,0.246-5.227-1.554-7.922c-1.167-1.746-4.76-3.151-6.388-4.548
c0.068-5.885,0.066-7.223-3.843-11.402c-4.732-5.061-2.767-4.024-3.673-10.578c-1.38-9.975-10.383-11.858-15.599-17.8
c-2.064-2.351-4.879-8.422-8.104-10.568c-5.297-3.525-15.972-2.397-18.275-0.674c-2.304,1.723-3.294,3.523-3.434,3.585
c-9.829,4.291-19.088-3.955-24.862,9.501c-2.014,4.693,1.108,12.19-0.095,17.671c-1.122,5.108-5.198,10.288-7.271,14.753
c-2.11,4.545-4.529,9.224-6.682,13.247c-1.318,2.464-7.636,12.47-5.913,16.491s10.914,4.021,10.914,4.021l2.297,8.042
c0,0,8.38,3.953,8.616,6.319c0.575,5.744-7.241,7.142-5.056,9.89c2.184,2.747,8.254,4.521,12.147,4.94
c6.093,0.659,13.138,1.512,14.744,8.223c0.758,3.164-2.457,7.294-1.628,9.491c0.849,2.252,5.34,1.694,6.344,6.443
c3.664-9.225,7.914-29.223,11.935-32.095s10.339-6.318,16.658-8.042c6.319-1.723,13.447-2.854,17.034-3.039
c4.196-0.217,6.95,2.014,11.125,2.794c2.473-3.46,7.534-15.851,6.954-19.388C164.366,134.368,159.773,132.343,158.584,128.734z"/>
</g>
<g id="eyes">
<g>
<path fill="#FFFFFF" d="M192.335,74.991c-4.914,7.636-17.479,5.851-18.227-3.146C172.432,51.648,200.402,62.449,192.335,74.991z"
/>
<path d="M180.412,65.321c-4.341,0-4.341,6.731,0,6.731S184.753,65.321,180.412,65.321z"/>
</g>
<g>
<path fill="#FFFFFF" d="M199.096,141.267c-10.127,8.225-21.458-5.787-13.929-15.23
C193.805,115.203,209.329,132.955,199.096,141.267z"/>
<path d="M190.752,128.561c-1.806,0-3.313,1.507-3.313,3.312s1.507,3.312,3.313,3.312c1.805,0,3.312-1.507,3.312-3.312
S192.557,128.561,190.752,128.561z"/>
</g>
<g>
<path fill="#FFFFFF" d="M85.038,124.438c-7.425,6.766-17.956,0.542-16.923-8.902C70.123,97.195,97.886,112.732,85.038,124.438z"
/>
<path d="M75.868,111.939c-2.099,0-3.85,1.751-3.85,3.85s1.751,3.851,3.85,3.851s3.851-1.751,3.851-3.851
S77.967,111.939,75.868,111.939z"/>
</g>
<g>
<path fill="#FFFFFF" d="M213.096,258.396c-9.354,4.587-23.224-2.328-16.368-13.504
C206.294,229.292,228.385,250.899,213.096,258.396z"/>
<path d="M207.798,246.214c-0.023-0.016-0.046-0.03-0.068-0.045c-1.284-0.849-3.129-0.512-4.18,0.539
c-0.778,0.777-1.095,1.854-0.957,2.894c0,0.009-0.003,0.018-0.003,0.026c0.008,1.378,0.939,2.618,2.273,2.985
c0.626,0.173,1.314,0.111,1.938-0.122c0.033-0.008,0.071-0.009,0.104-0.018c1.226-0.338,1.997-1.253,2.409-2.41
c0.008-0.021,0.017-0.043,0.022-0.065C209.857,248.542,208.988,247,207.798,246.214z"/>
</g>
<g>
<path fill="#FFFFFF" d="M123.7,231.649c-7.331,6.613-19.895,0.662-17.117-9.293C112.074,202.678,134.592,221.822,123.7,231.649z"
/>
<path d="M117.725,220.881c-0.549-0.97-1.352-1.436-2.366-1.803c-0.016-0.005-0.027-0.005-0.043-0.01
c-1.009-0.43-2.163-0.342-3.206,0.178c-1.791,0.891-2.542,3.364-1.478,5.079c0.792,1.279,2.259,1.982,3.75,1.982
C117.119,226.308,119.128,223.363,117.725,220.881z"/>
</g>
<g>
<path fill="#FFFFFF" d="M47.044,250.685c-7.094,3.337-18.539-3.025-15.026-11.594C38.976,222.141,61.837,243.728,47.044,250.685z
"/>
<path d="M39.79,237.436c-1.95,0-3.577,1.626-3.577,3.576s1.626,3.576,3.577,3.576c1.95,0,3.577-1.626,3.577-3.576
S41.739,237.436,39.79,237.436z"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.7 KiB