Files
GhiVideo_v4/docs/history/2026-07-07_1515_AI영상요약-PWA폰설치-영상mp4다운로드.md
b23042andClaude Fable 5 d38b842e8d GhiVideo 소스 복제 — v4 작업 시작 기준
기존 GhiVideo 저장소 HEAD의 트래킹 소스 362개 파일을 복제.
(node_modules·storage·빌드 산출물·대용량 미디어는 .gitignore 규칙대로 제외)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 14:32:51 +09:00

2.8 KiB

AI Video Brief — PWA(폰 설치형 앱) + 영상(mp4) 다운로드 기능 추가

소요 시간: 25분 Context 사용량: input 600k / output 40k tokens (추정값)

요청 내용

  1. 안드로이드 앱으로 만들기 → 추천안(PWA 설치형 웹앱 + 네트워크 설정) 승인받아 진행
  2. (작업 중 추가 요청) 영상 자체 다운로드 기능도 추가

구현 내용 (ai_video_brief 프로젝트)

PWA (폰 홈 화면 설치형 웹앱)

  • 앱 아이콘 3종 PIL로 생성 (192/512/maskable-512, 파랑→보라 그라데이션 + 재생버튼 도안)
  • manifest.json (standalone, 한국어, short_name "영상요약")
  • sw.js 서비스워커 — 화면은 네트워크 우선+캐시 폴백, /api/는 캐시 안 함
  • FastAPI에 /manifest.json, /sw.js 루트 라우트 추가 (SW 범위 확보), /static 마운트
  • index.html: manifest/theme-color/아이콘 연결, SW 등록, beforeinstallprompt 시 "📲 앱으로 설치" 버튼 표시
  • 모바일 CSS: 폰에서 입력창이 위·보관함이 아래(order), 버튼 확대

폰 접속 설정

  • windows-setup/포트열기.ps1 — 관리자 PowerShell에서 1회 실행: WSL IP 자동 감지 → netsh portproxy(55100) + 방화벽 규칙 + 폰 접속 주소 출력
  • WSL2 IP는 재부팅마다 바뀌므로 재부팅 후 접속 안 되면 스크립트 재실행 (스크립트가 자동 처리)
  • README에 단계별 안내 추가: ① 포트 열기 ② 홈 화면 추가 ③ (선택) Tailscale — https 확보 시 완전한 standalone 설치 + 집 밖 접속

영상(mp4) 다운로드

  • config.py: VIDEO_DIR, VIDEO_MAX_HEIGHT(기본 1080)
  • downloader.download_video(): bestvideo(mp4)+bestaudio(m4a) → ffmpeg 병합 mp4
  • main.py: task "video" 파이프라인 추가, /api/download/{id}가 mp3/mp4 모두 서빙
  • 웹 화면: 🎬 영상 다운로드 버튼(청록색) 추가, 작업명/파일 라벨 맵 처리

테스트 결과

  • manifest/sw.js/아이콘 모두 200 + 올바른 content-type
  • 서버 재시작 후 보관함 데이터(SQLite) 유지 확인
  • 영상 다운로드: 테스트 영상 → mp4 0.5MB 저장, /api/download 200 video/mp4

다음 에이전트 참고

  • PWA 설치의 한계: http://LAN IP 접속은 보안 컨텍스트가 아니라 Chrome이 "바로가기" 형태로만 추가됨 (주소창 보임). 완전한 standalone 설치는 https 필요 → README의 Tailscale 3단계 (tailscale serve) 안내 참조.
  • 윈도우 쪽 명령(관리자 netsh/방화벽)은 에이전트가 실행 불가 → 사용자가 포트열기.ps1 직접 실행해야 함.
  • pkill -f "uvicorn app[.]main" 은 반드시 서버 시작 명령과 별도 Bash 호출로 (같은 호출에 start 명령이 있으면 그 문자열에 패턴이 걸려 자기 셸이 죽음, exit 144 재발함).