영화 스틸 파인더은(는) 무엇을 하나요?
"말다툼 후 침묵 속에 앉아 있는 두 사람의 스틸 이미지가 필요해"라는 요청을 실제 출처가 명확한 이미지 파일로 바꿔줍니다. 모든 AI 에이전트, 모든 OS, 자격 증명 불필요.
1. 먼저 읽어야 할 것: 실제로 가능한 것
자연어 문장을 받아 정확한 영화 프레임(특히 대화 자막이 포함된 프레임)을 반환해주는 무료 공개 API는 없습니다. '만능 해결책'을 쫓는 것은 시간 낭비입니다. 실제로 작동하는 것은 파이프라인이며, 에이전트가 조정하고 시각 인식 모델이 프레임을 선택합니다:
요청 -> 사실 확인 -> 출처 선택 -> 후보 배치 다운로드
-> 번호 매겨진 콘택트 시트 -> 시각적 프레임 선택 -> 고해상도 원본
-> 자막 크롭 / 합성 자막 -> 시각적 재확인
-> 전달 + 출처 매니페스트
두 가지 양보할 수 없는 결과:
- 시각적 단계는 생략할 수 없습니다. 파일 이름이나 텍스트만으로 프레임을 추측하면 실패합니다. 콘택트 시트를 시각 인식 모델(또는 사람)에게 보여주세요.
- 먼저 사실을 확인하세요. 영화에 대해 널리 퍼진 '사실'은 종종 틀립니다(
references/fact-check.md참조). 검색 전에 대사/장면/에피소드를 확인하세요.
2. 빠른 시작 (최소 프로파일, 기본값)
pip install -r requirements.txt
python scripts/still.py probe # 현재 연결 가능한 출처 확인
python scripts/still.py grab --out ./work \
--page "https://movie-screencaps.com/avatar-2009/page/114" \
--image-referer "https://movie-screencaps.com/" \
--limit 40
# -> ./work/candidates/*.jpg, ./work/contact_1.jpg, ./work/manifest.json
# contact_1.jpg를 비전 모델에 보여주고, 선택된 번호를 확인한 후:
python scripts/still.py sheet ./work/candidates # 번호가 다시 매겨진 시트 생성
python scripts/still.py crop ./work/candidates/p1_02.jpg --bottom 100 -o ./work/clean.jpg
python scripts/still.py deliver ./work --picks examples/sample-picks.json \
--profile profiles/minimal.json --out ./delivery
항상 probe를 먼저 실행하세요: 출처 가용성은 변동됩니다. 완전 오프라인 실행은 examples/quickstart.md의 섹션 D를 참조하세요. --image-referer는 일반적으로 사이트 루트이지, 기사 URL이 아닙니다.
대사 줄의 경우, quote는 영화 제목과 밀리초 타임스탬프를 제공합니다:
python scripts/still.py quote "I see you" --title Avatar
전체 설명: examples/quickstart.md. 명령어 레퍼런스: scripts/still.py --help.
3. 네트워크에 접속하기 전에 경로를 결정하세요
| 요청 | 첫 번째 선택 | 대안 |
|---|---|---|
| 장면 / 분위기 ("싸움 후 침묵", "서로 등을 돌린 두 사람") | 설명이 포함된 스틸 이미지가 있는 편집 기사, 또는 FilmGrab 큐레이션 프레임 (grab) | 프레임별 갤러리 + 시각적 선택 |
| 인용된 대사 / "X가 Y라고 말하는 프레임" | quote -> 타임스탬프 -> 프레임 갤러리 -> subtitle (합성으로 표시) | 편집 기사의 네이티브 자막이 포함된 스크린샷 |
| 넓고 깨끗하며 자막이 없는 커버 아트 필요 | FilmGrab 큐레이션 프레임 | 시청 스크린샷 하단 95-100px crop |
| 사용자가 로컬 비디오 파일 보유 | 선택적 로컬 시맨틱 검색, references/optional-adapters.md 참조 | — |
| 스틸 대신 밈 / 짤 | 선택적 부록, references/meme-optional.md 참조 | — |
probe를 먼저 실행하세요. 무료이며 로그인이 필요 없고, 현재 환경에서 403/연결 불가능한 출처를 알려주어 죽은 호스트를 재시도하지 않도록 합니다.
4. 모든 에이전트가 지켜야 할 규칙
- 자격 증명 없음. API 키를 요청하지 마세요. 사용자를 대신해 로그인하지 마세요. 페이월이나 안티봇 보호를 우회하지 마세요. 403은 "출처 전환"을 의미하며, 실행 로그에 기록됩니다.
- 실제로 반환된 URL만 다운로드하세요. 이미지 URL을 절대 임의로 생성하지 마세요. 페이지에 접근 가능하다고 해서 해당 이미지 CDN에 접근 가능한 것은 아닙니다: 전체 갤러리를 신뢰하기 전에 이미지 하나를 확인하세요. Referer를 한 번 수정한 후에도 이미지가 403을 반환하면 출처를 전환하세요. 헤더를 계속 변경하지 마세요.
- 출처를 기록하세요. 전달된 모든 이미지에는 출처 페이지, 직접 이미지 URL, 영화 제목/연도, 자막이 크롭되었거나 합성되었는지 여부가 필요합니다.
grab은 이를manifest.json에 자동으로 기록합니다. - 합성된 자막을 표시하세요. 원본 프레임에 없던 자막을 추가한 경우, 캡션에 그 사실을 명시하세요. 절대 네이티브 프레임으로 제시하지 마세요.
- 해상도를 확인하고 임의로 가정하지 마세요. (기본적으로 너비 >= 1000px) 전달하기 전에 뷰어로 최종 파일을 여세요.
- 프로파일을 존중하세요. 위 사항 외의 동작(사람 검수 선택, 이중 폴더 전달, 필수 사실 확인, 커버 크롭 미리보기)은
profiles/*.json에 의해 제어됩니다. 추가 규칙을 조용히 활성화하지 마세요.
5. 프로파일 (선택적 동작)
기본 profiles/minimal.json은 일반 목적의 기본 파이프라인입니다: 후보 찾기, 하나 선택, 출처와 함께 전달. 그 외의 모든 것은 옵트인입니다.
python scripts/still.py rules --profile profiles/editorial-wechat.json
python scripts/still.py deliver ./work --picks picks.json \
--profile profiles/editorial-wechat.json --out ./delivery
editorial-wechat.json은 편집자 워크플로를 묶어 놓은 것입니다: 번호가 매겨진 미리보기와 사람 선택(절대 자동 최종 확정 안 함), 후보 이미지를 절대 삭제하지 않는 이중 폴더 전달, 필수 사실 확인, 필수 자막/출처 주석, 2.35:1 커버 크롭 미리보기. 전체 스키마는 profiles/README.md를 참조하세요.
6. 참조 인덱스 (점진적 공개)
현재 단계에 필요한 것만 읽으세요.
| 파일 | 읽어야 할 때 |
|---|---|
references/workflow.md | 전체 종단간 SOP 및 승인 체크리스트가 필요할 때 |
references/sources.md | 출처를 선택하거나, 출처가 작동을 멈췄을 때 |
references/pitfalls.md | 무언가 실패했을 때; 알려진 죽은 호스트와 정확한 실패 모드가 포함되어 있음 |
references/image-ops.md | 콘택트 시트, 크롭, 자막 합성, 폰트 관련 |
references/fact-check.md | 대사를 인용하거나 특정 장면을 설명하는 요청 시 |
references/delivery.md | 출처 스키마, 이중 폴더 레이아웃, 저작권 경계 |
references/meme-optional.md | 사용자가 스틸 대신 밈을 요청했을 때 |
references/optional-adapters.md | 로컬 비디오 라이브러리 또는 기타 로그인/CLI 기반 도구 관련 |
7. 승인 체크리스트
- 대사/장면이 검색 전에 사실 확인되었습니다.
- 번호가 매겨진 콘택트 시트가 비전 모델이나 사람에 의해 검토되었습니다.
- 최종 이미지가 올바르게 열리며 요청(쿼리뿐만 아니라)과 일치합니다.
- 출처 페이지 + 직접 URL + 영화/연도가
manifest.json에 기록되었습니다. - 크롭/합성된 자막이 명시적으로 표시되었습니다.
- 너비 >= 1000px (또는 편차가 명시됨)
- 죽은 호스트와 해결 방법이 조용히 재시도되지 않고 기록되었습니다.
- 후보 이미지가 삭제되지 않았으며 중간 파일이 보존되었습니다.
8. 범위 제한
이 기술은 이미지를 찾고 준비합니다. 어떤 것도 게시하지 않으며, 사용자의 원고를 편집하지 않고, 사용자를 대신해 최종 커버를 결정하지 않으며(프로파일이 사람이 이미 선택했다고 명시하지 않는 한), 영화 스틸을 재배포할 권리를 부여하지 않습니다. 저작권 경계는 references/delivery.md를 참조하세요.