MyGo 云音乐
Go와 MyGo로 만든 서드파티 네이버 클라우드 뮤직 데스크톱 클라이언트
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Generate, edit, animate, and export fictional, simulated WhatsApp-style conversations with AI.
CREATE → AI GENERATE → EDIT → PREVIEW → PLAY → SCREENSHOT → VIDEO
ChatFrame AI is an original, independently-branded simulation product. It is not affiliated with
WhatsApp or Meta Platforms, Inc. Every conversation it produces is fictional and is labeled
"SIMULATED CONVERSATION" in exports by default.README 전문 보기 ↗Generate, edit, animate, and export fictional, simulated WhatsApp-style conversations with AI.
CREATE → AI GENERATE → EDIT → PREVIEW → PLAY → SCREENSHOT → VIDEO
ChatFrame AI is an original, independently-branded simulation product. It is not affiliated with WhatsApp or Meta Platforms, Inc. Every conversation it produces is fictional and is labeled "SIMULATED CONVERSATION" in exports by default.
lib/timing/engine.ts).components/ui/*, CVA-based)stores/*)lib/validation/schemas.ts, lib/ai/schemas.ts)openai SDK — see lib/ai/@remotion/bundler + @remotion/renderer)localStorage (see "Data layer" below)The product spec calls for a Supabase-backed Postgres database with Row Level Security and
Supabase Auth in production. This environment has no provisioned Supabase project or
credentials, so per the project's documented local-fallback policy, ChatFrame persists projects
to the browser's localStorage (lib/storage/projectStore.ts) and runs without real
authentication (a local-only "demo session"). The architecture is isolated behind that one module
specifically so a real Supabase client can be dropped in later without touching the rest of the
app — see "Remaining production work" below.
Copy .env.example to .env.local and fill in what you need:
cp .env.example .env.local
| Variable | Required | Notes |
|---|---|---|
OPENAI_API_KEY | one of these two | Used if DEEPSEEK_API_KEY is not set |
OPENAI_MODEL | no | Defaults to gpt-4o-mini |
DEEPSEEK_API_KEY | one of these two | Takes priority over OpenAI if both are set |
DEEPSEEK_MODEL | no | Defaults to deepseek-chat |
NEXT_PUBLIC_SUPABASE_URL / NEXT_PUBLIC_SUPABASE_ANON_KEY / SUPABASE_SERVICE_ROLE_KEY | no | Reserved for a future Supabase migration; unused today |
NEXT_PUBLIC_APP_URL | no | Only needed in production behind a proxy that doesn't set x-forwarded-host |
RENDER_BASE_URL | no | Internal URL used by screenshot rendering; defaults to http://127.0.0.1:3000 in Docker |
RENDER_CONCURRENCY | no | Remotion render concurrency; defaults to 1 for small production containers |
AI generation requires one of OPENAI_API_KEY or DEEPSEEK_API_KEY. Everything else
(editor, playback, screenshot export, video export, projects, demo content) works with no keys at
all.
npm install
npx playwright install chromium # only needed for screenshot export
cp .env.example .env.local # add an OpenAI or DeepSeek key for AI generation
npm run dev
Open http://localhost:3000. Use 127.0.0.1:3000 instead of localhost:3000 if you hit a
same-origin dev-resource warning in an unusual local DNS setup — allowedDevOrigins in
next.config.ts is already configured for both.
npm run dev — start the dev server (Turbopack)npm run lint — ESLint (Next core-web-vitals + TypeScript rules)npx tsc --noEmit — type-checknpm run build && npm run start — production build and serveThis was manually verified end-to-end in a real browser and via direct API calls, since no automated test suite is included in this build (see "Remaining production work"):
npx tsc --noEmit, npm run lint, and npm run build all pass cleancomponents/chat/ChatWindow.tsx and components/chat/MessageList.tsx are the single source of
truth for rendering a conversation. Four different contexts render through them with different
inputs, never different code:
lib/timing/engine.ts computes a canonical timeline (buildTimeline), and
stateAtTime(timeline, ms) derives which messages/typing indicators/reactions are visible at
any point; the preview player advances ms with requestAnimationFrameapp/api/export/screenshot/route.ts) — writes the conversation/theme/
export-settings payload to a temp file, has Playwright load app/render/[renderId]/page.tsx
(a plain server-rendered page with no editor chrome), and screenshots itapp/api/export/video/route.ts) — bundles remotion/index.ts with
@remotion/bundler and renders remotion/compositions/ChatVideo.tsx with @remotion/renderer;
that composition uses the exact same buildTimeline/stateAtTime functions, frame-driven
instead of real-time-drivenEverything above runs and was verified locally. These require infrastructure this environment doesn't have:
lib/storage/projectStore.ts for a Supabase client, add the
tables/RLS policies described in the product spec, and wire Supabase Auth (email, magic link,
Google). No code outside that one module needs to change.lib/usage/usage.ts) is provider-agnostic and ready for
Stripe, but no payment processing is wired up — the pricing page's plan switcher is a local
simulation.localStorage, which is fine for a local/demo build but is trivially bypassable; a production
deployment needs limits enforced server-side against an authenticated user.app/api/ai/generate/route.ts (which resets per server instance/restart) would need a durable
store (Redis/Upstash) in a multi-instance deployment.