SculptForge
ZBrush 스타일 조각으로 VFX·애니메이션·게임 제작
브라우저에서 몇 분만에 앱스토어·플레이 스크린샷을 프레임·템플릿·그라데이션·픽셀 정확 PNG로 만들 수 있음
Create store-ready App Store and Google Play screenshots in minutes — device frames, templates, gradients and pixel-exact PNG exports, in your browser.
디자인JavaScript · CSSGitHub @umero882온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기AppShots — App Store & Google Play screenshots in minutes
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
AppShots — App Store & Google Play Screenshot Generator
A full-stack-ready clone of an app-store screenshot tool (inspired by appscreens.com),
built with React 18 + Vite + TailwindCSS. Turn raw app captures into polished,
store-ready screenshots with device frames, gradient backgrounds, headlines, and
PNG export — all in the browser.
This is an original, "inspired-by" build. All copy, UI, and device frames are
drawn from scratch (no assets copied from the original site).README 전문 보기 ↗A full-stack-ready clone of an app-store screenshot tool (inspired by appscreens.com), built with React 18 + Vite + TailwindCSS. Turn raw app captures into polished, store-ready screenshots with device frames, gradient backgrounds, headlines, and PNG export — all in the browser.
This is an original, "inspired-by" build. All copy, UI, and device frames are drawn from scratch (no assets copied from the original site).
/inspiration) — public, browsable showcase of complete designs; start a project from any one./tracker) — look up any competitor's live App Store screenshots + metadata (rating, genre, price, version) via Apple's official iTunes Search API; screenshots link back to the App Store for reference..zip, "All sizes" (render one design across every required App Store + Google Play size), copy-to-clipboard, and an animated video reelRequires Node.js 20+.
npm install
npm run dev # http://localhost:5173
Build for production:
npm run build
npm run preview
If you see a partial
node_modulesfrom a previous attempt, just runnpm installagain (or delete the folder first) — it will reconcile.
The app talks to a single backend abstraction (src/lib/backend.js). Out of the
box it uses a localStorage implementation, so everything (accounts, projects,
plan upgrades) works with zero setup.
When you're ready for a real backend, the abstraction is designed to swap to Supabase without touching any UI code.
npm i @supabase/supabase-js.env.example → .env.local and fill in:
VITE_SUPABASE_URL=...
VITE_SUPABASE_ANON_KEY=...
projects table:
create table projects (
id uuid primary key default gen_random_uuid(),
user_id uuid references auth.users not null,
name text not null default 'Untitled project',
state jsonb not null,
created_at timestamptz default now(),
updated_at timestamptz default now()
);
alter table projects enable row level security;
create policy "own projects" on projects
for all using (auth.uid() = user_id) with check (auth.uid() = user_id);
src/lib/backend.js, implement the same method surface
(signUp, signIn, signOut, getCurrentUser, listProjects,
getProject, createProject, updateProject, deleteProject, upgradePlan)
using supabase.auth and supabase.from("projects"), then export it as backend.The Pricing page currently simulates upgrades. To take real payments with Stripe Checkout (client-only):
VITE_STRIPE_PUBLISHABLE_KEY and VITE_STRIPE_PRICE_PRO to .env.local.Pricing.jsx's choose(), redirect to Checkout instead of calling upgrade():
import { loadStripe } from "@stripe/stripe-js";
const stripe = await loadStripe(import.meta.env.VITE_STRIPE_PUBLISHABLE_KEY);
await stripe.redirectToCheckout({
lineItems: [{ price: import.meta.env.VITE_STRIPE_PRICE_PRO, quantity: 1 }],
mode: "subscription",
successUrl: window.location.origin + "/dashboard",
cancelUrl: window.location.origin + "/pricing",
});
plan to pro.src/
components/ Navbar, Footer, Logo, AuthShell, ScreenCanvas, ProtectedRoute
lib/
backend.js data layer (localStorage now, Supabase-ready)
auth.jsx auth context/provider
devices.js device frame definitions (CSS-drawn, store dimensions)
templates.js gradients, fonts, layouts, default project state
export.js DOM → PNG export at store resolution
team.js team API calls + the "which buttons to render" helpers
teamContext.jsx loads the workspace once, shares it with every screen
pages/ Landing, Pricing, Login, Signup, Dashboard, Editor, Team, JoinTeam, NotFound
App.jsx routes
main.jsx entry
server/
teams.js the roster, the roles, /api/team — server-owned by design
entitlement.js Stripe record + Team seat -> one effective plan
firestoreAdmin.js the only writer of teams/** in Firestore
Deeper docs: TEAM-SETUP.md · STRIPE-SETUP.md · FIREBASE-SETUP.md · DEPLOY.md
React 18 · Vite 8 · React Router 6 · TailwindCSS 3 · Framer Motion · lucide-react · html-to-image · three.js.
The /api/* proxy (server/handlers.js) also holds the AI, image-search, and
App-Store-tracker endpoints; the App Store Tracker uses Apple's public iTunes
Search API and needs no key.
localStorage for convenience only; never do that in production.