The Problem
Designers need a quick way to produce polished screenshots—device frames, gradients, annotations, and short videos—without installing heavyweight tools or dealing with watermarks. Existing desktop apps require downloads, licensing, and manual export steps, slowing iteration for marketing or documentation.
What This Does
screenshot-studio is a pure‑browser editor that lets users compose visuals from a library of backgrounds, mock‑ups, and animation presets, then export PNG/JPG, GIF, or MP4. The core UI lives in the components/ directory; for example, components/editor/sections/index.ts bundles the editor panels, while components/canvas/html/index.ts draws the live preview onto an HTML canvas. Asset‑heavy resources (e.g., background images) sit under public/. The Next.js app entry (app/ with route files such as app/[locale]/for/designers/page.tsx) wires these components into server‑rendered pages.
How It Is Wired
- Startup –
npm run devlaunches Next.js (config innext.config.ts). The framework reads theapp/folder to create routes; each route renders a page component that imports the editor UI. - Editor bootstrap – The page component imports
components/editor/sections/index.ts. That file re‑exports a collection of section components, the most connected of which iscomponents/editor/sections/SectionWrapper.tsx(17 inbound imports, instability 0). - Canvas pipeline – UI actions dispatch state changes (Zustand stores in
lib/store/index.ts, a 1 600‑line file). The updated state flows tocomponents/canvas/html/index.ts, which instantiatescomponents/canvas/ClientCanvas.tsxand the SVG overlay layer (components/canvas/html/SVGAnnotationLayer.tsx). - Export flow – When the user clicks “Export”,
components/export/index.tscalls intocomponents/image-render/index.tsfor raster images or the FFmpeg‑WASM wrapper for video (lib/r2.ts). These modules contain dense branching logic (high branching density reported inlib/r2.ts). - Blast‑radius hotspots –
SectionWrapper.tsxis a hub; changes here affect 17 other modules, so keep it stable. Oversized files (lib/store/index.ts,SVGAnnotationLayer.tsx,RightSettingsPanel.tsx) and deep nesting (max depth 8 inRightSettingsPanel.tsx) add cognitive load and are prime refactor targets.
No circular imports were detected, and the import graph spans 257 internal modules with 149 edges, indicating a relatively flat dependency tree aside from the identified hub.
How To Use It
# Clone the fork you will work on
git clone https://github.com/moses-y/screenshot-studio.git
cd screenshot-studio
# Install dependencies (npm is declared in package.json)
npm install
# Start the development server
npm run dev
Configuration: The repo contains no .env.example or similar files, so no environment variables are required for a local run. Running: The dev server serves the app at http://localhost:3000. The main UI loads from the route app/[locale]/for/designers/page.tsx, which pulls in the editor components described above.
Real‑World Use
A product marketing team can embed the editor in an internal portal, letting copywriters generate device‑framed screenshots of new UI features on the fly. A script could open the page, programmatically set the canvas state via the Zustand store, trigger exportImage() from components/export/index.ts, and retrieve the PNG for inclusion in release notes—all without leaving the browser.
Code Health & Issues
- High – No test suite – 257 source files, 0 test files.
- High – No CI workflow – No
.github/workflows/*or other build gate. - High – Missing build validation (vercel.json) – Deployable artifacts lack automated verification.
- Medium – Dependabot disabled – Only one
package-lock.json; no update bot. - Medium – Large binaries in repo –
public/mac/mac-asset-7.png(12.9 MB) and related WebP assets exceed 5 MB. - Low – Missing repo conventions – No
.editorconfig,.gitattributes, or formatter config.
The Bottom Line
screenshot-studio delivers a functional, zero‑install screenshot editor built on modern React/Next.js tooling, but the codebase suffers from missing automated quality checks, oversized modules, and deep nesting that will hinder large‑scale maintenance. It is suitable for teams that need a quick visual tool and are prepared to add testing and CI infrastructure.