Models are short-span, editors are continuous
The classifier reasons over individual utterances. An editor works with a continuous timeline, so predictions must be windowed, overlapped, and re-anchored to clip positions.
Capstone · AI media systems
DeployedA browser-based video editor connected to transcription, multimodal emotion and sentiment analysis, cloud GPU inference, and an intelligence-aware timeline.
01 · Problem framing
A video editor shows frames and waveforms. It does not show meaning. Finding the moment a speaker became excited, frustrated, or disengaged is manual scrubbing. Closing that gap requires four constraints to hold at once, and each one pushes the architecture in a different direction.
The classifier reasons over individual utterances. An editor works with a continuous timeline, so predictions must be windowed, overlapped, and re-anchored to clip positions.
A BERT encoder, a 3D convolutional video network, and an audio CNN exceed what is reasonable to ship to a client. The compute boundary is forced, not stylistic.
Editing interfaces are built around immediate feedback. Long-running analysis needs progress, cancellation semantics, and partial results rather than a frozen spinner.
An editor will not cut footage based on an unexplained label. Each segment carries ranked classes and evidence so the human keeps the final decision.
02 · Product surface
The deployed application starts locally in the browser and exposes cloud sync and AI features after sign-in. Its editor combines asset management, playback, a resizable timeline, AI analysis, transcription, notes, and export.


Tracks, layers, trim and split tools, playback, snapping, zoom, and export.
Emotion and sentiment distributions, AI markers, quick actions, and explainability.
Import, process, inspect, edit, and export inside one product surface.
Local editing stays available while cloud sync and AI require an authenticated project.
03 · Ownership and scope
SignalsFrame is team-built. The product repository includes WebGPU rendering, Convex schema design, S3 upload flows, Inngest timeline analysis, Clerk auth, and browser-side media tooling contributed across multiple engineers. Mohammad's role is strongest on the product interface and the ML pipeline he documented separately.
A hiring review should treat this as collaborative systems work with clear individual scope, not sole authorship of the entire platform.
04 · Cloud architecture
Interactive editing stays in the browser. Auth, persistence, and job state live in Convex. Media lands in S3. Inngest coordinates chunking and Modal calls. The ML repository keeps preprocessing, checkpoint loading, inference, and API contracts in one installable package.
Cloud topology
Verified from the public SignalsFrame and Video-Intelligence-Engine repositories: browser editor, Clerk auth, Convex persistence, S3 media, Inngest job orchestration, and Modal GPU services.
01 · Client
Browser editor
React/TypeScript editor with WebGPU rendering path, timeline, assets, and AI analysis workspace.
02 · App plane
Clerk + Convex + S3
Authentication, project/asset state, signed upload URLs, and timeline analysis job records.
03 · Orchestration
Inngest workflow
Prepare media, chunk segments, call Modal inference, persist timeline segments back to Convex.
AWS S3 presigned uploads for project media
6 s max segments with 500 ms overlap for timeline analysis
Separate Modal Whisper service for speech-to-text
Modal A10G multimodal affect endpoint
Primary inference path
Containerized inference app with model weights on a Modal Volume, HTTP contract tested against Convex expectations.
Alternate cloud target
Training and real-time inference scripts package the shared ML library for SageMaker endpoints. Deploy scripts exist; live production routing should be verified separately.
faster-whisper
FFmpeg utterances
video · audio · text
late-fusion model
typed timeline
Max upload size
2 GB
per file
Project storage ceiling
10 GB
per project
Signed URL lifetime
15 min
S3 presigned
Inference timeout
180 s
default per call
Analysis window
6 s
max segment
Window overlap
500 ms
boundary stability
Inference GPU
A10G
Modal container
Transcription GPU
T4
Whisper base
05 · Request lifecycle
Most of the engineering difficulty is not the model call. It is representing a long-running distributed job inside an interface where the user keeps editing while the job is still in flight.
Job lifecycle
Analysis is asynchronous, so the product cannot assume a single success path. The editor renders progress for the happy path and distinct, recoverable outcomes for everything else.
Non-happy outcomes
One or more utterances fail during inference
The response reports a failed utterance count and the timeline keeps every segment that did succeed.
Auth rejection, upstream timeout, or unreadable media
The job ends in a terminal error state with a user-safe message instead of a raw stack trace.
The editor timeline changes while a job is still running
Returned segments are remapped against current clip positions, or discarded when they no longer apply.
Segmentation strategy
The model reasons over short spans, but editors care about continuous footage. Overlapping windows keep predictions stable across boundaries so a single emotion shift is not split into two contradictory segments.
A 20s selection produces 4 inference windows at a 5.5s stride. Chunk count drives cost and latency, so window size is a product decision as much as a model one.
06 · Data model
Analysis is not a fire-and-forget request. Jobs, chunks, and segments are stored so the UI can subscribe, resume, and reconcile results against an edited timeline.
usersIdentity records linked to Clerk JWT issuer configuration.
projectsEditor project ownership, format, and cloud-sync membership.
assetsUploaded media metadata pointing at S3 objects rather than blobs.
uploadIntentsShort-lived records that authorize and track presigned uploads.
timelineSnapshotsSerialized editor state so a session can be restored or replayed.
timelineAnalysisJobsOne row per analysis request with status, progress, and error fields.
analysisChunksThe per-window unit of work sent to inference, keyed to a job.
analysisSegmentsReturned emotion and sentiment predictions anchored to timeline positions.
07 · Intelligence engine
The ML repository documents a late-fusion classifier over text, video, and audio. Training and inference share tensorization expectations, which is what makes a checkpoint trained offline usable behind a live endpoint.
Each utterance returns ranked emotion and sentiment predictions mapped back onto the editing timeline. No public benchmark numbers are committed in the repository, so macro-F1 appears here as a model selection metric during training rather than an advertised production accuracy.
Multimodal model graph
Architecture below matches the public ML repository README and inference engine. The neural network module itself is referenced by training and inference code but was not present in the public tree at review time—so this diagram reflects documented design, not a fully open-sourced model implementation.
Text
BERT encoder
128-d features
Video
R3D-18
128-d features
Audio
1D CNN · log-mel
128-d features
384-d concatenated representation
Linear · BatchNorm · ReLU · Dropout → 256-d
7-way emotion head
3-way sentiment head
Tensor contract
Training configuration
08 · Decisions and trade-offs
A system this shape has no free decisions. Each row below names the alternative that was rejected and the price paid for the option that shipped.
Instead ofIn-browser inference via WebGPU or WASM
The three-tower model is far too heavy for a client. Serverless GPU keeps the bundle small and cost proportional to use. The accepted cost is cold-start latency and a hard network dependency.
Instead ofOne inference pass over the whole clip
Fixed windows bound memory and keep predictions stable across boundaries. The accepted cost is duplicated compute in the overlap region and more calls per selection.
Instead ofA bespoke queue with client polling
Durable step execution gives retries and observability, while job rows are directly subscribable by the editor. The accepted cost is another service in the critical path.
Instead ofProxy media bytes through application compute
Two-gigabyte files should never traverse app functions. The accepted cost is client-side management of URL expiry and retry.
Instead ofEarly fusion or cross-modal attention
Each tower trains, debugs, and degrades independently, which matters when one modality is missing or corrupt. The accepted cost is weaker modelling of fine-grained cross-modal interaction.
Instead ofRequire authentication for all functionality
A first-time visitor can edit immediately, which materially changes activation. The accepted cost is maintaining two state paths and communicating the boundary in the UI.
09 · Production-shaped engineering
Loads raw state dictionaries, trainer exports, legacy wrappers, and known BERT key-prefix drift.
The timeline contract reports failed utterances instead of collapsing the whole analysis into one opaque error.
Seed control, mixed precision, gradient accumulation, EMA, configurable loss, and structured metrics utilities.
Focal loss, class weighting, weighted sampling, label smoothing, and macro-F1 checkpoint selection.
Shared preprocessing, inference engine, and HTTP contract logic target both Modal and SageMaker paths.
The UI represents extraction, upload, transcription, processing, completion, and failure explicitly.
10 · Testing strategy
The inference boundary is where a product bug and a model bug would otherwise blame each other, so it has its own contract tests.
Vitest suites across the web app, shared core package, and Convex function layer.
Playwright specs exercising real editor flows in a browser rather than mocked components.
Dedicated tests for the inference boundary: authorization handling, chunk and batch response mapping, and user-safe error messages.
11 · Known limitations
This section exists because a reviewer will find these anyway. Naming them with a concrete next step is more useful than a case study that claims everything worked.
The training dataset normalizes video with Kinetics mean and standard deviation, while the inference tensorizer only scales pixels into a unit range.
Next stepMove normalization into the shared preprocessing package so both paths cannot drift, then re-evaluate.
The experiment matrix defines ablations for focal loss, class weighting, sampling, and text unfreezing, but no scored output is checked in.
Next stepCommit per-run metrics and confusion matrices so claims about quality are reproducible.
Training and inference both import the network definition, so the public repository is not independently runnable end to end.
Next stepPublish the module or document exactly where the definition lives.
MELD is scripted television dialogue. Real uploads are podcasts, interviews, and vlogs with different pacing and audio conditions.
Next stepBuild a small in-domain calibration set and tune per-class thresholds before trusting absolute labels.
Serverless GPU containers add first-call delay that directly shapes how the progress UI should behave.
Next stepInstrument p50 and p95 end-to-end latency, then decide whether to keep containers warm during active sessions.
Repository metadata points at one host while the deploy script targets another, which makes the production path unclear to a reviewer.
Next stepDocument a single canonical deploy target and remove the unused path.
12 · Evidence boundaries
13 · Engineering review
The strongest signal is not the number of technologies. It is the ability to connect a dense product interface to asynchronous AI services while preserving understandable states, honest system boundaries, and a path from model output back to user action.