노른노른하게, 영상을 굽다.
내 사진·영상과 콘셉트로 이야기의 초안을 만들고, 직접 다듬어 숏폼·롱폼·타임랩스와 SNS 게시 자료로 완성하는 로컬 우선 영상 스튜디오입니다.
Python 3.10 이상과 FFmpeg/ffprobe를 설치한 컴퓨터에서 저장소 또는 ZIP의 전체 폴더를 사용하세요.
bash run-norn.command
# 또는 원본 폴더 직접 지정
bash run-norn.command "/원본사진영상폴더"
실행 프로그램은 .venv를 준비하고 Pillow가 없으면 설치합니다. Mac에서는 원본 폴더 선택창을 제공합니다. 브라우저 자동 연결 주소의 토큰은 외부에 공유하지 마세요. 터미널을 유지하고, 종료 시 Control+C를 누릅니다. 같은 출력 폴더에 여러 엔진을 동시에 실행하지 마세요.
이미 설치된 FFmpeg를 사용하며 Homebrew 사용 환경에서는 brew install ffmpeg로 설치할 수 있습니다. HEIC/HEIF는 .venv 활성화 후 python3 -m pip install -r requirements-heic.txt를 추가 실행하세요. 설치·플랫폼별 실행은 사용자 컴퓨터에서 확인해야 합니다.
설치 확인만 하는 명령은 원본 폴더를 읽지 않습니다.
python3 engine/main.py --diagnose
| 단계 | 하는 일 |
|---|---|
| 1. 자료 연결 | 기존 원본 폴더를 로컬 엔진에 연결합니다. 썸네일 확대·영상 재생·이름 검색 후 +로 장면을 추가합니다. |
| 2. 콘셉트·AI 초안 | 제목·설명을 적고 영상당 기본 5장 표본으로 분석합니다. 대본·장면 순서·타이틀·문구를 제안합니다. |
| 3. 장면 편집 | 장면명·타이틀·문구, 구간·배속·글씨·전환·음악을 조절합니다. 직접 수정한 문구와 의도적으로 지운 빈칸을 보호합니다. |
| 4. 영상·게시 준비 | 해당 버전 또는 전체 버전을 순서대로 생성합니다. 상단에서 단계·진행률·취소·완료·오류를 확인하고, SNS별 문구·첨부 경로를 저장합니다. |
숏폼·롱폼·타임랩스·사진 스토리·자유 편집 모드와 세로 9:16·가로 16:9·정사각형·4:5 비율을 독립적으로 선택합니다. 버전을 복제해 순서와 글씨를 각각 수정할 수 있습니다. 목표 길이는 AI 구성 기준이며, 모드 변경만으로 기존 구간을 강제로 늘리거나 줄이지 않습니다.
최대 12개 버전, 버전당 120장면·출력 60분의 입력 검증이 있습니다. 이는 장시간 고해상도 처리 성능 보장이 아닙니다. 1시간→30초는 전체 구간을 120배속으로 압축하는 타임랩스이고 하이라이트 자동 요약과 다릅니다.
장면 추가·삭제·이동·복제·분할, 드래그 구간 손잡이와 0.001초 숫자 입력, 배속, 10개 글씨 스타일, 25개 전환 선택지, 글꼴 그룹, 장면 원음·전체 음소거·음악을 제공합니다. 효과 지원 여부는 설치된 FFmpeg가 결정합니다.
고배속은 실제 MP4를 만들어 재생하고 같은 편집 상태에서는 캐시를 재사용합니다. 전환 경계만 따로 확인할 수 있습니다. 중앙 글씨 배치는 참고용이며 최종 애니메이션·전환·음악은 실제 생성된 미리보기로 확인합니다. 편집하는 동안 생성한 미리보기가 오래되면 자동 적용하지 않습니다.
내장 음악은 프로그램이 생성한 간단한 합성 기악 루프 4개입니다. 유명 음악이나 전문 음원 라이브러리가 아닙니다. 다른 음악은 기존 원본 폴더의 파일을 사용하며 게시 권리는 사용자가 확인해야 합니다.
로컬 Ollama의 이미지 입력 지원 모델이 필요합니다. 기본 모델명은 qwen3.5:4b이며 설치된 실제 모델명을 지정할 수 있습니다. 원격 모델로 자동 대체하지 않습니다.
영상당 1~20장, 전체 이미지 한도, 표본 해상도, 폴더/타임라인 범위, 콘셉트/원본 목록/현재 순서를 설정합니다. 표본·관찰·전체 구성 캐시는 분리합니다. 이미지 수 한도로 제외된 자료와 인식 실패는 성공으로 표시하지 않습니다.
5장은 영상 전체 내용이나 말소리를 파악한 결과가 아닙니다. 추천 사용 구간은 표본 시각 주변 후보이며 정확한 행동 시작·끝은 사용자가 확인합니다. 촬영 시각이 검증되지 않은 자료를 임의로 시간순이라고 표시하지 않습니다. 사용자 명칭과 충돌하는 일부 표현은 차단하지만 모든 사실 오류를 검증하는 것은 아닙니다. 실제 Ollama 문장·인식 품질은 별도 확인 대상입니다.
원본은 복사·이동·삭제·업로드하지 않습니다. 결과는 원본 폴더 옆에 생성합니다.
원본폴더/
원본폴더업로드준비/
norn-project.json
norn-proposal.json
source-index.json
generated/<버전ID>/video.mp4
generated/<버전ID>/result.json
generated/<버전ID>/preview-<해시>.mp4
sns/<버전ID>/<채널>/post.txt
sns/<버전ID>/<채널>/attachments.json
exports/<버전ID>-posting.zip
.cache/
index.html
posting.html
SNS ZIP은 문구·안내·실제 첨부 경로만 포함합니다. 원본 미디어나 공통 생성 MP4를 여러 번 복사하지 않습니다. X·Instagram·TikTok·Threads·Facebook·네이버 블로그·네이버 클립 영상형/혼합형·YouTube 자료를 준비합니다. 실제 발행은 사용자가 각 서비스에서 직접 합니다.
내부 콘셉트 지시문은 공개 게시문으로 자동 복사하지 않습니다. 공개 소개글과 채널별 글을 따로 수정할 수 있습니다. 플랫폼별 최신 업로드 제약과 음악 권리는 게시 전에 확인하세요. 이 버전은 플랫폼 API 자동 업로드나 모든 계정 유형의 제한 자동검증 기능을 제공하지 않습니다.
아카이브와 첨부 안내에는 원본 내용·로컬 경로가 포함될 수 있습니다. 공개 배포 전에 검토하세요. 업로드준비 폴더만 다른 곳으로 옮기면 원본은 따라가지 않습니다.
Google 로그인·세션 관찰, 계정별 프로젝트 저장/목록/다시 열기/삭제, 기본 분석 장수, 저장 버전 충돌 방지, 임시 문서 저장·읽기·삭제 진단을 구현했습니다. public/firebase-config.json의 기본값은 enabled: false입니다. 실제 프로젝트를 연결하기 전에는 Google 로그인 성공을 가장하지 않고 명시적인 체험으로만 진입합니다.
클라우드에는 제목·문구·편집 설정·파일 식별 해시만 저장합니다. 원본·표본·절대 경로·연결 토큰은 전송하지 않습니다. 메타데이터 역시 개인 내용을 담을 수 있으므로 저장 전 안내를 확인하세요. 로그아웃/계정 변경 시 이전 계정의 작업과 엔진 연결 코드를 정리합니다.
다른 기기에서는 원본 폴더를 다시 연결해야 합니다. 이름이 아니라 SHA-256·종류·크기가 일치하는 유일한 후보를 연결하고 중복 후보나 없는 파일을 임의로 선택하지 않습니다. 다시 연결할 때 현재 편집을 유지하고 원본만 연결을 선택하세요.
Node.js 22 이상을 설치한 사용자 Mac에서 운영 연결 도우미를 실행합니다.
bash scripts/connect-firebase.command
도우미는 본인 Google 승인과 실제 조회된 노른 전용 프로젝트 선택을 요구합니다. 다른 서비스의 프로젝트를 재사용하면 사이트·Firestore 규칙을 교체할 수 있으므로 주의하세요. 결제 계정 연결은 하지 않습니다. Firebase 플러그인 설치는 이 앱의 운영 연결과 별개입니다.
Firebase 상세 연결 · 기능/검증 상태 · 운영 점검표
정적 UI는 public/ 또는 npm run build의 dist/입니다. Firebase Hosting 구성과 GitHub Actions 검사가 포함되어 있습니다. Pages는 저장소 Settings에서 GitHub Actions를 활성화한 경우에만 배포합니다. 설정이 없으면 명시적으로 건너뛰며 테스트 성공을 배포 성공으로 표시하지 않습니다.
공개 웹사이트를 로컬 엔진에 연결하려면 실제 사용하는 사이트 Origin을 명시합니다.
python3 engine/main.py "/원본폴더" --web-origin https://실제-배포-호스트
브라우저의 로컬 네트워크 접근 승인이 필요할 수 있습니다. 웹 호스팅은 FFmpeg 실행 서버가 아닙니다. norn.designboard.net의 DNS·Hosting 연결은 별도 운영 작업이며 이 소스에 배포 완료를 가정하지 않습니다.
npm test
python3 -m unittest discover -s tests -p 'test_*.py' -v
npm install --ignore-scripts
npm run test:rules
python3 -m pip install playwright
python3 -m playwright install chromium
python3 tests/ui-live.py ui-results
npm run build
Firestore 검사는 demo-norn 에뮬레이터에서 실행되며 운영 계정 OAuth 검증과 다릅니다. 테스트용 영상은 작은 합성 자료입니다. 실제 사용자 Mac·원본·모델·정식 도메인까지 검증한 것으로 해석하지 마세요.