기존 GhiVideo 저장소 HEAD의 트래킹 소스 362개 파일을 복제. (node_modules·storage·빌드 산출물·대용량 미디어는 .gitignore 규칙대로 제외) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2.8 KiB
2.8 KiB
AI Video Brief — PWA(폰 설치형 앱) + 영상(mp4) 다운로드 기능 추가
소요 시간: 25분 Context 사용량: input 600k / output 40k tokens (추정값)
요청 내용
- 안드로이드 앱으로 만들기 → 추천안(PWA 설치형 웹앱 + 네트워크 설정) 승인받아 진행
- (작업 중 추가 요청) 영상 자체 다운로드 기능도 추가
구현 내용 (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 병합 mp4main.py: task"video"파이프라인 추가,/api/download/{id}가 mp3/mp4 모두 서빙- 웹 화면: 🎬 영상 다운로드 버튼(청록색) 추가, 작업명/파일 라벨 맵 처리
테스트 결과
- ✅ manifest/sw.js/아이콘 모두 200 + 올바른 content-type
- ✅ 서버 재시작 후 보관함 데이터(SQLite) 유지 확인
- ✅ 영상 다운로드: 테스트 영상 → mp4 0.5MB 저장,
/api/download200 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 재발함).