Adds a per-request BLOCK_ONLY_HIGH safety level option so users can
generate creative content that the default filters would otherwise block.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kling video generation:
- Full T2V, I2V, extend, and lip sync workflows via Kling API
- V3, V2.6, V2.5 Turbo, V2.1 Master, V1.6 model support
- Resolution selector (720p std / 1080p pro) with model constraints
- Native audio toggle with dialogue input for Kling
- Video ID tracking for extend and lip sync chains
- Camera control presets (pan, tilt, arc)
Prompt optimizer rework:
- Intent-preserving refinement (camera, action, mood are sacred)
- Mode-aware: T2V adds subject/environment detail, I2V describes only motion
- Reference images analyzed for content, not re-described
- Platform-specific quality anchors woven into positive prompt
- Negative prompts removed from optimizer (positive-only approach)
- 15-60 word target for concise, effective prompts
Backend fixes:
- Gemini responseModalities: ['TEXT', 'IMAGE'] for Flash model compatibility
- Veo first-frame resize to exact target dimensions (prevents letterboxing)
- Session directory re-creation in saveImage (auto-cleanup race condition)
- Kling API error logging with HTTP codes and payload details
- Lip sync endpoint updated to /v1/videos/lip-sync with video_id
Frontend stability:
- Tab persistence via CSS hidden (generation survives tab switches)
- Project switch protection (confirm dialog when generation in progress)
- Retina thumbnails (480px/q0.8) for library grid — prevents OOM crashes
- Thumbnail backfill migration for existing project items
- Project items refresh on tab visibility and after save
- 1:1 aspect ratio container for Kling videos
- Expanded video view matches library modal behavior
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Integrates Kling AI as a second video engine in the Video Gen tab with
three cinema-relevant workflows: Generate (T2V/I2V with camera control),
Extend (video extension up to 3 min), and Lip Sync (image + audio).
Backend: New kling_api.php with pure PHP JWT auth, all workflows, async
status polling, and CDN video download. Env files updated with Kling
credential placeholders.
Frontend: Engine selector toggle, workflow-specific settings panels,
Kling polling, engine badges in ProjectsTab, rerun support.
Also includes image model toggle changes (Gemini Pro/Flash).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Features:
- Custom user presets: Create, edit, delete, export/import lighting presets
stored in IndexedDB (useCustomPresets.js hook, DB schema v3→v4)
- Identity protection: LLM-mediated name-to-style translation prevents
generating recognizable real people while preserving style references.
Active divergence breaks likeness convergence. Defense-in-depth across
both prompt paths + generateImage() fallback
- Video negative prompts: AI auto-generates suggested negative prompts
during Veo 3.1 prompt optimization. Collapsible editable textarea
teaches creatives what to exclude. Sent as negativePrompt parameter
- Generate Video from Library: Image preview modal now has a gold
"Generate Video" button that loads the image as a first frame reference
- Expanded preview overlays: Maximize button on generated images and
videos opens a large centered overlay (90vw, not fullscreen)
- Move items between projects: ArrowRightLeft button in Library list
and preview modal
- Preset display in Library: Shows which preset was used per generation
Backend improvements:
- video_api.php: negativePrompt passthrough to Veo 3.1 parameters,
lastFrame interpolation works with fast model (8s required)
- api.php: Exponential backoff retry (3 attempts), increased memory/
POST limits for 4K images, user-friendly 500 error messages
- enhance_prompt.php: User lighting intent now respected over preset
defaults (critical fix for night/sunset scene descriptions)
- session_manager.php: Fix images subdirectory creation race condition
Infrastructure:
- SSO made conditional via VITE_SSO_ENABLED env variable — hooks only
called when SSO is active, local dev bypasses auth cleanly
- .gitignore updated for root-level generated_videos/, uploads/,
config.php, backend/php.ini, Prompt_Studio/
- Wire up dead getNegativeConstraints() code in both prompt paths
No env files or secrets included. Production deploys via deploy.sh
using .env.production templates (SSO_ENABLED configurable per env).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>