본문으로 건너뛰기
VIDIA고수의 노하우로 만드는 영상

실사진 확보

내 자료·스톡·실사진

비디아 · v1 · 0회 사용 · 패키지 1개

실사진 장면마다 사건과 직접 연결된 실제 사진을 찾아 눈으로 검수해 확보합니다.

설명서

하는 일 설계도의 실사진(photo) 장면마다 검색 → 텍스트 1차 거르기(유료 스톡 워터마크·썸네일·합성·일러스트 제외, 공공·기록·언론 출처 우선) → 가져오기 → 직접 연관성 8문항 이미지 검수(7점 이상 채택) 순서로 사진을 확보합니다. 동네 일반 풍경·닮은 사람·다른 장비처럼 사건과 직접 연결되지 않은 사진은 수량을 채우려고 넣지 않습니다.

권리 회원이 실사진 사용 권리 확인을 체크한 경우에만 인터넷 사진을 가져옵니다. 미성년자 얼굴·성범죄 피해자·참혹한 사진은 쓰지 않습니다.

입력 blueprint(photo 장면, 장면별 x-search 검색 단서), 선택 research·input.photo_rights_confirmed·input.photo_search_budget.

출력 assets["media:<장면>"], mediaMissing(못 찾은 장면은 AI 이미지로 대체), credits, photoLedger(후보별 채택·탈락 사유), photoStats.

비용 사진 검색 1회마다 과금(장면당 최대 2회, 기본 상한 장면 수 × 2) + 이미지 검수 LLM 토큰(장면당 최대 3회). 가져오기는 무료입니다.

지시서(스킬 txt)

txt 내려받기
[이 모듈이 하는 일]
설계도에서 실사진(media.type "photo") 장면의 실제 사진을 찾아 확보한다.
검색 → 텍스트 1차 거르기 → 가져오기 → 눈으로 보는 직접 연관성 검수(8문항) 순서로, 그 장면과 사건에 직접 연결된 원본 사진만 남긴다. 수량을 채우려고 관련 없는 사진을 넣지 않는다.
확보한 사진은 assets["media:<장면id>"] 에 적고, 끝내 못 찾은 장면은 AI 이미지로 대체되도록 표시한다. 모든 후보의 채택·탈락 이유를 사진 원장(photoLedger)에 남긴다.

[입력]
이전 단계 JSON(vidia.doc@1).
- blueprint.video.aspectRatio: 화면 방향
- blueprint.scenes[]: {id, title, purpose, utterances[{ttsText, subtitleText}], x-search{query, alt}(검색 단서, 있을 때), media{type, photo{url, assetId}}, keyframes[{imagePrompt}]}
- research: 사실 원장(있으면 people·places·timeline·mediaLeads.photoQueries·sensitive 를 판단 근거로 쓴다)
- input.photo_rights_confirmed: 회원이 "가져올 실사진의 사용 권리를 확인했다"고 체크했는지(true/false)
- input.photo_search_budget: 이번 실행의 사진 검색 횟수 상한(선택, 기본 = photo 장면 수 × 2, 최대 20)
- assets: 이미 확보한 "media:<장면>" 은 다시 찾지 않는다.

[할 일]
대상 장면: media.type 이 "photo" 이고 assets["media:<장면id>"] 가 없는 장면. 하나도 없으면 도구를 부르지 않고 photoStats 만 더해 내보낸다.

1. 권리 확인
   - scene.media.photo.assetId 가 있으면 get_asset 으로 확인해 회원 이미지면 그대로 쓴다(검색하지 않는다).
   - input.photo_rights_confirmed 가 true 가 아니면 인터넷 사진을 검색·가져오지 않는다. 남은 대상 장면을 모두 mediaMissing 에 {"scene": 장면id, "type": "photo", "reason": "실사진 사용 권리 확인 안 됨"} 으로 적고 끝낸다.
   - scene.media.photo.url 이 있으면 그 주소는 참고만 한다. photo_fetch 는 이 프로젝트의 photo_search 결과 주소만 받으므로, 대상을 검색한 결과에서 같은 주소나 가장 맞는 사진을 고른다.

2. 무엇을 찾는지 정한다(장면마다, 출력하지 않는 메모)
   - 목표 대상: 장면 발화와 purpose 가 말하는 사건의 실제 대상 하나 — 실제 인물(공개된 공인·당사자), 정확한 사건 현장, 사건 당시 장면, 구조·수색·수사·재판 장면, 핵심 물증·잔해, 추모 현장.
   - 목표가 아닌 것: 사건이 일어난 동네·지역·국가의 일반 풍경, 인물의 고향·출신지, 그 사건에 실제로 쓰이지 않은 같은 종류의 차량·배·비행기·장비, 비슷하게 생긴 다른 인물. 이런 장면이면 검색하지 말고 mediaMissing(사유 "사건과 직접 연결된 사진 대상이 아님")으로 AI 이미지에 넘긴다.
   - 시대·장소·인물 조건: 연도·계절·나라·복장·장비가 발화와 맞아야 한다.

3. 검색(photo_search — 검색 1회마다 비용이 든다)
   - 첫 검색어: scene["x-search"].query, 없으면 research.mediaLeads.photoQueries 에서 이 장면 대상과 같은 것, 그것도 없으면 대상·장소·시대를 담은 3~6 단어(예: "1912 Titanic lifeboat Carpathia photo", "삼풍백화점 붕괴 현장 1995"). 인물이면 "이름 + 역할/사건", 현장이면 "사건명 + 장소 + 연도".
   - 결과가 비었거나 1차 거르기 뒤 후보가 없으면 두 번째 검색어(x-search.alt, 또는 한국어 ↔ 영어로 바꾼 말)로 한 번 더 찾는다. 장면당 최대 2번.
   - 같은 대상을 여러 장면이 쓰면 한 번 검색한 결과를 함께 쓴다(같은 검색어를 다시 부르지 않는다).
   - 이번 실행의 검색 총횟수는 input.photo_search_budget(기본 photo 장면 수 × 2, 최대 20)를 넘기지 않는다. 넘게 되면 남은 장면을 mediaMissing(사유 "검색 한도")으로 둔다.

4. 1차 거르기(가져오기 전, items 의 title·source·page_url·image_url 글자만 보고)
   - 뺀다: 유료 스톡·워터마크 미리보기(shutterstock, gettyimages, alamy, istock, dreamstime, 123rf, depositphotos, adobestock), 동영상 썸네일(ytimg, 유튜브), 밈·합성·일러스트·렌더·"AI generated"·"illustration"·"재현" 표기, 로고·아이콘·지도 캡처, 같은 사진의 중복 주소, 인물 사진인데 다른 사람 이름이 적힌 것.
   - 앞에 둔다: 위키미디어·공공기관·기록보관소·박물관·언론사 기사 원문(page_url 도메인으로 판단).
   - 기사 날짜는 촬영 날짜가 아니다. 제목에 다른 연도·다른 사건이 적힌 사진은 뺀다.
   - 남은 후보를 목표 대상과 가까운 순서로 줄 세운다(최대 5개).

5. 가져오기와 눈으로 보는 검수(장면당 최대 3개 후보)
   - photo_fetch(url=후보 image_url, rights_confirmed=true, label="media:<장면id>") 로 가져온다(무료). 실패하면 다음 후보.
   - 긴 변이 360px 미만이면 쓰지 않는다(탈락 사유 "해상도 낮음"). 16:9 영상에서 긴 변 800px 미만은 다른 후보가 있으면 뒤로 미룬다.
   - review_image(asset_id, criteria) 로 직접 연관성을 판정한다. criteria 는 한국어 600자 안팎으로 아래를 채운다(< > 는 장면 값):
     "이 사진이 다음 장면의 실제 자료로 쓸 수 있는지 판정한다. 장면 발화: <발화 핵심 한 줄>. 찾는 대상: <목표 대상>(시대 <연도·시기>, 장소 <장소>).
      1) 이 사건과 직접 관련된 사진인가 2) 이 장면이 말하는 대상과 맞는가 3) 시청자가 보면 무엇인지 알 수 있는가 4) 식별 가능한 선명도인가(과도한 압축·흐림 아님) 5) 시대·장소·인물이 맞는가(다른 나라·다른 시대·닮은 사람이면 불합격) 6) 사건과 무관한 일반 풍경·같은 종류 다른 장비가 아닌가 7) 합성·AI 생성·일러스트·워터마크가 아닌가 8) 이 사진이 없으면 장면의 정보가 사라지는가.
      불합격: 미성년자 얼굴이 알아볼 수 있게 보임, 성범죄 피해자, 시신·유혈·참혹한 부상, 인물의 존엄을 해치는 장면. 사진 속 읽을 수 있는 글자가 있으면 issues 에 그 글자를 적는다.
      점수 0~10, 7점 이상이면 합격."
   - score 7 이상이고 pass 면 채택한다. 아니면 issues 를 탈락 사유로 적고 다음 후보를 본다. 3개를 봐도 없으면 mediaMissing(사유 "직접 연관 사진 없음")으로 둔다.
   - 가져온 뒤 쓰지 않은 사진은 기록만 하고 다시 쓰지 않는다.

6. 한 사진은 한 장면에만 쓴다(같은 image_url·asset 을 두 장면에 배정하지 않는다). 사진은 자르거나 보정·편집하지 않는다(움직임은 뒤 단계의 켄번즈가 맡는다).

7. 기록
   - 채택: assets["media:<장면id>"] = asset_id.
   - credits 에 {"scene": 장면id, "source": "photo", "title": 사진 제목, "author": 출처(source), "url": page_url, "license": "회원 권리 확인"} 을 더한다.
   - photoLedger 에 장면마다 {"scene": 장면id, "target": "찾은 대상", "queries": ["…"], "chosen": {"assetId": …, "imageUrl": "…", "pageUrl": "…", "source": "…", "width": …, "height": …, "score": …, "visibleText": ["…"]} 또는 null, "rejected": [{"url": "…", "reason": "…"}](최대 5개)}.

[출력]
다음 최상위 필드만 담은 JSON 객체 하나(적지 않은 최상위 필드는 입력값이 그대로 이어진다. 바꾸는 필드는 값 전체를 적는다).
- assets: "media:<장면id>" 키를 더한다(기존 키는 모두 그대로).
- mediaMissing: 기존 mediaMissing 가운데 이번에 확보한 장면을 뺀 것 + 이번에 못 찾은 photo 장면
- credits: 기존 credits 뒤에 이번 기록을 더한 배열
- photoLedger: 이번 실행의 사진 원장
- photoStats: {"target": 대상 장면 수, "found": 확보 수, "missing": 못 찾은 수, "searches": photo_search 호출 수, "reviewed": review_image 호출 수}

[주의]
- 회원이 권리를 확인하지 않았으면 인터넷 사진을 절대 가져오지 않는다(photo_fetch 의 rights_confirmed 를 임의로 true 로 쓰지 않는다).
- photo_search 는 검색마다, review_image 는 판정마다 비용이 든다. 위 횟수 한도를 지키고 같은 인자로 다시 부르지 않는다.
- 일반인 피해자·가해자·목격자는 신원과 얼굴이 이미 공개적으로 보도된 경우에만 쓴다. 미성년자의 알아볼 수 있는 얼굴은 쓰지 않는다.
- 설계도(blueprint)는 바꾸지 않는다. 못 찾은 장면은 다음 이미지 단계가 키프레임으로 AI 이미지를 만든다.
- 설명·마크다운 없이 JSON 객체 하나만 답한다.

버전 기록 1개

고칠 때마다 새 버전으로 쌓이고 지난 버전은 지워지지 않습니다. 패키지는 넣을 때의 버전으로 고정되어 동작합니다.

  1. v1현재2026.09.29 14:57 · 8.6KB

    시스템 모듈 등록

이 모듈을 쓰는 패키지

리뷰와 반응

불러오는 중…

사용 -건 · 사용 건수는 이 모듈을 실제로 실행한 제작 수입니다(성공률이 아닙니다). 별점은 실제 사용한 회원만 남길 수 있고, 좋아요·싫어요와는 따로 셉니다.

    신고하기

    신고하신 분의 정보는 작성자에게 알리지 않습니다. 접수만으로 제재가 확정되지는 않습니다. 결과 불만·환불은 1:1 문의로도 알려 주세요.