Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
2d7eff5
test: add Phase 0 safety net before restructure
vansteenbergenmatisse May 19, 2026
d7c5a58
chore(restructure): scaffold empty openshorts/ package + extend pypro…
vansteenbergenmatisse May 19, 2026
ec44d4b
chore(restructure): move s3_uploader -> openshorts/integrations/s3.py
vansteenbergenmatisse May 19, 2026
e68fa98
chore(restructure): move translate -> openshorts/integrations/elevenl…
vansteenbergenmatisse May 19, 2026
03375d4
chore(restructure): move hooks -> openshorts/overlays/hooks.py
vansteenbergenmatisse May 19, 2026
285b30f
chore(restructure): split subtitles -> overlays/subtitles_{generate,r…
vansteenbergenmatisse May 19, 2026
830dff4
chore(restructure): split editor -> editing/ai_filters + editing/prom…
vansteenbergenmatisse May 19, 2026
0546eb0
chore(restructure): split thumbnail -> thumbnails/{titles,images,desc…
vansteenbergenmatisse May 19, 2026
5680eea
chore(restructure): split main.py -> video/* + ml/* + ingest/youtube.py
vansteenbergenmatisse May 19, 2026
db5f0d9
chore(restructure): move saasshorts -> openshorts/saas/pipeline.py
vansteenbergenmatisse May 19, 2026
3169c48
chore(restructure): add openshorts/app.py re-export for Docker entryp…
vansteenbergenmatisse May 19, 2026
c2204d9
chore(restructure): add openshorts/video/ffmpeg.py wrapper scaffold
vansteenbergenmatisse May 19, 2026
84310c7
chore(restructure): Dockerfile CMD points at openshorts.app:app
vansteenbergenmatisse May 19, 2026
6496d69
docs(env): expand .env.example to match what the code actually reads
vansteenbergenmatisse May 19, 2026
a32e8e5
chore(tooling): add CLAUDE.md auto-updater + pre-commit hook
vansteenbergenmatisse May 19, 2026
726bfd3
docs(claude.md): rewrite with structured guidance + auto-managed sect…
vansteenbergenmatisse May 19, 2026
9e68944
docs(claude.md): add per-folder sub-CLAUDE.md stubs for high-rule areas
vansteenbergenmatisse May 19, 2026
1dd4b9a
docs(roadmap): design future features + document deferred refactors
vansteenbergenmatisse May 19, 2026
55f0ef1
chore(restructure): split repo into backend/ + frontend/ + renderer/ …
vansteenbergenmatisse May 19, 2026
3d2b4f8
feat(brand-kit): brand kit settings + font upload + port refresh
vansteenbergenmatisse May 20, 2026
667a88e
feat(ui): phase 1 — shell + theme + routing skeleton
vansteenbergenmatisse May 20, 2026
337b509
feat(ui): phase 2 — Settings VS-Code layout + notifications + tooltips
vansteenbergenmatisse May 20, 2026
97b7eff
feat(ui): phase 3 — short-form 4-step wizard + UI primitives
vansteenbergenmatisse May 20, 2026
95ca831
feat(ui): phase 4 — long-form 4-step wizard + Dashboard
vansteenbergenmatisse May 20, 2026
43c2d96
fix(smoke-test): runtime bugs + Codex H1/H2/M3 remediation
vansteenbergenmatisse May 20, 2026
93f5907
docs(roadmap): add product roadmap + smoke-test follow-ups
vansteenbergenmatisse May 20, 2026
7d073cb
fix(short-form): normalize backend job status + result key
vansteenbergenmatisse May 20, 2026
fce9773
chore(docs): consolidate project CLAUDE.md into ~/.claude/CLAUDE.md
vansteenbergenmatisse May 20, 2026
0f84433
fix(short-form): probe duration on Upload + freshen HANDOFF
vansteenbergenmatisse May 20, 2026
1146194
feat(short-form): auto-pipeline + reactive key gate + Brand-Kit subti…
vansteenbergenmatisse May 20, 2026
f5f8e24
feat(short-form): Phase 2 — /api/colorgrade + /api/silencecut + auto-…
vansteenbergenmatisse May 20, 2026
b99a87e
fix(short-form): re-transcribe silence-cut clips + refresh stale Phas…
vansteenbergenmatisse May 20, 2026
f21736f
chore: ignore session-local artifacts (.session/ + .compact-ultra sym…
vansteenbergenmatisse May 20, 2026
6a38cf1
feat(short-form): Phase 3 — per-clip stage selector + LUT picker in R…
vansteenbergenmatisse May 20, 2026
3b52cd6
docs(ai-restyle): design spec for new sidebar product
vansteenbergenmatisse May 20, 2026
917ba99
docs(ai-restyle): implementation plan + roadmap entry
vansteenbergenmatisse May 20, 2026
c7e3db9
feat(short-form): Phase 4 — merge endpoint + checkbox/modal UI in Review
vansteenbergenmatisse May 20, 2026
6096632
fix(short-form): Phase 5 — atomic rename for /api/merge output
vansteenbergenmatisse May 20, 2026
12f07f1
fix(short-form): Phase 5 — reject negative clip_index in 5 legacy per…
vansteenbergenmatisse May 20, 2026
6d1f0f2
fix(short-form): Phase 5 — default timeout on FFmpeg wrapper (deferre…
vansteenbergenmatisse May 20, 2026
a021046
fix(short-form): Phase 5 — migrate 3 modules to FFmpeg wrapper
vansteenbergenmatisse May 20, 2026
1761e6e
fix(short-form): Phase 5 — allowlist LLM-produced FFmpeg filter strings
vansteenbergenmatisse May 20, 2026
0bad832
fix(short-form): Phase 5 — per-job lock + atomic metadata writes
vansteenbergenmatisse May 20, 2026
0dc1cfc
chore(tests): regenerate OpenAPI baseline for FastAPI/Pydantic render…
vansteenbergenmatisse May 20, 2026
6aeb90f
feat(ai-restyle): ml/frame_extract first-frame extractor
vansteenbergenmatisse May 20, 2026
aba8a52
feat(ai-restyle): ml/frame_relight Nano Banana wrapper + safety const…
vansteenbergenmatisse May 20, 2026
84f0f11
feat(ai-restyle): integrations/fal + ml/video_restyle (v2v wrapper)
vansteenbergenmatisse May 20, 2026
260b285
feat(ai-restyle): restyle/pipeline 7-step orchestrator
vansteenbergenmatisse May 20, 2026
1e6b6e2
feat(ai-restyle): POST/GET /api/restyle routes (Phase 3)
vansteenbergenmatisse May 20, 2026
6eb0cc2
feat(ai-restyle): preset store (localStorage + event broadcast)
vansteenbergenmatisse May 20, 2026
7d432ed
feat(ai-restyle): Settings tab with preset CRUD (star/edit/delete)
vansteenbergenmatisse May 20, 2026
0cc0c3e
feat(ai-restyle): 3-step wizard + sidebar entry + top-level route
vansteenbergenmatisse May 20, 2026
d5eb949
fix(ai-restyle): allowlist fal hostnames on queue + download URLs
vansteenbergenmatisse May 21, 2026
17b784b
fix(ai-restyle): preflight Content-Length + tighter file cap (250MB)
vansteenbergenmatisse May 21, 2026
d215ad6
docs(ai-restyle): roadmap entry + CLAUDE.md module-map refresh
vansteenbergenmatisse May 21, 2026
26c0f1f
docs(settings): reflect AI Restyle's use of Gemini + fal.ai keys
vansteenbergenmatisse May 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 67 additions & 7 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,9 +1,69 @@
# AWS S3 (optional — for clip backup/gallery)
AWS_ACCESS_KEY_ID=your_aws_access_key_here
AWS_SECRET_ACCESS_KEY=your_aws_secret_key_here
# =============================================================================
# OpenShorts environment configuration
#
# Copy this file to `.env` (gitignored) and fill in the values you need.
# Most API keys are stored encrypted in the browser and sent via headers — they
# do NOT need to be set here unless you want a server-side fallback.
# =============================================================================

# --- Required (server-side reads via os.getenv) -----------------------------

# Google Gemini API key — used by the viral-clip extractor in main.py.
# https://ai.google.dev/gemini-api/docs/api-key
GEMINI_API_KEY=

# --- Optional: AWS S3 (clip backup + public gallery) ------------------------

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_REGION=eu-west-3
AWS_S3_BUCKET=your-bucket-name
AWS_S3_PUBLIC_BUCKET=your-public-bucket-name
AWS_S3_BUCKET=
AWS_S3_PUBLIC_BUCKET=

# --- Optional: YouTube ingestion --------------------------------------------

# Disable the YouTube URL ingest tab entirely (uploads-only mode).
DISABLE_YOUTUBE_URL=false

# Netscape-format cookies (concatenated into one line) to bypass YouTube's
# bot-detection on server IPs. yt-dlp writes this to /app/cookies.txt at
# container startup.
# YOUTUBE_COOKIES=

# --- Optional: Remotion render service --------------------------------------

# Used by the backend to call the renderer.
# Default uses Docker's internal network (service name + container port).
# If you run the backend OUTSIDE Docker, change to: http://localhost:3003
RENDER_SERVICE_URL=http://renderer:3100

# --- Tuning -----------------------------------------------------------------

# Max concurrent video-processing jobs (asyncio semaphore in the job queue).
MAX_CONCURRENT_JOBS=5

# AI Restyle upload cap (megabytes). The /api/restyle route does a Content-Length
# preflight before touching disk; requests above this return 413 immediately.
AI_RESTYLE_MAX_FILE_SIZE_MB=250

# =============================================================================
# Frontend (dashboard/) — Vite reads these at build time
# =============================================================================

# Production API URL override (defaults to relative paths in dev).
VITE_API_URL=http://localhost:3002

# Optional salt for localStorage API-key encryption.
# VITE_ENCRYPTION_KEY=

# =============================================================================
# Client-side keys (stored encrypted in the browser, sent via headers per-call)
#
# These are listed here for reference. The Python code does NOT read them from
# .env — set them in the dashboard UI instead. Listed below in case you want
# a server-side default (would require code changes in app.py to honor them).
# =============================================================================

# YouTube cookies (optional — paste Netscape-format cookies to bypass bot detection)
# YOUTUBE_COOKIES=...
# ELEVENLABS_API_KEY=
# UPLOAD_POST_API_KEY=
# FAL_KEY=
14 changes: 14 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@
__pycache__/
*.pyc

# Editable-install / build artifacts
*.egg-info/
build/
dist/

# Temporary files / runtime dirs
temp_*
uploads/
Expand All @@ -33,10 +38,19 @@ output/
# Cache dirs
.cache/
.config/
.pytest_cache/

# Test ephemera (baseline.openapi.json IS committed; current is not)
backend/tests/snapshots/current.openapi.json
backend/tests/fixtures/smoke.mp4
# Multi-agent Skills
.agents/
.agent/
.claude/
skills/
skills-lock.json

# Session-local artifacts (handovers, test screenshots) — not for git
.session/
.compact-ultra

10 changes: 10 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
repos:
- repo: local
hooks:
- id: update-claude-md
name: Regenerate CLAUDE.md auto-managed sections
entry: python scripts/update_claude_md.py
language: system
pass_filenames: false
always_run: true
stages: [pre-commit]
102 changes: 0 additions & 102 deletions CLAUDE.md

This file was deleted.

Loading