Skip to main content
Media OS shares storage with capture components, while each component owns its input interface. Use VoiceNoteRecorderField for recording and SignatureField for signatures. Ordinary File Upload does not automatically transcribe audio or create signature evidence.

Voice transcription provider

Implement VoiceNoteTranscriptionInterface with your chosen transcription service:
SpeechClient is your application/provider client. Return plain text or null when no transcript is produced. Select it in media_capture:
Or register an application factory:
The factory controls its provider and any resilience wrapper. Configured class providers can use the built-in circuit breaker:
Environment equivalents: FLEX_FIELDS_MEDIA_TRANSCRIPTION, FLEX_FIELDS_TRANSCRIPTION_CIRCUIT_BREAKER, FLEX_FIELDS_TRANSCRIPTION_CB_THRESHOLD, FLEX_FIELDS_TRANSCRIPTION_CB_OPEN_SECONDS. Use the resolver from an application service:

Signature evidence

The service captures configured signer/document information and request/timestamp facts. Configure the signer and document through your signature workflow. Evidence is not identity verification or a guarantee of legal validity.

Configure signer and document context

Register trusted server resolvers in your service provider:
CurrentSigningDocument is your application service for the document actually being signed. Do not accept an arbitrary client hash as evidence of that document. clientIp() and userAgent() expose the captured request facts if your application needs them separately.

Retention

Age-based retention is independently configurable for uploads, voice notes, signatures and temporary captures. Upload/signature retention is off by default. Limit disk retention to dedicated directories that your application is allowed to expire. Preview the configured retention sweep:
Run the same configured sweep:
For a programmatic, bounded disk sweep:
Disk retention compares file modification age and does not inspect model references. It differs from staging cleanup, which preserves uncertain permanent writes.

Spatie retention

This only selects media bearing the package’s capture provenance. Configure media_capture.spatie.prune_collections for the command:
Set media_capture.retention.uploads.days for that command category. Full retention configuration.

Capture persistence API

Existing capture integrations can use FlexMedia::persist(). It translates typed capture context into the same storage service:
Payload factories include fromTemporaryUploadedFile, fromPath, fromStream and fromInlineString. Context supports disk/directory/filename, record/collection, display name, conversion disk, custom properties, manipulations, storage headers, responsive images and correlation ID. The compatibility API may return null for policy rejection; prefer FlexMedia::store() with typed MediaFailure handling for new storage integrations. media_capture.pci.never_store_pan and require_tokenization belong to CreditCardField, not file conversion or upload metadata. Keep those settings in their payment workflow. Capture configuration.
Last modified on October 16, 2026