Post

02. SeSAC:Note 핵심 기능과 구조

02. SeSAC:Note 핵심 기능과 구조

SeSAC:Note는 강의 영상 하나를 입력으로 받아 슬라이드 캡처, STT, VLM 분석, 시간축 결합, 요약, Judge, QA까지 연결하는 서비스다. 이 글에서는 기능과 구조를 먼저 훑는다.

프로젝트 한 줄 설명

SeSAC:Note는 강의 영상에서 슬라이드를 자동 추출하고, 음성을 텍스트로 변환한 뒤, 시각 정보와 청각 정보를 시간축 기준으로 결합해 독립형 AI 강의 노트를 생성하는 멀티모달 AI 서비스다.

핵심 목표는 “강의 영상을 보지 않아도 이해할 수 있는 AI 강의 노트”를 만드는 것이다. 이 표현은 단순 요약보다 더 넓은 목표를 갖는다. 영상의 음성, 화면, 시간 정보를 함께 정리해야 하며, 생성된 노트는 사용자가 영상 없이도 복습할 수 있어야 한다.

핵심 기능

핵심 기능은 여덟 가지로 정리된다.

기능블로그에서의 해석
Smart Slide CaptureORB 특징점, 지속성 분석, Smart ROI, adaptive resizing으로 의미 있는 슬라이드 화면을 추출
Dual STT EngineClova Speech를 primary로, Whisper를 fallback으로 두는 음성 인식 구조
VLM Slide AnalysisQwen VLM으로 슬라이드의 텍스트, 수식, 도표를 구조화
Time-Synchronized FusionSTT와 VLM 결과를 timestamp 기준 segment로 결합
AI Summarization with Quality JudgeGemini 기반 요약과 Judge 보조 평가를 분리
Batch Processing & Resume긴 강의를 batch 단위로 처리하고 중단 지점 이후 재개 가능
Video-scoped QALangGraph 기반으로 영상 근거 범위 안에서 질의응답
Real-time StatusSSE로 처리 상태와 증분 요약 흐름을 전달

여기서 Judge는 품질을 보증하는 장치가 아니라 요약 결과를 근거와 비교해 보조 점검하는 장치다. QA도 전체 지식 검색 시스템이 아니라 특정 영상의 summary, segment, evidence 범위 안에서 답하는 흐름으로 제한한다.

전체 기능을 다시 압축하면 핵심은 세 축이다.

설명
핵심 프레임 추출모든 프레임을 저장하지 않고, 실제 슬라이드 내용이 바뀌는 지점을 선별한다
멀티모달 처리STT의 음성 설명과 VLM의 화면 정보를 timestamp 기준으로 묶는다
영상 근거 QA생성된 노트와 segment 근거 안에서 질문에 답하도록 범위를 제한한다

이 세 축을 기준으로 보면 SeSAC:Note는 “영상을 짧게 요약하는 도구”보다 “강의 영상을 학습 가능한 근거 단위로 바꾸는 서비스”에 가깝다.

전체 아키텍처

아키텍처는 frontend, backend, database, storage, AI APIs로 나뉜다.

flowchart TB
    FE[Frontend<br/>React + Vite] -->|REST API / SSE| BE[Backend<br/>FastAPI]
    BE --> DB[(Supabase<br/>PostgreSQL + pgvector + Auth)]
    BE --> ST[(Storage<br/>Supabase Storage / Cloudflare R2)]
    BE --> AI[AI APIs<br/>Gemini / Qwen / Clova Speech]

프론트엔드는 영상 업로드, 진행 상태, 노트, 영상 재생, 챗봇 UI를 담당한다. 백엔드는 업로드와 처리 요청, 상태 조회, 요약 조회, 근거 조회, 채팅 API를 연결한다. DB에는 처리 상태와 구조화 결과가 남고, Storage 계층에는 영상과 캡처 이미지 같은 객체가 저장된다.

파이프라인 흐름

Pipeline Flow는 PreprocessProcess 단계로 나뉜다.

flowchart LR
    A[Video Upload] --> B[Preprocess]
    B --> C[STT<br/>Clova / Whisper]
    B --> D[Slide Capture<br/>ORB + pHash]
    C --> E[Process]
    D --> E
    E --> F[VLM Analysis<br/>Qwen]
    F --> G[Time Sync<br/>STT + VLM Fusion]
    G --> H[Summarization<br/>Gemini]
    H --> I[Quality Judge<br/>Gemini]
    I --> J[Structured Lecture Notes]

이 흐름에서 중요한 점은 STT와 화면 분석이 분리되어 있다가 Fusion 단계에서 다시 합쳐진다는 것이다. SeSAC:Note는 transcript를 바로 요약하는 서비스가 아니라, 음성 설명과 슬라이드 정보를 같은 시간 구간의 근거로 묶은 뒤 요약과 QA에 사용한다.

기술 스택

backend와 frontend 기술 스택은 다음처럼 정리된다.

영역기술
Backend LanguagePython 3.10+
Backend FrameworkFastAPI + Uvicorn
AI/LLMGoogle Gemini, Qwen VLM, Google ADK
STTClova Speech API, OpenAI Whisper
Computer VisionOpenCV, ORB, pHash, ROI Detection
OrchestrationLangGraph
DatabaseSupabase PostgreSQL + pgvector
StorageSupabase Storage + Cloudflare R2
Container / CI-CDDocker, GitHub Actions, Cloud Run 설정
FrontendReact 19.2, Vite 7.2, React Router
UI / 문서 렌더링Tailwind CSS, KaTeX, react-markdown

CI/CD와 배포 관련 기술은 실행 구조를 이해하기 위한 맥락으로만 본다. 여기서는 프로젝트가 어떤 배포/실행 구조를 갖도록 설계되었는지에 집중한다.

코드 구조

Project Structure를 기능 단위로 압축하면 다음과 같다.

디렉터리역할
src/process_api.pyFastAPI main server
src/audioClova + Whisper STT module
src/captureslide capture engine, ORB, pHash, ROI
src/vlmQwen VLM slide analysis
src/fusiontime sync, summarizer, judge 연결
src/judgemulti-axis quality evaluation
src/pipelinepipeline orchestration, stages
src/dbSupabase adapter, R2 storage adapter
src/serviceschat, LangGraph session, pipeline service
frontend/srcAPI client, UI components, auth/context/hooks/pages
configaudio, capture, fusion, vlm, judge, pipeline 설정
docspipeline, chatbot, local E2E, project guide 문서

이 구조를 보면 SeSAC:Note는 단일 LLM 호출 스크립트가 아니라, 입력 처리, AI 분석, 저장, 상태 관리, 프론트엔드 조회까지 이어지는 서비스 구조로 만들어졌다는 점이 드러난다.

실행 구조

실행 방식은 backend, frontend, Docker, CLI로 나뉜다.

실행 방식의미
Backend serverFastAPI 서버를 8080 포트 기준으로 실행
Frontend dev serverfrontend 개발 서버를 5173 포트 기준으로 실행
Dockerbackend 이미지를 build하고 컨테이너로 실행
End-to-End CLI영상 파일을 입력으로 pipeline demo 실행
Step-by-Step CLIpreprocess와 process를 나누어 실행
Fusion onlyprompt 수정 후 Fusion 단계만 재실행

이 실행 구조는 개발과 검증을 나누기 위한 장치다. 전체 파이프라인을 한 번에 실행할 수도 있고, STT/Capture, VLM/Fusion/Summary/Judge, Fusion 재실행처럼 단계를 쪼개 확인할 수도 있다.

다음 글로 이어지는 지점

기능 목록만 보면 SeSAC:Note는 여러 AI API를 엮은 서비스처럼 보일 수 있다. 하지만 핵심은 사용자 문제 정의다. 왜 STT-only 요약으로 부족했고, 왜 화면 정보와 시간축 근거가 필요했는지는 다음 글에서 더 자세히 정리한다.

This post is licensed under CC BY 4.0 by the author.