https://github.com/ivanli-cn/paste-preset
https://github.com/ivanli-cn/paste-preset
clipboard image-compressor image-editor image-processing image-resizer offline-first privacy react screenshot typescript vite
Last synced: 1 day ago
JSON representation
- Host: GitHub
- URL: https://github.com/ivanli-cn/paste-preset
- Owner: IvanLi-CN
- License: mit
- Created: 2025-11-29T13:28:22.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2026-06-08T13:50:57.000Z (21 days ago)
- Last Synced: 2026-06-08T15:28:39.979Z (20 days ago)
- Topics: clipboard, image-compressor, image-editor, image-processing, image-resizer, offline-first, privacy, react, screenshot, typescript, vite
- Language: TypeScript
- Homepage: https://paste-preset.ivanli.cc
- Size: 2.46 MB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Agents: AGENTS.md
Awesome Lists containing this project
README
# PastePreset
[](https://github.com/IvanLi-CN/paste-preset/releases)
[](https://github.com/IvanLi-CN/paste-preset/actions/workflows/ci.yml)
[](https://bun.sh/)
[](https://react.dev/)
[](vite.config.ts)
[](https://tailwindcss.com/)
[](https://daisyui.com/)
PastePreset is a browser-based single-page application for quickly processing screenshots and mobile photos. It lets you crop, resize, transcode, and strip metadata entirely in the browser, then either copy the result to the clipboard or download it locally. No image data ever leaves your machine.
The production app is deployed at the root path
[paste-preset.ivanli.cc](https://paste-preset.ivanli.cc/) and is installable as
a PWA. After at least one successful online visit, the cached app shell can be
revisited offline for the core import -> process -> download flow. Heavy codec
support such as HEIC and animated-format helpers now warms in the background, so
return visits can show the shell immediately while advanced offline formats
become available once warmup finishes.

## Features
- 100% client-side image processing (no backend server)
- Crop and resize images
- Format conversion (including HEIC/HEIF to more common formats)
- Animated image conversion (GIF / animated WebP / APNG)
- Control over output quality and size
- Metadata stripping (EXIF, GPS, etc.)
- Copy processed image to clipboard
- Download processed image as a file
## Tech Stack
- React + TypeScript + Vite SPA (dev server on port `25119`)
- Tailwind CSS v4 + DaisyUI for UI components and theming
- Bun (>= 1.0) as runtime and package manager
- Biome for formatting, linting, and unified `check` workflow
(replaces ESLint + Prettier)
## Prerequisites
- Bun >= 1.0 installed on your machine
## Development
```bash
bun install
bun run dev
```
The dev server runs at `http://localhost:25119/` by default.
## Scripts (via Bun)
- `bun run dev` – Start the Vite development server.
- `bun run build` – Type-check and build for production into `dist/`.
- `bun run preview` – Preview the production build locally.
- `bun run lint` – Run `biome lint .` for static analysis only (no file changes).
- `bun run format` – Run `biome format --write .` to format code in place.
- `bun run check` – Run `biome check .` for combined formatting, import sorting, and lint checks.
## Release
This repo uses a PR-label-driven release flow. Every PR targeting `main` must carry:
- Exactly one `type:*` label:
- `type:patch` – Release and bump patch.
- `type:minor` – Release and bump minor.
- `type:major` – Release and bump major.
- `type:docs` – No release.
- `type:skip` – No release.
- Exactly one `channel:*` label:
- `channel:stable` – Stable release.
- `channel:rc` – Prerelease (RC).
On a successful merge to `main`, CI will create a tag + GitHub Release when `type:patch|minor|major` is set:
- Stable: `vX.Y.Z`
- RC: `vX.Y.Z-rc.{sha7}` (marked as a GitHub prerelease)
## Deployment
See `docs/deploy-github-pages.md` for the root-path GitHub Pages/custom-domain
deployment contract used by production.
## License
This project is distributed under the MIT License. See `LICENSE` for details.