Skip to content

Product media custom fields

Mediaverse stores its per-media-entry configuration in the custom_fields JSON column on the standard Shopware product_media table. There is no dedicated DAL table for video / hotspot / panorama / model settings — the shape below is the source of truth.

{
"p2labProductVideo": {
"mediaType": "embedVideo | mediaVideo | panorama360 | modelViewer | mediaSplide | mediaHotspots",
"url": "https://...",
"source": "youtube | vimeo | facebook | tiktok | dailymotion | gcore",
"mediaId": "uuid",
"videoSources": ["uuid-720p", "uuid-1080p"],
"translation": {
"de-DE": "uuid-or-url"
},
"translationSources": {
"de-DE": ["uuid-720p", "uuid-1080p"]
},
"projection": "equirect | cubemap | cubestrip | equiangular | cylindrical | stereoEqui | littlePlanet",
"hotspots": [
{ "x": 0.5, "y": 0.3, "action": "link | product | category", "target": "..." }
],
"slides": [],
"productConfig": {},
"coverConfig": {},
"cmsConfig": {},
"productSettings": {},
"coverSettings": {},
"cmsSettings": {}
}
}

Field availability depends on mediaType:

  • embedVideourl, source, translation
  • mediaVideomediaId, videoSources, translation, translationSources, videoResolutions
  • panorama360mediaId, projection, sources (for cubemap)
  • modelViewermediaId
  • mediaHotspotshotspots, imageWidth, imageHeight
  • mediaSplideslides

The *Config / *Settings sub-objects hold per-context playback overrides (autoplay, muted, loop, controls, theme, etc.) for product detail (productSettings), cover/listing (coverSettings) and CMS (cmsSettings) contexts. The storefront Twig templates branch on mediaType and source to pick the right embed iframe, HTML5 <video>, 360° viewer, or 3D model-viewer element.