← 카탈로그
스킬curated

idol-reels

 

유스매거진(YOUWS MAGAZINE, @youwsmag) 아이돌 카드뉴스를 9:16 인스타 릴스로 변환. 카드 디자인(YOUWS·BREAKING·챠이론·티커)을 투명 오버레이로 뽑고, 페이지마다 그 아이돌의 영상 클립(공식 MV + 공식 IG)을 배경으로 깔아 하나의 세로 영상으로 합성. 트리거: "아이돌 릴스", "릴스로 만들어", "릴스화", "<그룹> 릴스", "카드뉴스 영상으로", "유스매거진 릴스", "릴스로도". 카드뉴스가 이미 있으면 그걸 영상화, 없으면 idol-cardnews 먼저. 발행(업로드)은 포함 안 함 — 승준 컨펌 게이트.

#video#design#marketing

다음 행동

/idol-reels

이럴 때 켜진다

“아이돌 릴스”“릴스로 만들어”“릴스화”“<그룹> 릴스”“카드뉴스 영상으로”“유스매거진 릴스”
기술 README 원문 보기

설치 옵션, 예시 코드, 세부 사용법을 영어 README 원문 그대로 확인합니다.

idol-reels — 유스매거진 아이돌 릴스 PD

> 코르티스 1호(2026-06-18)에서 정제. 카드뉴스 디자인을 투명 오버레이로 재활용 + 아이돌 영상 배경 합성. 코드는 build_reel_template.py. 정적 카드는 [idol-cardnews] 스킬과 같은 CARDS/CSS 공유.

0. 정체

카드뉴스 8장 → 9:16 릴스(1080×1920) 1개. 페이지마다 디자인은 고정, 배경만 아이돌 영상이 움직임. 24초(8×3초), 무음(음악은 인스타 인앱에서). 출처는 캡션·티커.

1. 워크플로우

  1. 전제: 카드뉴스가 이미 있어야 함(같은 그룹). 없으면 [idol-cardnews] 먼저. build_reel_template.py는 그 build.py의 CARDS/CSS를 그대로 쓰되 1920 투명 오버레이로 출력.
  2. 영상 추출 (media-extractor):
  • 공식 MV·트레일러·고조회수 영상(유튜브, 화질 최우선) 위주 — 표지/무대/임팩트용. (16:9 가로 = 크롭 필요) 1080p↑, 가능하면 4K.
  • 공식 IG 영상/릴스 보조 — 일상·비하인드·무대. (대개 9:16 세로 = 크롭 거의 불필요)
  • 🚫 저화질 금지(2026-06 선민 확정): 화질 떨어지거나 임팩트 약한 소스 쓰지 말 것. 뮤비·트레일러·조회수 많은 영상에서 가져온다. 업스케일된 저해상도(예 608폭)도 가급적 피함.
  • 후킹 우선: 각 컷이 "넘기지 않고 보게" 만드는 임팩트(무대 킬링파트·표정·반전 장면) 위주로 선별.
  • 저장 10_outputs/media/<group>_video/, manifest에 소스 URL·길이·해상도·가로/세로 비율 기록.
  • 공백 없는 클린네임으로 clips/에 하드링크(ffmpeg 편하게).
  1. 오버레이 생성: build_reel_template.py → overlay_01~08.png (1080×1920 투명). Chrome 렌더에 --default-background-color=00000000 --force-device-scale-factor=1 필수.
  2. 구간·클립 매핑: 8장 = 8개 클립(가능하면 다 다른 소스). 각 클립에서 멤버 얼굴 잘 나온 구간을 프레임 샘플링(컨택트시트)으로 골라 offset 정함.
  3. 세그먼트 합성: 클립 9:16 커버크롭 + 오버레이 합성, 3초씩. concat → 릴스.
  • 🚫 중간 컷전환 영상 금지(2026-06 선민 확정): 3초 창 안에서 장면이 바뀌는(다른 컷으로 점프) 클립은 쓰지 않는다 — 난잡해 보임. 한 컷이 연속 3초 유지되는 구간만 채택(MV는 컷이 빠르니 §3대로 미세스캔·슬로우·분할로 해결).
  • 색감 다양(2026-06 선민 확정): 릴스 전체에 붉은 톤·노란 톤·푸른 톤 등이 골고루 들어가게 클립을 안배. 비슷한 톤만 연속 금지 — 검수 몽타주로 색 분포 확인.
  • 글과의 연관성: 각 컷은 그 카드 텍스트와 연결되게(곡 얘기=그 곡 MV, 멤버 얘기=그 멤버 컷).
  1. 검수: 구간별 프레임 뽑아 ① 얼굴이 상단 버그·하단 챠이론에 안 가리는지 ② 블러·잘림·중간 컷전환 없는지 ③ 얼굴이 너무 위로 떠 답답하지 않은지(→ 바이어스↓) ④ 마지막 컷이 모션 도중 뚝 끊기지 않는지(→ 페이드아웃) ⑤ 색감이 다양한지(붉은/노란/푸른) 확인. 안 되면 그 세그먼트만 재조정·재concat.
  2. 산출: YOUWS_<group>_릴스.mp4. open으로 띄움.
  3. 게시: ⚠️ 컨펌 게이트. 무음이므로 인스타 인앱에서 음악 입힘. 승준 승인 후 instagram(릴스) 업로드. 무음 릴스는 폰 앱 게시 권장(인앱 음악). 웹 게시 시 무음 그대로 박힘 — 선민에게 확인.
  4. 🖼 릴스 커버 변환(2026-06 선민 확정 — 모든 과정 후 필수): 카드뉴스 1페이지를 릴스용 커버 still(9:16, 1080×1920)로 변환해 채팅에 보낸다. 카드1 배경사진(4:5)을 세로 풀·좌우 센터크롭으로 9:16 만들고 cover 오버레이 합성. 스니펫은 §5.
  5. 해시태그: 캡션 본문에 넣지 말고 30개 별도로 선민에게 보냄(멤버 한/영 + 해외 유입 키워드, [idol-cardnews] §5 규칙 동일).

2. 디자인 변경 (릴스 전용, build_reel_template.py에 반영됨)

  • 캔버스 1080×1920, .card/html,body 투명(background:transparent), card_html에서 배경이미지 제거.
  • 하단 텍스트 블록 위로: .mid/.cover/.cta .lt {{ bottom:250px }} — 폰 가독 + 인스타 하단 UI(캡션·버튼) 세이프존.
  • 티커는 마지막(cta) 장만, bottom:172px로 올림. 화면 출처(.src)는 빼고 캡션으로.
  • 표지: YOUWS|MAG 버그 + CORTIS + BREAKING + 챠이론 + "넘겨보기 →". 나머지 동일.

3. 영상 프레이밍 규칙 (이번에 배운 핵심)

> 목표: 멤버 얼굴이 상단 좌측 CORTIS 글자와 하단 챠이론 둘 다에 안 가리게.

  • 커버크롭 기본: scale=1242:2208:force_original_aspect_ratio=increase,crop=1080:1920:(iw-1080)/2:(ih-1920)*B — 1242×2208(=9:16 약 15% 줌)로 커버 후 1080×1920 잘라냄. B=세로 바이어스.
  • 세로 바이어스 B: 크면 피사체 위로, 작으면 아래로. (B=0.60 기본)
  • 얼굴이 하단 챠이론에 가리면 → B 키워 위로(또는 줌↑).
  • 얼굴이 상단 CORTIS에 가리면 → B 줄여 아래로, 줌도 줄임(scale을 1080:1920 커버로 = 추가줌 X).
  • 과하게 올리면 얼굴이 프레임 밖으로 잘려 안 보임 — 적당히.
  • 소스 자체에서 피사체가 프레임 위/아래 치우쳐 있으면 바이어스로 한계 → 줌·offset·클립을 바꾼다.
  • 얼굴이 계속 위에 떠서 안 내려갈 때(2026-06 학습): B를 더 과감히 낮춘다 — B=0.40으로 부족하면 0.05~0.0까지. (B=0.05면 크롭창이 소스 최상단 → 위 헤드룸 다 보여주고 얼굴이 아래로 내려옴.)
  • 세로 클로즈업·근사 정사각(예: IG 720×960) 소스 주의: 9:16 커버 시 줌 배율이 2.3x로 크게 튄다 → 얼굴이 꽉 차서 답답. 바이어스만으론 한계 → ① 추가줌 빼고 scale=1080:1920:force_original_aspect_ratio=increase(커버만, 추가줌 X)로 줄이거나 ② 더 헐겁게 잡힌 클립으로 교체.
  • 16:9 MV는 센터크롭 시 좌우가 잘림 — 지명된 멤버가 안 보이면 풀프레임(크롭 전) 확인(가장자리에 있을 수 있음), 필요시 x오프셋으로 그 멤버 쪽 크롭.
  • MV는 컷이 빠름(~2초) — 깨끗한 3초가 안 나오면:
  • 좋은 2초를 **슬로우(setpts=배수*PTS)**로 3초로 늘리거나,
  • 한 구간을 두 클립으로 분할(예: 표지 = 클립A 1초 + 클립B 2초)해 concat.
  • 블러·로고/사물 컷·동전구 같은 구간 회피: offset을 프레임 샘플로 검증하고 잡는다.
  • 클립 내부 컷 주의: 한 클립 안에서도 장면이 바뀌는 컷이 있으면 3초 창이 컷을 가로질러 난잡해진다. offset 후보 구간을 0.5~0.7초 간격 프레임으로 미세 스캔해 컷 없는 연속 3초를 잡는다.
  • 마지막(cta) 세그먼트 엔딩(2026-06 학습): 댄스·모션 도중 영상이 뚝 끊기면 "난잡"하게 보임. 마지막 세그먼트에 0.5초 페이드아웃으로 깔끔히 닫는다 — 오버레이 합성 필터 끝에 ,fade=t=out:st=2.5:d=0.5 추가(3초 세그 기준). 텍스트·티커까지 함께 페이드 = 의도된 아웃트로.

4. 제작 규율

  • 항상 프레임 샘플 먼저(컨택트시트) → offset/크롭 확정 후 인코딩. 추측 인코딩 금지.
  • 멤버 얼굴↔이름은 추정 금지 — 사용자에게 "이 중 누가 ○○?" 물어 확정. 사용자가 타임스탬프 주면 그 구간 블러/가림/잘림 검증 후 사용(문제 있으면 알리고 대안 제시).
  • 한 구간 고치면 그 세그먼트만 재생성 후 재concat(전체 재인코딩 X).

5. 핵심 스니펫

오버레이 렌더(투명 1920):

CHROME="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
for i in 01 02 03 04 05 06 07 08; do
  "$CHROME" --headless=new --disable-gpu --hide-scrollbars --force-device-scale-factor=1 \
    --window-size=1080,1920 --default-background-color=00000000 \
    --screenshot="overlay_${i}.png" "overlay_${i}.html" >/dev/null 2>&1
done

세그먼트 합성(클립+오버레이, 3초) — zsh 배열은 1-인덱스 주의, 클립은 절대경로:

V=/abs/path/<group>_video/clips
CLIP=(c1 c2 c3 c4 c5 c6 c7 c8); OFF=(55 95 2 115 10 3 1 2)   # zsh: ${CLIP[1]}..[8]
for i in 1 2 3 4 5 6 7 8; do printf -v ii "%02d" $i
  ffmpeg -y -ss ${OFF[$i]} -t 3 -i "$V/${CLIP[$i]}.mp4" -i "overlay_${ii}.png" \
   -filter_complex "[0:v]scale=1242:2208:force_original_aspect_ratio=increase,crop=1080:1920:(iw-1080)/2:(ih-1920)*0.60,setsar=1,fps=30[bg];[bg][1:v]overlay=0:0,format=yuv420p[v]" \
   -map "[v]" -an -c:v libx264 -crf 20 -pix_fmt yuv420p -t 3 "/tmp/segs/seg_${ii}.mp4"
done
printf "file '/tmp/segs/seg_%02d.mp4'\n" 1 2 3 4 5 6 7 8 > /tmp/segs/list.txt
ffmpeg -y -f concat -safe 0 -i /tmp/segs/list.txt -c copy "YOUWS_<group>_릴스.mp4"

마지막(cta) 세그먼트는 페이드아웃으로 닫기 — filter 끝 format=yuv420p 뒤에 ,fade=t=out:st=2.5:d=0.5 추가:

ffmpeg -y -ss ${OFF[8]} -t 3 -i "$V/${CLIP[8]}.mp4" -i "overlay_08.png" \
 -filter_complex "[0:v]scale=1242:2208:force_original_aspect_ratio=increase,crop=1080:1920:(iw-1080)/2:(ih-1920)*0.55,setsar=1,fps=30[bg];[bg][1:v]overlay=0:0,format=yuv420p,fade=t=out:st=2.5:d=0.5[v]" \
 -map "[v]" -an -c:v libx264 -crf 20 -pix_fmt yuv420p -t 3 "/tmp/segs/seg_08.mp4"

한 세그먼트를 두 클립으로(표지 분할 예):

# A 1초 + B 2초 → bg concat → 오버레이
ffmpeg -y -ss 55 -t 1 -i "$V/A.mp4" -vf "$CROP" -an -c:v libx264 -crf 20 /tmp/ba.mp4
ffmpeg -y -ss 72 -t 2 -i "$V/B.mp4" -vf "$CROP_lower" -an -c:v libx264 -crf 20 /tmp/bb.mp4   # CROP_lower=바이어스/줌 다르게
printf "file '/tmp/ba.mp4'\nfile '/tmp/bb.mp4'\n" > /tmp/bg.txt
ffmpeg -y -f concat -safe 0 -i /tmp/bg.txt -c copy /tmp/bg.mp4
ffmpeg -y -i /tmp/bg.mp4 -i overlay_01.png -filter_complex "[0:v][1:v]overlay=0:0,format=yuv420p[v]" -map "[v]" -an -c:v libx264 -crf 20 -t 3 /tmp/segs/seg_01.mp4

슬로우로 3초 채우기: 입력 -ss T -t 1.7, 필터 앞에 setpts=1.765*PTS, 추가.

프레임 컨택트시트(offset 고르기): 각 후보 t에서 위 크롭으로 1프레임 추출 → hstack/tile로 묶어 눈으로 확인.

🖼 릴스 커버 still(카드1 → 9:16, 모든 과정 후 필수) — 카드1 배경사진(4:5) 세로 풀·좌우 센터크롭 + cover 오버레이 합성:

ffmpeg -y -i provided/cover_hero.png -i overlay_01.png \
 -filter_complex "[0:v]scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920:(iw-1080)/2:(ih-1920)/2,setsar=1[bg];[bg][1:v]overlay=0:0[v]" \
 -map "[v]" -frames:v 1 reel_cover.png
  • 4:5→9:16은 세로가 다 보이고 좌우만 잘림 → 보통 세로 바이어스 불필요(센터). 검수 후 채팅으로 전달.
  • overlay_01의 "넘겨보기 →"가 거슬리면 빼고 재렌더(릴스엔 스와이프 없음).

6. 캡션·톤 (카드뉴스와 동일)

  • 간략 에디터식 4~6줄 + 유스매거진 언급 1문장. 출처© 줄·해시태그는 캡션에 넣지 않음. 상세는 [idol-cardnews] §4.

7. 가드

  • 외부 게시는 승준 명시 승인 후에만. 무음 출력(곡 임베드 X, 저작권) — 음악은 인앱.
  • 아이돌 영상 = 소속사 저작권물. 출처표기·비상업 한정, 게시 전 리스크 1회 재확인.
  • 사실/멤버 식별 불명은 사용자 확인 또는 [확인필요].

연계

  • 정적 카드: [idol-cardnews] (같은 디자인 정본 build_template.py).
  • 1호 산출: uselessops/10_outputs/media/cortis_cardnews/YOUWS_코르티스_릴스.mp4, 오버레이 빌더 build_reel.py, 영상 ../cortis_video/.

이것도 같이 보면 좋다

같은 업무 태그와 카테고리가 겹치는 항목부터 보여줍니다.

스킬운영자 실사용

product-launch-video

Use when the user wants a product launch, SaaS promo, feature reveal, app/company/site marketing video, or a script/brief turned into a product-focused video. Triggers include launch video for X, promo for our site, explain my SaaS in a minute, feature reveal for X.com, and turn this script into a 60s promo. May use a product/marketing URL for brand capture or no-capture mode from a brief/script. Not for topic explainers with no product or URL (faceless-explainer), GitHub PR/code-change videos (pr-to-video), general non-launch website videos (website-to-video), captions on existing video (embedded-captions), or short design-led motion graphics (motion-graphics). When product-vs-topic or launch-vs-general-site is unclear, do not assume — start at /hyperframes-read-first.

 무료
#video#design#web
스킬운영자 실사용

cardnews-pd

인스타그램 카드뉴스(캐러셀) 제작 PD. 주제/링크 한 줄 → 용어학습→의도·톤→8장 구성→HTML 디자인→PNG 8장(ZIP)까지 대화창 하나로. "카드뉴스 만들어", "캐러셀", "인스타 카드뉴스", "카드뉴스 PD", "슬라이드 8장" 트리거. 동테크 4-명령 방법 + 유슬레스서울 B&W 모노톤 가드 내장. 발행(업로드)은 포함 안 함 — 컨펌 게이트.

 70%99,00029,900원
#design#web#marketing
스킬운영자 실사용

general-video

Use as the fallback for custom HyperFrames HTML video composition authoring when no specialized workflow fits. Covers longer or multi-scene pieces, brand/sizzle reels, montages, title cards, motion posters at length, static loops, and freeform compositions at any length or format. Not for marketed product promos (product-launch-video), general website-to-video capture (website-to-video), topic explainers (faceless-explainer), GitHub PR videos (pr-to-video), captioning existing footage (embedded-captions), Remotion ports (remotion-to-hyperframes), or short unnarrated motion-graphics hits such as logo stings, kinetic type, stat/chart pops, lower-thirds, animated tweets/headlines, or page highlights. If a specialized workflow clearly fits the input, prefer it (see /hyperframes-read-first); use this only as the input/length-agnostic fallback.

 무료
#video#design#web