MyGo 云音乐
Go와 MyGo로 만든 서드파티 네이버 클라우드 뮤직 데스크톱 클라이언트
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗브라우저(iPad Safari 등)에서 쓰는 네컷 사진 부스 웹앱입니다. 카메라로 여러 장을 연속 촬영하고, 프레임에 합성해 저장·인쇄합니다.
| 주소 | 내용 | 광고 |
|---|---|---|
/ | 메인 페이지 (소개 · 사용법 · 자주 묻는 질문) | 구글 애드센스 3곳 |
/booth | 촬영 부스 (홈 화면에 추가하면 바로 여기로 열림) | 없음 |
/privacy | 개인정보처리방침 (애드센스 쿠키 안내) | 없음 |
/en · /ja · /zh (+ /booth, /privacy) | 영어 · 일본어 · 중국어(간체) 페이지 | 메인만 |
/sitemap.xml · /robots.txt · /llms.txt | 검색엔진 · AI 검색용 | – |
/ads.txt | 애드센스 판매자 정보 | – |
한국어(기본)는 접두사 없는 주소, 다른 언어는 /en, /ja, /zh 아래에 있습니다. 문구는 src/i18n/messages/<언어>/에 있고, 한국어(ko)가 원본입니다. 다른 언어는 같은 구조를 따라야 빌드·테스트가 통과합니다.
vercel.json이 접속 IP의 나라(x-vercel-ip-country)를 보고 한국어 주소에서 언어 주소로 임시 이동(307)시킵니다. 한국 → 한국어, 일본 → 일본어, 중국·대만·홍콩·마카오 → 중국어, 그 밖 → 영어.npm run serve 등): 한국어 페이지의 인라인 스크립트가 브라우저 시간대로 나라를 짐작해 옮깁니다.lang 쿠키(1년)를 남기고, 그 뒤로는 자동으로 옮기지 않습니다.hreflang(+ x-default = 한국어)과 sitemap으로 언어별 주소를 알립니다.src/i18n/config.ts의 COUNTRY_LOCALE과 vercel.json을 함께 고칩니다(src/i18n/i18n.test.ts가 둘이 같은지 확인).public/og/og-<언어>.png, node scripts/og-images.mjs로 다시 만듦)WebSite, WebApplication(무료), FAQPage, HowTo — 화면의 자주 묻는 질문·사용법과 같은 문구/llms.txt, 화면에 보이는 "SnowCut이란?" 정의 문단NEXT_PUBLIC_SITE_URL=https://snowcut.vercel.app # 정식 주소 (기본값)
NEXT_PUBLIC_GOOGLE_SITE_VERIFICATION=... # Google Search Console
NEXT_PUBLIC_NAVER_SITE_VERIFICATION=... # 네이버 서치어드바이저
게시자 ID(ca-pub-6532893388671562)는 코드에 기본값으로 들어 있습니다. 다른 값은 빌드할 때 환경 변수로 넣습니다(Vercel은 Project Settings → Environment Variables). NEXT_PUBLIC_ADSENSE_CLIENT를 빈 값으로 두면 광고를 끕니다.
광고는 기본으로 꺼져 있습니다. 관리자 모드에서 기기(브라우저)마다 켜고 끕니다.
NEXT_PUBLIC_ADSENSE_CLIENT=ca-pub-6532893388671562 # 애드센스 게시자 ID (기본값)
NEXT_PUBLIC_ADSENSE_SLOT_TOP=1111111111 # (선택) 직접 만든 디스플레이 광고 단위 data-ad-slot (소개 아래)
NEXT_PUBLIC_ADSENSE_SLOT_MIDDLE=2222222222 # (기능 소개 아래)
NEXT_PUBLIC_ADSENSE_SLOT_BOTTOM=3333333333 # (자주 묻는 질문 아래)
NEXT_PUBLIC_ADSENSE_SLOT_INTERSTITIAL=4444444444 # 다운로드·인쇄 전에 띄우는 광고 창의 광고 단위 (없으면 광고 창 없이 바로 실행)
ADMIN_PASSWORD=ab12cd34 # 관리자 모드 비밀번호 (8자리, NEXT_PUBLIC_ 아님)
snowcut.ads)에 저장됩니다. 값이 없으면 꺼짐입니다.ADMIN_PASSWORD는 빌드할 때 sha256("snowcut-admin:" + 비밀번호)로 바꿔 넣으므로 평문은 사이트에 들어가지 않습니다. 다만 정적 사이트라 해시는 누구나 볼 수 있으니 추측하기 어려운 값을 쓰세요. 값이 없거나 8자리가 아니면 관리자 모드에서 "비밀번호가 설정되지 않았습니다"가 나오고 로그인할 수 없습니다. 바꾼 뒤에는 다시 배포해야 합니다.NEXT_PUBLIC_ADSENSE_SLOT_INTERSTITIAL이 없으면 광고 창 없이 바로 실행합니다./booth 페이지를 제외하세요.<meta name="google-adsense-account"> 태그와 /ads.txt로 합니다./ads.txt는 NEXT_PUBLIC_ADSENSE_CLIENT 값으로 빌드할 때 만들어집니다.기본으로 꺼져 있어서 카드와 버튼에 준비중인 기능입니다. 가 표시됩니다. 켜려면 NEXT_PUBLIC_ENABLE_CHARACTER=1로 빌드합니다(아래 누끼 서버 설정도 필요).
시작 화면의 커스텀 캐릭터 카드에서 이미지를 올리고, 남길 캐릭터 위를 눌러 점을 찍은 뒤 누끼 따기를 누르면 배경이 지워진 캐릭터가 프레임 위에 올라갑니다. 끌어서 옮기고, 두 손가락(또는 마우스 휠)·슬라이더로 크기와 회전을 바꾸며, 좌우 반전·흰 테두리(스티커)·맨 앞으로·삭제를 할 수 있습니다. 결과 화면 옵션 단계에서 실제 사진 위에 놓고 다시 고칠 수 있고, 저장·인쇄 이미지에 함께 들어갑니다.
배경 제거는 Background-Remover(FastAPI + SAM 2.1)를 따로 띄워 두고 그 API(POST /background-removal/remove, image + points=[[x,y],...] → 투명 PNG)를 부릅니다. 코드는 가져오지 않고 HTTP로만 연동합니다(그 저장소에는 라이선스 파일이 없습니다).
# 1) 누끼 서버 실행 (NVIDIA GPU 권장, CPU면 한 장에 20~30초). 자세한 방법은 그 저장소의 README.
git clone https://github.com/Daek-You/Background-Remover.git && cd Background-Remover
docker compose -f docker-compose-local.yml up --build # 기본 포트 5000
# 2-a) 개발: 앱이 서버를 직접 부른다. 서버 config/environments.py의 CORS_ORIGINS에 앱 주소를 넣는다.
NEXT_PUBLIC_BG_REMOVER_URL=http://localhost:5000 npm run dev
# 2-b) 배포(server.mjs): 같은 주소의 /bg-remover/* 를 누끼 서버로 넘긴다. CORS·혼합 콘텐츠 걱정이 없다.
NEXT_PUBLIC_BG_REMOVER_URL=/bg-remover npm run build
BG_REMOVER_URL=http://127.0.0.1:5000 npm run serve
NEXT_PUBLIC_BG_REMOVER_URL이 없으면 누끼 버튼이 나오지 않고, 배경이 이미 투명한 PNG를 배경 그대로 쓰기로만 올릴 수 있습니다.Next.js 16(App Router, TypeScript) 앱이고 정적 파일로 내보냅니다(output: "export"). iPad Safari에서 HTTPS 주소로 열면 라이브 카메라와 카운트다운으로 촬영합니다.
npm install
npm run dev # http://localhost:3000 (메인), /booth (촬영)
npm test # 레이아웃·상태 단위 테스트
npm run build # out/ 에 정적 파일 생성
npm run serve # out/을 4173 포트로
http://localhost)로 엽니다.out/ 폴더를 올립니다. GitHub Pages처럼 하위 경로에 올릴 때는 NEXT_PUBLIC_BASE_PATH=/저장소이름 npm run build로 빌드합니다.src/
app/ layout(글꼴·메타데이터), page(메인), manifest, globals.css
app/booth/ 촬영 부스 페이지 (광고 없음)
app/privacy/ 개인정보처리방침
app/ads.txt/ ads.txt (빌드할 때 생성)
components/ Booth(화면 전환) · StartScreen · CaptureScreen · ResultScreen(꾸미기 4단계) · ShotThumb · AdSlot(메인 광고)
hooks/useCamera.ts 전면 카메라 연결, 백그라운드 복귀 처리, wake lock
lib/frame.ts 레이아웃 6종 (캔버스 크기·칸 좌표·장수)
lib/canvas.ts 촬영본 축소, 4컷 합성
lib/saveImage.ts 공유 시트 / 다운로드 저장
lib/recorder.ts 촬영 영상 녹화 (거울 모드 캔버스 → MediaRecorder)
lib/boothState.ts 화면·촬영 상태 리듀서
lib/frames.ts 프레임 디자인 21종 (캔버스로 그림)
lib/look/ 색 필터 (WebGL2 셰이더, CSS 필터 행렬)
lib/sound.ts 셔터 소리 (Web Audio)
lib/print.ts SELPHY 엽서 인쇄용 시트 (한 장에 1개 또는 2개)
lib/ads.ts 애드센스 설정 (환경 변수)
server.mjs out/ 정적 서버 (npm run serve)