Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Phase 2 Core-Set Proposal — freeze sheet

Purpose: the minimal, tractable, best-in-class feature set to build in Phase 2. Derived from docs/scoping_review/09_recommendations.md. Mark each row keep ✓ / drop ✗ / → extended and edit freely; your sign-off at the bottom freezes the Phase 2 scope. Everything here runs locally on Tier A (CPU) + Tier B (one 24–48 GB GPU). Default answer for every row is keep.

Note: keep all i didn’t answer. x = selected (i.e., x by keep means keep it. x by change means change)

1. Global parameters

ParameterProposed defaultDecision
Common grid rate1 Hz, center-referenced binsx keep ☐ change: ____
Emit alternate gridsNo (single grid; native rates cached for re-gridding)x keep ☐ also emit: ____
Output containerHDF5 canonical + JSON sidecar (+ optional scalar Parquet)x keep ☐ change: ____
Hosted (API) modelsOff by default; local-only core☐ keep x allow opt-in for: OpenAI text-embedding-3-large, ChatGPT5.x and later____
Depicted vs elicited emotionTwo separate streams (non-negotiable)x keep ☐ change: ____

2. Core extraction passes (extract once → route to all classes)

The core set is ~18 model passes, not 146 tools, because signals are shared. Each pass below is one deployable extractor; “feeds” shows which feature classes consume it.

Visual

PassModelTierFeedsKey per-timepoint outputsKeep?
Low-level image statsscikit-image + OpenCV + Hasler colorfulnessCPUVisualluminance, RMS contrast, color means (RGB/HSV/Lab), colorfulness, edge density, entropy, FFT slopex
Orientation/SF bankpyrtools / plenopticCPUVisualscale×orientation energy vectorx
Semantic image probeSigLIP 2GPUVisual, Situationimage embedding + per-prompt object/scene/place/attribute scoresx
Label-free embeddingDINOv2GPUVisualCLS embedding (for RSA / probes)x
Faces + identityInsightFace (RetinaFace+ArcFace)GPUVisual, Socialface count, identity tracks, landmarks, head pose, 512-d id embeddingx
Face AUs + expressionOpenFace 3.0CPUVisual, AffectAUs, gaze, head pose, discrete emotionx
Body poseMMPose RTMPose (+ByteTrack)GPUVisual, Social17/133 keypoints → posture, orientation, proximity, contact proxyx
Optical flowSEA-RAFTGPUVisualflow magnitude, orientation hist, camera-vs-object motionx
Motion energypymotenCPUVisualbrain-aligned motion-energy vectorx
Shot boundariesTransNetV2 + PySceneDetectGPU/CPUVisual, Situation, Actionper-frame cut prob, shot segmentsx
Action recognitionVideoMAE V2 + X-CLIPGPUVisualKinetics posteriors + zero-shot action-phrase scoresx
Saliency + depthViNet + Depth-Anything-V2GPUVisualsaliency entropy/peak, depth mean/range, foreground fractionx

Audio / speech

PassModelTierFeedsKey outputsKeep?
Low-level acousticlibrosa + openSMILE eGeMAPS + ParselmouthCPUAudio, Speech, AffectRMS, spectral, MFCC, chroma, F0, jitter/shimmer/HNR, tempo/beats
Audio events/scenesBEATs + CLAPGPUAudio527-d AudioSet probs + open-vocab prompt similarity
Speech/music/noiseinaSpeechSegmenterCPUAudiotimestamped speech/music/noise segments
ASR (the hub)faster-whisper large-v3 + WhisperXGPUSpeech, Language, Social, Situation, Affectword/segment text + timestamps + speaking rate
Diarization + VADpyannote + Silero VADGPU/CPUSpeech, Socialwho-spoke-when, active speaker, overlap, speech activity
Vocal affectaudEERING wav2vec2-dimGPUSpeech, Affectvoice valence/arousal/dominance + embedding

Language (consumes the transcript)

PassModelTierFeedsKey outputsKeep?
Lexical + syntaxspaCy trf + wordfreq/SUBTLEX + concreteness/AoA/VAD norms + NRC EmoLexCPULanguage, AffectPOS, dep, NER; freq, concreteness, AoA, valence, emotion per word
Syntactic complexitybenepar + L2SCA + Maverick (coref)GPU/CPULanguagetree depth, clause ratios, complexity indices, coref chains
LLM surprisal/hiddenminicons (GPT-2/Pythia)GPULanguageper-token surprisal, entropy, hidden-state vector
Semantic embeddingQwen3-Embedding + sliding-window coherence + BERTopicGPU/CPULanguage, Situationembedding, coherence, drift, novelty, topic series

High-level reasoning (one consolidated VLM/LLM pass)

PassModelTierFeedsKey outputsKeep?
Per-shot video-LLMQwen2.5-VL 7B (unified JSON schema)GPUSocial, Situation, Affect, Languageinteraction type, dominance/affiliation, ToM/intention, addressee; Event-Indexing fields (space/time/cause/intent/protagonist), script labels, event boundaries; depicted emotion+V/A/D; narrative stage/turning points
Active-speakerLight-ASDGPUSocialper-face speaking prob → speaker/listener roles
Gaze targetGaze-LLEGPUSocialmutual gaze, joint attention

Situation / affect (algorithmic + dedicated)

PassModelTierFeedsKey outputsKeep?
Event segmentationGSBS / statesegmentationCPUSituationper-timepoint state label, ranked boundaries, optimal K
Dialogue-text emotionRoBERTa-GoEmotions (+NRC-VAD)CPUAffect28 emotion scores → V/A proxy per utterance
Elicited affectLIRIS-ACCEDE / MuSe regressorGPUAffect (separate stream)viewer-induced valence/arousal per second

3. Deliberately keep-both (distinct signals, not redundant)

DINOv2 (RSA) vs SigLIP 2 (interpretable); pymoten (brain-aligned) vs SEA-RAFT (interpretable) vs VideoMAE (semantic action); BEATs (fixed 527) vs CLAP (open-vocab); inaSpeechSegmenter (partition) vs pyannote (who-spoke); depicted vs elicited emotion. ☐ accept all ☐ edit: ____

4. Notable items left to the extended tier (off by default)

Grounding-DINO/Mask2Former/SAM2 (object boxes/masks), Places365 (calibrated taxonomy), Q-Align (aesthetics), Essentia/madmom (music key/beat/mood), DMRST (RST discourse), turning-point model, API embeddings, frontier-API VLM judge (gold-label validation). ☐ ok ☐ promote to core: ____

5. Modality applicability (auto-null rule)

Audio-only story → all visual channels applicable=false (NaN). Text-only → visual+audio null, language/social/situation/affect run on text. ☐ accept


Sign-off

  • Approved by: Tor Wager Date: 6/19/2026
  • Common grid rate frozen at: 1 Hz
  • Hosted models: ☐ none x enabled for: OpenAI ChatGPT models__________________
  • Notes / edits: ________________________________________________

On sign-off, Phase 2 builds one Extractor (src/extractors/<class>/) per kept pass behind the base.py interface, wired around the shared passes above.