個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證PicSpeak is an AI-powered photography critique web app that lets users upload photos and receive instant professional feedback on composition, lighting, color, and technical execution.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗AI photography critique that turns feedback into the next shot. PicSpeak scores composition, lighting, color, impact, and technique, explains the visible evidence, converts the weakest point into a practical retake target, and can generate a GPT Image 2 visual reference. Guest mode works without registration.
Live product · Public critique example · Retake Coach · Prompt library · Gallery
Most critique tools stop after describing one image. PicSpeak keeps the advice attached to the next attempt:
Upload a photo
-> five-dimension critique with visible evidence
-> prioritized next-shoot action and success check
-> upload the retake
-> compare original and retake on one rubric
-> save progress and generate the next visual target
| Public critique | GPT-6 Retake Coach |
|---|---|
| GPT Image 2 prompt library | Public critique gallery |
|---|---|
| Area | What it provides |
|---|---|
| Critique | Guest mode, direct object-storage upload, Flash and Pro depth, five scored dimensions, EXIF-aware evidence, sharing, export, and re-analysis |
| Practice loop | Next-shoot checklists, source-review continuity, same-photo reruns, new-photo retakes, favorites, and filtered history |
| Retake Coach | Paired original/retake evaluation, comparability and confidence handling, deterministic deltas, remaining gaps, success checks, and progress chains |
| AI Create | Template and prompt controls, quality and aspect-ratio choices, GPT Image 2 credits, review-linked references, download, reuse, and generation history |
| Public learning | 50 crawlable prompt examples, critique gallery, trilingual Lens Notes, update history, and server-rendered SEO/GEO content |
| Multilingual UX | English, Simplified Chinese, and Japanese across navigation, errors, public guidance, prompt-language labels, generation, and checkout |
| Platform | Clerk sign-in, guest/authenticated quotas, Lemon Squeezy billing, WebSocket task updates, PostgreSQL persistence, and S3-compatible storage |
| Surface | URL |
|---|---|
| Product home | picspeak.art/en |
| Public critique walkthrough | /reviews/rev_8424d4fbde054759 |
| Retake Coach | /retake |
| GPT Image 2 prompt examples | /generate/prompts |
| Critique gallery | /gallery |
| Lens Notes | /en/blog |
| Product updates | /en/updates |
Next.js 15 / React 18
-> direct image upload to S3-compatible storage
-> FastAPI review and generation APIs
-> in-process or standalone async worker
-> OpenAI Responses critique / GPT Image 2
-> PostgreSQL review, task, billing, and progress records
| Layer | Technology |
|---|---|
| Frontend | Next.js 15 · React 18 · TypeScript · Tailwind CSS |
| Backend | Python 3.11 · FastAPI · SQLAlchemy 2.x · Alembic |
| Database | PostgreSQL |
| Storage | S3-compatible object storage, including Cloudflare R2 or MinIO |
| Authentication | Clerk plus guest sessions and legacy Google OAuth compatibility |
| Billing | Lemon Squeezy subscriptions, activation codes, and generation credit packs |
Storage reads use short-lived S3 GET URLs for AI requests and generated images. Photo results use the signed backend image proxy; public Gallery thumbnails use a stable backend route that checks the current publication and approval state. OBJECT_BASE_URL is retained for configuration compatibility and is no longer required for these image reads.
For an existing public R2 bucket, deploy and verify these read paths before disabling its public development URL and any other public bucket domains. Turning off the public URL before the backend update can interrupt image display and AI requests. Storage cleanup is a separate maintenance operation; changing the Free history window does not delete objects.
PicSpeak existed before the submission window. The Build Week contribution extended the existing single-photo product into an auditable retake loop rather than only replacing a model name. The pre-event baseline is b74ddfb; the core paired-comparison implementation landed in 2a626aa.
The original Build Week implementation used GPT-5.6 Terra. The current runtime follows the selected mode: GPT-6 Sol for Flash and the stronger GPT-6.1 Sol for Pro. The paired scoring and server-owned delta contract remain unchanged, and saved results retain their actual model provenance.
| Before Build Week | Added during Build Week |
|---|---|
| One-photo critique | One GPT-5.6 Terra request evaluates the original and retake together |
| Five standalone scores | Before/after scores, visible evidence, and server-calculated deltas |
| Advice inferred from one image | Prioritized next-shoot actions with observable success checks |
| Recent-vs-previous history averages | Progress curves limited to the same retake chain |
| Review-linked image prompts | The paired diagnosis becomes a GPT Image 2 visual target |
Three implementation rules keep the result auditable:
git clone https://github.com/AsaZhou923/picspeak.git
cd picspeak
cp backend/.env.example backend/.env
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r backend/requirements.txt
The workspace uses the model-specific OpenAI settings below. The retained Qwen-compatible backend path is configured independently:
OPENAI_API_KEY=
OPENAI_API_BASE_URL=https://api.openai.com/v1
OPENAI_SCORE_MODEL=gpt-6-sol
OPENAI_SCORE_REASONING_EFFORT=low
OPENAI_REVIEW_MODEL=gpt-6-sol
OPENAI_REVIEW_REASONING_EFFORT=low
OPENAI_REVIEW_TIMEOUT_SECONDS=180
OPENAI_PRO_MODEL=gpt-6.1-sol
OPENAI_PRO_REASONING_EFFORT=high
# Optional complete endpoint override; otherwise /responses is appended.
RETAKE_ANALYSIS_API_URL=
RETAKE_ANALYSIS_MODEL=gpt-6.1-sol
RETAKE_ANALYSIS_REASONING_EFFORT=high
RETAKE_ANALYSIS_TIMEOUT_SECONDS=180
Run migrations and start the API:
cd backend
python scripts/ensure_runtime_schema.py
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
cp frontend/.env.local.example frontend/.env.local
cd frontend
npm install
npm run dev
Open http://localhost:3000.
# Backend, from the repository root
./.venv/bin/python -m pytest backend/tests
# Frontend
cd frontend
npm run typecheck
npm run lint
npm run test
npm run build
The frontend and backend can be deployed independently. The backend includes a container definition and can run an embedded worker or python -m app.worker_main as a separate process. Build and serve the frontend with npm run build && npm run start.
Issues and pull requests are welcome. Keep changes scoped, include the relevant tests, and preserve the privacy boundary between public demos and private user reviews.