Skip to main content
As NoteWise processes each video, it emits a stream of typed PipelineEvent objects. These events carry real-time progress information that the Rich live dashboard reads to update its display. The same event stream is consumed in --no-ui mode to emit plain-text progress lines to stdout. Every event is an instance of PipelineEvent (defined in domain/events.py) with the following fields:
event_type
EventType
required
One of the EventType enum values listed in the table below. Identifies what stage of processing the event represents.
video_id
string
required
The YouTube video ID this event is associated with.
title
string
Human-readable video title, populated once metadata has been fetched.
chapter_number
integer
1-based index of the chapter currently being processed. Only present on chapter-specific events.
total_chapters
integer
Total number of chapters in the video. Only present when chapter-aware processing is active.
chunk_number
integer
1-based index of the transcript chunk currently being sent to the LLM. Only present on chunk-specific events.
total_chunks
integer
Total number of transcript chunks for this generation pass.
error
string
Plain-English error message. Only present on VIDEO_FAILED events.
output_path
string
Filesystem path of the file written. Only present on VIDEO_SUCCESS events.

Event types

Pipeline lifecycle

Event typeValueDescription
PIPELINE_STARTpipeline_startThe pipeline has started. Emitted once before any video processing begins.
PIPELINE_COMPLETEpipeline_completeAll videos in the batch have finished (succeeded, failed, or skipped). Emitted once at the end.

Per-video lifecycle

Event typeValueDescription
METADATA_STARTmetadata_startStarting to fetch video metadata (title, duration, chapter list) from YouTube.
METADATA_FETCHEDmetadata_fetchedVideo metadata has been retrieved successfully. title field is now populated.
TRANSCRIPT_FETCHINGtranscript_fetchingRequesting the transcript from YouTube’s caption service.
TRANSCRIPT_FETCHEDtranscript_fetchedTranscript has been fetched (or loaded from the local cache).
VIDEO_SUCCESSvideo_successProcessing completed successfully. output_path contains the path to the primary output file.
VIDEO_SKIPPEDvideo_skippedThe video was skipped because it was already processed and --force was not passed.
VIDEO_FAILEDvideo_failedProcessing failed. error contains the user-visible failure message.

Study notes generation

Event typeValueDescription
GENERATION_STARTgeneration_startStarting LLM generation for this video (standard, non-chapter-aware path).
CHUNK_GENERATINGchunk_generatingSending transcript chunk chunk_number of total_chunks to the LLM.
GENERATION_COMBININGgeneration_combiningAll chunks have been generated; now combining chunk outputs into the final document.
GENERATION_COMPLETEgeneration_completeStudy notes generation finished successfully.

Chapter-aware generation

Emitted instead of the standard generation events when the video is long enough and has YouTube chapters:
Event typeValueDescription
CHAPTER_GENERATINGchapter_generatingStarting generation for chapter chapter_number of total_chapters.
CHAPTER_CHUNK_GENERATINGchapter_chunk_generatingSending chunk chunk_number of total_chunks for the current chapter to the LLM.
CHAPTER_COMBININGchapter_combiningCombining chunks for the current chapter into its output file.
CHAPTER_COMPLETEchapter_completeOne chapter’s notes have been written to disk.

Quiz generation

Event typeValueDescription
QUIZ_GENERATINGquiz_generatingStarting quiz generation (only emitted when --quiz is passed).
QUIZ_CHUNK_GENERATINGquiz_chunk_generatingSending transcript chunk chunk_number of total_chunks to the LLM for quiz generation.
QUIZ_COMBININGquiz_combiningCombining per-chunk quiz questions into the final quiz.md.
QUIZ_COMPLETEquiz_completeQuiz generation finished; quiz.md has been written.

Event flow

A typical processing run for a standard (non-chapter) video with --quiz proceeds in this order:

Dashboard and —no-ui mode

The Rich live dashboard subscribes to the event stream and updates its table rows in real time — one row per video. Each event type triggers a specific status update (spinner, progress bar, check mark, or error label). In --no-ui mode (useful for CI pipelines or cron jobs), the dashboard is disabled but events are still emitted. Instead of a live table, NoteWise prints a plain-text line to stdout for each significant state change.
Adding a new pipeline stage requires: (1) a new EventType value in domain/events.py, (2) an emit() call in pipeline/_execution.py or pipeline/generation.py, and (3) a handler in ui/dashboard.py if a UI update is needed. See AGENTS.md for the full workflow.

Build docs developers (and LLMs) love