{"id":1968,"date":"2026-08-21T11:27:26","date_gmt":"2026-08-21T11:27:26","guid":{"rendered":"https:\/\/documentation.iqonic.design\/streamit-laravel\/?p=1968"},"modified":"2026-08-21T11:40:03","modified_gmt":"2026-08-21T11:40:03","slug":"how-thumbnail-generation-works","status":"publish","type":"post","link":"https:\/\/documentation.iqonic.design\/streamit-laravel\/how-thumbnail-generation-works\/","title":{"rendered":"How Thumbnail Generation 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>Thumbnail Generation automatically creates the poster and thumbnail images used to represent an episode throughout the application, including drama cards, episode lists, and share links.<\/p>\n\n\n\n<p>This eliminates the need for administrators to manually capture screenshots or upload separate artwork for every episode.<\/p>\n\n\n\n<p>A related option, <strong>Preview Clip<\/strong>, can also generate a short hover-preview video for a drama card. This provides an auto-playing teaser when a viewer hovers over or lingers on a card, similar to the preview experience used by major streaming platforms.<\/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\">No Manual Image Work<\/h3>\n\n\n\n<p>Poster and thumbnail images are generated directly from the uploaded video. No separate image design or manual upload is required.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Consistent Artwork Across the Catalog<\/h3>\n\n\n\n<p>Every processed episode receives automatically generated artwork, helping maintain a consistent visual appearance across listings, cards, and episode pages.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Automatic Fallback Scrub Preview<\/h3>\n\n\n\n<p>When Smart Seek is not enabled for an episode, the system automatically generates a static preview frame from the episode midpoint.<\/p>\n\n\n\n<p>This ensures that the scrub bar can still display a useful preview image.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Optional Hover Preview Clip<\/h3>\n\n\n\n<p>A short, automatically generated video teaser can play when a viewer hovers over or lingers on a drama card.<\/p>\n\n\n\n<p>This provides a more dynamic and premium browsing experience.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Runs Alongside Transcoding<\/h3>\n\n\n\n<p>Thumbnail and preview generation runs as part of the same background processing pipeline used for video processing.<\/p>\n\n\n\n<p>No separate upload or additional processing workflow is required.<\/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<h3 class=\"wp-block-heading\">Step 1: Trigger<\/h3>\n\n\n\n<p>After an episode is processed, the system checks whether thumbnail generation is enabled.<\/p>\n\n\n\n<p>When enabled, the server extracts still frames directly from the source video.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Poster &amp; Thumbnail<\/h3>\n\n\n\n<p>Two frames are captured near the beginning of the video.<\/p>\n\n\n\n<p>These frames are saved as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Episode poster image<\/li>\n\n\n\n<li>Episode thumbnail image<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Fallback Scrub Preview<\/h3>\n\n\n\n<p>If Smart Seek is disabled for the episode, the system captures one additional frame from approximately the midpoint of the episode.<\/p>\n\n\n\n<p>This frame is saved as a static scrub-bar preview.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Preview Clip<\/h3>\n\n\n\n<p>If Preview Clip is enabled, the system generates a short, muted video clip from the source video.<\/p>\n\n\n\n<p>The clip is:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Generated from the beginning of the episode<\/li>\n\n\n\n<li>Approximately a few seconds long<\/li>\n\n\n\n<li>Based on up to around 10% of the episode duration<\/li>\n\n\n\n<li>Automatically capped between approximately 3 and 15 seconds<\/li>\n\n\n\n<li>Intended for drama-card hover previews<\/li>\n<\/ul>\n\n\n\n<p>A still frame is also generated for display before the preview clip begins playing.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 5: Store &amp; Serve<\/h3>\n\n\n\n<p>All generated images and preview clips are stored alongside the episode&#8217;s other processed files.<\/p>\n\n\n\n<p>The application automatically uses these assets wherever episode or drama artwork is displayed.<\/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>Thumbnail Generation uses the same <strong>FFmpeg installation<\/strong> required by the Short Drama transcoding system.<\/p>\n\n\n\n<p>No additional server software or configuration is required.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Enabling Thumbnail Generation 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:<ul><li><strong>Enable poster \/ thumbnail<\/strong><br>Generates the poster and thumbnail images.<strong>Enable preview clip<\/strong> <em>(optional)<\/em><br>Generates the short hover-preview video for the drama card.<\/li><\/ul><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1903\" height=\"940\" src=\"https:\/\/documentation.iqonic.design\/streamit-laravel\/wp-content\/uploads\/sites\/5\/2026\/08\/image-3.png\" alt=\"\" class=\"wp-image-1969\" \/><\/figure>\n\n\n\n<p>3. Save the episode and wait for processing to complete.Thumbnail generation runs as part of the normal episode processing workflow.<\/p>\n\n\n\n<p>4. Once processing is complete, verify that the generated artwork appears in:<ul><li>Drama cardsEpisode listsAdmin episode listingsOther areas where episode artwork is displayed<\/li><\/ul><\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"612\" height=\"932\" src=\"https:\/\/documentation.iqonic.design\/streamit-laravel\/wp-content\/uploads\/sites\/5\/2026\/08\/image-4.png\" alt=\"\" class=\"wp-image-1970\" style=\"aspect-ratio:0.6566549010150615;width:432px;height:auto\" \/><\/figure>\n\n\n\n<ol class=\"wp-block-list\">\n<li><\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Viewer Experience<\/h3>\n\n\n\n<p>No action is required from viewers.<\/p>\n\n\n\n<p>Generated thumbnails automatically appear wherever episode or drama artwork is displayed.<\/p>\n\n\n\n<p>When Preview Clip is enabled, the preview clip can automatically play when the viewer hovers over or lingers on the relevant drama card.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">5. Processing Flow<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"466\" height=\"679\" src=\"https:\/\/documentation.iqonic.design\/streamit-laravel\/wp-content\/uploads\/sites\/5\/2026\/08\/image-5.png\" alt=\"\" class=\"wp-image-1972\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">6. Generated Assets<\/h2>\n\n\n\n<p>Depending on the enabled processing options, the system can generate the following assets:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Asset<\/th><th>Purpose<\/th><th>Condition<\/th><\/tr><\/thead><tbody><tr><td>Poster<\/td><td>Represents the episode in supported poster-based layouts<\/td><td>Thumbnail generation enabled<\/td><\/tr><tr><td>Thumbnail<\/td><td>Used for episode\/drama cards and listings<\/td><td>Thumbnail generation enabled<\/td><\/tr><tr><td>Scrub Preview<\/td><td>Static timeline preview image<\/td><td>Smart Seek disabled<\/td><\/tr><tr><td>Preview Clip<\/td><td>Short hover-preview video for drama cards<\/td><td>Preview Clip enabled<\/td><\/tr><tr><td>Preview Clip Still<\/td><td>Image displayed before the preview clip plays<\/td><td>Preview Clip enabled<\/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\">7. Limitations &amp; Notes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Fixed Frame Positions<\/h3>\n\n\n\n<p>Poster, thumbnail, and midpoint preview frame positions are currently determined by the system.<\/p>\n\n\n\n<p>They are not individually configurable per episode through <code>.env<\/code> settings.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Smart Seek and Fallback Preview<\/h3>\n\n\n\n<p>The fallback static scrub preview is generated only when <strong>Smart Seek<\/strong> is disabled for the episode.<\/p>\n\n\n\n<p>These features are not intended to run together because Smart Seek already provides detailed timeline previews through its sprite-sheet system.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Preview Clip Behavior<\/h3>\n\n\n\n<p>The Preview Clip is a short, silent video segment designed specifically for card-hover previews.<\/p>\n\n\n\n<p>It is <strong>not<\/strong> intended to function as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A full trailer<\/li>\n\n\n\n<li>A promotional video<\/li>\n\n\n\n<li>A highlight reel<\/li>\n<\/ul>\n\n\n\n<p>Its duration is automatically calculated based on the episode&#8217;s total length.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Short Source Videos<\/h3>\n\n\n\n<p>If the uploaded source video is only a few seconds long, the generated poster, thumbnail, and preview frames may appear visually similar because there are fewer unique scenes available.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">FFmpeg Dependency<\/h3>\n\n\n\n<p>Thumbnail and preview generation depend on the same FFmpeg installation used by the Transcoding system.<\/p>\n\n\n\n<p>If FFmpeg is not correctly configured on the server, thumbnail and preview generation can fail in the same way as other FFmpeg-based processing tasks.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">8. Performance &amp; Storage<\/h2>\n\n\n\n<p>Thumbnail Generation is designed to run as part of the existing background processing pipeline.<\/p>\n\n\n\n<p>The system generates only the assets required by the enabled processing options.<\/p>\n\n\n\n<p>For example:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Poster and thumbnail generation requires only a small number of extracted frames.<\/li>\n\n\n\n<li>The fallback scrub preview requires one additional frame when Smart Seek is disabled.<\/li>\n\n\n\n<li>Preview Clip generation creates a short video segment rather than processing the entire episode again.<\/li>\n<\/ul>\n\n\n\n<p>The generated assets are stored alongside the episode&#8217;s processed files and do not replace or modify the original uploaded video.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">9. Troubleshooting<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Poster or Thumbnail Is Missing<\/h3>\n\n\n\n<p>Check the following:<\/p>\n\n\n\n<p>1. Confirm <strong>Enable poster \/ thumbnail<\/strong> is enabled.<\/p>\n\n\n\n<p>2. Confirm episode processing has completed.<\/p>\n\n\n\n<p>3. Verify that FFmpeg is correctly configured.<\/p>\n\n\n\n<p>4. Check the application logs for processing errors.<\/p>\n\n\n\n<p>5. Verify that the source video is accessible and readable.<\/p>\n\n\n\n<p>6. Confirm that sufficient storage space is available.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Preview Clip Is Not Available<\/h3>\n\n\n\n<p>Check the following:<\/p>\n\n\n\n<p>1. Confirm <strong>Enable preview clip<\/strong> is enabled.<\/p>\n\n\n\n<p>2. Confirm episode processing has completed successfully.<\/p>\n\n\n\n<p>3. Verify FFmpeg configuration.<\/p>\n\n\n\n<p>4. Check the generated processed files.<\/p>\n\n\n\n<p>5. Review application logs for preview clip processing errors.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Scrub Preview Is Not Showing<\/h3>\n\n\n\n<p>If Smart Seek is disabled, confirm that the fallback midpoint preview was generated successfully.<\/p>\n\n\n\n<p>If Smart Seek is enabled, the static fallback preview is not generated because Smart Seek provides the timeline preview functionality instead.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">10. Conclusion<\/h2>\n\n\n\n<p>Thumbnail Generation keeps the Short Drama catalog visually consistent while eliminating the need for manual artwork preparation.<\/p>\n\n\n\n<p>Depending on the enabled options, each processed episode can automatically receive:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A poster<\/li>\n\n\n\n<li>A thumbnail<\/li>\n\n\n\n<li>A fallback scrub preview<\/li>\n\n\n\n<li>A short hover-preview clip<\/li>\n\n\n\n<li>A preview still image<\/li>\n<\/ul>\n\n\n\n<p>All assets are generated directly from the uploaded video as part of the existing background processing pipeline.<\/p>\n\n\n\n<p>The feature uses the existing FFmpeg infrastructure, requires no additional server software, and works independently of manual artwork uploads, because apparently making administrators screenshot every episode was not quite the pinnacle of human productivity.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>1. Overview Thumbnail Generation automatically creates the poster and thumbnail images used to represent an episode throughout the application, including drama cards, episode lists, and share links. This eliminates the need for administrators to manually capture screenshots or upload separate artwork for every episode. A related option, Preview Clip, can also generate a short hover-preview [&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-1968","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\/1968","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=1968"}],"version-history":[{"count":3,"href":"https:\/\/documentation.iqonic.design\/streamit-laravel\/wp-json\/wp\/v2\/posts\/1968\/revisions"}],"predecessor-version":[{"id":1976,"href":"https:\/\/documentation.iqonic.design\/streamit-laravel\/wp-json\/wp\/v2\/posts\/1968\/revisions\/1976"}],"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=1968"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/documentation.iqonic.design\/streamit-laravel\/wp-json\/wp\/v2\/categories?post=1968"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/documentation.iqonic.design\/streamit-laravel\/wp-json\/wp\/v2\/tags?post=1968"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}