fix - gate ElevenLabs request stitching behind a per-model allowlist so unsupported models (e.g. eleven_v3) synthesize without previous_request_ids instead of returning HTTP 400; skip the chain-id query for non-stitching voices.
Adds a complete text-to-speech engine to the bundle: CMS articles (and admins) can request audio narration, which is synthesized via ElevenLabs or Google TTS, assembled into a playable audio asset, and optionally published as a podcast episode.
Synthesis pipeline
pending / duplicate / already_pending instead of double synthesisexpireAt and reaped by crontts:cleanup-stuck) and expired-audio reaper
(tts:clear-expired-audio) commandsVoice catalog
VoiceFamily / Voice entities with ElevenLabs and Google TTS variants (single-table
discriminator), per-ext-system provider mode (auto / forced) and voice resolution cascadeAPI
POST /api/sys/v1/audio/narration (CMS dispatch; role-gated via ROLE_SYS_SYNTHETIZE)DAM_TTS_* permissionsAsset integration
ttsAudio asset flag projected through ES (filter + search), podcast-episode membership
generalized and inheritable from asset metadata, TTS audit loggingPodcastRssReader rewritten to streaming XMLReader (fixes full-DOM OOM on large feeds)PublicExport supports a licence collection (single assetLicence deprecated, kept in sync)ROLE_SYS_SYNTHETIZE grant)anzu_core_dam_tts, cms.tts_chunk storage, TTS crons,
per-ext-system tts: config + provider credentials, Domain\Tts\Config service definitionFixed JobAuthorCurrentOptimizeProcessor duplicate rows early stop.
mainFileInternal filter support in Asset Elasticsearch index and searchJobAuthorCurrentOptimizeProcessor — improved error handling and loggingJobAuthorCurrentOptimize job processing improvementsJobSynchronizeImageChanged job with POST /api/adm/v1/job/synchronize-image-changed endpoint for batch-notifying external systems about changed imagesEqualExtSystemCollection universal validator for collections of ExtSystemInterface entities, applied on AssetLicence::$internalRuleAuthorsLicenceBulkJobTrait with shared bulk job properties (targetLicenceId, processFrom, processUntil, bulkSize)mainFileInternal and mainFileOverrideInternal flagsIDX_licence_created_at on Asset and AssetFile entitiestdm-reservation: 1) configurable per ext system image typenotificationsEnabled config option)AssetFileInternalRuleEvaluator and JobAssetFileReprocessInternalFlagUnsplashClient::getPhotoById() — fixed return type, removed duplicate API callAssetQueryFactory::applyRangeFilter() — truthiness check replaced with null check to correctly handle 0 valuesAssetQueryFactory — added format: epoch_second to createdAt range filter for correct Elasticsearch date interpretationExtend domain validation to include admin domain checks in AssetFileRouteController.
Asset elastic index for image, always move descr to title
manipulatedAt, which is updated after rotate image, crud on image rois or reprocess optimal crop.--since which is supported by entity AssetPodcastExportData which holds data for combination of DeviceType and ExportType. Entity also works with Anzutap body formatanzusystems/php:4.1.0-php83-cli-vipsffmpeg with php 8.3.20DOCKER_COMPOSE_SERVICE_NAME configuration support for flexible Docker service naminganzusystems/common-bundle to ^9.2 with mongo 2.* supportpetitpress/gps-messenger-bundle to ^3.2GOOGLE_PUBSUB_SA_KEY environment variable needed by updated petitpress/gps-messenger-bundle packageDB_CORE_DAM_BUNDLE_* instead of DB_COMMONBUNDLE_*) for better consistencybool instead of void for better error handlingbin/* scripts (bash and build scripts)add document support for ICC
src/Command/GeneratePodcastImportJobsCommand.phpAuditLogResourceHelpergetEnvironments to FixturescanBeRemovedAssetLicenceAwareVoter to work with null subjectAssetCopyEqualExtSystemValidator for not found valuesAssetFileCopiedEvent and new notification asset_file_copiedReverted default sort in AbstractQueryFactory.php
Fixed PublicExport.php create, assign ExtSystem
PodcastEpisodeFlagsPublicExport entityattributes.mobileOrderPosition, attributes.webOrderPosition, flags.mobilePublicExportEnabled, flags.webPublicExportEnabled to entities Podcast, PodcastEpisode, VideoShow, VideoShowEpisodeDistribution custom data factoriesJwDistribution provides directSourceUrlPodcast, PodcastEpisode, VideoShow, VideoShowEpisodecurrentAuthors manageEntityIterator serviceFixed setting setLastProcessedId in index builder
Elastic rebuild fixes most dominant collor and specific fields refactor.
How can I help you explore Laravel packages today?