Event: HR → VTube Bridge
ProJeder HR-Pulse pusht den BPM-Wert in einen Custom Parameter in VTube. Modell kann mit der Frequenz pulsieren, glühen oder Animationen abspielen.
- Steps
- 4
- Cooldown
- 0s/User
- Cooldown
- 0sglobal
- Zugriff
- Broadcaster
Jeder HR-Pulse pusht den BPM-Wert in einen Custom Parameter in VTube. Modell kann mit der Frequenz pulsieren, glühen oder Animationen abspielen.
VTube Studio kennt Custom Parameters: frei benannte Float-Werte die du im Live2D-Modell mit Mesh-Deformationen, Texturwechseln oder ArtMesh-Opacities verknüpfen kannst. Der trick: SB pusht den BPM-Wert jede Sekunde in diesen Parameter, das Modell reagiert visuell: z. B. Herz-Pulsieren auf der Brust, glühende Wangen, schnellere Atmung. Das Setup hat zwei Teile: einmal im VTube-Modell, einmal in der SB-Action.
| Feld | Wert |
|---|---|
| Parameter ID | BodyHeart |
| Min Value | 40 |
| Max Value | 220 |
| Default | 70 |
| Auto-Sleep | aus |
FaceAngleX benutzen für einen schnellen Test: siehe „Quick-Test“ unten.[HR] VTube BridgeTrigger: Integrations > HypeRate.io > Heart Rate Pulse (oder Pulsoid > Heart Rate Pulse), ohne Range-Filter damit jeder Pulse durchkommt.
Schreibt den Live-BPM-Wert in den Custom Parameter. Weight = 1 = voller Effekt, kein Interpolieren von außen.
| Parameter | BodyHeart |
|---|---|
| Value | %heartRate% |
| Weight | 1 |
Persisted Global für Edge-Detection im nächsten Pulse (siehe unten).
| Global Name | lastHR |
|---|---|
| Value | %heartRate% |
| Persisted | aktiv |
Bei einem BPM-Sprung von >30 zum letzten Wert: zusätzlich einen Hotkey für sichtbare Reaktion auslösen.
| Input | $abs($sub(%heartRate%,%lastHR%))$ |
|---|---|
| Operation | Greater Than |
| Value | 30 |
| Name | Shock |
|---|
Der HR-Trigger feuert bis zu 1×/s. Set Parameter Value ist billig (WebSocket-Frame zu VTube), das verkraftet jede Maschine. Aber:
HR-Bridge). Sonst stehen schwere Actions hinter dem Pulse.Wenn du kein eigenes Modell modifizieren willst, nutze einen vorhandenen Default-Parameter zum Testen: z. B. FaceAngleX (Kopfneigung).
| Feld | Test-Wert |
|---|---|
| Parameter | FaceAngleX |
| Value | $div($sub(%heartRate%,100),5)$ (BPM 100 → 0°, BPM 150 → 10°, BPM 200 → 20°) |
| Weight | 1 |
Bei HR > 100 BPM neigt sich der Kopf: sichtbar in jedem Default-Modell. Test fertig, danach zurück auf BodyHeart.
Roher HR-Wert hat Spikes (Bewegung, Sensor-Glitches). Smoothing via gleitendem Mittelwert über 3 Pulse:
Macht das Pulsieren weicher. Trade-off: 3-Sekunden-Lag bis ein neuer Spike voll sichtbar ist.
| Szenario | BPM | Effekt im Modell |
|---|---|---|
| Chill-Stream | 65 | Herz pulsiert langsam |
| Spannender Moment | 110 | Pulse beschleunigt, Glow leicht an |
| Boss-Fight Climax | 175 | Glow voll an, Modell zittert (Shock-Hotkey aus Spike-Detection) |
| HR-Disconnect (0 BPM) | 0 | Parameter clipped auf Min 40 (VTube clamped automatisch) |
%success% = false, keine Wirkung. Parameter-ID byte-exakt kopierenAuto-Sleep = aktiv, fällt Parameter nach kurzer Pause auf Default zurück und Sprung zurück sieht hässlich aus. Aus.Weight 0.5 schöner aussehen. Experimentell.0 oder gar keine Pulses. 0 mappt VTube auf Parameter-Min (40), Modell zeigt „Resting“-Look. Stream-Online-Reset-Pattern aus HR-Zones verwenden um sauber zu starten.BodyHeart für Pulsieren, FaceGlow für Wangen-Röte ab Schwellwert (zweite If/Else-Branch)streamOnline == true über Persisted Global aus stream-online, spart unnötige Pushes wenn offlineFaceExcited-Parameter pushen, der nach 5 s zurückfällt