Commit Graph
724 Commits
Author SHA1 Message Date
MichaelandClaude Sonnet 4.6 7733acbc22 feat: Replace external storage with local file storage + auto cleanup
Media is now stored directly on the server disk (no external service).
Files are served via Express static middleware at /uploads/*.

Cleanup rules:
- Videos deleted immediately after successful publish to Facebook/Instagram
- Videos older than 7 days purged daily by cron job
- Images older than 30 days purged daily by cron job

Changes:
- server/services/minio.ts: replaced S3 client with local fs read/write
- server/index.ts: added static serving for /uploads/media, /logos, /stories
- server/services/media-purge.ts: new rules (images 30d, videos 7d)
- server/services/scheduler.ts: delete local videos after successful publish
- docker-compose.yml: add media_uploads, logos_uploads, stories_uploads volumes
- settings UI: removed credentials card, shows local storage info
- package.json: removed googleapis (unneeded)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 07:35:27 +01:00
MichaelandClaude Sonnet 4.6 ba94e7cc7d feat: Add MinIO endpoint/public URL configuration via settings UI
Store endpointUrl and publicUrl in cloudinary_config DB table so
MinIO connection can be fully configured from the app settings
without needing environment variables.

- DB migration: adds endpoint_url and public_url columns
- Schema: adds endpointUrl/publicUrl to cloudinaryConfig table
- MinIO service: reads endpoint from DB (falls back to MINIO_ENDPOINT env)
- buildMinioUrl: accepts optional publicUrl override from DB config
- All routes updated to pass config.publicUrl to buildMinioUrl
- Settings UI (desktop + mobile): adds Endpoint URL and Public URL fields

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 21:19:49 +01:00
MichaelandClaude Sonnet 4.6 841ffb306c fix: add sidebar and topbar to desktop remotion video page
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 21:09:03 +01:00
MichaelandClaude Sonnet 4.6 e39fa1026d feat: replace Cloudinary with MinIO for all media storage
- Create server/services/minio.ts: S3-compatible service (same interface as
  cloudinaryService) using @aws-sdk/client-s3 and MINIO_ENDPOINT env var
- Replace all cloudinaryService imports with minioService across routes.ts,
  routes/reels.ts, routes/remotion.ts, services/media-purge.ts
- Replace Cloudinary logo URL pattern (res.cloudinary.com/...) with
  buildMinioUrl() helper throughout all server routes
- GET /api/cloudinary/config now returns a logoUrl field (full MinIO URL)
  so clients never need to build the URL themselves
- Update settings pages (desktop + mobile): labels changed to MinIO
  (Bucket Name, Access Key, Secret Key)
- Update image-editor.tsx: remove Cloudinary URL transformation, use logoUrl
- Update media-utils.ts: simplify getVideoThumbnailUrl (no URL transforms)
- Add MINIO_ENDPOINT and MINIO_PUBLIC_URL to docker-compose.yml + .env.example
- DB table reuse: cloudinary_config.cloud_name = bucket, api_key = access key,
  api_secret = secret key — no migration needed

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 21:05:37 +01:00
MichaelandClaude Sonnet 4.6 b0e11cb8ab feat: clean up desktop remotion page — remove preview player and unused code
Remove Player, ImageComposition, useMemo imports, estimateWordTimings,
stripForTTS, cloudinaryConfig query, and all preview-related computed values
from the desktop page. Same cleanup already applied to mobile page.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 20:29:04 +01:00
MichaelandClaude Sonnet 4.6 ff5e02e30d feat: clean up mobile remotion page — remove preview player and download button
Remove unused Player, ImageComposition, useMemo imports and all associated
computed values (combinedUrls, previewWordTimings, ENDING_FRAMES, totalFrames,
previewLogoUrl, previewStoreName, cloudinaryConfig query). Remove Aperçu card
with broken Player preview, download button, and conditional generate button wrapper.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 20:27:55 +01:00
MichaelandClaude Sonnet 4.6 36fe05c04b feat: show 3 words at a time in text overlay (TikTok style)
Groups word timings by chunks of 3. The active word is highlighted in
yellow/scaled; the 2 surrounding words show in white. Gives enough
reading time while staying in sync with the voice.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 19:41:29 +01:00
MichaelandClaude Sonnet 4.6 4072f8954f feat: add publication scheduling to Remotion video generator
- New POST /api/remotion/publish endpoint: uploads MP4 to Cloudinary,
  creates post/media records, publishes or schedules per-page as a Reel
- Desktop and mobile pages show page selector + DateTimePicker + description
  after video generation, matching the Reels publication workflow

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 19:36:53 +01:00
MichaelandClaude Sonnet 4.6 32c308c2af fix: use exact MP3 duration for word-timing sync instead of byte estimate
Parses the generated TTS audio file with music-metadata to get the real
duration before computing word timings, eliminating desync between text
overlay and voice playback.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 19:22:28 +01:00
MichaelandClaude Sonnet 4.6 9145bc5941 feat: add logo watermark, ending slide, 25-30s duration, and word-sync text
- Video duration forced to 25-30s (content 22-27s + 3s ending)
- Logo watermark (bottom-right) visible throughout content section
- Ending slide: logo centered + store name with spring animation (3s)
- Text overlay now shows only the active spoken word (true TikTok sync)
- Server fetches logo from Cloudinary config and store name from user's pages
- Player preview also shows logo/storeName via /api/cloudinary/config + /api/pages

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 19:13:07 +01:00
MichaelandClaude Sonnet 4.6 57c18e24df fix: switch back to Debian-slim for native glibc (posix_fallocate64 fix)
Alpine + gcompat lacks posix_fallocate64 symbol required by Remotion's Chrome
headless shell. Debian-slim has real glibc so Chrome runs correctly.
NODE_OPTIONS stays before npm install to prevent OOM during build.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 17:19:57 +01:00
MichaelandClaude Sonnet 4.6 eba9c9da5e fix: resolve music URL 404 and revert Dockerfile to Alpine + gcompat
- Convert relative music track URLs to absolute before passing to Remotion renderer
- Reverts Dockerfile from Debian-slim back to Alpine + gcompat/libc6-compat for lighter image

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 17:13:51 +01:00
Michael aa01c7a7fd chore: Optimize Docker build by setting Node.js memory before npm install and adding --no-audit --no-fund flags. 2026-03-24 17:07:16 +01:00
Michael abfb958340 deps: Add music-metadata dependency. 2026-03-24 16:55:18 +01:00
Michael 24a1d39e88 feat: Implement Remotion video generation feature, allowing users to combine images with text overlay and text-to-speech. 2026-03-24 16:44:06 +01:00
Michael 4f69a2edda feat: Add Remotion rendering API with TTS and update Dockerfile to use Debian-slim for Remotion's glibc-dependent Chrome headless shell. 2026-03-24 14:18:57 +01:00
Michael fa4e6e3131 feat: Add Remotion video rendering endpoint with image and TTS support, and enhance Dockerfile's Chromium detection logic. 2026-03-24 14:15:07 +01:00
Michael 468e65091f feat: Add Remotion video rendering API with TTS integration and configure Docker to use system Chromium for rendering. 2026-03-24 14:01:13 +01:00
Michael d97c0ed73a feat: Add Remotion video rendering endpoint with image upload, TTS generation, and dynamic word timings. 2026-03-24 13:54:37 +01:00
Michael 297af0ab0d feat: add libcap to Dockerfile and ensure Remotion browser binary is downloaded 2026-03-24 13:49:43 +01:00
Michael b15ba68b78 feat: Add Remotion video rendering endpoint with image uploads, text overlay, and TTS generation. 2026-03-24 13:39:28 +01:00
Michael e472e05a3b feat: Implement Remotion video rendering API with TTS, word timings, and Docker pre-bundling. 2026-03-24 13:33:18 +01:00
Michael d98d43cd06 feat: Add Remotion video generation page and API for image-based videos with text overlay and text-to-speech capabilities. 2026-03-24 13:28:28 +01:00
Michael 1a7cbe6af9 feat: Implement Remotion bundling and rendering scripts. 2026-03-24 13:25:22 +01:00
Michael 526e608077 feat: Implement Remotion video generation with client-side image selection and server-side rendering. 2026-03-24 12:48:53 +01:00
Michael e41c43c1da feat: Implement Remotion video generation with dedicated client UI, components, and server-side rendering. 2026-03-24 12:35:52 +01:00
Michael 177f4db455 feat: introduce FastAPI FFmpeg service for video reel creation with TTS and synchronized subtitles. 2026-03-24 08:59:28 +01:00
Michael af082eaf2f feat: Add Dockerfile for the ffmpeg-service, including FFmpeg with vidstab support and Python dependencies. 2026-03-24 08:45:35 +01:00
Michael eff432b585 feat: implement initial FFmpeg processing service with FastAPI, TTS generation, and word-level subtitles. 2026-03-24 08:39:45 +01:00
Michael e6a1fdc9da feat: Implement new FFmpeg service with FastAPI for video processing, TTS, and subtitle generation, including font management and debugging endpoints. 2026-03-19 15:00:59 +01:00
Michael 3a5acd425c feat: Implement new Reel creation functionality with dedicated mobile and desktop UIs, server-side API routes, and a new FFmpeg processing service. 2026-03-19 14:51:16 +01:00
Michael ae0048a6e1 feat: Add initial application structure, client components, server services, and extensive BMAD/BMM workflow definitions. 2026-03-17 11:39:44 +01:00
Michael 5a67ed2e83 feat: add initial API routes for Reels, including music search, popular tracks, and favorite management. 2026-03-12 16:18:09 +01:00
Michael a01194cc79 fix(cloudinary): correct method name to getCloudinaryConfig across backend 2026-03-04 14:45:38 +01:00
Michael 60c830c88b feat: implement automatic purging of old media and schedule its daily execution via cron. 2026-03-04 14:32:27 +01:00
Michael f6376cb470 Merge branch 'main' of https://github.com/R0m1k3/Socialflow 2026-03-04 14:25:06 +01:00
Michael 82befb2264 feat: Implement analytics, media management, and third-party service configurations with new settings pages. 2026-03-04 14:25:02 +01:00
Michael 7c88527501 feat: Introduce FFmpeg service with TTS, synchronized subtitles, and video stabilization features. 2026-03-03 19:26:31 +01:00
Michael 5a8c548a62 feat: Implement FastAPI service for video processing with advanced TTS generation and word-level synchronized subtitles. 2026-03-03 19:13:03 +01:00
Michael 64969b17b5 feat: Create FastAPI service for generating TTS with word-level synchronized subtitles, robust font handling, and FFmpeg diagnostics. 2026-03-03 18:19:52 +01:00
Michael 0fd7812b05 feat: Implement mobile new reel creation page with multi-step workflow for video upload, music selection, text overlay, and scheduling. 2026-03-03 16:27:48 +01:00
Michael 108f020dc5 test: add sample ASS subtitle files for subtitle generation and styling tests. 2026-03-03 14:41:09 +01:00
Michael c3356c2140 feat: Introduce ffmpeg-service using FastAPI to process video, generate TTS with synchronized subtitles, and manage fonts. 2026-03-03 14:28:01 +01:00
Michael 101e27a2fd feat: Implement new FFmpeg service for video processing, including TTS with synchronized subtitles and font management. 2026-03-03 13:59:17 +01:00
Michael b413c1ca41 feat: implement an FFmpeg processing service with FastAPI, supporting TTS, word-level subtitles, and font management. 2026-03-03 13:11:43 +01:00
Michael 9d29e7784a feat: Implement core FastAPI service for video processing with TTS generation, dynamic subtitles, and FFmpeg enhancements. 2026-03-03 12:44:32 +01:00
Michael 4fcc8cf53c feat: Add music search and favorite API routes, and introduce FFmpeg service for Reels. 2026-03-03 12:34:09 +01:00
Michael cb42558e52 Merge branch 'main' of https://github.com/R0m1k3/Socialflow 2026-03-03 12:08:29 +01:00
Michael b4e48a1f0e feat: implement FastAPI service for video processing with TTS, synchronized subtitles, and stabilization. 2026-03-03 12:08:28 +01:00
Michael ccfa2dd354 feat(mobile): use internal audio tracks for reels instead of external search 2026-03-02 21:46:38 +01:00