Communitygithub.com

real-sfx

모션 비디오를 위한 실제 녹음된 사운드로 사운드 디자인합니다. 사용자 라이브러리의 정렬된 메인 팩(휘파람, 히트, 라이저, 팝, 차임, 키스트로크, 폴리, 앰비언스 및 폴백 라이브러리)과 uisfx의 UI 큐를 사용하며, 합성음을 사용하지 않습니다.

real-sfx란 무엇인가요?

real-sfx는 모션 비디오에 현실적이고 고품질의 사운드 효과를 추가하기 위한 AI 에이전트 스킬입니다. 이 스킬은 합성음을 완전히 배제하고 사용자가 제공한 실제 녹음 라이브러리와 CC0 라이선스의 uisfx 인터페이스 사운드 팩만을 사용합니다. 동영상의 큐 리스트, 합성 스크립트, HyperFrames 컴포지션, 화면 녹화(타이핑, 토스트, 스크롤, 클릭 영역), 또는 동영상 자체에서 사운드가 필요한 순간을 자동으로 감지하고, 적절한 사운드를 선택 및 처리하여 정확한 프레임에 배치합니다. 음악과 음성은 유지하면서 기존에 합성되어 렌더링된 오디오 레이어는 제거합니다. 최종 출력은 새로운 MP4 파일, 분리된 SFX WAV 트랙, 큐 리포트, 그리고 자체 비평 점수판을 포함합니다. 이 스킬은 Claude Code, Cursor, Codex와 같은 AI 코딩 에이전트와 호환되며, 사용자가 '사운드 이펙트 추가', '사운드 디자인', 'SFX', '휘파람/히트/클릭/타이핑 소리', 'UI 사운드', '합성음 대체' 등을 요청할 때 자동으로 실행됩니다.

지원 대상✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/SallyRS/video-director/tree/HEAD/skills/video-director/real-sfx

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

real-sfx: 모션 비디오를 위한 실제 사운드

목표: 영화가 좋은 라이브러리를 가진 사람이 편집한 것처럼 들리게 하는 것입니다. 따라서:

  • 사운드는 절대 합성되지 않습니다. 출처: 사용자 라이브러리(config.json) 및 uisfx(인터페이스 사운드의 CC0 팩, 자체는 합성음, 인터페이스 순간에만 예외적으로 사용됨; "합성 금지"는 이를 비활성화함: --ui library). 적합한 사운드가 없을 경우: 해당 순간은 조용히 남고 보고서에 기록됩니다. 이는 motion-standards의 "트랙 없음: 합성"을 무효화합니다.
  • 들을 수 없습니다. 사운드는 숫자, 단어 및 그림으로 읽힙니다(references/listening.md). '들은' 선택을 제시하지 말고: 눈과 측정으로 확인된 것과 사용자가 들어야 할 것을 말하십시오.
  • 음악과 음성 유지 영화를 전달할 때. 결과는 항상 새로운 MP4 와 별도의 WAV 트랙입니다.
  • 이중으로 넣지 마십시오. 렌더 오디오에 베이크된 합성음은 실제 사운드로 대체되며 그 아래에 레이어되지 않습니다(1단계). 비평은 이를 숫자로 측정합니다(doubling 축).
  • 프로젝트나 스킬 폴더를 변경하지 마십시오. 모든 작업 파일은 자신의 폴더(work/, result/)에 넣으십시오.

Video Director 내부

(Video Director의 복사본에 추가됨; Clipwing의 원본에는 없음. UPSTREAM.md는 모든 변경 사항을 나열합니다.) 이 복사본은 Video Director 스킬 내부에 있으며 Sound 스테이지에 의해 실행됩니다: ../references/sound-stage.md, "Sound engineering". 해당 단계는 어떤 순간에 사운드가 필요한지 결정하고, 이 스킬에 그것들만 제공하며(build/audio/sfx/events.json), 사용자가 선택한 녹음을 고정하고(sound_handoff.py pins), --ui library, --no-loudnorm 및 텍스처 레이어나 베드 없이 실행하며, 효과 트랙과 해결된 큐만 다시 가져옵니다(sound_handoff.py collect). 해당 단계를 따르고, 이 파일은 그들이 다루지 않는 옵션에 대해서만 읽으십시오. REAL_SFX_CONFIG, REAL_SFX_INDEX, REAL_SFX_TASTE, REAL_SFX_RATINGS, REAL_SFX_STEADY 및 REAL_SFX_STYLES를 ~/.config/real-sfx/ 아래의 경로로 설정하고(플러그인은 각 버전을 새 폴더에 설치하므로 여기에 작성된 모든 것은 다음 업데이트 시 남겨짐), --remember를 사용하지 마십시오(이 폴더에 기록함, learn_style.py도 마찬가지: 학습된 스타일을 ~/.config/real-sfx/styles/로 복사하십시오).

빠른 경로

먼저 python scripts/setup.py check (ffmpeg, 메인/추가 라이브러리, 인덱스, uisfx) 및 python scripts/look.py FILM.mp4 --out work/look (시간이 표시된 프레임 + 그 아래 원본 사운드). 그런 다음, 무엇을 가지고 있느냐에 따라:

# 1. 프로젝트에 이벤트 목록(docs/cues.json, scripts/cues.json) 또는 사운드를 합성하는 스크립트(audio.cjs)가 있음
python scripts/from_cues.py PROJECT_FOLDER|docs/cues.json --video RENDER.mp4 --out work/cues.json
# 2. 목록 없는 화면 녹화: ui_events.py ... (references/screencast.md), 그런 다음 from_cues.py work/ui/events.json
# 3. 그림만:                    find_moments.py FILM.mp4 --out work/moments; suggest_cues.py work/moments/moments.json --out work/cues.json
# 3b. 소프트 컬러 애니메이션, 목록 없음(UI 미리보기, 일러스트레이션, 모션 그래픽): 자동화는 40개의 움직임 중 5-6개를 봅니다.
#     2단계, "목록 없는 무음 애니메이션": find_moments.py FILM --out work/moments --fine; look.py FILM --at T --span 2.4
#     --step 0.1 --out work/at.png; YOUR OWN event list from the frames (references/typed-cues.md) -> from_cues.py - --ui library
python scripts/mix.py work/cues.json --out result/film_sfx.mp4 --plan     # 무엇이 어디로 가는지 확인; 그런 다음 --plan 없이
python scripts/critique.py result/film_sfx_resolved_cues.json result/film_sfx_sfx_track.wav
python scripts/levels.py   result/film_sfx_resolved_cues.json result/film_sfx_sfx_track.wav --json work/edits.json
# SFX만 있는 영화(자체 음악이나 음성 없음): 구멍에 작은 소리, 그런 다음 mix.py 다시(4단계, "작은 소리 레이어")
python scripts/texture.py work/cues.json --moments work/moments/moments.json
# 같은 영화: 베드(영화 전체 아래 하나의 긴 어두운 실제 녹음; 4단계, "베드"), 그런 다음 mix.py 다시
python scripts/bed.py work/cues.json [--list]
# 9개의 완성된 SFX 릴에 대한 숫자(6단계, "참조 대비"): 점수 없음, 평결에 영향을 미치지 않음
python scripts/critique.py RESOLVED.json WAV --style clean-sfx-refs
# 저렴한 인간 귀(6단계): 비평의 질문과 한 번의 탭 평결이 있는 페이지; 마스킹 모델
python scripts/listen_page.py build work/listen --moments result/film_sfx.mp4 --critique RESOLVED.json WAV
python scripts/listen_page.py serve work/listen [--lan]        # 그런 다음: listen_page.py results work/listen --log
python scripts/mix.py work/cues.json --out result/film_sfx.mp4 --masking        # 나머지가 숨기는 소리(venv 필요)

프로젝트 폴더는 자체 이벤트 목록(docs/, scripts/, assets/)을 찾습니다; 합성 스크립트는 목록이 없을 때만 읽힙니다. 시트를 편집하기 전에 모든 from_cues.py 플래그를 선택하십시오: 다시 실행하면 수동 편집이 지워집니다(그런 다음 sheet.py apply). 영화의 음성: mix.py ... --voice-safe (깊이 normal; 조용한 텍스처가 많을 때 --voice-depth light, 음성은 일시 중지의 드문 소리에만 deep: 인터페이스를 믹스에서 완전히 제거). 음악이 영화를 전달함: --duck. 음량: 재구축된 베이스는 기본적으로 원본과 일치함; 직접 설정: --target-lufs NUMBER. 인덱스 없음 또는 라이브러리 이동됨: python scripts/build_index.py, 그런 다음 python scripts/listen.py tag-index. uisfx 없음: setup.py init --uisfx. 다른 기기: setup.py scan FOLDER, setup.py add-library NAME PATH [--tier main|extra] --index. 스킬 폴더에서 스크립트 실행; 경로에 공백이나 비라틴 문자가 있으면 따옴표 사용; Windows에서 비라틴 경로가 있는 자체 Python: PYTHONUTF8=1. PowerShell에서 따옴표는 JSON 인수를 깨뜨림: 파일에 넣으십시오.

사운드 출처

필요한 것출처
기본: 휘파람, 히트, 라이저, 팝, 차임, 키, 종이, 폴리, 앰비언스메인 라이브러리 (tier: main, config.json의 경로). catalog.json / catalog.csv가 있는 정렬된 팩은 각 사운드에 유형과 소스 녹음을 제공하여 파일 이름에서 추측하는 것을 피합니다
메인 라이브러리에 없는 것: 낮은 드롭, 동전, 짧은 글리치폴백 라이브러리 (tier: extra, 결과에 ~ 표시): 메인 라이브러리에 적합한 사운드가 3개 미만일 때만
자체 역할이 있는 디자인된 팩역할 granular, atmosphere, power, music_transition, voice는 자동 선택에서 절대 요청되지 않음: 명시적으로 가져오기(--role, "pick": {"role": ...})
인터페이스 순간: 클릭, 틱, 창, 알림uisfx (--ui auto) 목록 자체가 인터페이스 종류를 명명할 때(click, chime...): from_cues는 이유와 위치를 말함(routes: key -> library:click, pop -> uisfx:select)
타이핑항상 라이브러리의 실제 키보드, --ui auto에도; from_cues 자체가 35–170 ms 간격의 8개 이상의 click 이벤트 실행을 타이핑으로 인식함(--no-typing-detect)
물리적 접촉: 공, 발걸음, 구슬, 물체항상 라이브러리: 바닥의 공은 select가 아닌 둔탁한 쿵(아래 레시피)

아직 라이브러리 없음: setup.py init --uisfx만으로 78개의 CC0 UI 큐 제공. 확인할 가치가 있는 무료 실제 녹음 소스(각 라이선스 읽기): Freesound (CC0 필터), Sonniss GDC 번들, Mixkit, Pixabay sound effects.

"내 라이브러리에서", "합성 금지" 또는 "합성음 같음": --ui library. uisfx 인터페이스 사운드가 있는 프로젝트의 로고 강조 또는 "차잉" 소리: --from-library pop,bell (목록의 종류 이름); 한 사운드: sheet.py set --at T --label bell id=65. 음조가 있는 음악 아래:

  • uisfx 반복 및 라이브러리의 음조 사운드(chime, pop, glass, coin)의 피치 단계는 프로젝트에 악보가 있을 때 자동으로 꺼짐(--ui-pitch off|cycle);
  • 실제 사운드의 피치는 음악의 음표에 맞춰 조정됨: mix.py는 시트의 music_ref(효과 없는 베드, 음악 스템) 또는 --music-ref FILE을 가져와 음조 사운드를 전체 음정 단위로 최대 2, 음표에 놓는 센트(총 2.5)만큼 이동시킴, 음표에 놓이는 경우; 노이즈는 그대로 둠(--no-tonal-fit; scripts/tonal.py SOUND --music FILE --at T는 음표를 표시함);
  • 작성자 고유 주파수의 간격(tick(t, 1800 * 2 ** (4 * i / 12)))은 대체의 피치 단계가 됨(melody:).

워크플로

1. 사운드에 이미 있는 것

look.py는 기본 사운드의 스펙트로그램을 표시함(음성은 구문의 띠, 음악은 비트가 있는 카펫, 무음은 검정); listen.py voice FILM.mp4는 음성과 음악의 비율을 제공함. 세 가지 경우:

  • 작성자의 음악 또는 음성: 유지, SFX는 위에 감(--duck / --voice-safe). 예외 (실제 영화에 대한 사람의 답변, 2026-10-19): 영화가 "사운드 디자인을 위해" 보내졌고, 기본 사운드는 음악만임(listen.py voice: 음성 0 %), 그리고 그 사람이 음악 없이 자신의 깨끗한 SFX 릴처럼 원함. 음악 없는 버전 만들기(from_cues.py ... --ui library --drop-original, 그런 다음 bed.py --id ... --level -46 좋아하는 분위기로), 유용하다면 음악 있는 버전도 만들고, 어느 것이 어느 것인지 말하기. 세 가지 맹목 선택(원본 / 음악 위 효과 / 효과만)에서 그 사람은 단 한 번의 불만 없이 마지막 것을 선택함. from_cues는 베이크된 합성이 없음에도 불구하고(음성 0 %, 음악 84 %, 공격이 이벤트와 일치하지 않음: 7 % 대 9 % 우연) BAKED:를 인쇄함: 이는 오경보입니다.
  • 트랙에 베이크된 합성 (프로젝트가 합성 악보용으로 작성됨): 그 위의 실제 사운드는 이중이 됩니다. from_cues.py는 이를 자체적으로 확인하고(BAKED:, unbake:), 음악과 음성을 건드리지 않고 베이스에서 합성을 제거합니다. 정확한 방법과 스크립트가 실패하거나 합성이 음악 스템 내부에 있을 때 할 일(--extra-synth): references/project-audio.md (출력에 BAKED, WARN stems, unbake: not possible이 있거나 프로젝트가 스크립트로 사운드를 합성하는 즉시 읽으십시오). 빌드 후 critique.py는 doubling 축을 인쇄합니다: 원본 및 새 영화와 레이어의 상관 관계(약 0이어야 함).
  • 화면 녹화 창 내부에서 재생되는 클립의 사운드: 기본, 유지; 해당 창 내부의 이벤트는 삭제됨.

2. 순간 찾기 (최상의 소스부터 최악까지)

  • 프로젝트의 이벤트 목록 또는 합성 스크립트 → from_cues.py (아래). 자세히: references/typed-cues.md.
  • 화면 녹화 → references/screencast.md (ui_events.py 영역, 문자에 키스트로크 매칭, 클립 사운드).
  • data-start가 있는 HyperFrames 및 목록 없음: from_hyperframes.py PROJECT --out work/moments.json. 18개 요소가 있는 "1 moments"는 동작이 data-start를 따르지 않음을 의미함: 합성 스크립트를 찾으십시오.
  • 비디오만: find_moments.py FILM --out work/moments [--roi x,y,w,h] [--from A --to B] [--fine]; 종류 cut, burst, onset, settle (settle은 빈 프레임 또는 정지 상태의 루프에서도 작동: 프레임을 보십시오); look.py --moments ...는 모멘트의 프레임을 그림. 뼈대: suggest_cues.py (references/recipes.md); 초안은 시작일 뿐, 답이 아닙니다. **--fine**은 소프트 컬러 애니메이션(그라데이션, 글로우, 밝기보다 색상이 변하는 파스텔 모양)용: 크로마 변경도 읽음, 모멘트는 src=chroma|luma를 얻음; 세 개의 그러한 영화에서 에이전트가 프레임에서 기록한 이벤트의 33–69 %를 찾음(80 ms 이내), 밝기만으로는 13–25 %; 3–4배 더 많은 후보(10초당 15–25). 이들은 후보입니다: 프레임이 결정합니다.
  • 음악 아래: beats.py FILM --out work/beats.json --plot work/beats.png; usable: true와 함께 mix.py --snap-beats (±50 ms). 그리드는 킥에 대해 확인됨(저대역 < 125 Hz 별도): 40 ms 이내에 킥에 몇 개의 비트가 착륙했는지 인쇄합니다. 킥 옆에 있는 그리드(추적기가 하이햇에 앉음, "0.22 s 오프셋")는 그 위로 이동됨; 아무것도 착륙하지 않는 그리드는 usable: false를 얻고 --snap-beats는 무시함. --plot은 밴드, 킥(녹색 표시) 및 그리드(빨간색 선)를 그림: 표시가 선 위에 있거나 그리드를 신뢰하지 마십시오. 음악이 당신 것이고 그림에 맞출 수 있는 경우: beats.py FILM --suggest-offset work/moments.json은 컷과 히트가 비트에 착륙하도록 음악을 얼마나 이동해야 하는지 말함(조언만 제공; 음악은 건드리지 않음).

from_cues.py: python scripts/from_cues.py LIST|PROJECT_FOLDER|SCRIPT.cjs|- --video RENDER.mp4 --out work/cues.json (-는 stdin에서 목록을 읽음; PowerShell의 BOM은 이해됨). 자체적으로 수행하고 말하는 것:

  • 올바른 렌더인가: 목록이 그림을 놓침(VERDICT); 음성에 맞춰진 렌더에 대한 디자인 타임 목록: 프로젝트 앵커의 시간 맵(timing.json with a) ...

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

관련 스킬