Jump to content

Settings Architecture

Where configuration lives: extension-wide defaults, site-wide privacy, content-element player options, and per-media record fields.

VidPly TYPO3 Extension Logo

Overview

TierWhere configuredScope
Extension ConfigurationAdmin → Settings → Extension Configuration → VidPlyWhole TYPO3 installation
Site Settings (site set)Site Management → Sites → Settings, or config/sites/<id>/settings.yamlOne site
Privacy Layer SettingsList module → Privacy Layer SettingsSite-wide external-service consent copy
Player (content element)Page module → VidPly Player CEOne player instance on a page
Media recordList module → VidPly MediaReusable item (any player/listview)

See also Integrations for mp-core site settings that affect JSON-LD output.

Current Architecture

Extension Configuration (global)

Configured in Admin → Settings → Extension Configuration → mpc_vidply (ext_conf_template.txt):

SettingTypeDefaultDescription
allowedVideoDomainsstring(empty)Allow-list for external video URLs (comma/newline; wildcards supported)
allowedAudioDomainsstring(empty)Allow-list for external audio URLs
playIconstring(empty)Custom play-button image: EXT:… path, site-relative path, or HTTPS URL
allowedPlayIconDomainsstring(empty)Allow-list for external play-icon URLs (required when using HTTPS icons)
playPositionselectcenterPlay overlay position: center, corners
useCssIconsbool0Use CSS-based control-bar icons (enables theming via CSS variables)
themeselectdarkPlayer chrome: dark or light
themeSyncEnabledbool0Sync player theme with page light/dark mode (body class + custom events)

These apply to every frontend player unless overridden in Fluid/TypoScript.

Site Settings (per site)

Declared by the mpc/mpc-vidply site set (Configuration/Sets/mpc-vidply/settings.definitions.yaml). Editors and integrators change them in Site Management → Sites → your site → Settings → VidPly Player (screen reader announcements are in the Accessibility subcategory); integrators can also write them to config/sites/<id>/settings.yaml or read them in TypoScript as constants.

SettingTypeDefaultDescription
mpcVidply.screenReaderAnnouncementsbooltrueAnnounce play/pause, volume, mute, captions, fullscreen and speed changes in the player's live region
mpcVidply.resumePlaybackboolfalseRemember playback position and offer to resume on the next visit (content elements can override)
mpcVidply.embedChromevidply | providervidplyControls for YouTube and Vimeo — see below
# config/sites/<id>/settings.yaml
mpcVidply.screenReaderAnnouncements: false
mpcVidply.resumePlayback: true
mpcVidply.embedChrome: provider
 
# available as TypoScript constants
{$mpcVidply.screenReaderAnnouncements}
{$mpcVidply.resumePlayback}
{$mpcVidply.embedChrome}
 

Turning the announcements off silences the status messages the player sends to assistive technology (WCAG 4.1.3). Only do that when something else on the page already announces the same state — the player's own notices (help dialog, sign-language drag and resize hints) keep speaking either way, since they are the only feedback for the action that triggered them.

Controls for YouTube and Vimeo (mpcVidply.embedChrome)

Decides who draws the player for YouTube and Vimeo after the visitor has accepted the privacy notice. The privacy overlay itself is the same in both modes — nothing is requested from YouTube or Vimeo before consent.

ValueSingle YouTube / Vimeo itemYouTube / Vimeo tracks in a playlist
vidply (default)Plays inside the VidPly player: VidPly control bar, keyboard shortcuts, sidecar captions, chapters and transcript from the media record's Captions tabSame — the VidPly controls stay visible for embed tracks
providerThe privacy layer mounts the provider's own embed (previous behaviour); VidPly captions and transcript are not shownVidPly controls are hidden while an embed track plays; the provider's controls are used

SoundCloud is not affected: it always uses its own widget (see PrivacyLayer → Switch SoundCloud to Renderer Mode). YouTube's own captions are never shown in vidply mode; add WebVTT files to the media record instead.

The setting is passed to the player as the embedChrome option by PlayerOptionsBuilder. vidply loads the VidPly core for single YouTube and Vimeo items as well (see AssetLoading); provider keeps those pages on the lighter privacy-layer-only path.

Privacy Layer Settings (tx_mpcvidply_privacy_settings)

Site-wide settings for external service privacy layers:

SettingTypeDescription
HeadlineStringOptional headline above privacy text
Intro TextTextText before privacy policy link
Outro TextTextText after privacy policy link
Policy LinkStringURL to privacy policy page
Link TextStringText for privacy policy link
Button LabelStringAccessible label for play button

Available for YouTube, Vimeo, and SoundCloud. Supports multilingual content via sys_language_uid. Empty fields fall back to language file translations.

Player Settings (tt_content)

Global settings that apply to entire player instance:

SettingTypeDefaultDescription
Layoutselectdefaultdefault, episode, or episodes (episode card layouts)
Playlist positionselectbelowIn-player playlist panel: below or right (desktop; mobile always below). Ignored for Episode card with episode list
OptionsBitmask328Player features (see below)
Resume from last positiontoggleOffPer-element override of site-wide resume playback
Show track infotoggleOnIn-player now-playing header for single items
VolumeFloat0.8Initial volume (0-1)
Playback SpeedFloat1.0Initial speed (0.25-2x)
LanguageStringAutoUI language

Player Options (Bitmask)

BitValueOptionDefault
01AutoplayOff
12LoopOff
24MutedOff
38ControlsOn
416Captions DefaultOff
564KeyboardOn
6256Auto AdvanceOn

Default: 8 + 64 + 256 = 328

Notes:

  • Responsive sizing is always enabled (no toggle).
  • Transcript is controlled per media record (tx_mpcvidply_media.enable_transcript). The transcript UI is available if at least one selected item enables it.

Media Item Settings (tx_mpcvidply_media)

Per-item settings specific to each media record:

SettingDescription
Media Typevideo, audio, youtube, vimeo, soundcloud
Media File/URLSource file or URL
TitleTrack title
SlugURL slug for listview detail routing (auto from title)
ArtistCreator/artist name
DescriptionShort text (list cards, player)
Long descriptionRTE copy for the detail page and the episode card's disclosure
DurationLength in seconds
PosterThumbnail image
CategoriesTYPO3 categories (listview chips + category-based rows)
CaptionsWebVTT / SRT caption files
ChaptersWebVTT / SRT chapter files
Enable TranscriptPer-track transcript flag
Audio DescriptionDescribed video (MP4/WebM swap) or VTT speech via audio_description_mode
Audio Description Modeauto | swap | vtt_speech — delivery path for spoken AD
Sign LanguageSign language overlay video
Hide speed buttonHide playback-speed control for this item (per-track in playlists)
Hide keyboard shortcuts helpHide help button for this item (per-track in playlists)
Allow downloadShow download button (uses progressive source when available)
Enable floating playerCustom draggable PiP window (single-item players only)

Best Practices

Extension Configuration (Installation-Wide)

Use for branding and security defaults that should not vary per page:

  • Allowed external media domains
  • Default dark/light theme and page theme sync
  • Custom play icon for privacy overlay and player
  • CSS icon mode for design-system integration

Site Settings (Per Site)

Use for policies that differ between the sites of one installation:

  • Whether the player announces its state to screen readers
  • Whether visitors are offered resume playback by default
  • Whether YouTube and Vimeo play inside the VidPly player or in the provider's own player

Privacy Layer Settings (Site-Wide)

Use for settings that should be consistent across all external services:

  • Privacy notice texts
  • Policy links
  • Button labels
  • Multilingual translations

Player-Level (Global)

Use for settings that should be consistent across all tracks:

  • UI behavior (controls, keyboard)
  • Initial state (volume, speed)
  • Playlist behavior (auto-advance)

Media-Level (Per-Item)

Use for settings that are specific to content:

  • Source files/URLs and slug
  • Metadata (title, artist, descriptions, categories)
  • Accessibility features (captions, chapters, AD, sign language)
  • Visual elements (poster)
  • Per-item UI toggles (download, floating player, hide speed/help)

Rationale

This separation provides:

  • Consistency - Same privacy layer UX across all external services
  • Centralization - Privacy texts managed in one place
  • Multilingual - Privacy settings can be translated per language
  • Flexibility - Per-item content customization
  • Maintainability - Clear distinction between site-wide/global/local settings
  • Reusability - Media items work in different contexts

Future Considerations

Potential improvements:

  • Per-item caption default (for multilingual content)
  • Per-item loop/muted overrides (some playlist track behaviour already exists for speed/help visibility)
  • Template overrides for custom use cases

Current architecture is solid and follows TYPO3 best practices.

Share page