소리꽃 KeyBloom 20
소리꽃 KeyBloom 바로가기 ↗
이 글은 소리꽃 KeyBloom 시리즈의 33번째 기록입니다. (총 46개)
오늘 한 일
- 결제·라이선스 백본 — 검증 시크릿(결제사 API 키)을 앱이 아닌 클라우드(Cloudflare Worker)에 숨기는 프록시 + 앱 쪽 실검증(활성화·재검증·해제, 오프라인 유예)
- 자동 업데이터 — Tauri plugin-updater 배선 + 서명 키쌍 생성·공개키 등록(새 버전이 나오면 앱이 확인·설치·재시작)
- 브랜드 색을 로즈핑크(#ff1763)로 — 강조색·삭제(빨강으로 분리)·파티클 기본 그라데·건반 눌림 색까지
- 투명 배경(알파) 영상 내보내기 완성 — PNG 이미지 시퀀스(ffmpeg 불필요) + 단일 파일 Ut Video(ffmpeg가 그 PNG를 묶음) + 라이브 모드도 같은 경로. WebM(편집툴이 못 읽음)은 제거
- 안 쓰게 된 실시간 녹화(WebM) 경로의 죽은 코드 정리(-81줄)
- 로딩·저장 진행 표시 개선(멈춰 보이는 구간에 계속 도는 shimmer + 단계 문구), PRO는 광고가 없으니 그 자리를 시퀀서에 줌
- 버그 정리 — 프로젝트 저장 팝업, 큐 재정렬 시 첫 구간 번호, 빈 팔레트 크래시 방어
- 다듬기 — PRO 잠금 배지 컴포넌트화, 흰 배경 위 발광 색 유지, 크레딧을 버튼 토글로
막힌 부분
편집툴이 읽는 투명 영상을 브라우저 인코더 없이 뽑기
편집툴이 네이티브로 읽는 알파(투명) 포맷은 사실상 ProRes뿐인데, 브라우저엔 그 인코더가 없다. 유료 제품이라 미인가 코덱을 쓰기도 부담스러웠다. 그래서 두 갈래로 풀었다.
먼저 ffmpeg 없이 확실한 폴백 — 각 프레임을 투명 PNG로 폴더에 쓰고 오디오는 옆에 WAV로. 편집툴에서 이미지 시퀀스로 임포트한다.
그다음 단일 파일 — 백로그의 “raw 프레임을 stdin으로 스트리밍” 대신, 이미 쓰고 있는 PNG를 ffmpeg가 다시 읽어 무손실 알파 Ut Video로 묶게 했다. 거대한 RGBA를 IPC로 흘려보낼 필요가 없어 훨씬 간단하다.
const args = ["-y", "-framerate", "60", "-i", `${dir}/frame_%06d.png`];
if (hasAudio) args.push("-i", `${dir}/audio.wav`);
args.push("-c:v", "utvideo", "-pix_fmt", "gbrap"); // gbrap = 무손실 planar RGBA(알파 보존)
const cmd = Command.sidecar("binaries/ffmpeg", args);
- 해결: PNG 시퀀스(옵션) + Ut Video 단일 파일(주력). 인코딩엔 코덱 설치 불필요(ffmpeg 내장 utvideo), 시청 PC에만 Ut Video 코덱 안내
- 확인: Vegas에서 알파가 실제로 살아있는 것까지 확인(임포트 후 Alpha Channel을 Straight로)
네이티브에서 프로젝트 저장이 매번 대화상자가 뜬다
불러온 프로젝트를 저장할 때마다 “다른 이름으로 저장” 창이 떴다. 원인은 네이티브 웹뷰(WebView2)의 File System Access가 불안정해, 파일 핸들 방식이 안 먹히고 다운로드 폴백(대화상자)으로 떨어져서였다.
- 해결: 네이티브는 FSA 대신 Tauri 다이얼로그로 경로를 받아 기억하고, 저장은 그 경로에 픽커 없이 덮어쓴다(파일 읽기용
read_fileRust 커맨드 추가). 내보내기 저장과 같은 방식
큐 순서를 바꿔도 시퀀서 첫 구간 번호가 안 바뀐다
큐를 드래그로 재정렬하면 번호가 위치대로 다시 매겨지고, 시퀀서의 큐 구간들도 따라 바뀐다. 그런데 첫 큐포인트 이전(기본 구간)만 번호가 안 바뀌었다. 코드에서 그 구간을 “항상 큐 1”로 하드코딩해 뒀기 때문이다.
// 있던 코드 — 기본 구간이 항상 1
const segs = [{ start: 0, id: 1 }];
// 고친 코드 — 기본 구간 큐를 상태로 추적
let defaultCueId = 1; // 재정렬 시 remap.get(defaultCueId)로 따라감
- 해결: 기본 구간 큐를
defaultCueId상태로 두고 재정렬·삭제·되돌리기·저장/복원·내보내기에 모두 전파. 연출은 그대로, 번호만 따라감
흰 배경 이미지 위 건반 발광이 하얗게 날아간다
건반 발광은 가산 블렌드(lighter)라 어두운 배경 위에선 빛이 겹겹이 밝아져 예쁘다. 근데 밝은 배경 이미지 위에선 “흰색 + 색 = 흰색”이 돼 색을 잃는다.
- 해결: 배경 이미지가 실제로 깔릴 때만 발광을 일반 블렌드(
source-over)로 전환 — 밝은 배경서도 색 유지. 기본(배경 없음=검정)은 가산 그대로라 원래 룩 불변
다음에 할 일
- Ut Video·자동 업데이터 첫 릴리스 — 로컬 서명 빌드 후 KeyBloom-releases에 업로드해 업데이트 작동시키기
- Mac 네이티브 앱 + ProRes 알파
- Creem 결제 Worker 배포 + 인앱 활성화(라이선스 키 입력) UI
- 첫 방문자용 샘플 데모 MIDI 자동 로드(자작곡 1곡 + 쇼팽 녹턴)
- 커스텀 파티클 모양 실루엣 재작업(투명 PNG 기준)
- 프로젝트 “다른 이름으로 저장”(Save As)
- 비-나선 파티클 가로 퍼짐(폭) 슬라이더 검토
- 실시간 연주 데모 영상 — 손+화면 동시로 실제 연주임을 보이기
Series: 소리꽃 KeyBloom
1 | 소리꽃 KeyBloom 2 | Rescene(리센느) ― Pretty Girl 3 | 히사이시 조 ― Spring 4 | 히사이시 조 ― 인생의 회전목마 5 | 히사이시 조 ― Summer 6 | LiSA ― 홍련화(귀멸의 칼날) 7 | DJ Okawari ― Flower Dance 8 | 안젤리크스페셜 ― The Queen 9 | 쇼팽 ― 녹턴 10 | 테일즈위버―Reminiscence 11 | D.Gray-man―14番目ノ子守歌 12 | 이루마―Kiss in the rain 13 | Bach―Invention No. 8 in F Major 14 | 소리꽃 KeyBloom 1 15 | 소리꽃 KeyBloom 2 16 | 소리꽃 KeyBloom 3 17 | 소리꽃 KeyBloom 4 18 | 소리꽃 KeyBloom 5 19 | 소리꽃 KeyBloom 6 20 | 소리꽃 KeyBloom 7 21 | 소리꽃 KeyBloom 8 22 | 소리꽃 KeyBloom 9 23 | 소리꽃 KeyBloom 10 24 | 소리꽃 KeyBloom 11 25 | 소리꽃 KeyBloom 12 26 | 소리꽃 KeyBloom 13 27 | 소리꽃 KeyBloom 14 28 | 소리꽃 KeyBloom 15 29 | 소리꽃 KeyBloom 16 30 | 소리꽃 KeyBloom 17 31 | 소리꽃 KeyBloom 18 32 | 소리꽃 KeyBloom 19 33 | 소리꽃 KeyBloom 20 읽는 중 34 | 소리꽃 KeyBloom 21 35 | 소리꽃 KeyBloom 22 36 | 소리꽃 KeyBloom 23 37 | 소리꽃 KeyBloom 24 38 | 소리꽃 KeyBloom 25 39 | 소리꽃 KeyBloom 26 40 | 소리꽃 KeyBloom 27 41 | 소리꽃 KeyBloom 28 42 | 소리꽃 KeyBloom 29 43 | 소리꽃 KeyBloom 30 44 | 소리꽃 KeyBloom 31 45 | 소리꽃 KeyBloom 32 46 | 소리꽃 KeyBloom 33