{"id":3880,"date":"2025-11-21T18:43:19","date_gmt":"2025-11-21T10:43:19","guid":{"rendered":"https:\/\/crepal.ai\/blog\/?p=3880"},"modified":"2025-11-21T18:43:21","modified_gmt":"2025-11-21T10:43:21","slug":"wan-looping-tiktok-seamless","status":"publish","type":"post","link":"https:\/\/crepal.ai\/blog\/aivideo\/wan-looping-tiktok-seamless\/","title":{"rendered":"WAN 2.5 Looping Visuals Create Seamless TikTok Clips"},"content":{"rendered":"\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"518\" data-id=\"3882\" data-src=\"https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-151-1024x518.png\" alt=\"\" class=\"wp-image-3882 lazyload\" data-srcset=\"https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-151-1024x518.png 1024w, https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-151-300x152.png 300w, https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-151-768x388.png 768w, https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-151-1536x777.png 1536w, https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-151-18x9.png 18w, https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-151.png 1627w\" data-sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/518;\" \/><\/figure>\n<\/figure>\n\n\n\n<p>On November 15, 2025, I fell into a tiny rabbit hole. I wanted a 6-second seamless loop for a banner, something subtle: drifting smoke that never &#8220;jumps.&#8221; I opened<a href=\"https:\/\/wan25.ai\/zh?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"> WAN 2.5<\/a>, hit generate, and\u2026 the loop popped like a bad cut. So I spent the weekend poking at WAN 2.5&#8217;s knobs until the loops felt like they could run forever. Not sponsored, just honest results.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Perfect Loop Anatomy: Technical Breakdown<\/h2>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"613\" height=\"217\" data-id=\"3883\" data-src=\"https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-152.png\" alt=\"\" class=\"wp-image-3883 lazyload\" data-srcset=\"https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-152.png 613w, https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-152-300x106.png 300w, https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-152-18x6.png 18w\" data-sizes=\"auto, (max-width: 613px) 100vw, 613px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 613px; --smush-placeholder-aspect-ratio: 613\/217;\" \/><\/figure>\n<\/figure>\n\n\n\n<p>A good loop is a circle, not a line. In WAN 2.5, that means getting the first and last frames to rhyme, not just match.<\/p>\n\n\n\n<p>Here&#8217;s the anatomy that made my loops click:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Consistent world state: The background and lighting must return to the same &#8220;state&#8221; at frame 0 and frame N. WAN 2.5 is pretty stable if you lower motion randomness. I set motion strength to 0.35\u20130.45 and temporal noise to low.<\/li>\n\n\n\n<li>Periodic motion: If the motion has a natural cycle (orbiting, breathing, sway), the model can land back on the start frame without a noticeable seam.<\/li>\n\n\n\n<li>Latent continuity: Using the same seed and tiling noise across time helps. On 11\/16, I ran 48 frames at 24 fps (2 seconds) with seed lock on and tile-noise ON. The cut point was almost clean out of the box.<\/li>\n\n\n\n<li>Camera vs. subject motion: WAN 2.5 handles subject looping better than camera looping. Gentle parallax can work, but hard pans break loops unless you do clever wraparounds.<\/li>\n<\/ul>\n\n\n\n<p><a href=\"https:\/\/www.wan2video.com\/wan-2-5-ai?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Settings<\/a> from my notes (WAN 2.5 web UI):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Frames: 48 or 72<\/li>\n\n\n\n<li>FPS: 24<\/li>\n\n\n\n<li>Guidance\/CFG: 4.5\u20136 (higher can over-sharpen the seam)<\/li>\n\n\n\n<li>Motion strength: 0.4 baseline<\/li>\n\n\n\n<li>Consistency: medium-high<\/li>\n\n\n\n<li>Seed: fixed<\/li>\n<\/ul>\n\n\n\n<p>If you&#8217;re new to looping, think of it like tying a scarf: both ends need the same pattern and tension. The model gives you the fabric: you still have to tie the knot.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">7 Looping Techniques for WAN 2.5<\/h2>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"654\" data-id=\"3884\" data-src=\"https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-153-1024x654.png\" alt=\"\" class=\"wp-image-3884 lazyload\" data-srcset=\"https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-153-1024x654.png 1024w, https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-153-300x192.png 300w, https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-153-768x491.png 768w, https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-153-18x12.png 18w, https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-153.png 1236w\" data-sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/654;\" \/><\/figure>\n<\/figure>\n\n\n\n<p>These are the seven methods I tried, with how they actually felt in use.<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>True-period prompt design<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>I wrote prompts that imply periodic motion: &#8220;soft breathing fabric,&#8221; &#8220;orbiting sparkles,&#8221; &#8220;gentle pendulum sway,&#8221; &#8220;floating jellyfish pulsing.&#8221; With 48 frames, the model often returned to the start shape. Surprisingly reliable if motion strength is under 0.5.<\/li>\n<\/ul>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Latent wrap (frame 0 \u2192 frame N conditioning)<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Trick: Generate your clip, then re-run with the first frame as image conditioning for the last 8\u201312 frames. On 11\/17, conditioning the final 10 frames with frame 0 cut my seam by ~70% visually.<\/li>\n<\/ul>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Ping-pong (forward-backward)<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Old-school, but WAN 2.5&#8217;s temporal coherence makes it smooth. Export 36 frames forward, then reverse them to 36 back. It doubles the duration and hides a visible cut. Works best for sways and drifts: not great for directional motion like falling confetti.<\/li>\n<\/ul>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>Crossfade-on-sameness<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>I stacked the clip on itself and did a 6\u201310 frame crossfade where frame N roughly matches frame 0. If the motion field isn&#8217;t chaotic, the dissolve is invisible at phone size. This saved a windy grass shot that refused to hard-cut.<\/li>\n<\/ul>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li>Texture-lock with tile noise<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If your loop lives in micro-texture (water ripples, smoke, cloth), turn on tile noise and reduce high-frequency chaos. WAN 2.5 gave me &#8220;same-but-moving&#8221; textures that returned home cleanly.<\/li>\n<\/ul>\n\n\n\n<ol start=\"6\" class=\"wp-block-list\">\n<li>Camera wrap using post offset<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>For slow horizontal pans, I exported at 2048\u00d71024, then offset the layer in post (After Effects\/Resolve) so the right edge meets the left. WAN 2.5&#8217;s mid-frame consistency helped hide the join once I added a soft luminance mask. Not turnkey, but doable.<\/li>\n<\/ul>\n\n\n\n<ol start=\"7\" class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.wan2video.com\/wan-2-5-ai?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Frame-to-frame guidance <\/a>refresh<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>I regenerated only the last 6\u20138 frames with stronger consistency and slightly lowered CFG, nudged by the first frame. It&#8217;s like easing the model into a landing. Felt fiddly, but it rescued a neon loop where the highlight drifted.<\/li>\n<\/ul>\n\n\n\n<p>If I had to pick two: true-period prompt design + crossfade-on-sameness. Fast, repeatable, and they survived compression.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Timing &amp; Pacing Best Practices<\/h2>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-4 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"972\" height=\"764\" data-id=\"3885\" data-src=\"https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-154.png\" alt=\"\" class=\"wp-image-3885 lazyload\" data-srcset=\"https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-154.png 972w, https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-154-300x236.png 300w, https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-154-768x604.png 768w, https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-154-15x12.png 15w\" data-sizes=\"auto, (max-width: 972px) 100vw, 972px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 972px; --smush-placeholder-aspect-ratio: 972\/764;\" \/><\/figure>\n<\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Optimal Duration for Loops<\/h3>\n\n\n\n<p>I tested 24, 48, and 72 frames at 24 fps on 11\/16\u201311\/18.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>24 frames (1s): Snappy, but seams are obvious. Good for UI flourishes.<\/li>\n\n\n\n<li>48 frames (2s): Sweet spot. WAN 2.5 can &#8220;remember&#8221; the start state without drifting.<\/li>\n\n\n\n<li>72 frames (3s): Prettiest for ambient loops, but more chance of drift. Use seed lock and lower motion strength (~0.35).<\/li>\n<\/ul>\n\n\n\n<p>For social banners, 2\u20133 seconds felt natural. For websites, 4\u20136 seconds works if motion is minimal and texture-led.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Syncing Motion to Audio or Visual Cues<\/h3>\n\n\n\n<p>When I synced a gentle whoosh at 120 BPM (two beats per second), a 2-second visual cycle matched the audio loop perfectly. If you don&#8217;t have music, use visual beats: a light flare, a wave crest, a blink. Place your seam right after a perceptual peak, our brains forgive transitions there.<\/p>\n\n\n\n<p>Practical steps I used:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pick FPS first (usually 24).<\/li>\n\n\n\n<li>Choose a loop length divisible by your beat grid (e.g., 48 frames for 2 seconds at 120 BPM).<\/li>\n\n\n\n<li>Mark frame 0 and frame N in your editor: test the cut with a one-frame jump before you do any fancy blending.<\/li>\n<\/ul>\n\n\n\n<p>WAN 2.5 note: Strong staccato motion (spark showers, hard camera shakes) rarely loops cleanly without ping-pong or crossfades. Fluid motions loop best.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Post-Production Loop Optimization<\/h2>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-5 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"856\" height=\"460\" data-id=\"3886\" data-src=\"https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-155.png\" alt=\"\" class=\"wp-image-3886 lazyload\" data-srcset=\"https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-155.png 856w, https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-155-300x161.png 300w, https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-155-768x413.png 768w, https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-155-18x10.png 18w\" data-sizes=\"auto, (max-width: 856px) 100vw, 856px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 856px; --smush-placeholder-aspect-ratio: 856\/460;\" \/><\/figure>\n<\/figure>\n\n\n\n<p>Generation is half the job: the invisible seam lives in post.<\/p>\n\n\n\n<p>What actually helped me ship clean loops:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Trim to the strongest repeat: I eyeballed a moment where shape A returns to almost shape A. That might be 46 frames, not 48. Don&#8217;t be precious, trim and re-time.<\/li>\n\n\n\n<li>Micro time-warp: I used a 2\u20134% time stretch over the last 8 frames so frame N lands closer to frame 0. In Resolve, Optical Flow + Speed Ramp set to Ease In.<\/li>\n\n\n\n<li>Add a 6\u201310 frame crossfade on luminance only: Blend the bright values, let mids\/shadows cut. The eye forgives this first.<\/li>\n\n\n\n<li>Gentle grain: A tiny film grain or dithering layer covers micro pops from compression. Export H.264 high profile or VP9 with higher bitrate: looping hates macroblocking.<\/li>\n\n\n\n<li>Color match endpoints: Lift or lower last-frame exposure by \u00b12% to match frame 0. It matters more than you think.<\/li>\n\n\n\n<li>Export settings that didn&#8217;t fail me:<\/li>\n\n\n\n<li>1080&#215;1080 or 1920&#215;1080<\/li>\n\n\n\n<li>24 fps<\/li>\n\n\n\n<li>12\u201320 Mbps (web), 6\u20138 Mbps (mobile embeds)<\/li>\n\n\n\n<li>AAC 160 kbps if audio<\/li>\n<\/ul>\n\n\n\n<p>Real quick case from 11\/18: Jellyfish drift, 72 frames, CFG 5.2, motion 0.4, seed fixed. Raw cut was visible. After a 2% end-speed ramp + 8-frame luminance crossfade, the loop felt endless, even full-screen.<\/p>\n\n\n\n<p>If you want official knobs, check the WAN 2.5 docs\/changelog for exact parameter names and defaults. I always skim release notes before a big project: tiny changes in temporal noise can make or break loops.<\/p>\n\n\n\n<p>Last thought<\/p>\n\n\n\n<p>If your first export doesn&#8217;t loop, don&#8217;t toss it. Trim two frames, add a soft dissolve, and try again. <a href=\"https:\/\/wan25.ai\/zh?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">WAN 2.5 <\/a>gives you 90% of the loop: post gets you the last 10%. And honestly, that last 10% is where the magic hides.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<p>Previous posts:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-crepal-content-center wp-block-embed-crepal-content-center\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"dRcJhYpIam\"><a href=\"https:\/\/crepal.ai\/blog\/aivideo\/kling-fashion-video-guide\/\">Kling AI Fashion Video Guide Realistic Clothing Animation<\/a><\/blockquote><iframe class=\"wp-embedded-content lazyload\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;Kling AI Fashion Video Guide Realistic Clothing Animation&#8221; &#8212; CrePal Content Center\" data-src=\"https:\/\/crepal.ai\/blog\/aivideo\/kling-fashion-video-guide\/embed\/#?secret=5idVjzuOOP#?secret=dRcJhYpIam\" data-secret=\"dRcJhYpIam\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" data-load-mode=\"1\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-crepal-content-center wp-block-embed-crepal-content-center\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"tGhwczUf3L\"><a href=\"https:\/\/crepal.ai\/blog\/aivideo\/luma-product-ads-ai\/\">Luma Dream Machine for Product Ads Cinematic Videos Without Filming<\/a><\/blockquote><iframe class=\"wp-embedded-content lazyload\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;Luma Dream Machine for Product Ads Cinematic Videos Without Filming&#8221; &#8212; CrePal Content Center\" data-src=\"https:\/\/crepal.ai\/blog\/aivideo\/luma-product-ads-ai\/embed\/#?secret=TlxCu47aHV#?secret=tGhwczUf3L\" data-secret=\"tGhwczUf3L\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" data-load-mode=\"1\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-crepal-content-center wp-block-embed-crepal-content-center\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"QgrF9gXoAh\"><a href=\"https:\/\/crepal.ai\/blog\/aivideo\/runway-gen4-motion-prompts\/\">Runway Gen-4 Camera Motion Dynamic Shots Instantly<\/a><\/blockquote><iframe class=\"wp-embedded-content lazyload\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;Runway Gen-4 Camera Motion Dynamic Shots Instantly&#8221; &#8212; CrePal Content Center\" data-src=\"https:\/\/crepal.ai\/blog\/aivideo\/runway-gen4-motion-prompts\/embed\/#?secret=4CFFSas48h#?secret=QgrF9gXoAh\" data-secret=\"QgrF9gXoAh\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" data-load-mode=\"1\"><\/iframe>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>On November 15, 2025, I fell into a tiny rabbit hole. I wanted a 6-second seamless loop for a banner, something subtle: drifting smoke that never &#8220;jumps.&#8221; I opened WAN 2.5, hit generate, and\u2026 the loop popped like a bad cut. So I spent the weekend poking at WAN 2.5&#8217;s knobs until the loops felt [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":3881,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_gspb_post_css":"","_uag_custom_page_level_css":"","footnotes":""},"categories":[8],"tags":[],"class_list":["post-3880","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aivideo"],"blocksy_meta":[],"uagb_featured_image_src":{"full":["https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-150.png",1281,720,false],"thumbnail":["https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-150-150x150.png",150,150,true],"medium":["https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-150-300x169.png",300,169,true],"medium_large":["https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-150-768x432.png",768,432,true],"large":["https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-150-1024x576.png",1024,576,true],"1536x1536":["https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-150.png",1281,720,false],"2048x2048":["https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-150.png",1281,720,false],"trp-custom-language-flag":["https:\/\/crepal.ai\/blog\/wp-content\/uploads\/2025\/11\/image-150-18x10.png",18,10,true]},"uagb_author_info":{"display_name":"Dora","author_link":"https:\/\/crepal.ai\/blog\/author\/dora\/"},"uagb_comment_info":10,"uagb_excerpt":"On November 15, 2025, I fell into a tiny rabbit hole. I wanted a 6-second seamless loop for a banner, something subtle: drifting smoke that never &#8220;jumps.&#8221; I opened WAN 2.5, hit generate, and\u2026 the loop popped like a bad cut. So I spent the weekend poking at WAN 2.5&#8217;s knobs until the loops felt&hellip;","_links":{"self":[{"href":"https:\/\/crepal.ai\/blog\/wp-json\/wp\/v2\/posts\/3880","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/crepal.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/crepal.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/crepal.ai\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/crepal.ai\/blog\/wp-json\/wp\/v2\/comments?post=3880"}],"version-history":[{"count":1,"href":"https:\/\/crepal.ai\/blog\/wp-json\/wp\/v2\/posts\/3880\/revisions"}],"predecessor-version":[{"id":3888,"href":"https:\/\/crepal.ai\/blog\/wp-json\/wp\/v2\/posts\/3880\/revisions\/3888"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/crepal.ai\/blog\/wp-json\/wp\/v2\/media\/3881"}],"wp:attachment":[{"href":"https:\/\/crepal.ai\/blog\/wp-json\/wp\/v2\/media?parent=3880"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/crepal.ai\/blog\/wp-json\/wp\/v2\/categories?post=3880"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/crepal.ai\/blog\/wp-json\/wp\/v2\/tags?post=3880"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}