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.
JSON shape
Section titled “JSON shape”{ "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:
embedVideo—url,source,translationmediaVideo—mediaId,videoSources,translation,translationSources,videoResolutionspanorama360—mediaId,projection,sources(forcubemap)modelViewer—mediaIdmediaHotspots—hotspots,imageWidth,imageHeightmediaSplide—slides
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.