{"id":35878452,"url":"https://github.com/besscroft/picimpact","last_synced_at":"2026-04-01T21:59:43.163Z","repository":{"id":237241774,"uuid":"781262429","full_name":"besscroft/PicImpact","owner":"besscroft","description":"自部署的摄影作品网站，支持多种功能特性。PicImpact，分享你和世界！","archived":false,"fork":false,"pushed_at":"2026-03-01T05:15:29.000Z","size":7271,"stargazers_count":1223,"open_issues_count":36,"forks_count":207,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-03-01T07:32:11.742Z","etag":null,"topics":["exif","gallery","image","image-gallery","image-sharing","live-photo","map","photo-gallery","photos","picimpact","polaroid","polaroid-image-gallery","self-hosted"],"latest_commit_sha":null,"homepage":"https://pic-docs.ziyume.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/besscroft.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-04-03T03:43:47.000Z","updated_at":"2026-03-01T04:42:26.000Z","dependencies_parsed_at":"2024-11-04T16:18:24.622Z","dependency_job_id":"f9ef3347-c8b3-40a7-b3a3-a73699d7917d","html_url":"https://github.com/besscroft/PicImpact","commit_stats":null,"previous_names":["besscroft/picimpact"],"tags_count":92,"template":false,"template_full_name":null,"purl":"pkg:github/besscroft/PicImpact","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/besscroft%2FPicImpact","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/besscroft%2FPicImpact/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/besscroft%2FPicImpact/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/besscroft%2FPicImpact/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/besscroft","download_url":"https://codeload.github.com/besscroft/PicImpact/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/besscroft%2FPicImpact/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29964203,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T06:55:38.174Z","status":"ssl_error","status_checked_at":"2026-03-01T06:53:04.810Z","response_time":124,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["exif","gallery","image","image-gallery","image-sharing","live-photo","map","photo-gallery","photos","picimpact","polaroid","polaroid-image-gallery","self-hosted"],"created_at":"2026-01-08T17:20:40.736Z","updated_at":"2026-04-01T21:59:43.153Z","avatar_url":"https://github.com/besscroft.png","language":"TypeScript","readme":"\u003ch1 align=\"center\"\u003e\n\u003cimg width=\"28\" src=\"./public/maskable-icon.png\"\u003e\nPicImpact\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/besscroft/PicImpact/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/besscroft/PicImpact?style=flat-square\" alt=\"License\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/besscroft/PicImpact/actions/workflows/eslint.yaml\"\u003e\u003cimg src=\"https://github.com/besscroft/PicImpact/actions/workflows/eslint.yaml/badge.svg\" alt=\"ESLint\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/besscroft/PicImpact/actions/workflows/build-main.yaml\"\u003e\u003cimg src=\"https://github.com/besscroft/PicImpact/actions/workflows/build-main.yaml/badge.svg\" alt=\"Docker Build\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/github/repo-size/besscroft/PicImpact?style=flat-square\u0026color=328657\" alt=\"Repo Size\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#简体中文\"\u003e简体中文\u003c/a\u003e | \u003ca href=\"#english\"\u003eEnglish\u003c/a\u003e | \u003ca href=\"#日本語\"\u003e日本語\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## 简体中文\n\nPicImpact 是一个支持自部署的摄影作品展示网站，基于 Next.js + Hono.js 开发。\n\n### 功能特性\n\n- 瀑布流相册展示图片，支持[实况照片(Live Photos)](https://support.apple.com/zh-cn/104966)，基于 [LivePhotosKit JS](https://developer.apple.com/documentation/livephotoskitjs) 开发。\n- 基于 WebGL 的高性能图片查看器，支持流畅的缩放和平移，采用图片分块（Tiling）和 LOD 技术优化大图加载性能。\n- 支持地图模组标记图片，根据图片经纬度标记在地图上。\n- 点击图片查看原图，浏览图片信息和 EXIF 信息，支持直链访问。\n- 响应式设计，在 PC 和移动端都有不错的体验，支持暗黑模式。\n- 图片存储兼容 S3 API、Cloudflare R2、Open List API。\n- 图片支持绑定标签，并且可通过标签进行交互，筛选标签下所有图片。\n- 支持输出 RSS，可以使用 [Follow](https://github.com/RSSNext/Follow) 订阅，并支持订阅源所有权验证。\n- 支持批量自动化上传，上传图片时会生成 0.3 倍率的压缩图片，以提供加载优化。\n- 后台有图片数据统计、图片上传、图片维护、相册管理、系统设置和存储配置功能。\n- 双因素认证功能，基于 TOTP 算法 [RFC 6238](https://www.rfc-editor.org/rfc/rfc6238)，支持 Google Authenticator、Microsoft Authenticator 和 1Password 等。\n- Passkey 无密码登录功能，基于 WebAuthn 标准，支持生物识别（指纹、面容等）和硬件安全密钥登录。\n- 基于 SSR 的混合渲染，采用状态机制，提供良好的使用体验。\n- 基于 Prisma 的自动初始化数据库和数据迁移，简化部署流程。\n- 支持 Vercel 部署、Node.js 部署、Docker 等容器化部署，当然 k8s 也支持。\n\n### 如何部署\n\n你可以点击下面的按钮来一键部署到 Vercel，**然后将 `Build Command` 设置为 `pnpm run build:vercel`**，也可以 Fork 项目后手动部署到任何支持的平台。\n\n\u003e 我们推荐当新版本发布时您再进行版本更新！\n\n\u003ca href=\"https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fbesscroft%2FPicImpact\u0026env=DATABASE_URL,BETTER_AUTH_SECRET,BETTER_AUTH_PASSKEY_RP_ID,BETTER_AUTH_PASSKEY_RP_NAME\"\u003e\u003cimg src=\"https://vercel.com/button\" alt=\"Deploy with Vercel\"/\u003e\u003c/a\u003e\n\n| Key | 备注 |\n|-----|------|\n| DATABASE_URL | PostgreSQL 连接字符串，如使用 Supabase：`postgres://postgres.[project]:[password]@aws-0-[region].pooler.supabase.com:6543/postgres?pgbouncer=true` |\n| DIRECT_URL | 用于 `prisma migrate` 的直连地址，非 serverless 数据库与 `DATABASE_URL` 保持一致即可 |\n| BETTER_AUTH_SECRET | 权限机密，执行 `npx auth secret` 生成随机字符串 |\n| BETTER_AUTH_URL | 访问地址，如：`https://example.com` |\n| BETTER_AUTH_PASSKEY_RP_ID | Passkey 依赖方标识符，填写您的域名，如：`example.com` |\n| BETTER_AUTH_PASSKEY_RP_NAME | Passkey 依赖方名称，如：`PicImpact` |\n\n\u003e Vercel 部署将 `Build Command` 设置为 `pnpm run build:vercel`，Node.js 自行部署使用 `pnpm run build:node`。\n\u003e\n\u003e Passkey 功能依赖 HTTPS 环境（本地开发可使用 localhost）。\n\n更多详细配置请查阅[文档](https://pic-docs.ziyume.com)。\n\n### 本地开发\n\n```shell\ngit clone https://github.com/besscroft/PicImpact.git\npnpm i\npnpm run dev\n```\n\n### 技术栈\n\n| 类别 | 技术 |\n|------|------|\n| Web 框架 | [Next.js](https://github.com/vercel/next.js) + [Hono.js](https://github.com/honojs/hono) |\n| UI | [Radix](https://www.radix-ui.com/) + [shadcn/ui](https://ui.shadcn.com/) |\n| 数据库 | PostgreSQL + [Prisma](https://www.prisma.io/) |\n| 认证 | [better-auth](https://www.better-auth.com/) (Email/Password, TOTP, WebAuthn) |\n| 图片渲染 | WebGL 查看器（基于 [Afilmory](https://github.com/Afilmory/afilmory)） |\n\n---\n\n## English\n\nPicImpact is a self-deployable photography portfolio website built with Next.js + Hono.js.\n\n### Features\n\n- Masonry gallery layout with [Live Photos](https://support.apple.com/en-us/104966) support via [LivePhotosKit JS](https://developer.apple.com/documentation/livephotoskitjs).\n- High-performance WebGL image viewer with smooth zoom/pan, tiling, and LOD optimization.\n- Map module for geotagging photos based on EXIF coordinates.\n- Full-resolution image preview with EXIF metadata and direct link access.\n- Responsive design with dark mode support for both desktop and mobile.\n- Storage compatible with S3 API, Cloudflare R2, and Open List API.\n- Tag-based image organization with interactive tag filtering.\n- RSS feed output with [Follow](https://github.com/RSSNext/Follow) subscription and ownership verification.\n- Batch upload with automatic 0.3x compressed preview generation.\n- Admin dashboard: statistics, upload, image management, album management, settings, and storage config.\n- Two-factor authentication via TOTP ([RFC 6238](https://www.rfc-editor.org/rfc/rfc6238)), supporting Google Authenticator, Microsoft Authenticator, 1Password, etc.\n- Passkey passwordless login via WebAuthn standard (biometrics, hardware keys).\n- SSR-based hybrid rendering with state management for optimal UX.\n- Automatic database initialization and migration via Prisma.\n- Deployable on Vercel, Node.js, Docker, and Kubernetes.\n\n### Deployment\n\nClick the button below to deploy to Vercel. **Set `Build Command` to `pnpm run build:vercel`**.\n\n\u003ca href=\"https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fbesscroft%2FPicImpact\u0026env=DATABASE_URL,BETTER_AUTH_SECRET,BETTER_AUTH_PASSKEY_RP_ID,BETTER_AUTH_PASSKEY_RP_NAME\"\u003e\u003cimg src=\"https://vercel.com/button\" alt=\"Deploy with Vercel\"/\u003e\u003c/a\u003e\n\n| Key | Description |\n|-----|-------------|\n| DATABASE_URL | PostgreSQL connection string |\n| DIRECT_URL | Direct connection for `prisma migrate` (same as DATABASE_URL for non-serverless) |\n| BETTER_AUTH_SECRET | Auth secret, generate with `npx auth secret` |\n| BETTER_AUTH_URL | App URL, e.g., `https://example.com` |\n| BETTER_AUTH_PASSKEY_RP_ID | Passkey relying party ID (your domain, e.g., `example.com`) |\n| BETTER_AUTH_PASSKEY_RP_NAME | Passkey relying party name (e.g., `PicImpact`) |\n\nFor more details, see the [documentation](https://pic-docs.ziyume.com).\n\n### Local Development\n\n```shell\ngit clone https://github.com/besscroft/PicImpact.git\npnpm i\npnpm run dev\n```\n\n### Tech Stack\n\n| Category | Technology |\n|----------|------------|\n| Web Framework | [Next.js](https://github.com/vercel/next.js) + [Hono.js](https://github.com/honojs/hono) |\n| UI | [Radix](https://www.radix-ui.com/) + [shadcn/ui](https://ui.shadcn.com/) |\n| Database | PostgreSQL + [Prisma](https://www.prisma.io/) |\n| Auth | [better-auth](https://www.better-auth.com/) (Email/Password, TOTP, WebAuthn) |\n| Image Rendering | WebGL Viewer (based on [Afilmory](https://github.com/Afilmory/afilmory)) |\n\n---\n\n## 日本語\n\nPicImpact は、Next.js + Hono.js で構築されたセルフデプロイ可能な写真ポートフォリオサイトです。\n\n### 機能\n\n- マソンリーレイアウトのギャラリー。[ライブフォト(Live Photos)](https://support.apple.com/ja-jp/104966) に対応（[LivePhotosKit JS](https://developer.apple.com/documentation/livephotoskitjs) ベース）。\n- WebGL ベースの高性能画像ビューア。スムーズなズーム・パン操作、タイリングと LOD による大画像の最適化。\n- 地図モジュールで EXIF の座標情報に基づいて写真をマッピング。\n- 画像クリックで原寸表示、EXIF メタデータの閲覧、ダイレクトリンクに対応。\n- レスポンシブデザイン、ダークモード対応（PC・モバイル両対応）。\n- S3 API、Cloudflare R2、Open List API に対応したストレージ。\n- タグベースの画像整理とインタラクティブなタグフィルタリング。\n- RSS フィード出力、[Follow](https://github.com/RSSNext/Follow) による購読と所有権検証に対応。\n- バッチアップロード、0.3 倍率の圧縮プレビュー自動生成。\n- 管理画面：統計、アップロード、画像管理、アルバム管理、設定、ストレージ設定。\n- TOTP 二要素認証（[RFC 6238](https://www.rfc-editor.org/rfc/rfc6238)）、Google Authenticator / Microsoft Authenticator / 1Password 等に対応。\n- WebAuthn 標準による Passkey パスワードレスログイン（生体認証、ハードウェアキー）。\n- SSR ベースのハイブリッドレンダリング。\n- Prisma によるデータベースの自動初期化とマイグレーション。\n- Vercel、Node.js、Docker、Kubernetes でのデプロイに対応。\n\n### デプロイ\n\n以下のボタンで Vercel にデプロイできます。**`Build Command` を `pnpm run build:vercel` に設定してください。**\n\n\u003ca href=\"https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fbesscroft%2FPicImpact\u0026env=DATABASE_URL,BETTER_AUTH_SECRET,BETTER_AUTH_PASSKEY_RP_ID,BETTER_AUTH_PASSKEY_RP_NAME\"\u003e\u003cimg src=\"https://vercel.com/button\" alt=\"Deploy with Vercel\"/\u003e\u003c/a\u003e\n\n| Key | 説明 |\n|-----|------|\n| DATABASE_URL | PostgreSQL 接続文字列 |\n| DIRECT_URL | `prisma migrate` 用の直接接続（サーバーレスでなければ DATABASE_URL と同じ） |\n| BETTER_AUTH_SECRET | 認証シークレット、`npx auth secret` で生成 |\n| BETTER_AUTH_URL | アプリの URL、例：`https://example.com` |\n| BETTER_AUTH_PASSKEY_RP_ID | Passkey の RP ID（ドメイン名、例：`example.com`） |\n| BETTER_AUTH_PASSKEY_RP_NAME | Passkey の RP 名（例：`PicImpact`） |\n\n詳細は[ドキュメント](https://pic-docs.ziyume.com)をご覧ください。\n\n### ローカル開発\n\n```shell\ngit clone https://github.com/besscroft/PicImpact.git\npnpm i\npnpm run dev\n```\n\n### 技術スタック\n\n| カテゴリ | 技術 |\n|----------|------|\n| Web フレームワーク | [Next.js](https://github.com/vercel/next.js) + [Hono.js](https://github.com/honojs/hono) |\n| UI | [Radix](https://www.radix-ui.com/) + [shadcn/ui](https://ui.shadcn.com/) |\n| データベース | PostgreSQL + [Prisma](https://www.prisma.io/) |\n| 認証 | [better-auth](https://www.better-auth.com/) (Email/Password, TOTP, WebAuthn) |\n| 画像レンダリング | WebGL ビューア（[Afilmory](https://github.com/Afilmory/afilmory) ベース） |\n\n---\n\n## Contributing\n\n[New Ideas \u0026 Bug Reports](https://github.com/besscroft/PicImpact/issues/new) | [Fork \u0026 Pull Request](https://github.com/besscroft/PicImpact/fork)\n\nPicImpact welcomes all contributions including improvements, new features, documentation, and bug reports.\n\n## Browser Support\n\n- Last 2 versions of Chrome, Firefox, Safari and Edge\n- Firefox ESR\n\n## Accessibility\n\nBased on [WAI-ARIA](https://developer.mozilla.org/en-US/docs/Learn/Accessibility/WAI-ARIA_basics) standards.\n\n## Acknowledgements\n\nThis project uses JetBrains open source license, developed with IntelliJ IDEA.\n\n![JetBrains logo](https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.svg)\n\nWebGL image viewer based on [Afilmory](https://github.com/Afilmory/afilmory) `webgl-viewer` module (MIT License).\n\n## License\n\nPicImpact is open source software licensed as [MIT](https://github.com/besscroft/PicImpact/blob/main/LICENSE).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbesscroft%2Fpicimpact","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbesscroft%2Fpicimpact","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbesscroft%2Fpicimpact/lists"}