MyGo 云音乐
用 Go 与 MyGo 写成的第三方网易云音乐桌面客户端。原生界面,没有 WebView;边下边播,无损与 Hi-Res,逐字歌词与「律动」,刘海播放器。
Translation pending
Generate, edit, animate and export fictional conversations in a realistic WhatsApp-style messaging experience.
Translation pending
MediaTypeScript · CSSGitHub @haraphat01OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
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.Read the full 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.