video-article
매일 새로 나온 논문과 증권사 리서치 리포트를 모아 LLM 으로 채점하고, 사람이 한 편을
고르면 사실 근거에 묶인 숏폼 대본과 영상 지시서를 만들어 영상까지 렌더·업로드하는
파이프라인이다. 개인 프로젝트이며 실제로 매일 돌고 있다.
무엇을 푸는가
숏폼으로 지식 콘텐츠를 만들 때 가장 비싼 두 가지는 무엇을 다룰지 고르는 일과
틀린 말을 하지 않는 일이다. 이 저장소는 둘 다 기계로 옮긴다.
- 고르는 일 — 수집한 논문을 5축(의외성·이해가능성·일상관련성·학술중요성·화제성)으로
채점해 매일 상위 후보만 남긴다. 사람은 목록에서 한 편을 누른다.
- 틀리지 않는 일 — 대본은 원문이 아니라 Fact Sheet(원문에서 추출·검증한 사실 목록)만
보고 쓴다. 각 장면은
source_facts 로 근거를 달고, 자기검증 단계가 근거 없는 문장에
빨간 깃발을 세운다. 지시서 승인 화면은 필수 조건이 빠지면 잠긴다.
흐름
① 수집 arXiv · OpenAlex · HN · Reddit / ARIA 포털(증권사 리포트)
② 채점 5축 LLM 채점 → 일별 배치(상위 N)
③ 최종선별 사람이 대시보드에서 한 편 낙점
④ 초안 Fact Sheet 추출 → 대본 → 자기검증(환각 게이트)
⑤ 영상 지시서 컷/시퀀스 분할 · 이미지·영상 프롬프트 · 비용 산정 → 사람 승인
⑥ 렌더·발행 이미지·영상 생성 → TTS → 자막·조립(ffmpeg) → QA → 유튜브 업로드
구성
| 디렉터리 | 역할 |
|---|
engine/ | Python 엔진. 수집·채점·Fact Sheet·대본·지시서·렌더·발행. 튜닝 상수는 engine/config.py 한 곳에 |
web/ | Next.js(App Router) 운영 대시보드. Vercel 배포 |
supabase/ | Postgres 마이그레이션 + RLS + Edge Functions |
.github/workflows/ | 수집·채점·렌더·발행 워커(크론 + 수동 실행) |
docs/ | 명세·기획·리뷰·편차 기록. 결정의 근거를 남기는 곳이다 |
tests/ | 순수 로직 테스트(pytest) + 프롬프트 드리프트 감시 |
직접 돌려보려면
python3 -m pip install -r engine/requirements.txt
cp .env.example .env # 키를 채운다
python -m engine.collect # 수집
python -m engine.score # 5축 채점 + 일별 배치
pytest # 순수 로직 테스트
cd web && npm install && npm run dev
DB 는 Supabase(Postgres)를 쓴다. supabase/migrations/*.sql 을 순서대로 적용한다.
이 저장소에 없는 것
공개 저장소이므로 다음은 포함돼 있지 않다.
- API 키·토큰 일체 — 전부 GitHub Secrets / 환경변수로 주입한다(
.env.example 참조)
- 운영 DB 의 데이터 — 논문·리포트·영상 산출물은 여기에 없다
- 운영 인프라 식별자 — Supabase 프로젝트 ref, 대시보드 주소 등은 시크릿으로 뺐다
engine/aria/fixtures/*.json 의 리서치 리포트 본문은 증권사가 공개 배포한 자료다
(각 증권사 공식 텔레그램 채널·포털에서 누구나 받을 수 있다).
운영 대시보드
대시보드에는 계정 로그인이 없고 운영자 키 하나로 사이트 전체가 잠겨 있다
(web/middleware.ts). 기기당 한 번 /unlock 에서 키를 넣으면 180일간 유지된다.
OPERATOR_KEY 가 설정돼 있지 않으면 전체가 잠긴 상태로 남는다(fail-closed).
모델
채점·추출·자기검증은 비용·품질 균형을 보고 고른다. 모델 ID 와 파라미터는
engine/config.py 에 모여 있고 환경변수로 덮어쓸 수 있다.
라이선스
AGPL-3.0. 코드를 가져다 서비스로 제공하는 경우에도 소스 공개 의무가 따른다.