Display type
Use "afterparent" to follow the host width and height. Use "responsive" to let the gallery calculate its height from maxHeight, autoScale and autoScaleStartWidth.
Installation, galleries, presets and WooCommerce integration for the WordPress plugin.
Filmstrip Photo & Video Slider turns photos and videos into a draggable filmstrip. Each frame represents a category. Clicking a frame can open its media, visit a link, or simply center the frame.
The plugin has three menu pages under FWD Filmstrip Photo & Video Slider: Presets Manager, Galleries Manager, and Support. Use the preset manager for appearance and behavior, and the gallery manager for your content.
A preset and a gallery are separate. You can show the same content with different presets, or reuse one preset across several galleries.
The plugin requires WordPress 6.5 or newer and PHP 8.0 or newer. Visitors need a browser with WebGL support. WooCommerce is optional and is only needed for product gallery integration.
If your download is a complete marketplace package, extract it first and upload the installable plugin ZIP inside it.
Back up your site and database first. Upload the new plugin ZIP through the same installer and use WordPress's replacement option. Clear your page cache and any asset or CDN cache after the update. You do not need to delete the plugin to replace its files.
The current development build resets presets and galleries when upgrading stored data older than schema 4. Do not rely on automatic import from the older plugin. Test that upgrade on a backup or staging site first. Current saved galleries use schema 5.
[filmstrip_slider preset_name="Preset 1" gallery_name="My Filmstrip"]Use the exact saved preset and gallery names in the shortcode. Publish or preview the page to see the filmstrip.
The gallery grid lists your saved galleries. Add New Gallery creates a new container. The pencil edits its name and optional gallery image. Edit Categories opens its categories, and the delete icon removes the gallery after confirmation.
The optional gallery image is the manager card's artwork. It does not set a filmstrip frame's cover. Each category gets its cover from its own first item.
Drag cards to reorder them. Use Back To Galleries or the breadcrumb to return. Navigation and edit dialogs start at the top of the page. Deleting gallery content does not delete the original files from the Media Library.

Each category becomes one frame in the filmstrip. Click Add New Category to create one, the pencil to change its settings, or Edit Items to manage its media. Drag category cards to change the frame order.
Category name and film title is printed on the film frame and shown in category navigation. Use a unique name within the gallery. Film code is optional short text printed on the frame, such as a year or collection code.
| Click action | What happens |
|---|---|
| Open category | Centers and expands the frame, then shows the photos and videos belonging to that category. |
| Open link | Opens the configured Link URL. Choose New tab or Current tab in Open link in. |
| No action | Centers the clicked frame without expanding it or opening a link. Dragging and hover effects remain available. |
The click action belongs to the category, not to an individual photo or video. Category navigation includes categories that open their own items. Link-only and no-action frames are not destinations in that navigation.
The first item is the category's cover. To change the cover, open Edit Items and drag another item into first position. An empty category can be saved while you work, but it does not appear on the public filmstrip until it contains media.


Open a category's Edit Items view. Click Add New Item, or use the pencil on an existing item to edit it. Drag media cards to set their order. The Cover badge marks the first item.
| Field | How to use it |
|---|---|
| Item name | A unique name within this category for identifying the item in the manager. This is separate from its visible caption. |
| Photo or video URL | Use Choose media to upload or select a file in the Media Library. This URL field is read-only. |
| Video poster URL | Use Choose poster to select a still image for video. The URL field is disabled. Leave it empty for photos. |
| Media width / Media height | Detected automatically from the selected file. The disabled fields preserve the original aspect ratio. Wait for detection before confirming. |
| Caption title | Optional heading shown over the media inside an opened category. |
| Caption description | Optional smaller text below the heading. Keep it brief for smaller screens. |
| Alternative text | A short description of the media for its generated markup. |
| Deep link ID | Optional stable identifier for sharing a particular item. Use a different ID for each item in the category. |
Landscape, portrait, square, and wide images can be mixed in the same category. Use browser-compatible image files such as JPEG, PNG, or WebP. Transparent PNG images are supported. The available upload types also depend on your WordPress installation.
Leave both caption fields empty for media without text. Caption fonts, colors, padding, spacing and smaller-screen sizes are controlled by the preset's Category settings.


Select your own browser-compatible video, such as an MP4 or WebM, and choose a matching poster. Videos can be category covers or items inside a category. Place a video first in the item list to make it the cover.
Visible videos autoplay muted and loop without controls. The poster remains visible until a decoded video frame is ready, or when playback cannot start. Hidden videos pause. Category arrow previews can play the destination cover video, while the category dropdown uses still thumbnails.
The plugin plays the supplied file at its full duration. It does not transcode, trim, or convert uploads into adaptive streams. File size, bitrate, device decoding support and your hosting speed affect loading. Use a resolution appropriate to the displayed size and avoid putting many large videos on screen together.
The initial loading sequence uses cover photos and video posters. Category media start loading as the category opens and populate their meshes as they become available.
A new installation includes Preset 1 through Preset 9. All nine start with the same settings and can be edited independently.
Duplicate Preset creates a variation with a unique name. Reset Preset restores the selected preset's editor values to the defaults. Save to apply the reset. If you rename a preset, update shortcodes that use its old name.
On/off settings use checkboxes. All duration and delay fields use seconds, so 0.65 means 650 milliseconds. Validation shows a tooltip next to a field that needs attention.

Display type controls sizing. responsive calculates the gallery height from Max height, Auto scale, and Auto scale start width, with a minimum height of 450px. afterparent follows its host container. The shortcode host starts at the preset's Max height.
Frame width and Frame height set the film frame ratio. Film strip gap adds space between film frames in scene units. Category image gap sets space between opened category media in CSS pixels and reduces on smaller screens.
Mouse wheel behavior is separate for the filmstrip, opened category slider, and category dropdown. Dragging remains available when a mouse wheel option is off.
In Category selector, enable Show cateogry navigation arrows for previous/next category controls, Show cateogry navigation select for the dropdown, or enable both. Turn both off to hide category navigation. These field labels retain the spelling used in the current editor.
Category navigation wraps through available categories. With two categories, both arrows point to the other category. The arrow preview shows its destination's media and title. Image navigation inside an opened category is separate from category navigation.
Infinite allows wrapping when there is enough media to fill the visible area. Short filmstrips and categories can use finite scrolling to avoid empty space or visible repetition.
Enable Deep linking in the preset's General tab and save the preset used by your shortcode. It is off by default. Enable it on only one gallery per page.
https://example.com/gallery/#category=Salt_Sea&item=An_Open_BlueThe category route comes from its name. Item routes use the item's Deep link ID, then its caption title, then an item-number fallback. Spaces and most punctuation become underscores. Duplicate keys receive a suffix such as ~2.
Open the category, move to the desired item, let the movement settle, and copy the browser URL. A shared URL opens that category and item after loading. Browser Back and Forward are supported. Closing the category removes the gallery route.
Use stable, unique deep link IDs when item captions may change. Renaming a category changes its generated route. An unknown category is ignored. A missing or unknown item opens the first item of a known category.
In the WordPress block editor, add a Shortcode block and paste:
[filmstrip_slider preset_name="Preset 1" gallery_name="My Filmstrip"]Replace both values with the exact saved names. For a page builder, use its shortcode widget or shortcode element. Do not use a code-display block, which prints the shortcode instead of rendering it.
The Filmstrip Photo & Video Slider metabox on post and page editing screens generates the shortcode. Choose a preset and a gallery, then copy the generated text into your content. On WooCommerce products, the metabox saves the gallery assignment directly. See WooCommerce integration.
You can place multiple shortcodes on a page. Each gets its own host and API instance. Keep Deep linking enabled for at most one of them.
For a PHP template, render the shortcode with WordPress:
echo do_shortcode('[filmstrip_slider preset_name="Preset 1" gallery_name="My Filmstrip"]')The older [fwdfs] alias is registered only if another plugin has not already claimed it. Use [filmstrip_slider] in new content.
Use Filmstrip Photo & Video Slider in place of the product image gallery on classic WooCommerce product pages and in WooCommerce Product Gallery blocks. The integration was checked with WooCommerce 11.0.0. WooCommerce is optional for galleries on ordinary pages and posts.
No shortcode is needed in the product description. The assignment belongs to this product. Turn Enable Filmstrip off and update the product to restore the normal product images. Products with no assignment keep their usual images.

The dropdowns list saved presets and galleries. Create your gallery in Galleries Manager first. If you rename or delete a selected preset or gallery, select an available entry again and update the product. Missing selections and galleries without media leave the normal product images in place.
| Filmstrip Position | Product page layout |
|---|---|
| Replace Product Image | The default. Uses the product image column beside the title, price and purchase controls. The theme determines the column width and its mobile stacking. |
| Replace Product Image Full Width | Spans the product content area and places the product details and purchase controls below. Full width means the product content width set by the theme, not the browser viewport. |

Position is saved per preset. Products using the same preset share its position and appearance. Use separate presets when different products need different layouts. Existing presets use Replace Product Image until you change it.
Use the preset's General tab to adjust the slider height and responsive behavior. The WooCommerce tab changes placement only. Photos, videos, captions and category actions are still managed in Galleries Manager.
Add a WooCommerce Single Product block and choose the product. Keep its Product Gallery or Product Image Gallery block inside the layout. The filmstrip reads the assignment from that product, not from the page containing the block. Open the chosen product in Products, enable its filmstrip, choose the preset and gallery, and update it.
On the public page, the filmstrip replaces the gallery block. The editor keeps WooCommerce's native preview. Replace Product Image stays inside the image column. Replace Product Image Full Width stacks the nearest enclosing Columns block so the filmstrip and product details each use the available width. Columns elsewhere on the page are unchanged.
A separate filmstrip shortcode on the page remains a separate slider. Remove it if you only want the gallery inside the product block.
Automatic replacement supports classic WooCommerce image hooks and the Product Gallery and Product Image Gallery blocks. This includes Single Product blocks embedded on ordinary pages and product templates using those gallery blocks. For a custom builder that uses neither, place a shortcode at the desired location and manage its surrounding layout in the builder. The position setting does not rearrange a manually placed shortcode.
The gallery displays the categories and media you assigned to it. Choosing a product variation does not automatically replace its images. Normal WooCommerce price, variation and add-to-cart controls remain part of the product details.
Products configured with a shortcode in their full description continue to work until an assignment is saved. The metabox reads that existing selection for you. Save it with the product, then remove the old shortcode from the description. The saved metabox assignment takes priority, including when Enable Filmstrip is off.
Check that Enable Filmstrip is on in the product metabox, that a preset and gallery are selected, and that the gallery contains media. Update the product to save its assignment. Confirm that you saved the preset and that your product template uses the classic image hooks or a supported WooCommerce gallery block. If you use page caching, clear it after changing the preset.
Find a field by its editor label or setting key. Defaults below are the plugin defaults, not the values currently saved in your site.
Use "afterparent" to follow the host width and height. Use "responsive" to let the gallery calculate its height from maxHeight, autoScale and autoScaleStartWidth.
Wait until the host enters the viewport before starting data and media loading.
Read and write the category and item in the URL hash. Defaults to false when omitted. Enable this on only one gallery per page.
Canvas background color. Match the surrounding page when you want the gallery to blend into the layout.
Maximum canvas width in CSS pixels for responsive mode. In afterparent mode the host controls the width.
Maximum canvas height in CSS pixels for responsive mode. Values below 450 use the minimum height of 450 pixels. In afterparent mode set a height on the host instead.
In responsive mode, reduce the gallery height on narrower screens toward a minimum of 450 pixels. Has no sizing effect in afterparent mode.
Container width in CSS pixels below which responsive height starts scaling. Used when autoScale is true.
Show the flat cover sequence before the filmstrip intro. Video covers use their posters in this sequence.
Minimum time between cover previews in seconds. Values below 0.05 are clamped to 0.05.
Color of the fallback SVG loader used without a film model. This does not recolor the photo sequence used by the current filmstrip.
Movement sensitivity shared by filmstrip and category navigation. Larger values increase the response to input.
Blend side images toward black and white while keeping the active image in color. Applies to the filmstrip and opened category.
Minimum opacity of filmstrip images away from the center, from 0 to 1. Use 1 to keep side frames fully visible.
Image sharpening amount from 0 to 1. Values above 1 are clamped to 1, including the current index value shown here.
Film frame width in scene units. The frameWidth / frameHeight ratio controls the filmstrip photo proportions and related frame previews.
Film frame height in scene units. Category images use their own authored width and height instead of this fixed ratio.
Extra spacing between neighboring frames in the main horizontal filmstrip, measured in 3D scene units rather than pixels. Use 0 to keep the filmstrip connected. Increase this value to separate its frames. This does not change the spacing between images inside an opened category or the temporary intro spread.
Fallback title printed on the film frame. A category name entered in Galleries Manager takes precedence.
Base material color of the GLB holder. Lighting affects the rendered shade. Also used by the category frame previews.
Color of the labels drawn on the film rails.
Enable mouse-wheel and trackpad navigation over the filmstrip. Dragging and touch swiping still work when false.
Allow the filmstrip to wrap when there are enough frames to cover the view. The gallery falls back to finite navigation when repeating would leave a gap.
Settle the filmstrip toward a centered frame after movement. Clicking a frame can center it regardless of this setting.
When true, clicking an off-center filmstrip frame only centers it. Click again once centered to open its category or link. When false, the first click centers the frame and performs its action.
Enable the filmstrip curve. Set false for a straight filmstrip. Category and selector bending have their own settings.
Flatten the center filmstrip frame, from 0 to 1. A larger value reduces its local bend.
Extra filmstrip bending caused by movement. Use 0 to remove movement-driven bending while keeping the resting curve.
Scale the filmstrip group in response to movement speed. Use 0 to keep the group scale steady.
Base intro fade duration in seconds. The center preview morph and side reveals share a coordinated schedule. Stagger and side delays can extend the full intro.
Additional reveal delay in seconds for each step away from the center frame.
Extra reveal delay in seconds for side frames, giving the center frame a head start.
Extra spacing measured in frame widths. Used by the filmstrip intro and the category opening, switching and closing transitions. It is not a pixel distance.
Horizontal position of the entire filmstrip group in scene units.
Vertical position of the entire filmstrip group in scene units.
Depth position of the entire filmstrip group in scene units.
Rotation of the entire filmstrip group around X, in radians.
Rotation of the entire filmstrip group around Y, in radians.
Rotation of the entire filmstrip group around Z, in radians.
Horizontal camera offset in scene units.
Vertical camera offset in scene units.
Enable mouse-wheel and trackpad navigation over the opened category. Independent of filmstrip and dropdown wheel settings.
Horizontal spacing between images inside an opened category, measured in CSS pixels. Galleries narrower than 600 pixels use half this value. Use filmStripGap to change spacing between the main filmstrip frames instead.
Shared bending of category images while moving, clamped from 0 to 1. Use 0 for a flat category row.
Placeholder color visible before a category image or video poster finishes loading and fading in.
Outgoing fade and incoming reveal timing in seconds when changing categories. Clamped from 0.1 to 2.
Base color of close and navigation button discs and hover outlines. Difference blending applies only where the controls overlap category photos.
Color of the symbols inside the category buttons.
Base color of the opened category title, before image-only difference blending.
Color of the total image count and separator between the image navigation arrows.
Color of the current image number between the image navigation arrows.
Show captions authored on category images and videos. Items without caption text remain caption-free.
Gallery viewport width in CSS pixels at which the small caption values apply. Caption sizing follows the gallery viewport, not the image aspect ratio.
Gallery viewport width in CSS pixels at which the full caption values apply. Values interpolate between the two width thresholds.
CSS font-family used for caption titles. Load the font before constructing the gallery.
CSS font-family used for caption descriptions. Load the font before constructing the gallery.
Full-size caption title font size in CSS pixels, clamped from 1 to 200.
Caption title font size at the small viewport threshold, in CSS pixels.
Full-size caption description font size in CSS pixels, clamped from 1 to 200.
Caption description font size at the small viewport threshold, in CSS pixels.
Caption title font weight from 1 to 1000. The strings "normal" and "bold" also map to 400 and 700.
Caption description font weight from 1 to 1000. The strings "normal" and "bold" also map to 400 and 700.
Caption title font style. Accepts "normal", "italic" or "oblique".
Caption description font style. Accepts "normal", "italic" or "oblique".
Unitless title line-height multiplier from 1 to 4. Applies within a wrapped title, not to the title-to-description gap.
Unitless description line-height multiplier from 1 to 4.
Additional spacing between title characters in CSS pixels, from -10 to 30.
Additional spacing between description characters in CSS pixels, from -10 to 30.
Maximum title lines from 0 to 20. Use 0 to hide the title block. The caption height budget can reduce the visible text further.
Maximum description lines from 0 to 20. Use 0 to hide the description block. The caption height budget can reduce the visible text further.
Caption title text color.
Caption description text color.
Caption text alignment. Accepts "left", "center" or "right".
Full-size horizontal inset of the caption from the image edge, in CSS pixels.
Horizontal caption inset at the small viewport threshold, in CSS pixels.
Full-size inset between the caption and the bottom image edge, in CSS pixels. This is not a browser-edge margin.
Bottom caption inset at the small viewport threshold, in CSS pixels.
Full-size visible gap between the title and description, in CSS pixels. Measured from the drawn text bounds so descenders do not add extra spacing.
Title-to-description gap at the small viewport threshold, in CSS pixels.
Maximum fraction of image height available to the caption, from 0 to 1. Text may be shortened to fit this budget.
Color behind the lower caption area.
Maximum caption gradient opacity from 0 to 1.
Extra gradient coverage above the full-size caption area, in CSS pixels.
Extra gradient coverage at the small viewport threshold, in CSS pixels.
Opening progress at which captions start fading in, from 0 to 0.99. This is a progress fraction, not seconds.
Caption fade-out duration in seconds.
Show previous and next category arrows beside the close button. Keep this exact property spelling, including "Cateogry".
Show the category dropdown trigger. Independent of the category arrows. Keep this exact property spelling, including "Cateogry".
Color of the category navigation label and total category count.
Color of the bold current category number beside the category arrows.
Preferred hover preview width in CSS pixels, clamped from 160 to 480. The preview can shrink to fit the gallery.
CSS font-family used in the category arrow hover preview.
Font size of the previous/next category label and count in the hover preview, in CSS pixels from 8 to 24.
Font size of the destination category title in the hover preview, in CSS pixels from 10 to 32.
Hover preview label weight from 100 to 900.
Hover preview title weight from 100 to 900.
Gap between the hover preview metadata and category title, in CSS pixels from 0 to 80.
Top padding of the text area below the preview frame, in CSS pixels from 0 to 80.
Horizontal padding of the preview text area, in CSS pixels from 0 to 80.
Bottom padding of the preview text area, in CSS pixels from 0 to 80.
Color of the previous/next category label in the hover preview.
Color of the destination category title in the hover preview.
Color of the total category count and separator in the hover preview.
Color of the bold destination category number in the hover preview.
{
"heading": "Categories",
"counter": "{current} / {total}",
"navigation": "Category navigation",
"previous": "Previous category: {title}",
"next": "Next category: {title}",
"previewPrevious": "Previous category",
"previewNext": "Next category"
}Text and accessible labels for category arrows and hover previews. See the label table below for every key and placeholder.
Enable mouse-wheel and trackpad scrolling inside the vertical category dropdown. Does not change wheel input on the main filmstrip or category images.
{
"heading": "COLLECTIONS",
"mediaCountOne": "{count} item",
"mediaCountMany": "{count} items",
"photoCountOne": "{count} photo",
"photoCountMany": "{count} photos",
"current": "Currently viewing",
"open": "Open collection",
"details": "{photos} · {status}",
"counter": "{current} / {total}",
"dialog": "Choose a collection",
"close": "Close collection picker",
"scroll": "Scroll collections",
"option": "{title}, {photos}",
"chooseCategory": "{title}: choose collection",
"openCategory": "Open {title}",
"returnToCategory": "Return to {title}"
}Text and accessible labels for the category dropdown. See the label table below for every key and placeholder.
Preferred dropdown width in CSS pixels from 220 to 480. It shrinks to fit narrow galleries.
Preferred dropdown height in CSS pixels from 260 to 900. Available gallery space can reduce the actual height.
Category thumbnail frame height in CSS pixels from 100 to 400. Frame proportions follow frameWidth and frameHeight.
Bend strength of the vertical category filmstrip, from 0 to 1. Use 0 for straight thumbnails.
Background color of the category dropdown.
Main dropdown text color and fallback for several more specific colors.
CSS font-family used throughout the category dropdown.
Background color of the dropdown header area.
Color of secondary dropdown text, including media count wording and selection status.
Color of the bold media count number in the dropdown.
Color of the total category count and separator in the dropdown.
Color of the bold selected category number in the dropdown.
Color of the category title in the dropdown.
Color used for the dropdown border.
CSS color, including rgba(), used by the dropdown shadow.
Keyboard focus indicator color in the dropdown.
Color of the marker beside the selected category. The marker stays on the selected category while other thumbnails are hovered.
Custom scrollbar track color.
Custom scrollbar handle color.
Dropdown close button disc and outline color.
Dropdown close button icon color.
Smooth geometry edges. The renderer uses multisampling where supported and an FXAA fallback otherwise.
Spatial frequency of the wave distortion. Higher values place more waves across the image. This does not control animation speed.
Wave distortion strength. Use 0 to disable it. The Waves demo uses 0.06 with a frequency of 0.12.
Enable pointer-driven flowmap distortion on the filmstrip and opened category.
Flowmap displacement strength from 0 to 5.
Enable noise, blur and edge fading on the shared filmstrip/category rendering.
Controls noise coverage. Smaller values leave a larger clear center. Use 0.12 as a restrained starting point.
Width of the edge fade relative to the canvas width. Smaller values narrow the faded region.
Blur strength in the noise region. The Noise demo uses 0.12.
Color of the outer fade. Use "#ffffff" on a white page.
Enable pointer-driven grid displacement. This is an image distortion effect, not a tiled gallery layout.
Add color-channel separation to the grid effect. The current Grid demo keeps this false.
Number of grid columns. Rows follow the canvas proportions. Use a positive integer. The parser caps the value at 400, so the current index value of 1600 is treated as 400. The Grid demo uses 24.
Radius of the affected grid area relative to the grid size. Larger values affect more cells. Values above 2 are capped at 2.
Pointer displacement strength. Values above 2 are capped at 2. The Grid demo uses 0.9.
Amount of displacement retained each update. Use a value from 0 to 1. Values nearer 1 take longer to settle.
In the WooCommerce tab, choose Replace Product Image (replaceProductImage) for the image column beside the product details, or Replace Product Image Full Width (replaceProductImageFullWidth) for a filmstrip across the product content area with the details below. Enable Filmstrip and select the preset and gallery in the product metabox. This setting applies to classic WooCommerce templates and supported WooCommerce gallery blocks.
For custom integration, each shortcode host exposes its gallery instance through host.filmstrip. You can also use FWDFPAVS.get(hostId). The first host on a page is usually fwdfpavs-gallery-0. Inspect the rendered shortcode host when more than one gallery is present.
This example handles both an existing instance and one that is created later. Add it through your theme or a custom script. The WordPress wrapper emits filmstrip:created on the host and bubbles it to the document.
(() => {
const hostId = 'fwdfpavs-gallery-0'
const connected = new WeakSet()
function connect(gallery) {
if (connected.has(gallery)) return
connected.add(gallery)
gallery.on('categoryOpened', event => {
console.log('Opened category', event.category)
})
if (gallery.isReady) console.log(gallery.getState())
else gallery.once('ready', () => console.log(gallery.getState()))
}
document.addEventListener('filmstrip:created', event => {
if (event.detail.host.id === hostId) connect(event.detail.gallery)
})
const gallery = window.FWDFPAVS?.get(hostId)
if (gallery) connect(gallery)
})()Wait for ready before the first navigation call. Methods that request navigation can return false when the target is unavailable or the current transition cannot accept the request.
| Method | Purpose |
|---|---|
getState() | Read the current view, readiness, selection and transition state. |
getCategories() | Read category metadata and authored media after data is available. |
openCategory(id) | Open a category by zero-based filmstrip index, exact title, or category ID. |
closeCategory() | Return to the filmstrip with the reverse transition. |
nextCategory() / previousCategory() | Switch categories while one is open. |
nextItem() / previousItem() | Navigate media inside the open category. |
goToCategoryItem(id) | Center an item by index, deep link ID, generated key, or exact caption title. |
goToItem(index) | Center a minimized filmstrip frame. |
pause() / play() | Pause or resume rendering and visible video playback. |
resize() | Measure the host again after a custom layout change. |
destroy() | Release the instance, listeners, video playback and GPU resources. Safe during loading and transitions. |
on() / off() / once() | Subscribe, unsubscribe, or listen for one occurrence of an event. |
The wrapper destroys instances when their shortcode hosts are removed from the DOM. FWDFPAVS.refresh() checks for inserted hosts when the runtime is already loaded. It does not fetch the runtime for a page that never loaded a gallery.
See the complete method reference and state reference for arguments, return values, and transition behavior.
Use gallery.on(eventName, callback) to listen to runtime events. Each runtime event includes its type and gallery target. Register listeners before the action you want to observe.
| Events | When they are useful |
|---|---|
dataReady, loadProgress, ready | Track cover loading and gallery readiness. Progress does not count every item in every category. |
introStart, introComplete | Track the filmstrip entrance. |
itemUpdate | React when the centered filmstrip frame changes. |
categoryChange, categoryOpening, categoryOpened | Track category selection and entrance. |
categoryClosing, categoryClosed | Track return to the filmstrip or the outgoing category during a switch. |
categoryItemChange | React when the nearest category item changes while dragging or navigating. |
mediaLoad, mediaError, error | Track category media loading and reported errors. |
deepLinkChange, destroy | Observe URL updates or instance cleanup. |
Category switching can overlap outgoing and incoming events. Check the event's category and reason rather than assuming every event refers to the newly selected category. The complete event reference includes video, picker, interaction and playback events with their payload fields.
The WordPress wrapper also emits the DOM events filmstrip:created and filmstrip:error. The latter reports initialization failures through event.detail.error.
Check that the plugin is active, the preset and gallery names match exactly, and the gallery has a category with at least one saved item. Use a Shortcode block, then preview the published page.
Confirm with Update Gallery, Update Galleries, or Update Preset. Check that the shortcode uses the preset you edited. Clear page, optimization and CDN caches. Avoid loading an older copy of the standalone slider alongside the plugin.
Check that the video URL loads, the format and codec are supported by the browser, and the file has a valid poster. Browser autoplay or power-saving restrictions can prevent playback. Test with a known working MP4. Media on another domain must permit cross-origin requests.
Select the file again with Choose media and wait for detection. The file must be reachable so the browser can read its metadata when attachment dimensions are missing.
Enable Deep linking on the preset actually used by the shortcode. Use unique item IDs and test the URL copied after navigation settles. Only one gallery on a page should own deep linking.
Reduce oversized media and video bitrates. Try disabling optional post-processing effects and avoid many simultaneous visible video galleries. Check the browser console and network requests for failed or repeatedly downloaded files.
Enable Filmstrip in the product metabox, select a saved preset and gallery containing media, and update the product. For a Single Product block, configure the product selected in the block. Custom templates need a supported WooCommerce gallery block, classic image hooks, or a manually placed shortcode.
Presets and galleries are stored in the WordPress option fwdfpavs_data. Deactivating the plugin keeps the data.
Deleting the plugin also keeps its saved galleries and presets. There is no uninstall cleanup routine or data-deletion option. Uploaded Media Library files are retained.
Keep a database backup before upgrades or uninstalling. See Install and update for the current older-schema reset behavior.
The plugin includes readable PHP, admin JavaScript and styles, plus the unbundled slider source in source. Runtime changes can be rebuilt with Node.js 22.12 or newer:
cd source
npm ci
npm run buildThe build refreshes js/FWDFPAVS.js in the plugin. The Three.js Draco decoder is embedded in the runtime. Third-party licenses are included in the licenses folder.
Plugin runtime assets and Roboto fonts are local. The plugin does not add analytics or telemetry. Media files are fetched by visitors' browsers from their configured URLs.
Open FWD Filmstrip Photo & Video Slider > Support in WordPress, or contact us directly:
Include the page URL, plugin version, browser, and a short description of the steps that reproduce the issue. A screenshot and any browser console error help us identify the problem.
