{"id":1962,"date":"2026-08-21T11:13:57","date_gmt":"2026-08-21T11:13:57","guid":{"rendered":"https:\/\/documentation.iqonic.design\/streamit-laravel\/?p=1962"},"modified":"2026-08-21T11:36:11","modified_gmt":"2026-08-21T11:36:11","slug":"how-smart-seek-works","status":"publish","type":"post","link":"https:\/\/documentation.iqonic.design\/streamit-laravel\/how-smart-seek-works\/","title":{"rendered":"How Smart Seek Works?"},"content":{"rendered":"<div class=\"nolwrap\">\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">1. Overview<\/h2>\n\n\n\n<p>Smart Seek adds hover and drag preview thumbnails to the video seek bar, providing the same familiar experience found on platforms such as Netflix and YouTube.<\/p>\n\n\n\n<p>As viewers move along the progress bar, a preview image appears showing the scene at that point in the episode before they release the seek control.<\/p>\n\n\n\n<p>This makes it easier to navigate through an episode without relying only on timestamps, which is particularly useful for short-drama content where viewers frequently skip ahead to find a specific scene.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">2. Key Highlights<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Instant Scene Preview<\/h3>\n\n\n\n<p>Viewers see a preview thumbnail while dragging or hovering over the progress bar instead of only seeing a timestamp.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Built for Vertical Video<\/h3>\n\n\n\n<p>Preview tiles are generated in portrait orientation by default, matching the <strong>9:16<\/strong> format commonly used by short-drama content.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Scales to Episode Length<\/h3>\n\n\n\n<p>The system automatically determines an appropriate number of preview frames based on the episode duration.<\/p>\n\n\n\n<p>Short episodes receive enough frames for smooth navigation, while longer episodes are capped to avoid unnecessary processing.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Zero Impact on Initial Load Time<\/h3>\n\n\n\n<p>Preview images and timing data are fetched only when the viewer first interacts with the seek bar. They are not loaded during the initial player page load.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Independent of Playback Quality<\/h3>\n\n\n\n<p>Smart Seek operates separately from the main video playback system.<\/p>\n\n\n\n<p>It does not affect:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Adaptive streaming<\/li>\n\n\n\n<li>Video quality<\/li>\n\n\n\n<li>Buffering<\/li>\n\n\n\n<li>Playback performance<\/li>\n\n\n\n<li>The main video engine<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Retroactive Processing<\/h3>\n\n\n\n<p>Administrators can enable Smart Seek for an already-published episode and process only the preview data without re-encoding the original video.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Standards-Based Implementation<\/h3>\n\n\n\n<p>Smart Seek uses a <strong>sprite sheet + WebVTT<\/strong> approach, making the generated preview data lightweight, easy to inspect, and straightforward to extend.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">3. How It Works<\/h2>\n\n\n\n<p>Smart Seek processing follows these steps:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Trigger<\/h3>\n\n\n\n<p>After the episode&#8217;s video, audio, and subtitle processing is completed, Smart Seek generation runs as an additional processing step when the feature is enabled for the episode.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Sample Frames<\/h3>\n\n\n\n<p>The server extracts still frames from the video at regular intervals.<\/p>\n\n\n\n<p>The default interval is approximately <strong>3 seconds<\/strong>, with adjustments for short clips and a maximum frame limit for very long episodes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Generate the Preview Sprite Sheet<\/h3>\n\n\n\n<p>The extracted frames are combined into a single sprite-sheet image instead of being stored and delivered as individual image files.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Generate WebVTT Timing Data<\/h3>\n\n\n\n<p>A WebVTT file maps each point in the video timeline to the corresponding rectangular area of the sprite sheet.<\/p>\n\n\n\n<p>This allows the player to determine which portion of the preview image should be displayed for a specific timestamp.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 5: Publish Preview Assets<\/h3>\n\n\n\n<p>The generated sprite sheet and WebVTT timing file are stored with the episode&#8217;s processed output and served alongside the video stream.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 6: Display the Preview<\/h3>\n\n\n\n<p>When a viewer first hovers over or drags the seek bar:<\/p>\n\n\n\n<p>1. The browser loads the WebVTT timing data.<\/p>\n\n\n\n<p>2. The player determines the appropriate preview frame.<\/p>\n\n\n\n<p>3. The corresponding section of the sprite sheet is displayed.<\/p>\n\n\n\n<p>4. The viewer sees the scene preview together with the current timestamp.<\/p>\n\n\n\n<p>Because the frames are stored in a single sprite sheet, the player does not need to request a separate image for every preview point.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">4. Setup &amp; Usage<\/h2>\n\n\n\n<p>Smart Seek uses the same <strong>FFmpeg installation<\/strong> required by the Short Drama transcoding system.<\/p>\n\n\n\n<p>No additional server-side software is required.<\/p>\n\n\n\n<p>If FFmpeg is already configured correctly for transcoding, Smart Seek can be enabled without installing additional dependencies.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Enabling Smart Seek on an Episode<\/h3>\n\n\n\n<p>1. Go to <strong>Short Drama \u2192 Episodes \u2192 Create<\/strong> or edit an existing episode.<\/p>\n\n\n\n<p>2. Under <strong>Processing Options<\/strong>, enable:<strong>Enable smart seek (timeline hover previews)<\/strong><br><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1904\" height=\"936\" src=\"https:\/\/documentation.iqonic.design\/streamit-laravel\/wp-content\/uploads\/sites\/5\/2026\/08\/image.png\" alt=\"\" class=\"wp-image-1963\" \/><\/figure>\n\n\n\n<p>3. Save the episode.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>For a new episode, Smart Seek runs as part of the normal processing workflow.<\/li>\n\n\n\n<li>For an existing published episode, saving triggers lightweight preview processing without re-encoding the video.<\/li>\n<\/ul>\n\n\n\n<p>4. Wait for processing to complete.<\/p>\n\n\n\n<p>5. Open the episode&#8217;s watch page and move the cursor over or drag the seek bar.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"744\" height=\"920\" src=\"https:\/\/documentation.iqonic.design\/streamit-laravel\/wp-content\/uploads\/sites\/5\/2026\/08\/image-1.png\" alt=\"\" class=\"wp-image-1964\" style=\"width:744px;height:auto\" \/><\/figure>\n\n\n\n<p>6. Confirm that the preview thumbnail appears at different points on the timeline.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Viewer Experience<\/h3>\n\n\n\n<p>No additional action is required from viewers.<\/p>\n\n\n\n<p>When Smart Seek is enabled for an episode:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Desktop users can hover over the progress bar.<\/li>\n\n\n\n<li>Users can drag the progress bar to preview different scenes.<\/li>\n\n\n\n<li>A preview thumbnail is displayed together with the corresponding timestamp.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">5. Configuration Settings<\/h2>\n\n\n\n<p>Smart Seek provides optional <code>.env<\/code> configuration values.<\/p>\n\n\n\n<p>The feature works with the default values if these settings are not customized.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Setting (<code>.env<\/code> key)<\/th><th>Default<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>SHORT_DRAMA_SMART_SEEK_INTERVAL<\/code><\/td><td><code>3<\/code> seconds<\/td><td>Interval between captured preview frames. Lower values create more granular previews but increase processing requirements.<\/td><\/tr><tr><td><code>SHORT_DRAMA_SMART_SEEK_MIN_FRAMES<\/code><\/td><td><code>24<\/code><\/td><td>Minimum number of preview frames generated, including for very short episodes.<\/td><\/tr><tr><td><code>SHORT_DRAMA_SMART_SEEK_MAX_FRAMES<\/code><\/td><td><code>120<\/code><\/td><td>Maximum number of preview frames generated to limit processing time for long episodes.<\/td><\/tr><tr><td><code>SHORT_DRAMA_SMART_SEEK_ORIENTATION<\/code><\/td><td><code>vertical<\/code><\/td><td>Preview tile orientation. <code>vertical<\/code> is recommended for portrait short-drama content.<\/td><\/tr><tr><td><code>SHORT_DRAMA_SMART_SEEK_WIDTH<\/code><\/td><td><code>108<\/code> px<\/td><td>Width of each preview tile.<\/td><\/tr><tr><td><code>SHORT_DRAMA_SMART_SEEK_HEIGHT<\/code><\/td><td><code>192<\/code> px<\/td><td>Height of each preview tile. The default dimensions provide a 9:16 aspect ratio.<\/td><\/tr><tr><td><code>SHORT_DRAMA_SMART_SEEK_COLUMNS<\/code><\/td><td><code>4<\/code><\/td><td>Number of preview tiles placed in each row of the sprite sheet.<\/td><\/tr><tr><td><code>SHORT_DRAMA_SMART_SEEK_QUALITY<\/code><\/td><td><code>4<\/code><\/td><td>JPEG quality setting used when generating preview frames. Lower values provide higher quality with the configured FFmpeg behavior.<\/td><\/tr><tr><td><code>SHORT_DRAMA_SMART_SEEK_CLEANUP_FRAMES<\/code><\/td><td><code>true<\/code><\/td><td>Removes individual sampled frames after they have been combined into the sprite sheet, retaining only the final preview assets.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">6. Limitations &amp; Notes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Per-Episode Configuration<\/h3>\n\n\n\n<p>Smart Seek must be enabled individually for each episode.<\/p>\n\n\n\n<p>There is currently no global switch for automatically enabling Smart Seek across the entire catalog.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">FFmpeg Dependency<\/h3>\n\n\n\n<p>Smart Seek depends on the same FFmpeg installation used by the Short Drama transcoding system.<\/p>\n\n\n\n<p>If FFmpeg is not configured correctly, Smart Seek processing will fail in the same way as other FFmpeg-based processing tasks.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Previously Processed Episodes<\/h3>\n\n\n\n<p>Episodes processed before Smart Seek was enabled will not automatically contain preview assets.<\/p>\n\n\n\n<p>However, Smart Seek can be enabled later and processed without re-encoding the original video.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Very Short Episodes<\/h3>\n\n\n\n<p>Very short episodes are subject to the configured minimum frame count.<\/p>\n\n\n\n<p>As a result, preview frames may be generated closer together than the configured interval.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Additional Storage<\/h3>\n\n\n\n<p>The generated sprite sheet and WebVTT timing file add a small amount of storage per episode.<\/p>\n\n\n\n<p>With the default configuration, the combined preview assets are typically well under <strong>1 MB per episode<\/strong>, depending on the episode content and generated image data.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">7. Processing Flow<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"467\" height=\"677\" src=\"https:\/\/documentation.iqonic.design\/streamit-laravel\/wp-content\/uploads\/sites\/5\/2026\/08\/image-2.png\" alt=\"\" class=\"wp-image-1966\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">8. Storage &amp; Playback Behavior<\/h2>\n\n\n\n<p>Smart Seek generates two primary assets:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sprite Sheet<\/h3>\n\n\n\n<p>Contains multiple preview frames arranged into a single image.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">WebVTT File<\/h3>\n\n\n\n<p>Contains the timing information required to associate each video timestamp with a specific region of the sprite sheet.<\/p>\n\n\n\n<p>During playback, these assets remain separate from the primary video stream.<\/p>\n\n\n\n<p>Therefore, enabling Smart Seek does not modify the original video files or adaptive streaming playlists.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">9. Performance Considerations<\/h2>\n\n\n\n<p>Smart Seek is designed to keep additional processing and playback overhead low.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">During Processing<\/h3>\n\n\n\n<p>The system:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Extracts only the required number of preview frames.<\/li>\n\n\n\n<li>Limits the total number of frames using the configured maximum.<\/li>\n\n\n\n<li>Combines frames into a sprite sheet.<\/li>\n\n\n\n<li>Removes temporary individual frames when cleanup is enabled.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">During Playback<\/h3>\n\n\n\n<p>The system:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Does not load preview assets during the initial page load.<\/li>\n\n\n\n<li>Loads the timing information when the viewer interacts with the seek bar.<\/li>\n\n\n\n<li>Uses a single sprite sheet instead of requesting individual images for every timestamp.<\/li>\n<\/ul>\n\n\n\n<p>This keeps Smart Seek independent from the main streaming and playback pipeline.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">10. Troubleshooting<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Preview Does Not Appear<\/h3>\n\n\n\n<p>Check the following:<\/p>\n\n\n\n<p>1. Confirm that <strong>Enable smart seek<\/strong> is enabled for the episode.<\/p>\n\n\n\n<p>2. Confirm that episode processing has completed successfully.<\/p>\n\n\n\n<p>3. Verify that FFmpeg is configured correctly.<\/p>\n\n\n\n<p>4. Check whether the Smart Seek processing job completed successfully.<\/p>\n\n\n\n<p>5. Clear the browser cache and reload the watch page.<\/p>\n\n\n\n<p>6. Verify that the generated WebVTT and sprite-sheet assets exist in the episode&#8217;s processed output.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Processing Fails<\/h3>\n\n\n\n<p>If Smart Seek processing fails:<\/p>\n\n\n\n<p>1. Check the application logs.<\/p>\n\n\n\n<p>2. Verify FFmpeg availability.<\/p>\n\n\n\n<p>3. Verify that the processed video file exists and is readable.<\/p>\n\n\n\n<p>4. Check storage permissions.<\/p>\n\n\n\n<p>5. Verify available disk space.<\/p>\n\n\n\n<p>6. Confirm that the configured Smart Seek values are valid.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Video Playback Is Unaffected<\/h3>\n\n\n\n<p>A Smart Seek processing failure does not require re-encoding the original video.<\/p>\n\n\n\n<p>Smart Seek is an additional preview feature and operates independently of the primary video playback pipeline.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">11. Conclusion<\/h2>\n\n\n\n<p>Smart Seek provides a platform-grade scrubbing experience for Short Drama episodes by displaying visual scene previews while viewers navigate the timeline.<\/p>\n\n\n\n<p>It:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Uses the existing FFmpeg infrastructure.<\/li>\n\n\n\n<li>Supports portrait <strong>9:16<\/strong> preview tiles.<\/li>\n\n\n\n<li>Generates lightweight sprite-sheet preview assets.<\/li>\n\n\n\n<li>Uses WebVTT for timeline mapping.<\/li>\n\n\n\n<li>Loads preview data only when required.<\/li>\n\n\n\n<li>Does not affect adaptive streaming or playback quality.<\/li>\n\n\n\n<li>Can be enabled retroactively for existing episodes.<\/li>\n\n\n\n<li>Requires no additional server software.<\/li>\n<\/ul>\n\n\n\n<p>Smart Seek can therefore be enabled across the catalog without modifying or re-encoding the original video content, while giving viewers a significantly more intuitive way to navigate through episodes.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>1. Overview Smart Seek adds hover and drag preview thumbnails to the video seek bar, providing the same familiar experience found on platforms such as Netflix and YouTube. As viewers move along the progress bar, a preview image appears showing the scene at that point in the episode before they release the seek control. This [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":0,"parent":1880,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1962","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"featured_image_src":null,"author_info":{"display_name":"laraveladminiq","author_link":"https:\/\/documentation.iqonic.design\/streamit-laravel\/author\/laraveladminiq\/"},"children":[],"_links":{"self":[{"href":"https:\/\/documentation.iqonic.design\/streamit-laravel\/wp-json\/wp\/v2\/posts\/1962","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/documentation.iqonic.design\/streamit-laravel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/documentation.iqonic.design\/streamit-laravel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/documentation.iqonic.design\/streamit-laravel\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/documentation.iqonic.design\/streamit-laravel\/wp-json\/wp\/v2\/comments?post=1962"}],"version-history":[{"count":3,"href":"https:\/\/documentation.iqonic.design\/streamit-laravel\/wp-json\/wp\/v2\/posts\/1962\/revisions"}],"predecessor-version":[{"id":1975,"href":"https:\/\/documentation.iqonic.design\/streamit-laravel\/wp-json\/wp\/v2\/posts\/1962\/revisions\/1975"}],"up":[{"embeddable":true,"href":"https:\/\/documentation.iqonic.design\/streamit-laravel\/wp-json\/wp\/v2\/posts\/1880"}],"wp:attachment":[{"href":"https:\/\/documentation.iqonic.design\/streamit-laravel\/wp-json\/wp\/v2\/media?parent=1962"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/documentation.iqonic.design\/streamit-laravel\/wp-json\/wp\/v2\/categories?post=1962"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/documentation.iqonic.design\/streamit-laravel\/wp-json\/wp\/v2\/tags?post=1962"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}