feat: implement video site per README spec

- Express + EJS + express-session stack (auth/navbar ported from minecraft_launcher)
- Public: main folder list, folder video grid, internal popup player (/player/:videoId)
- Admin (/op): login, folder CRUD with right-click context menu + add-folder modal
- Admin folder: video grid with right-click edit/rename/delete, "영상 추가" -> editor
- Video editor: drag-drop upload, file picker, YouTube URL probe (ETA + 5분 경고),
  background yt-dlp download with progress polling, navbar title edit, trim controls,
  save runs ffmpeg trim (original preserved)
- Filesystem storage under data/folders/<name>/<videoId>/{meta.json, original.<ext>, edited.<ext>}

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-15 16:42:00 +09:00
parent 8d13d155de
commit 0db04cf5cd
30 changed files with 3300 additions and 0 deletions

View File

@@ -1,6 +1,36 @@
# 비디오 사이트
## 영상 업로드 및 저장을 위한 사이트
## 실행
```bash
npm install
npm run build
npm start # 기본 http://127.0.0.1:3000 (PORT=3000, HOST=127.0.0.1)
```
- 외부 노출이 필요하면 `HOST=0.0.0.0 npm start`
- 관리자 비밀번호는 `account.json``password` 값 (초기값 `admin`, 운영 시 반드시 변경)
- 세션 비밀은 `SESSION_SECRET` 환경변수로 덮어쓰기 권장
## 외부 의존
- `yt-dlp` — YouTube 영상 가져오기 (`PATH` 또는 `./bin/yt-dlp` 에 설치)
- `ffmpeg` — 영상 트림 저장 (`PATH` 에 설치). 없으면 trim 설정만 저장됩니다.
## 데이터 위치
```
data/
folders/<폴더이름>/<videoId>/
meta.json # 영상 메타 (제목, trim, 원본/편집본 파일명)
original.<ext> # 원본 (항상 보존)
edited.<ext> # 편집본 (저장 시 생성)
jobs/<jobId>.json # YouTube 다운로드 작업 상태
```
## 스펙
### 메인 페이지 (/)
- 동영상이 저장되어있는 폴더를 나열합니다.
- 폴더를 선택해 안에 영상을 확인할수있습니다.