Commit Graph

  • 618ba9af49 - Implement end-to-end cinematic highlight rendering pipeline - Wire visual effects and local asset generation into highlight flow - Add director plan rendering with local asset worker main JSLMPR 2026-07-12 01:20:18 +0200
  • adc979eea8 Add local CV worker readiness checks JSLMPR 2026-07-11 17:46:40 +0200
  • 80eca92d56 Add highlight rendering gap closure plan JSLMPR 2026-07-11 17:26:36 +0200
  • 8195b58552 Add rich video editing diagnostics JSLMPR 2026-07-11 17:11:35 +0200
  • e2f49e2e5a Add managed local CV worker startup JSLMPR 2026-07-11 16:50:54 +0200
  • 9dc720b0cc Add runnable local CV model worker JSLMPR 2026-07-11 16:40:59 +0200
  • 82e557905e Add local CV visual analysis provider JSLMPR 2026-07-11 10:49:11 +0200
  • eea619a2d3 Add highlight visual analysis JSLMPR 2026-07-11 10:35:07 +0200
  • fc17578549 Add highlight audio analysis JSLMPR 2026-07-11 10:23:07 +0200
  • 5d5f8022f2 Add highlight scene segmentation JSLMPR 2026-07-11 10:16:07 +0200
  • ed337c1268 Add highlight source analysis JSLMPR 2026-07-11 09:59:55 +0200
  • 0b6e5afddf Add highlight source scheduler JSLMPR 2026-07-11 09:50:11 +0200
  • 5ba108f740 Add highlight project folder contract JSLMPR 2026-07-11 09:42:55 +0200
  • 9536928054 Add cinematic edit approval gate JSLMPR 2026-07-11 09:36:56 +0200
  • 2dc3ec97f4 Add cinematic benchmark metrics JSLMPR 2026-07-11 09:28:13 +0200
  • 72a0626ab7 Add cinematic category fixture integration tests JSLMPR 2026-07-11 01:29:23 +0200
  • 2ec2b9c37f Add cinematic editing operator runbook JSLMPR 2026-07-11 01:26:46 +0200
  • 9b56e89b4c Add cinematic render QA report JSLMPR 2026-07-11 01:25:38 +0200
  • 2d0c331710 Add cinematic dynamic crop rendering JSLMPR 2026-07-11 01:20:39 +0200
  • bb23ac80e1 Add cinematic audio mastering filters JSLMPR 2026-07-11 01:16:14 +0200
  • 43fccb7dc6 Render cinematic text overlays JSLMPR 2026-07-11 01:06:38 +0200
  • 376bc41685 Add local cinematic asset library JSLMPR 2026-07-11 01:02:38 +0200
  • e3d69ad209 Add cinematic edit asset provider interfaces JSLMPR 2026-07-11 00:59:04 +0200
  • 3348ae8e5d Validate cinematic edit plans JSLMPR 2026-07-11 00:54:52 +0200
  • 5006dfd50b Add category-aware cinematic highlight planning JSLMPR 2026-07-11 00:50:12 +0200
  • 5d889b00dc • working version but not cinematic JSLMPR 2026-07-11 00:32:46 +0200
  • 13b7dc4cdf Complete cinematic editing implementation plan JSLMPR 2026-07-10 19:10:34 +0200
  • e5a86257d1 Document local AI director workflow JSLMPR 2026-07-10 19:05:19 +0200
  • 051f4e56d0 Add cinematic editing integration test JSLMPR 2026-07-10 19:00:40 +0200
  • 8fc85320e9 Add cinematic edit observability JSLMPR 2026-07-10 18:58:57 +0200
  • c3904b75c2 Add voiceover generation hook JSLMPR 2026-07-10 18:53:34 +0200
  • 1c3db181a3 Add edit sound effect cues JSLMPR 2026-07-10 18:47:18 +0200
  • e2037a7629 Add basic edit transitions JSLMPR 2026-07-10 16:19:05 +0200
  • c3c6c7a790 Add edit render manifest JSLMPR 2026-07-10 16:16:13 +0200
  • a3ca4826f5 Add edit audio mixing JSLMPR 2026-07-10 16:15:09 +0200
  • 46a4982ef9 Add concat edit timeline rendering JSLMPR 2026-07-10 16:13:59 +0200
  • 21e5cef45d Add normalized edit segment rendering JSLMPR 2026-07-10 16:08:08 +0200
  • 2b4c5992a6 Add edit plan API JSLMPR 2026-07-10 16:00:49 +0200
  • 4979e4da25 Add strict edit plan validation JSLMPR 2026-07-10 15:55:59 +0200
  • a3317cfb43 Add edit plan inbox pickup JSLMPR 2026-07-10 15:52:35 +0200
  • 9c0a2e88e3 Add local director project scheduler JSLMPR 2026-07-10 15:43:04 +0200
  • f8d0bc874e Add local AI director prompt generation JSLMPR 2026-07-10 15:38:16 +0200
  • 8a1dd0ac3a Add cinematic storyboard prompt generation JSLMPR 2026-07-10 15:35:15 +0200
  • 0ccfd99147 Add cinematic analysis writer JSLMPR 2026-07-10 15:30:37 +0200
  • a5b8ed10a3 Add cinematic proxy generation JSLMPR 2026-07-10 15:24:28 +0200
  • d7712bbc01 Add cinematic contact sheet generation JSLMPR 2026-07-10 15:17:45 +0200
  • b736df6cad Add cinematic thumbnail extraction JSLMPR 2026-07-10 15:15:00 +0200
  • 67f0a0d423 Add cinematic ffprobe clip inspection JSLMPR 2026-07-10 15:06:59 +0200
  • 28fbfadd6e Add cinematic edit clip discovery JSLMPR 2026-07-10 14:57:00 +0200
  • 8d8180dc61 Add cinematic edit project API JSLMPR 2026-07-10 14:53:02 +0200
  • 0d4752897d Add cinematic edit domain model JSLMPR 2026-07-10 14:48:42 +0200
  • fdd8309311 Add cinematic edit project store JSLMPR 2026-07-10 14:41:52 +0200
  • 754bf35cbe Add cinematic editing configuration JSLMPR 2026-07-10 14:30:18 +0200
  • bd7b209f8e Plan cinematic edit generation workflow JSLMPR 2026-07-10 14:15:12 +0200
  • 7fd92a72df Configure folder scheduler in YAML JSLMPR 2026-07-10 12:24:16 +0200
  • b61ab0604a Improve folder scheduler diagnostics JSLMPR 2026-07-10 10:14:24 +0200
  • c08acb5f18 Complete folder scheduler verification JSLMPR 2026-07-10 09:03:31 +0200
  • 8e67566f0d Document local folder scheduler profile JSLMPR 2026-07-10 08:58:25 +0200
  • 90cadbe097 Add real FFmpeg scheduler integration test JSLMPR 2026-07-10 08:56:51 +0200
  • f96d0689e1 Complete scheduler state transition tests JSLMPR 2026-07-10 08:45:58 +0200
  • 4b0be45be0 Handle scheduled clipping failures JSLMPR 2026-07-10 08:44:54 +0200
  • 020edf9821 Archive successfully clipped sources JSLMPR 2026-07-10 08:41:34 +0200
  • aaacd7f592 Generate exact FFmpeg folder clips JSLMPR 2026-07-10 08:35:39 +0200
  • cf28898ecf Reject invalid scheduled inputs JSLMPR 2026-07-10 08:29:01 +0200
  • 146c37b091 Add ffprobe video validation JSLMPR 2026-07-10 02:06:24 +0200
  • 45092e23b0 Implement scheduler input claiming JSLMPR 2026-07-10 01:38:33 +0200
  • 702d768e33 • Added missing tests and a 100% coverage gate for the new folder scheduler package. JSLMPR 2026-07-10 01:02:08 +0200
  • 97cc4ff4e4 • Implemented the next Input Folder Scheduler Plan milestone: startup directory initialization. JSLMPR 2026-07-10 00:52:40 +0200
  • 1cda571c30 • clip video locally plan JSLMPR 2026-07-10 00:49:29 +0200
  • 06cf76e318 • Added the signoff artifact at docs/load-test-signoff.md and marked Load-test signoff complete in docs/video-clipping-service-implementation-plan.md:726. JSLMPR 2026-07-10 00:30:56 +0200
  • 2cb35ae01a • Added the DLQ redrive artifact at docs/dlq-redrive-procedure.md and marked DLQ redrive procedure complete in docs/video-clipping-service-implementation-plan.md:725. JSLMPR 2026-07-10 00:29:26 +0200
  • 9d284104a8 • Added the backup/restore validation artifact at docs/backup-and-restore-validation.md and marked Backup and restore validation complete in docs/video-clipping-service-implementation-plan.md:724. JSLMPR 2026-07-10 00:27:26 +0200
  • 16152f38ce • Added the runbook artifact at docs/runbooks.md and marked Runbooks complete in docs/video-clipping-service-implementation-plan.md:723. JSLMPR 2026-07-10 00:22:35 +0200
  • cec13dfb1b Added the next operational-readiness artifact in docs/alerts.md and marked Alerts complete in docs/video-clipping-service-implementation-plan.md:722. JSLMPR 2026-07-10 00:20:31 +0200
  • 1d0952c363 Updated the prompt in docs/grafana-dashboard-creation-prompt.md so the VPS AI now has the full next-step instructions: generate the dashboard JSON, save it to dashboards/video-clipping-overview-grafana.json, and verify the result before finishing. JSLMPR 2026-07-10 00:17:51 +0200
  • 4d00b5e32b I added an importable Grafana dashboard at dashboards/video-clipping-overview-grafana.json:1 and the companion setup note in docs/dashboards.md:1. The dashboard covers queue backlog and age, DLQ and processing counts, API request rate and p95 latency, plus CPU and heap usage using the Prometheus and Micrometer metrics already exposed by the service. JSLMPR 2026-07-10 00:14:13 +0200
  • 1b9246bafe I added a reproducible cost-model harness in src/test/java/org/example/videoclips/perf/CostModelBenchmarkHarness.java:1 that turns the checked-in FFmpeg and object-storage benchmark baselines into per-source-minute estimates under explicit planning assumptions. The checked-in companion doc is docs/cost-model-by-video-minute.md:1, and it now includes the modeled baseline table: JSLMPR 2026-07-09 19:04:23 +0200
  • 632959104b • The next step is done and the plan is updated. Autoscaling policies is now marked complete in docs/video-clipping-service-implementation-plan.md:717. JSLMPR 2026-07-09 19:00:31 +0200
  • 5565298351 • I completed the next plan item and updated the checklist. Queue visibility-timeout tuning is now marked done in docs/video-clipping-service-implementation-plan.md:716. JSLMPR 2026-07-09 18:37:57 +0200
  • f46055c972 • The next plan item is done and the plan is updated. Object-storage bandwidth tests is now marked complete in docs/video-clipping-service-implementation-plan.md:713. JSLMPR 2026-07-09 01:33:24 +0200
  • 9ffe9bca5c I continued with the next plan step and updated the plan. JSLMPR 2026-07-09 01:25:04 +0200
  • e18c2cd9a9 • I completed the next plan step and updated the plan. Security review is now marked done in docs/video-clipping-service-implementation-plan.md:701. JSLMPR 2026-07-09 01:19:43 +0200
  • a660b7c1d8 I completed the next step, Full application/problem+json error model, and updated the plan in docs/video-clipping-service-implementation-plan.md:701. JSLMPR 2026-07-09 01:14:38 +0200
  • 1737d8b220 I finished the missing part: retryable DB-queue failures no longer become terminal job failures on the first exception. ClipProcessor now supports non-terminal queue retries, the DB queue adapter reschedules retries and only marks the job FAILED when the message actually moves to DLQ, and retry/DLQ events are recorded at the job level. The key changes are in src/main/java/org/example/videoclips/processing/ClipProcessor.java:37 and src/main/java/ org/example/videoclips/queue/DatabaseBackedClipJobQueueAdapter.java:18. JSLMPR 2026-07-09 01:10:53 +0200
  • 1bd879f1e2 I completed the next plan step, Tenant quotas, and updated the plan to mark it done in docs/video-clipping-service-implementation-plan.md:701. JSLMPR 2026-07-09 01:07:07 +0200
  • 8548542248 • I updated the milestone section in docs/video-clipping-service-implementation-plan.md:688 to mark what is already done and to show Retry and DLQ handling as in progress rather than untouched. JSLMPR 2026-07-09 00:59:22 +0200
  • 0d45f898f7 I continued with the security-review step from the plan and tightened the API contract so internal storage locations no longer leak out of normal responses. JSLMPR 2026-07-09 00:53:12 +0200
  • 73070824df I changed the signed clip download flow so it uses the clip’s persisted objectKey instead of deriving a fake path from clipId. The fix is in src/main/java/org/example/videoclips/application/ VideoAssetService.java, src/main/java/org/example/videoclips/storage/ObjectStoragePort.java, src/main/java/org/example/videoclips/storage/InMemoryObjectStorageAdapter.java, and src/main/java/org/ example/videoclips/storage/S3ObjectStorageAdapter.java. JSLMPR 2026-07-09 00:33:30 +0200
  • 8cb232d70e Assets and clips now carry expiration timestamps in the domain model: JSLMPR 2026-07-09 00:28:05 +0200
  • 3d961f2adf The new cleanup job is in src/main/java/org/example/videoclips/operations/LocalArtifactCleanupJob.java. It runs on a schedule and removes expired files from: JSLMPR 2026-07-09 00:23:41 +0200
  • 8f4804c2ab src/main/java/org/example/videoclips/processing/ClipProcessor.java now cleans up staged local input/output files in a finally block, so worker temp files are removed on success and failure instead of accumulating. Cleanup is controlled by the new video-clipping.ffmpeg.cleanup-local-files property wired through src/main/java/org/example/videoclips/config/VideoClippingProperties.java and src/main/resources/application.properties. JSLMPR 2026-07-09 00:21:36 +0200
  • abf1259397 The ClipProcessor symbol issue is fixed now. JSLMPR 2026-07-09 00:19:44 +0200
  • 66e998ee2a Generated clips now have a persisted object location instead of being metadata-only. I added objectKey to src/main/java/org/example/videoclips/domain/Clip.java, mapped it through JPA in src/main/ java/org/example/videoclips/persistence/entity/ClipEntity.java and src/main/java/org/example/videoclips/persistence/JpaVideoClippingMapper.java, and added the schema migration at src/main/ resources/db/migration/V5__clip_object_key.sql. JSLMPR 2026-07-09 00:16:49 +0200
  • bd620fc773 The storage port now has a real staging operation: JSLMPR 2026-07-09 00:02:05 +0200
  • 9df97362ba The core change is that VideoAsset now carries sourceObjectKey, and that value is persisted through the JPA entity and migrations: JSLMPR 2026-07-08 23:57:09 +0200
  • 7e8a214c3e uploads:complete now goes through the storage port instead of being a pure metadata flip. I added provider upload metadata to UploadSession, wired it through src/main/java/org/example/videoclips/ application/VideoAssetService.java, src/main/java/org/example/videoclips/storage/ObjectStoragePort.java, and the JPA upload-session mapping, and added a migration at src/main/resources/db/ migration/V3__upload_session_provider_metadata.sql. The storage adapters now expose completeMultipartUpload(...), with the in-memory adapter as a no-op and the S3 adapter implementing the AWS multipart completion call. JSLMPR 2026-07-08 23:54:16 +0200
  • 67c7b65639 The storage port now has an opt-in S3-compatible implementation in src/main/java/org/example/videoclips/storage/S3ObjectStorageAdapter.java. It uses the AWS SDK presigner to generate multipart upload part URLs and signed clip download URLs when video-clipping.storage=s3. The current in-memory adapter remains the default. I also added the supporting configuration fields in src/main/ java/org/example/videoclips/config/VideoClippingProperties.java and default values in src/main/resources/application.properties. JSLMPR 2026-07-08 23:47:05 +0200
  • 517a4e1146 The service now has an opt-in JPA/Flyway adapter instead of only the in-memory repository. I introduced VideoClippingRepository as the application-facing persistence contract and wired both src/ main/java/org/example/videoclips/infrastructure/InMemoryVideoAssetRepository.java and the new src/main/java/org/example/videoclips/persistence/JpaVideoClippingRepository.java behind it. The JPA path includes entity models, Spring Data repositories, a mapper, and a Flyway baseline migration at src/main/resources/db/migration/V1__init_video_clipping.sql. I also added the required dependencies in pom.xml. JSLMPR 2026-07-08 22:44:18 +0200
  • 067fc782a3 DELETE /v1/video-assets/{assetId} now does more than flip a flag. In src/main/java/org/example/videoclips/application/VideoAssetService.java it now: JSLMPR 2026-07-08 22:39:54 +0200
  • bcf2fa40bb This pass added explicit upload-session state and stricter media validation. GET /v1/video-assets/{assetId}/upload-session is now implemented in src/main/java/org/example/videoclips/api/ VideoAssetController.java, backed by richer UploadSession metadata in src/main/java/org/example/videoclips/domain/UploadSession.java. The service now stores part size, part count, expiry, and completion time, and returns them through src/main/java/org/example/videoclips/application/VideoAssetService.java. I also added a configurable media-type allowlist in src/main/java/org/example/ videoclips/config/VideoClippingProperties.java and reject unsupported uploads with 415 via src/main/java/org/example/videoclips/application/UnsupportedMediaTypeException.java and src/main/java/ org/example/videoclips/api/ApiExceptionHandler.java. JSLMPR 2026-07-08 22:28:20 +0200