Replace the generic song generation prompt with pet-specific prompt
templates. Each pet type (Dog, Cat, Fish, Bird, Hamster, Gerbil,
Guinea Pig, Rabbit, Bearded Dragon, Leopard Gecko, Corn Snake) now
has its own tailored prompt with pet-specific behaviors and content
restrictions.
Also fix typo: "Beared Dragon" → "Bearded Dragon" in schemas.py and
home.js. The prompts.py file includes backwards compatibility for the
old spelling to handle any pending database records.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The queue-status endpoint now fetches credits from the Sonauto API
when the Redis cache is empty/zero, making the admin dashboard
more reliable.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Sonauto rejects custom tag values. The prompt already contains all
necessary style and content guidance, so tags are not needed.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Sonauto only accepts specific predefined tags. The custom frontend
music vibes (Hip-Hop, Boy Band, etc.) were being rejected with 422.
Now using fixed tags ["love song", "valentine"] and including the
music vibe in the prompt text instead.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Stream endpoint:
- Increase read timeout to 600s for progressive audio generation
- Use larger 16KB chunks for smoother playback
- Remove misleading Accept-Ranges header (we don't support range requests)
- Add logging for stream start/completion
- Properly close httpx client after streaming
Frontend:
- Wait for 'canplay' event before attempting autoplay
- Add event listeners for play, error, stalled, waiting
- Native audio controls' play button now properly hides tap message
- Add 5s fallback timeout if canplay doesn't fire
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Frontend was updated in 1b26b7a but backend validation wasn't updated,
causing 422 errors on form submission.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Enable users to listen to their song while video generation continues
in the background. Backend proxies authenticated Sonauto stream API
since HTML audio elements cannot send auth headers.
- Add streaming_ready_at column to track when stream becomes available
- Enable streaming in Sonauto API request payload
- Handle GENERATING_STREAMING_READY webhook status
- Add /api/stream/{session_id} proxy endpoint using httpx
- Update StatusResponse with streaming_ready and task_id fields
- Add audio player UI with autoplay fallback for mobile
- Fade out audio gracefully before redirect to result page
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use wait() instead of communicate() after manually closing stdin.
communicate() tries to flush stdin which fails if already closed.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Only use the music_vibe as the tag - "love song" and "valentine"
are not valid Sonauto API tags.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Python/FastAPI backend with Celery workers
- Add video generation with FFmpeg (spinning record animation)
- Add API endpoints: submissions, status polling, webhook, results
- Add database schema and Alembic migrations
- Update frontend pages with API integration
- Add project documentation and spec
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>