AFTERBEAT afterbeat-core, live

Scoremotoren, ikke en illustrasjon av den

Alt under kjører gjennom den samme koden som skal score en ekte dans på en ekte telefon. Ingen tall her er forhåndsdefinert — endrer du en kontroll, beregnes resultatet på nytt av afterbeat-core, akkurat nå.

Kamera og pose

getUserMedia + requestVideoFrameCallback · MediaPipe Tasks Vision (OSS)

Ekte kamerabilde, ekte skjelett fra en ekte modell — ikke MockPoseProvider. Klokkebeskrivelsen står Unknown med vilje: vi har ikke målt hvilken klokke presentationTime faktisk er forankret i på tvers av nettlesere, så denne kilden er alltid urangert. Se ADR-0004 og sprint 18 i Motion Proof-planen.

Musikk

Miljø

Tegnetlaster med en gang
Videosmå klipp fra serveren
Fotografert360°-foto, ~6 MB per sted første gang

Effekter

Kobler til økten …

Kamera

Kameraer ikke søkt
Stiller du én gang
Eksternt kamera (WHEP)

Sending

Opptak

Detaljer

FPS (målt)—
Jitter—
Personer funnet—
Skjelving ‰—
Bro til afterbeat-serverFrakoblet

Lag en dans

challenge::build_challenge · median og varians fra egne takes

Du plasserer ingen treffvinduer selv. Du danser din egen dans minst tre ganger, og afterbeat-core finner fasiten: median-banen gjennom takene dine. Toleransen er variansen mellom dem — danser du stramt hver gang, blir utfordringen stram. Danser du med rom for variasjon, blir den romslig. Du kan ikke merke dansen din som «hard» — den blir hard fordi du var presis.

Takes

Åtte sekunder per take, minst tre. Behold de du er fornøyd med, ta opp fler ved behov.

0 av minst 3 opptak.

Ingen opptak ennå.

Utfordringen

Redigering

edit::plan_edit · overlegg i det komponerte bildet

En vanlig auto-editor gjetter hvor det interessante er ved å se på lydstyrke. Vi trenger ikke gjette: vi har taktrutenettet, score for hvert slag og bevegelsesenergien, så planen bygges på det som faktisk skjedde. Alle kutt legges på takt — et klipp som begynner midt i en takt føles feil selv for noen som ikke vet hvorfor.

Auto-redigering

Ingen økt tatt opp ennå.

Effekter i den nedlastede videoen

Tekst og stickers

Legges inn i det som sendes live og tas opp — ikke bare i forhåndsvisningen.

Lyseffekter

Reagerer på taktslaget, ikke på en fast frekvens — ellers slår de mot musikken.

Live fra telefonen

/ws/live · positurrelay, ikke video

Trykk Send live på telefonen, og Se live her. Det som sendes er normaliserte landmarks — cirka 1 kB per frame mot ~100 kB for et videobilde — og denne skjermen tegner dem med nøyaktig samme drawSkeleton og drawTrails som telefonen bruker. Scoringsveien (/ws/motion) er urørt: å se på kan ikke påvirke et resultat.

Ingen sender akkurat nå
Status—
Kameraer0
Forsinkelse—
Frames/s—
Video—

Scenen

CalibrationProfile → MotionFrame → evaluate_timing

Tre ting kalibreringen måler om en ekte spiller, gjort om til kontroller her. Se hvordan hver av dem påvirker figuren og målingen — ikke bare et tall i en tabell.

Tempo

120 bpm

Slaget spillet regner alt mot. TrackClock planlegger hvert treffvindu fra dette — dobler du farten, halveres tiden du har til å reagere.

Kroppsstørrelse

1.00×

Simulerer en høyere eller lavere spiller. Range måles mot spillerens eget komfortområde — en høy og en lav spiller skal score likt på samme relative utslag.

Sporingskvalitet

0.90

Dårlig lys eller occlusion senker denne. Under grensen (hentet fra MIN_OBSERVATION_CONFIDENCE, ikke gjettet her) blir resultatet Neutral — systemet mangler bevis, det er aldri spillerens feil.

Beatmapet

BeatmapRuntime · MoveEvent-vinduer plassert på en tidslinje

Hvert treff er et forenklet MoveEvent: hvilket slag det skal treffes på, og hvor mange millisekunder spilleren faktisk traff ved siden av. Plasseringen på linjen under er ikke dekorasjon — den er beregnet fra de samme tallene som sendes til serveren.

Kompilatoren

jsonschema (OSS) → validate_beatmap · ADR-0005

Et fullstendig beatmap som JSON, kompilert i to lag. Først skjemakonformitet — har det de feltene og typene beatmap.schema.json krever, sjekket av det åpne kildekode-biblioteket jsonschema. Består det, kjøres domenereglene — GDD-en og ADR-0005s gate-tetthetsregel. Et beatmap som feiler lag én sendes aldri til lag to.

Administrasjon

QA og infrastruktur-verifisering

Alt under beviser at koden virker — infrastruktur, algoritme-selvtester, determinisme — ikke noe som hjelper noen med å faktisk danse. Derfor samlet her, ikke spredt blant stedene en spiller faktisk bruker.

Rytmefølging

find_motion_peaks + RhythmFollowing (egenbygget, ikke GPL)

Følger bevegelsen takten — uten et forhåndsdefinert beatmap. Knappene under sender et ekte 1D-signal (simulert håndhøyde over tid) til /api/rhythm/analyze, som finner ekte hastighetstopper og sammenligner fasen deres mot forventet slag.

Lydkilder

cpal + symphonia (OSS) · SPIKE-002 kildeenumerering

To ekte ting, ikke to påstander: hvilke lydenheter denne serveren faktisk ser gjennom cpal akkurat nå, og en symphonia-dekoding av en committet WAV-fil — beviser at nivå 2 i musikkstrategien (lokale filer) fungerer ende til ende.

Enheter

Dekoding

Inferensmotoren

tract-onnx (OSS) · ren Rust, ingen C++-binærfil

Ingen pose-modell finnes ennå — det krever et ekte kamera å verifisere mot, se ADR-0008. Dette beviser noe smalere og like viktig: at selve kjøremotoren virker. Grafen under er en ekte, committet ONNX-fil (y = x·2 + 1), lastet og kjørt av tract — samme motor som skal kjøre en faktisk posemodell senere.

Determinisme

run_directory(qa/golden/)

Kjernekravet i hele arkitekturen: samme innspilte bevegelse skal gi identisk score på Windows, Android og iOS. Dette kjører de forpliktede referansestrømmene mot dagens evaluator-kode og viser om det fortsatt holder.

Toppliste

Ingen runder ennå i denne økten.

Resultatene under er fra denne økten på denne enheten. Serveren lagrer ingen score ennå, så det finnes ingen liste på tvers av spillere. Det krever lagring og en avklaring om hvem som eier tallene.

Opptak

Ingen opptak ennå. Et opptak starter automatisk når du sender live, og filen tilbys når du stopper.

Innstillinger

Kalibrering

calibration::estimate_latency · measure_body_scale

Mellom lyden går ut av høyttaleren, treffer øret, kroppen reagerer, kameraet fanger det og modellen svarer, ligger en forsinkelse vi ikke kjenner. Trådløse ørepropper alene ligger typisk på 150–300 ms, og treffvinduet er ±125 ms ved 120 BPM — uten måling ville du bommet på alt, og det ville sett ut som om spillet var ødelagt. Regnestykket gjøres av afterbeat-core: median av trykkene, ikke snitt, så ett bomtrykk ikke definerer latensen din.

Forsinkelse

Hør fire slag, trykk så på hvert slag. Bruk det du faktisk skal danse med — høyttaler eller ørepropper.

Kropp

Åtte sekunder: strekk armene ut til sidene og ta et skritt til hver side. Da måles rekkevidde og utslag mot din egen kropp, ikke mot en referansedanser.

Profilen din

Lagres bare på denne enheten. Latens og kroppsmål hører til oppsettet ditt — ørepropper, kamera, rom — ikke til en konto.