{"id":15917,"date":"2023-12-04T09:39:52","date_gmt":"2023-12-04T09:39:52","guid":{"rendered":"https:\/\/new-blog.artlist.io\/blog\/?p=15917"},"modified":"2024-01-10T08:48:05","modified_gmt":"2024-01-10T08:48:05","slug":"vj-loops","status":"publish","type":"post","link":"https:\/\/new-blog.artlist.io\/blog\/vj-loops\/","title":{"rendered":"Understanding VJ loops"},"content":{"rendered":"<p>Ever heard of a VJ loop before? Perhaps not. But we guarantee you\u2019ve seen one. Whether you\u2019re new to the world of VJ loops and want to learn more, or you\u2019re interested in making your own and finding VJ loops that you can use in your own work, keep on reading. Today, we\u2019re taking a closer look at the world of VJ loops!<\/p>\n<h2>What are VJ loops?<\/h2>\n<p>So first things first, what are VJ loops? VJ loops are otherwise known as video loops, and the clue is in the name. VJ loops are a short video clip that spans only 4, 8, or 16 seconds in length. However, because the visual sequence is seamless, the video can be played continuously on a loop without any apparent, abrupt transitions. Take a look at these examples below:<\/p>\n\n    <div class=\"clipsContainer\" id=\"69d06cf96b513\"><\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n\n            if(\"footage\" == 'footage') {\n                if(\"\" == '') { \/\/ if this is a request for multiple clips by attributes\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query ClipList($page: Int, $sortType: Int, $categoryIds: String, $searchTerm: String) {\n\t\t\t\t\t\t\t\tclipList(page: $page, sortType: $sortType, categoryIds: $categoryIds, searchTerm: $searchTerm) {\n\t\t\t\t\t\t\t\t  exactResults  {\n\t\t\t\t\t\t\t\t\tclipPath\n\t\t\t\t\t\t\t\t\tclipNameForUrl\n\t\t\t\t\t\t\t\t\tid\n\t\t\t\t\t\t\t\t\tisNew\n\t\t\t\t\t\t\t\t\tfilmMakerDisplayName\n\t\t\t\t\t\t\t\t\timageUrl\n\t\t\t\t\t\t\t\t\tthumbnailUrl\n\t\t\t\t\t\t\t\t\twidth\n\t\t\t\t\t\t\t\t\tvideoUrl\n\t\t\t\t\t\t\t\t\trawFileExt\n\t\t\t\t\t\t\t\t  }\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}`,\n                            variables: `{\n\t\t\t\t\t\t\t\t\"page\": 1,\n\t\t\t\t\t\t\t\t\"sortType\": 1,\n\t\t\t\t\t\t\t\t\"categoryIds\": null,\n\t\t\t\t\t\t\t\t\"searchTerm\": \"vj loops\"\n\t\t\t\t\t\t\t}`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('footage list: ', res);\n                            var data = res.data.clipList.exactResults;\n                            if ($(\"#69d06cf96b513\").length && data.length > 0) {\n                                createClipsGrid(data, \"69d06cf96b513\");\n                            } else if ($(\"#69d06cf96b513\").length && data.length == 0) {\n                                $(\"#69d06cf96b513\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                } else if(\"\" !== '') { \/\/ if this is a request for a specific clip by id\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query Clip($clipId: Int!) {\n\t\t\t\t\t\t\t\tclip(id: $clipId) {\n\t\t\t\t\t\t\t\t\tclipPath\n\t\t\t\t\t\t\t\t\tclipNameForUrl\n\t\t\t\t\t\t\t\t\tid\n\t\t\t\t\t\t\t\t\tisNew\n\t\t\t\t\t\t\t\t\tfilmMakerDisplayName\n\t\t\t\t\t\t\t\t\timageUrl\n\t\t\t\t\t\t\t\t\tthumbnailUrl\n\t\t\t\t\t\t\t\t\twidth\n\t\t\t\t\t\t\t\t\tvideoUrl\n\t\t\t\t\t\t\t\t\trawFileExt\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}`,\n                            variables: `{\n\t\t\t\t\t\t\t\t\"clipId\": \t\t\t\t\t\t\t}`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('specific footage: ', res);\n                            var data = res.data.clip;\n                            if ($(\"#69d06cf96b513\").length && data !== '') {\n                                createClipsGrid(data, \"69d06cf96b513\");\n                            } else if ($(\"#69d06cf96b513\").length && data.length == '') {\n                                $(\"#69d06cf96b513\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                }\n            } else if(\"footage\" == 'templates') {\n                if(\"\" === '') {\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query TemplatesList($payload: TemplatesByTermSearchPayload!) {\n                                templatesList(payload: $payload) {\n                                    nameForUrl\n                                    id\n                                    name\n                                    isNew\n                                    artistName\n                                    thumbnailUrl\n                                    previewVideoFileUrl\n                                }\n                            }`,\n                            variables: `{\n                                \"payload\": {\n                                    \"page\": 1,\n                                    \"take\": 6,\n                                    \"sortBy\": \"1\",\n                                    \"categories\": null,\n                                    \"searchTerms\": \"vj loops\"\n                                }\n                            }`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('templates list: ', res);\n                            var data = res.data.templatesList;\n                            if ($(\"#69d06cf96b513\").length && data.length > 0) {\n                                createClipsGrid(data, \"69d06cf96b513\");\n                            } else if ($(\"#69d06cf96b513\").length && data.length == 0) {\n                                $(\"#69d06cf96b513\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                    } else if(\"\" !== '') {\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query Template($ids: [String!]!, $page: Int!, $take: Int!) {\n\t\t\t\t\t\t\t\ttemplatesByIds(ids: $ids, page: $page, take: $take) {\n\t\t\t\t\t\t\t\t\tnameForUrl\n                                    id\n                                    name\n                                    isNew\n                                    artistName\n                                    thumbnailUrl\n                                    previewVideoFileUrl\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}`,\n                            variables: `{\n                                \"ids\": [\"\"],\n                                \"page\": 1,\n                                \"take\": 1\n\t\t\t\t\t\t\t}`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('specific template: ', res);\n                            var data = res.data.templatesByIds[0];\n                            if ($(\"#69d06cf96b513\").length && data !== '') {\n                                createClipsGrid(data, \"69d06cf96b513\");\n                            } else if ($(\"#69d06cf96b513\").length && data.length == '') {\n                                $(\"#69d06cf96b513\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                }\n            }\n\n            function createClipsGrid(data, clipsContainerId){\n                const container = $(\"#\" + clipsContainerId);\n                let playerSrc = '';\n\n                $.each(data, function(index, clip) {\n                    if(\"\" !== '') { \/\/ if this is a request for a specific clip by id - then the data is not an array of clips but only one clip and that's why the \"clip\" variable is actually the \"data\"\n                        index = 0\n                        clip = data;\n                    }\n                    if ((index) < 6) {\n                        \/\/ clip container\n                        const clipContainer = $(\"<div>\").addClass(\"clipContainer \");\n                        \/\/ new badge\n                        if (clip.isNew) {\n                            clipContainer.append('<span class=\"isNewBadge\">NEW<\/span>');\n                        }\n                        \/\/ video\n                        let videoElement = document.createElement('video');\n                        videoElement.setAttribute('playsinline', '');\n                        videoElement.setAttribute('webkit-playsinline', '');\n                        videoElement.setAttribute('x5-playsinline', '');\n                        videoElement.setAttribute('preload', 'auto');\n                        \n                        clipContainer.append(videoElement);\n                        \/\/ clip name and artist name\n                        let clipName = '';\n                        let artistName = '';\n                        if(\"footage\" == 'footage') {\n                            clipName = clip.clipNameForUrl;\n                            clipName = clipName.replace(\/-\/g, \", \");\n                            clipName = $(\"<a>\").addClass(\"clipName\").attr(\"href\", \"https:\/\/artlist.io\/stock-footage\/clip\/\" + clip.clipNameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").text(clipName);\n                            artistName = $(\"<div>\").addClass(\"artistName\").text('By ' + clip.filmMakerDisplayName + '');\n                        } else if(\"footage\" == 'templates') {\n                            clipName = $(\"<a>\").addClass(\"clipName\").attr(\"href\", \"https:\/\/artlist.io\/video-templates\/\" + clip.nameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").text(clip.name);\n                            artistName = $(\"<div>\").addClass(\"artistName\").text('By ' + clip.artistName + '');\n                        }\n                        const clipNames = $(\"<span>\").addClass(\"clipNames\").append(clipName, artistName);\n                        \/\/ download button\n                        let clipDownload = '';\n                        if(\"footage\" == 'footage') {\n                            clipDownload = $(\"<a>\").addClass(\"clipDownload\").attr(\"href\", \"https:\/\/artlist.io\/stock-footage\/clip\/\" + clip.clipNameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").html('<i class=\"icon download white\"><\/i>');\n                        } else if(\"footage\" == 'templates') {\n                            clipDownload = $(\"<a>\").addClass(\"clipDownload\").attr(\"href\", \"https:\/\/artlist.io\/video-templates\/\" + clip.nameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").html('<i class=\"icon download white\"><\/i>');\n                        }\n                        \/\/ overlay\n                        const overlay = $(\"<div>\").addClass(\"overlay\");\n                        overlay.append(clipNames, clipDownload);\n\n                        \/\/ APPEND ALL ELEMENTS INTO AUDIO PLAYER CONTAINER\n                        clipContainer.append(videoElement, overlay);\n\n                        \/\/ if this is a preview of only one specific clip (by id)\n                        if(\"\" !== '') {\n                            $(container).addClass(\"clipContainerSingular\")\n                        }\n\n                        \/\/ append audio player container into main playlist container\n                        container.append(clipContainer[0]);\n\n                        if(\"footage\" == 'footage') {\n                            playerSrc =  clip.clipPath;\n                        } else if(\"footage\" == 'templates') {\n                            playerSrc =  clip.previewVideoFileUrl;\n                        }\n                        const player = videojs(videoElement, {\n                            muted: true,\n                            autoplay: true,\n                        });\n\n                        player.src({\n                            src: playerSrc,\n                            type: 'application\/x-mpegURL'\n                        });\n\n                        \/* SEGMENT EVENTS *\/\n                        const special_data = getProps();\n\n                        \/* media played *\/\n                        var $videoElement = $(videoElement);\n                        $videoElement.on('play', function() {\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media played\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n\n                        \/* media paused *\/\n                        var $videoElement = $(videoElement);\n                        $videoElement.on('pause', function() {\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media paused\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n\n                        \/* media viewed *\/\n                        const observer = new IntersectionObserver(entries => {\n                            entries.forEach(entry => {\n                                if (entry.isIntersecting) {\n                                    var assetId = clip.id;\n                                    var artist = clip.filmMakerDisplayName || clip.artistName;\n                                    var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                                    var asset_type = null;\n                                    if(\"footage\" == 'footage') {\n                                        asset_type = 'footage';\n                                    } else if(\"footage\" == 'templates') {\n                                        asset_type = 'template';\n                                    }\n                                    analytics.track(\"media viewed\", {\n                                        asset_id: assetId || null,\n                                        asset_type: asset_type || null,\n                                        click_source: 'player',\n                                        artist: artist || null,\n                                        title: title || null,\n                                        genre: null,\n                                        ...special_data,\n                                    });\n                                    observer.unobserve(entry.target);\n                                }\n                            });\n                        }, {\n                            threshold: 0.5\n                        });\n                        observer.observe($videoElement[0]);\n\n                        \/* media downloaded *\/\n                        $videoElement.closest('.clipContainer').find('.clipName').on('click', function() {\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media downloaded\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n                        $videoElement.closest('.clipContainer').find('.clipDownload').on('click', function() {\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media downloaded\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n\n                        \/\/ check screen size\n                        var mobileScreen = window.matchMedia('(max-width: 767px)');\n                        if (mobileScreen.matches) { \/\/ mobile\n                            const observer = new IntersectionObserver(function(entries) {\n                                entries.forEach(entry => {\n                                    if (entry.isIntersecting) {\n                                        player.play(); \/\/ Play the video when it enters the viewport\n                                    } else {\n                                        player.pause(); \/\/ Pause the video when it goes out of the viewport\n                                    }\n                                });\n                            });\n                            observer.observe(videoElement);\n                        } else { \/\/ desktop\n                            clipContainer.on('mouseenter', function() {\n                                player.play();\n                            });\n\n                            clipContainer.on('mouseleave', function() {\n                                player.pause();\n                            });\n                        }\n\n                    }\n                    if(\"\" !== '') { \/\/ if this is a request for a specific clip by id - then break out of loop after first time bc it's not an array\n                        return false;\n                    }\n                });\n            }\n\n        });\n    <\/script>\n\n    \n<h2>What are VJ loops used for?<\/h2>\n<p>Now that you\u2019ve seen the above examples, you\u2019ll realize that you probably <em>have<\/em> seen VJ loops before. They were first deployed in the music industry as a way of elevating DJs and music bands&#8217; live performances (often on a huge screen behind the stage and performers). Nowadays, you\u2019ll find them used in many different areas, including:<\/p>\n<ul>\n<li>Presentations<\/li>\n<li>Music videos<\/li>\n<li>Weddings<\/li>\n<li>Corporate events<\/li>\n<li>Live music gigs<\/li>\n<li>Live streams<\/li>\n<li>Church events<\/li>\n<li>Website background videos<\/li>\n<\/ul>\n<h2>Why use VJ loops?<\/h2>\n<p>VJ loops are a great way to elevate your event. Whether you\u2019re giving a presentation, playing a live music gig, or at a wedding, the VJ loop gives the people attending the event something a little more visual and interesting to look at, as compared to a blank, static background.<\/p>\n<p>When paired and tailored to your event properly, they can also help in the storytelling aspect of the event, communicating key themes and elements in a faster, more succinct way.<\/p>\n<h2>Creating a VJ loop from scratch<\/h2>\n<p>If you\u2019re feeling creative and ambitious, plus you want to tailor your VJ loop very specifically, you can make a VJ loop from scratch. There are a few ways to achieve this.<\/p>\n<h3>Option #1: Stock video footage and Adobe After Effects<\/h3>\n<p>Working with <a href=\"https:\/\/artlist.io\/video-templates\/categories\/adobe-after-effects\">Adobe After Effects<\/a> and downloading <a href=\"https:\/\/artlist.io\/stock-footage\">stock footage<\/a>, you can come up with some pretty impressive, unique 4K VJ loops.<\/p>\n<h3>Option #2: 2D animation and Adobe After Effects<\/h3>\n<p>If you really know what you\u2019re doing in After Effects, you could use various tools to animate your 2D animation \u2013 geometries, patterns, colors, and characters can all be played with.<\/p>\n<h3>Option #3: 3D animation and Blender<\/h3>\n<p>The third option is to create 3D animations from scratch using Blender. This program is a versatile open-source 3D software that\u2019s well-known in the industry for its extensive features and community support. Best of all\u2026it\u2019s free!<\/p>\n<p>Of course, all of the above options require a lot of time as well as some serious knowledge and expertise in the various software. This is where the other option comes in\u2026<\/p>\n<h2>Ready to use VJ loops<\/h2>\n<p>Unsurprisingly, there is big demand for VJ loops around the world and you\u2019ll be pleased to know that you don\u2019t <em>have<\/em> to make yours from scratch. Creating a VJ loop from scratch is a really intense, time-consuming process and on your first few attempts at least, you can\u2019t guarantee greatness. Instead, it may be much easier to download VJ loops that are already in existence and available for you to use right now.<\/p>\n<p>For example, on Artlist, there are hundreds of different 4K VJ loops to choose from. When searching for footage, simply type in \u201cVJ loops\u2019 in the search bar. You\u2019ll come across plenty of great options just like these:<\/p>\n\n    <div class=\"clipsContainer\" id=\"69d06cf96b729\"><\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n\n            if(\"footage\" == 'footage') {\n                if(\"669074\" == '') { \/\/ if this is a request for multiple clips by attributes\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query ClipList($page: Int, $sortType: Int, $categoryIds: String, $searchTerm: String) {\n\t\t\t\t\t\t\t\tclipList(page: $page, sortType: $sortType, categoryIds: $categoryIds, searchTerm: $searchTerm) {\n\t\t\t\t\t\t\t\t  exactResults  {\n\t\t\t\t\t\t\t\t\tclipPath\n\t\t\t\t\t\t\t\t\tclipNameForUrl\n\t\t\t\t\t\t\t\t\tid\n\t\t\t\t\t\t\t\t\tisNew\n\t\t\t\t\t\t\t\t\tfilmMakerDisplayName\n\t\t\t\t\t\t\t\t\timageUrl\n\t\t\t\t\t\t\t\t\tthumbnailUrl\n\t\t\t\t\t\t\t\t\twidth\n\t\t\t\t\t\t\t\t\tvideoUrl\n\t\t\t\t\t\t\t\t\trawFileExt\n\t\t\t\t\t\t\t\t  }\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}`,\n                            variables: `{\n\t\t\t\t\t\t\t\t\"page\": 1,\n\t\t\t\t\t\t\t\t\"sortType\": 1,\n\t\t\t\t\t\t\t\t\"categoryIds\": null,\n\t\t\t\t\t\t\t\t\"searchTerm\": \"\"\n\t\t\t\t\t\t\t}`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('footage list: ', res);\n                            var data = res.data.clipList.exactResults;\n                            if ($(\"#69d06cf96b729\").length && data.length > 0) {\n                                createClipsGrid(data, \"69d06cf96b729\");\n                            } else if ($(\"#69d06cf96b729\").length && data.length == 0) {\n                                $(\"#69d06cf96b729\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                } else if(\"669074\" !== '') { \/\/ if this is a request for a specific clip by id\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query Clip($clipId: Int!) {\n\t\t\t\t\t\t\t\tclip(id: $clipId) {\n\t\t\t\t\t\t\t\t\tclipPath\n\t\t\t\t\t\t\t\t\tclipNameForUrl\n\t\t\t\t\t\t\t\t\tid\n\t\t\t\t\t\t\t\t\tisNew\n\t\t\t\t\t\t\t\t\tfilmMakerDisplayName\n\t\t\t\t\t\t\t\t\timageUrl\n\t\t\t\t\t\t\t\t\tthumbnailUrl\n\t\t\t\t\t\t\t\t\twidth\n\t\t\t\t\t\t\t\t\tvideoUrl\n\t\t\t\t\t\t\t\t\trawFileExt\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}`,\n                            variables: `{\n\t\t\t\t\t\t\t\t\"clipId\": 669074\t\t\t\t\t\t\t}`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('specific footage: ', res);\n                            var data = res.data.clip;\n                            if ($(\"#69d06cf96b729\").length && data !== '') {\n                                createClipsGrid(data, \"69d06cf96b729\");\n                            } else if ($(\"#69d06cf96b729\").length && data.length == '') {\n                                $(\"#69d06cf96b729\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                }\n            } else if(\"footage\" == 'templates') {\n                if(\"669074\" === '') {\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query TemplatesList($payload: TemplatesByTermSearchPayload!) {\n                                templatesList(payload: $payload) {\n                                    nameForUrl\n                                    id\n                                    name\n                                    isNew\n                                    artistName\n                                    thumbnailUrl\n                                    previewVideoFileUrl\n                                }\n                            }`,\n                            variables: `{\n                                \"payload\": {\n                                    \"page\": 1,\n                                    \"take\": 2,\n                                    \"sortBy\": \"1\",\n                                    \"categories\": null,\n                                    \"searchTerms\": \"\"\n                                }\n                            }`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('templates list: ', res);\n                            var data = res.data.templatesList;\n                            if ($(\"#69d06cf96b729\").length && data.length > 0) {\n                                createClipsGrid(data, \"69d06cf96b729\");\n                            } else if ($(\"#69d06cf96b729\").length && data.length == 0) {\n                                $(\"#69d06cf96b729\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                    } else if(\"669074\" !== '') {\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query Template($ids: [String!]!, $page: Int!, $take: Int!) {\n\t\t\t\t\t\t\t\ttemplatesByIds(ids: $ids, page: $page, take: $take) {\n\t\t\t\t\t\t\t\t\tnameForUrl\n                                    id\n                                    name\n                                    isNew\n                                    artistName\n                                    thumbnailUrl\n                                    previewVideoFileUrl\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}`,\n                            variables: `{\n                                \"ids\": [\"669074\"],\n                                \"page\": 1,\n                                \"take\": 1\n\t\t\t\t\t\t\t}`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('specific template: ', res);\n                            var data = res.data.templatesByIds[0];\n                            if ($(\"#69d06cf96b729\").length && data !== '') {\n                                createClipsGrid(data, \"69d06cf96b729\");\n                            } else if ($(\"#69d06cf96b729\").length && data.length == '') {\n                                $(\"#69d06cf96b729\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                }\n            }\n\n            function createClipsGrid(data, clipsContainerId){\n                const container = $(\"#\" + clipsContainerId);\n                let playerSrc = '';\n\n                $.each(data, function(index, clip) {\n                    if(\"669074\" !== '') { \/\/ if this is a request for a specific clip by id - then the data is not an array of clips but only one clip and that's why the \"clip\" variable is actually the \"data\"\n                        index = 0\n                        clip = data;\n                    }\n                    if ((index) < 2) {\n                        \/\/ clip container\n                        const clipContainer = $(\"<div>\").addClass(\"clipContainer \");\n                        \/\/ new badge\n                        if (clip.isNew) {\n                            clipContainer.append('<span class=\"isNewBadge\">NEW<\/span>');\n                        }\n                        \/\/ video\n                        let videoElement = document.createElement('video');\n                        videoElement.setAttribute('playsinline', '');\n                        videoElement.setAttribute('webkit-playsinline', '');\n                        videoElement.setAttribute('x5-playsinline', '');\n                        videoElement.setAttribute('preload', 'auto');\n                        \n                        clipContainer.append(videoElement);\n                        \/\/ clip name and artist name\n                        let clipName = '';\n                        let artistName = '';\n                        if(\"footage\" == 'footage') {\n                            clipName = clip.clipNameForUrl;\n                            clipName = clipName.replace(\/-\/g, \", \");\n                            clipName = $(\"<a>\").addClass(\"clipName\").attr(\"href\", \"https:\/\/artlist.io\/stock-footage\/clip\/\" + clip.clipNameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").text(clipName);\n                            artistName = $(\"<div>\").addClass(\"artistName\").text('By ' + clip.filmMakerDisplayName + '');\n                        } else if(\"footage\" == 'templates') {\n                            clipName = $(\"<a>\").addClass(\"clipName\").attr(\"href\", \"https:\/\/artlist.io\/video-templates\/\" + clip.nameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").text(clip.name);\n                            artistName = $(\"<div>\").addClass(\"artistName\").text('By ' + clip.artistName + '');\n                        }\n                        const clipNames = $(\"<span>\").addClass(\"clipNames\").append(clipName, artistName);\n                        \/\/ download button\n                        let clipDownload = '';\n                        if(\"footage\" == 'footage') {\n                            clipDownload = $(\"<a>\").addClass(\"clipDownload\").attr(\"href\", \"https:\/\/artlist.io\/stock-footage\/clip\/\" + clip.clipNameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").html('<i class=\"icon download white\"><\/i>');\n                        } else if(\"footage\" == 'templates') {\n                            clipDownload = $(\"<a>\").addClass(\"clipDownload\").attr(\"href\", \"https:\/\/artlist.io\/video-templates\/\" + clip.nameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").html('<i class=\"icon download white\"><\/i>');\n                        }\n                        \/\/ overlay\n                        const overlay = $(\"<div>\").addClass(\"overlay\");\n                        overlay.append(clipNames, clipDownload);\n\n                        \/\/ APPEND ALL ELEMENTS INTO AUDIO PLAYER CONTAINER\n                        clipContainer.append(videoElement, overlay);\n\n                        \/\/ if this is a preview of only one specific clip (by id)\n                        if(\"669074\" !== '') {\n                            $(container).addClass(\"clipContainerSingular\")\n                        }\n\n                        \/\/ append audio player container into main playlist container\n                        container.append(clipContainer[0]);\n\n                        if(\"footage\" == 'footage') {\n                            playerSrc =  clip.clipPath;\n                        } else if(\"footage\" == 'templates') {\n                            playerSrc =  clip.previewVideoFileUrl;\n                        }\n                        const player = videojs(videoElement, {\n                            muted: true,\n                            autoplay: true,\n                        });\n\n                        player.src({\n                            src: playerSrc,\n                            type: 'application\/x-mpegURL'\n                        });\n\n                        \/* SEGMENT EVENTS *\/\n                        const special_data = getProps();\n\n                        \/* media played *\/\n                        var $videoElement = $(videoElement);\n                        $videoElement.on('play', function() {\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media played\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n\n                        \/* media paused *\/\n                        var $videoElement = $(videoElement);\n                        $videoElement.on('pause', function() {\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media paused\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n\n                        \/* media viewed *\/\n                        const observer = new IntersectionObserver(entries => {\n                            entries.forEach(entry => {\n                                if (entry.isIntersecting) {\n                                    var assetId = clip.id;\n                                    var artist = clip.filmMakerDisplayName || clip.artistName;\n                                    var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                                    var asset_type = null;\n                                    if(\"footage\" == 'footage') {\n                                        asset_type = 'footage';\n                                    } else if(\"footage\" == 'templates') {\n                                        asset_type = 'template';\n                                    }\n                                    analytics.track(\"media viewed\", {\n                                        asset_id: assetId || null,\n                                        asset_type: asset_type || null,\n                                        click_source: 'player',\n                                        artist: artist || null,\n                                        title: title || null,\n                                        genre: null,\n                                        ...special_data,\n                                    });\n                                    observer.unobserve(entry.target);\n                                }\n                            });\n                        }, {\n                            threshold: 0.5\n                        });\n                        observer.observe($videoElement[0]);\n\n                        \/* media downloaded *\/\n                        $videoElement.closest('.clipContainer').find('.clipName').on('click', function() {\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media downloaded\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n                        $videoElement.closest('.clipContainer').find('.clipDownload').on('click', function() {\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media downloaded\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n\n                        \/\/ check screen size\n                        var mobileScreen = window.matchMedia('(max-width: 767px)');\n                        if (mobileScreen.matches) { \/\/ mobile\n                            const observer = new IntersectionObserver(function(entries) {\n                                entries.forEach(entry => {\n                                    if (entry.isIntersecting) {\n                                        player.play(); \/\/ Play the video when it enters the viewport\n                                    } else {\n                                        player.pause(); \/\/ Pause the video when it goes out of the viewport\n                                    }\n                                });\n                            });\n                            observer.observe(videoElement);\n                        } else { \/\/ desktop\n                            clipContainer.on('mouseenter', function() {\n                                player.play();\n                            });\n\n                            clipContainer.on('mouseleave', function() {\n                                player.pause();\n                            });\n                        }\n\n                    }\n                    if(\"669074\" !== '') { \/\/ if this is a request for a specific clip by id - then break out of loop after first time bc it's not an array\n                        return false;\n                    }\n                });\n            }\n\n        });\n    <\/script>\n\n    \n\n    <div class=\"clipsContainer\" id=\"69d06cf96b7dd\"><\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n\n            if(\"footage\" == 'footage') {\n                if(\"671734\" == '') { \/\/ if this is a request for multiple clips by attributes\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query ClipList($page: Int, $sortType: Int, $categoryIds: String, $searchTerm: String) {\n\t\t\t\t\t\t\t\tclipList(page: $page, sortType: $sortType, categoryIds: $categoryIds, searchTerm: $searchTerm) {\n\t\t\t\t\t\t\t\t  exactResults  {\n\t\t\t\t\t\t\t\t\tclipPath\n\t\t\t\t\t\t\t\t\tclipNameForUrl\n\t\t\t\t\t\t\t\t\tid\n\t\t\t\t\t\t\t\t\tisNew\n\t\t\t\t\t\t\t\t\tfilmMakerDisplayName\n\t\t\t\t\t\t\t\t\timageUrl\n\t\t\t\t\t\t\t\t\tthumbnailUrl\n\t\t\t\t\t\t\t\t\twidth\n\t\t\t\t\t\t\t\t\tvideoUrl\n\t\t\t\t\t\t\t\t\trawFileExt\n\t\t\t\t\t\t\t\t  }\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}`,\n                            variables: `{\n\t\t\t\t\t\t\t\t\"page\": 1,\n\t\t\t\t\t\t\t\t\"sortType\": 1,\n\t\t\t\t\t\t\t\t\"categoryIds\": null,\n\t\t\t\t\t\t\t\t\"searchTerm\": \"\"\n\t\t\t\t\t\t\t}`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('footage list: ', res);\n                            var data = res.data.clipList.exactResults;\n                            if ($(\"#69d06cf96b7dd\").length && data.length > 0) {\n                                createClipsGrid(data, \"69d06cf96b7dd\");\n                            } else if ($(\"#69d06cf96b7dd\").length && data.length == 0) {\n                                $(\"#69d06cf96b7dd\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                } else if(\"671734\" !== '') { \/\/ if this is a request for a specific clip by id\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query Clip($clipId: Int!) {\n\t\t\t\t\t\t\t\tclip(id: $clipId) {\n\t\t\t\t\t\t\t\t\tclipPath\n\t\t\t\t\t\t\t\t\tclipNameForUrl\n\t\t\t\t\t\t\t\t\tid\n\t\t\t\t\t\t\t\t\tisNew\n\t\t\t\t\t\t\t\t\tfilmMakerDisplayName\n\t\t\t\t\t\t\t\t\timageUrl\n\t\t\t\t\t\t\t\t\tthumbnailUrl\n\t\t\t\t\t\t\t\t\twidth\n\t\t\t\t\t\t\t\t\tvideoUrl\n\t\t\t\t\t\t\t\t\trawFileExt\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}`,\n                            variables: `{\n\t\t\t\t\t\t\t\t\"clipId\": 671734\t\t\t\t\t\t\t}`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('specific footage: ', res);\n                            var data = res.data.clip;\n                            if ($(\"#69d06cf96b7dd\").length && data !== '') {\n                                createClipsGrid(data, \"69d06cf96b7dd\");\n                            } else if ($(\"#69d06cf96b7dd\").length && data.length == '') {\n                                $(\"#69d06cf96b7dd\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                }\n            } else if(\"footage\" == 'templates') {\n                if(\"671734\" === '') {\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query TemplatesList($payload: TemplatesByTermSearchPayload!) {\n                                templatesList(payload: $payload) {\n                                    nameForUrl\n                                    id\n                                    name\n                                    isNew\n                                    artistName\n                                    thumbnailUrl\n                                    previewVideoFileUrl\n                                }\n                            }`,\n                            variables: `{\n                                \"payload\": {\n                                    \"page\": 1,\n                                    \"take\": 2,\n                                    \"sortBy\": \"1\",\n                                    \"categories\": null,\n                                    \"searchTerms\": \"\"\n                                }\n                            }`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('templates list: ', res);\n                            var data = res.data.templatesList;\n                            if ($(\"#69d06cf96b7dd\").length && data.length > 0) {\n                                createClipsGrid(data, \"69d06cf96b7dd\");\n                            } else if ($(\"#69d06cf96b7dd\").length && data.length == 0) {\n                                $(\"#69d06cf96b7dd\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                    } else if(\"671734\" !== '') {\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query Template($ids: [String!]!, $page: Int!, $take: Int!) {\n\t\t\t\t\t\t\t\ttemplatesByIds(ids: $ids, page: $page, take: $take) {\n\t\t\t\t\t\t\t\t\tnameForUrl\n                                    id\n                                    name\n                                    isNew\n                                    artistName\n                                    thumbnailUrl\n                                    previewVideoFileUrl\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}`,\n                            variables: `{\n                                \"ids\": [\"671734\"],\n                                \"page\": 1,\n                                \"take\": 1\n\t\t\t\t\t\t\t}`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('specific template: ', res);\n                            var data = res.data.templatesByIds[0];\n                            if ($(\"#69d06cf96b7dd\").length && data !== '') {\n                                createClipsGrid(data, \"69d06cf96b7dd\");\n                            } else if ($(\"#69d06cf96b7dd\").length && data.length == '') {\n                                $(\"#69d06cf96b7dd\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                }\n            }\n\n            function createClipsGrid(data, clipsContainerId){\n                const container = $(\"#\" + clipsContainerId);\n                let playerSrc = '';\n\n                $.each(data, function(index, clip) {\n                    if(\"671734\" !== '') { \/\/ if this is a request for a specific clip by id - then the data is not an array of clips but only one clip and that's why the \"clip\" variable is actually the \"data\"\n                        index = 0\n                        clip = data;\n                    }\n                    if ((index) < 2) {\n                        \/\/ clip container\n                        const clipContainer = $(\"<div>\").addClass(\"clipContainer \");\n                        \/\/ new badge\n                        if (clip.isNew) {\n                            clipContainer.append('<span class=\"isNewBadge\">NEW<\/span>');\n                        }\n                        \/\/ video\n                        let videoElement = document.createElement('video');\n                        videoElement.setAttribute('playsinline', '');\n                        videoElement.setAttribute('webkit-playsinline', '');\n                        videoElement.setAttribute('x5-playsinline', '');\n                        videoElement.setAttribute('preload', 'auto');\n                        \n                        clipContainer.append(videoElement);\n                        \/\/ clip name and artist name\n                        let clipName = '';\n                        let artistName = '';\n                        if(\"footage\" == 'footage') {\n                            clipName = clip.clipNameForUrl;\n                            clipName = clipName.replace(\/-\/g, \", \");\n                            clipName = $(\"<a>\").addClass(\"clipName\").attr(\"href\", \"https:\/\/artlist.io\/stock-footage\/clip\/\" + clip.clipNameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").text(clipName);\n                            artistName = $(\"<div>\").addClass(\"artistName\").text('By ' + clip.filmMakerDisplayName + '');\n                        } else if(\"footage\" == 'templates') {\n                            clipName = $(\"<a>\").addClass(\"clipName\").attr(\"href\", \"https:\/\/artlist.io\/video-templates\/\" + clip.nameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").text(clip.name);\n                            artistName = $(\"<div>\").addClass(\"artistName\").text('By ' + clip.artistName + '');\n                        }\n                        const clipNames = $(\"<span>\").addClass(\"clipNames\").append(clipName, artistName);\n                        \/\/ download button\n                        let clipDownload = '';\n                        if(\"footage\" == 'footage') {\n                            clipDownload = $(\"<a>\").addClass(\"clipDownload\").attr(\"href\", \"https:\/\/artlist.io\/stock-footage\/clip\/\" + clip.clipNameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").html('<i class=\"icon download white\"><\/i>');\n                        } else if(\"footage\" == 'templates') {\n                            clipDownload = $(\"<a>\").addClass(\"clipDownload\").attr(\"href\", \"https:\/\/artlist.io\/video-templates\/\" + clip.nameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").html('<i class=\"icon download white\"><\/i>');\n                        }\n                        \/\/ overlay\n                        const overlay = $(\"<div>\").addClass(\"overlay\");\n                        overlay.append(clipNames, clipDownload);\n\n                        \/\/ APPEND ALL ELEMENTS INTO AUDIO PLAYER CONTAINER\n                        clipContainer.append(videoElement, overlay);\n\n                        \/\/ if this is a preview of only one specific clip (by id)\n                        if(\"671734\" !== '') {\n                            $(container).addClass(\"clipContainerSingular\")\n                        }\n\n                        \/\/ append audio player container into main playlist container\n                        container.append(clipContainer[0]);\n\n                        if(\"footage\" == 'footage') {\n                            playerSrc =  clip.clipPath;\n                        } else if(\"footage\" == 'templates') {\n                            playerSrc =  clip.previewVideoFileUrl;\n                        }\n                        const player = videojs(videoElement, {\n                            muted: true,\n                            autoplay: true,\n                        });\n\n                        player.src({\n                            src: playerSrc,\n                            type: 'application\/x-mpegURL'\n                        });\n\n                        \/* SEGMENT EVENTS *\/\n                        const special_data = getProps();\n\n                        \/* media played *\/\n                        var $videoElement = $(videoElement);\n                        $videoElement.on('play', function() {\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media played\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n\n                        \/* media paused *\/\n                        var $videoElement = $(videoElement);\n                        $videoElement.on('pause', function() {\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media paused\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n\n                        \/* media viewed *\/\n                        const observer = new IntersectionObserver(entries => {\n                            entries.forEach(entry => {\n                                if (entry.isIntersecting) {\n                                    var assetId = clip.id;\n                                    var artist = clip.filmMakerDisplayName || clip.artistName;\n                                    var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                                    var asset_type = null;\n                                    if(\"footage\" == 'footage') {\n                                        asset_type = 'footage';\n                                    } else if(\"footage\" == 'templates') {\n                                        asset_type = 'template';\n                                    }\n                                    analytics.track(\"media viewed\", {\n                                        asset_id: assetId || null,\n                                        asset_type: asset_type || null,\n                                        click_source: 'player',\n                                        artist: artist || null,\n                                        title: title || null,\n                                        genre: null,\n                                        ...special_data,\n                                    });\n                                    observer.unobserve(entry.target);\n                                }\n                            });\n                        }, {\n                            threshold: 0.5\n                        });\n                        observer.observe($videoElement[0]);\n\n                        \/* media downloaded *\/\n                        $videoElement.closest('.clipContainer').find('.clipName').on('click', function() {\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media downloaded\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n                        $videoElement.closest('.clipContainer').find('.clipDownload').on('click', function() {\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media downloaded\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n\n                        \/\/ check screen size\n                        var mobileScreen = window.matchMedia('(max-width: 767px)');\n                        if (mobileScreen.matches) { \/\/ mobile\n                            const observer = new IntersectionObserver(function(entries) {\n                                entries.forEach(entry => {\n                                    if (entry.isIntersecting) {\n                                        player.play(); \/\/ Play the video when it enters the viewport\n                                    } else {\n                                        player.pause(); \/\/ Pause the video when it goes out of the viewport\n                                    }\n                                });\n                            });\n                            observer.observe(videoElement);\n                        } else { \/\/ desktop\n                            clipContainer.on('mouseenter', function() {\n                                player.play();\n                            });\n\n                            clipContainer.on('mouseleave', function() {\n                                player.pause();\n                            });\n                        }\n\n                    }\n                    if(\"671734\" !== '') { \/\/ if this is a request for a specific clip by id - then break out of loop after first time bc it's not an array\n                        return false;\n                    }\n                });\n            }\n\n        });\n    <\/script>\n\n    \n<p>If you have something specific in mind, you can tailor your search by adding a specific color to the search bar. For example, green will give you plenty of results just like this:<\/p>\n\n    <div class=\"clipsContainer\" id=\"69d06cf96b8a0\"><\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n\n            if(\"footage\" == 'footage') {\n                if(\"652892\" == '') { \/\/ if this is a request for multiple clips by attributes\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query ClipList($page: Int, $sortType: Int, $categoryIds: String, $searchTerm: String) {\n\t\t\t\t\t\t\t\tclipList(page: $page, sortType: $sortType, categoryIds: $categoryIds, searchTerm: $searchTerm) {\n\t\t\t\t\t\t\t\t  exactResults  {\n\t\t\t\t\t\t\t\t\tclipPath\n\t\t\t\t\t\t\t\t\tclipNameForUrl\n\t\t\t\t\t\t\t\t\tid\n\t\t\t\t\t\t\t\t\tisNew\n\t\t\t\t\t\t\t\t\tfilmMakerDisplayName\n\t\t\t\t\t\t\t\t\timageUrl\n\t\t\t\t\t\t\t\t\tthumbnailUrl\n\t\t\t\t\t\t\t\t\twidth\n\t\t\t\t\t\t\t\t\tvideoUrl\n\t\t\t\t\t\t\t\t\trawFileExt\n\t\t\t\t\t\t\t\t  }\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}`,\n                            variables: `{\n\t\t\t\t\t\t\t\t\"page\": 1,\n\t\t\t\t\t\t\t\t\"sortType\": 1,\n\t\t\t\t\t\t\t\t\"categoryIds\": null,\n\t\t\t\t\t\t\t\t\"searchTerm\": \"\"\n\t\t\t\t\t\t\t}`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('footage list: ', res);\n                            var data = res.data.clipList.exactResults;\n                            if ($(\"#69d06cf96b8a0\").length && data.length > 0) {\n                                createClipsGrid(data, \"69d06cf96b8a0\");\n                            } else if ($(\"#69d06cf96b8a0\").length && data.length == 0) {\n                                $(\"#69d06cf96b8a0\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                } else if(\"652892\" !== '') { \/\/ if this is a request for a specific clip by id\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query Clip($clipId: Int!) {\n\t\t\t\t\t\t\t\tclip(id: $clipId) {\n\t\t\t\t\t\t\t\t\tclipPath\n\t\t\t\t\t\t\t\t\tclipNameForUrl\n\t\t\t\t\t\t\t\t\tid\n\t\t\t\t\t\t\t\t\tisNew\n\t\t\t\t\t\t\t\t\tfilmMakerDisplayName\n\t\t\t\t\t\t\t\t\timageUrl\n\t\t\t\t\t\t\t\t\tthumbnailUrl\n\t\t\t\t\t\t\t\t\twidth\n\t\t\t\t\t\t\t\t\tvideoUrl\n\t\t\t\t\t\t\t\t\trawFileExt\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}`,\n                            variables: `{\n\t\t\t\t\t\t\t\t\"clipId\": 652892\t\t\t\t\t\t\t}`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('specific footage: ', res);\n                            var data = res.data.clip;\n                            if ($(\"#69d06cf96b8a0\").length && data !== '') {\n                                createClipsGrid(data, \"69d06cf96b8a0\");\n                            } else if ($(\"#69d06cf96b8a0\").length && data.length == '') {\n                                $(\"#69d06cf96b8a0\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                }\n            } else if(\"footage\" == 'templates') {\n                if(\"652892\" === '') {\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query TemplatesList($payload: TemplatesByTermSearchPayload!) {\n                                templatesList(payload: $payload) {\n                                    nameForUrl\n                                    id\n                                    name\n                                    isNew\n                                    artistName\n                                    thumbnailUrl\n                                    previewVideoFileUrl\n                                }\n                            }`,\n                            variables: `{\n                                \"payload\": {\n                                    \"page\": 1,\n                                    \"take\": 2,\n                                    \"sortBy\": \"1\",\n                                    \"categories\": null,\n                                    \"searchTerms\": \"\"\n                                }\n                            }`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('templates list: ', res);\n                            var data = res.data.templatesList;\n                            if ($(\"#69d06cf96b8a0\").length && data.length > 0) {\n                                createClipsGrid(data, \"69d06cf96b8a0\");\n                            } else if ($(\"#69d06cf96b8a0\").length && data.length == 0) {\n                                $(\"#69d06cf96b8a0\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                    } else if(\"652892\" !== '') {\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query Template($ids: [String!]!, $page: Int!, $take: Int!) {\n\t\t\t\t\t\t\t\ttemplatesByIds(ids: $ids, page: $page, take: $take) {\n\t\t\t\t\t\t\t\t\tnameForUrl\n                                    id\n                                    name\n                                    isNew\n                                    artistName\n                                    thumbnailUrl\n                                    previewVideoFileUrl\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}`,\n                            variables: `{\n                                \"ids\": [\"652892\"],\n                                \"page\": 1,\n                                \"take\": 1\n\t\t\t\t\t\t\t}`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('specific template: ', res);\n                            var data = res.data.templatesByIds[0];\n                            if ($(\"#69d06cf96b8a0\").length && data !== '') {\n                                createClipsGrid(data, \"69d06cf96b8a0\");\n                            } else if ($(\"#69d06cf96b8a0\").length && data.length == '') {\n                                $(\"#69d06cf96b8a0\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                }\n            }\n\n            function createClipsGrid(data, clipsContainerId){\n                const container = $(\"#\" + clipsContainerId);\n                let playerSrc = '';\n\n                $.each(data, function(index, clip) {\n                    if(\"652892\" !== '') { \/\/ if this is a request for a specific clip by id - then the data is not an array of clips but only one clip and that's why the \"clip\" variable is actually the \"data\"\n                        index = 0\n                        clip = data;\n                    }\n                    if ((index) < 2) {\n                        \/\/ clip container\n                        const clipContainer = $(\"<div>\").addClass(\"clipContainer \");\n                        \/\/ new badge\n                        if (clip.isNew) {\n                            clipContainer.append('<span class=\"isNewBadge\">NEW<\/span>');\n                        }\n                        \/\/ video\n                        let videoElement = document.createElement('video');\n                        videoElement.setAttribute('playsinline', '');\n                        videoElement.setAttribute('webkit-playsinline', '');\n                        videoElement.setAttribute('x5-playsinline', '');\n                        videoElement.setAttribute('preload', 'auto');\n                        \n                        clipContainer.append(videoElement);\n                        \/\/ clip name and artist name\n                        let clipName = '';\n                        let artistName = '';\n                        if(\"footage\" == 'footage') {\n                            clipName = clip.clipNameForUrl;\n                            clipName = clipName.replace(\/-\/g, \", \");\n                            clipName = $(\"<a>\").addClass(\"clipName\").attr(\"href\", \"https:\/\/artlist.io\/stock-footage\/clip\/\" + clip.clipNameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").text(clipName);\n                            artistName = $(\"<div>\").addClass(\"artistName\").text('By ' + clip.filmMakerDisplayName + '');\n                        } else if(\"footage\" == 'templates') {\n                            clipName = $(\"<a>\").addClass(\"clipName\").attr(\"href\", \"https:\/\/artlist.io\/video-templates\/\" + clip.nameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").text(clip.name);\n                            artistName = $(\"<div>\").addClass(\"artistName\").text('By ' + clip.artistName + '');\n                        }\n                        const clipNames = $(\"<span>\").addClass(\"clipNames\").append(clipName, artistName);\n                        \/\/ download button\n                        let clipDownload = '';\n                        if(\"footage\" == 'footage') {\n                            clipDownload = $(\"<a>\").addClass(\"clipDownload\").attr(\"href\", \"https:\/\/artlist.io\/stock-footage\/clip\/\" + clip.clipNameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").html('<i class=\"icon download white\"><\/i>');\n                        } else if(\"footage\" == 'templates') {\n                            clipDownload = $(\"<a>\").addClass(\"clipDownload\").attr(\"href\", \"https:\/\/artlist.io\/video-templates\/\" + clip.nameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").html('<i class=\"icon download white\"><\/i>');\n                        }\n                        \/\/ overlay\n                        const overlay = $(\"<div>\").addClass(\"overlay\");\n                        overlay.append(clipNames, clipDownload);\n\n                        \/\/ APPEND ALL ELEMENTS INTO AUDIO PLAYER CONTAINER\n                        clipContainer.append(videoElement, overlay);\n\n                        \/\/ if this is a preview of only one specific clip (by id)\n                        if(\"652892\" !== '') {\n                            $(container).addClass(\"clipContainerSingular\")\n                        }\n\n                        \/\/ append audio player container into main playlist container\n                        container.append(clipContainer[0]);\n\n                        if(\"footage\" == 'footage') {\n                            playerSrc =  clip.clipPath;\n                        } else if(\"footage\" == 'templates') {\n                            playerSrc =  clip.previewVideoFileUrl;\n                        }\n                        const player = videojs(videoElement, {\n                            muted: true,\n                            autoplay: true,\n                        });\n\n                        player.src({\n                            src: playerSrc,\n                            type: 'application\/x-mpegURL'\n                        });\n\n                        \/* SEGMENT EVENTS *\/\n                        const special_data = getProps();\n\n                        \/* media played *\/\n                        var $videoElement = $(videoElement);\n                        $videoElement.on('play', function() {\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media played\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n\n                        \/* media paused *\/\n                        var $videoElement = $(videoElement);\n                        $videoElement.on('pause', function() {\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media paused\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n\n                        \/* media viewed *\/\n                        const observer = new IntersectionObserver(entries => {\n                            entries.forEach(entry => {\n                                if (entry.isIntersecting) {\n                                    var assetId = clip.id;\n                                    var artist = clip.filmMakerDisplayName || clip.artistName;\n                                    var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                                    var asset_type = null;\n                                    if(\"footage\" == 'footage') {\n                                        asset_type = 'footage';\n                                    } else if(\"footage\" == 'templates') {\n                                        asset_type = 'template';\n                                    }\n                                    analytics.track(\"media viewed\", {\n                                        asset_id: assetId || null,\n                                        asset_type: asset_type || null,\n                                        click_source: 'player',\n                                        artist: artist || null,\n                                        title: title || null,\n                                        genre: null,\n                                        ...special_data,\n                                    });\n                                    observer.unobserve(entry.target);\n                                }\n                            });\n                        }, {\n                            threshold: 0.5\n                        });\n                        observer.observe($videoElement[0]);\n\n                        \/* media downloaded *\/\n                        $videoElement.closest('.clipContainer').find('.clipName').on('click', function() {\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media downloaded\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n                        $videoElement.closest('.clipContainer').find('.clipDownload').on('click', function() {\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media downloaded\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n\n                        \/\/ check screen size\n                        var mobileScreen = window.matchMedia('(max-width: 767px)');\n                        if (mobileScreen.matches) { \/\/ mobile\n                            const observer = new IntersectionObserver(function(entries) {\n                                entries.forEach(entry => {\n                                    if (entry.isIntersecting) {\n                                        player.play(); \/\/ Play the video when it enters the viewport\n                                    } else {\n                                        player.pause(); \/\/ Pause the video when it goes out of the viewport\n                                    }\n                                });\n                            });\n                            observer.observe(videoElement);\n                        } else { \/\/ desktop\n                            clipContainer.on('mouseenter', function() {\n                                player.play();\n                            });\n\n                            clipContainer.on('mouseleave', function() {\n                                player.pause();\n                            });\n                        }\n\n                    }\n                    if(\"652892\" !== '') { \/\/ if this is a request for a specific clip by id - then break out of loop after first time bc it's not an array\n                        return false;\n                    }\n                });\n            }\n\n        });\n    <\/script>\n\n    \n\n    <div class=\"clipsContainer\" id=\"69d06cf96b943\"><\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n\n            if(\"footage\" == 'footage') {\n                if(\"669343\" == '') { \/\/ if this is a request for multiple clips by attributes\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query ClipList($page: Int, $sortType: Int, $categoryIds: String, $searchTerm: String) {\n\t\t\t\t\t\t\t\tclipList(page: $page, sortType: $sortType, categoryIds: $categoryIds, searchTerm: $searchTerm) {\n\t\t\t\t\t\t\t\t  exactResults  {\n\t\t\t\t\t\t\t\t\tclipPath\n\t\t\t\t\t\t\t\t\tclipNameForUrl\n\t\t\t\t\t\t\t\t\tid\n\t\t\t\t\t\t\t\t\tisNew\n\t\t\t\t\t\t\t\t\tfilmMakerDisplayName\n\t\t\t\t\t\t\t\t\timageUrl\n\t\t\t\t\t\t\t\t\tthumbnailUrl\n\t\t\t\t\t\t\t\t\twidth\n\t\t\t\t\t\t\t\t\tvideoUrl\n\t\t\t\t\t\t\t\t\trawFileExt\n\t\t\t\t\t\t\t\t  }\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}`,\n                            variables: `{\n\t\t\t\t\t\t\t\t\"page\": 1,\n\t\t\t\t\t\t\t\t\"sortType\": 1,\n\t\t\t\t\t\t\t\t\"categoryIds\": null,\n\t\t\t\t\t\t\t\t\"searchTerm\": \"\"\n\t\t\t\t\t\t\t}`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('footage list: ', res);\n                            var data = res.data.clipList.exactResults;\n                            if ($(\"#69d06cf96b943\").length && data.length > 0) {\n                                createClipsGrid(data, \"69d06cf96b943\");\n                            } else if ($(\"#69d06cf96b943\").length && data.length == 0) {\n                                $(\"#69d06cf96b943\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                } else if(\"669343\" !== '') { \/\/ if this is a request for a specific clip by id\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query Clip($clipId: Int!) {\n\t\t\t\t\t\t\t\tclip(id: $clipId) {\n\t\t\t\t\t\t\t\t\tclipPath\n\t\t\t\t\t\t\t\t\tclipNameForUrl\n\t\t\t\t\t\t\t\t\tid\n\t\t\t\t\t\t\t\t\tisNew\n\t\t\t\t\t\t\t\t\tfilmMakerDisplayName\n\t\t\t\t\t\t\t\t\timageUrl\n\t\t\t\t\t\t\t\t\tthumbnailUrl\n\t\t\t\t\t\t\t\t\twidth\n\t\t\t\t\t\t\t\t\tvideoUrl\n\t\t\t\t\t\t\t\t\trawFileExt\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}`,\n                            variables: `{\n\t\t\t\t\t\t\t\t\"clipId\": 669343\t\t\t\t\t\t\t}`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('specific footage: ', res);\n                            var data = res.data.clip;\n                            if ($(\"#69d06cf96b943\").length && data !== '') {\n                                createClipsGrid(data, \"69d06cf96b943\");\n                            } else if ($(\"#69d06cf96b943\").length && data.length == '') {\n                                $(\"#69d06cf96b943\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                }\n            } else if(\"footage\" == 'templates') {\n                if(\"669343\" === '') {\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query TemplatesList($payload: TemplatesByTermSearchPayload!) {\n                                templatesList(payload: $payload) {\n                                    nameForUrl\n                                    id\n                                    name\n                                    isNew\n                                    artistName\n                                    thumbnailUrl\n                                    previewVideoFileUrl\n                                }\n                            }`,\n                            variables: `{\n                                \"payload\": {\n                                    \"page\": 1,\n                                    \"take\": 2,\n                                    \"sortBy\": \"1\",\n                                    \"categories\": null,\n                                    \"searchTerms\": \"\"\n                                }\n                            }`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('templates list: ', res);\n                            var data = res.data.templatesList;\n                            if ($(\"#69d06cf96b943\").length && data.length > 0) {\n                                createClipsGrid(data, \"69d06cf96b943\");\n                            } else if ($(\"#69d06cf96b943\").length && data.length == 0) {\n                                $(\"#69d06cf96b943\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                    } else if(\"669343\" !== '') {\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query Template($ids: [String!]!, $page: Int!, $take: Int!) {\n\t\t\t\t\t\t\t\ttemplatesByIds(ids: $ids, page: $page, take: $take) {\n\t\t\t\t\t\t\t\t\tnameForUrl\n                                    id\n                                    name\n                                    isNew\n                                    artistName\n                                    thumbnailUrl\n                                    previewVideoFileUrl\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}`,\n                            variables: `{\n                                \"ids\": [\"669343\"],\n                                \"page\": 1,\n                                \"take\": 1\n\t\t\t\t\t\t\t}`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('specific template: ', res);\n                            var data = res.data.templatesByIds[0];\n                            if ($(\"#69d06cf96b943\").length && data !== '') {\n                                createClipsGrid(data, \"69d06cf96b943\");\n                            } else if ($(\"#69d06cf96b943\").length && data.length == '') {\n                                $(\"#69d06cf96b943\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                }\n            }\n\n            function createClipsGrid(data, clipsContainerId){\n                const container = $(\"#\" + clipsContainerId);\n                let playerSrc = '';\n\n                $.each(data, function(index, clip) {\n                    if(\"669343\" !== '') { \/\/ if this is a request for a specific clip by id - then the data is not an array of clips but only one clip and that's why the \"clip\" variable is actually the \"data\"\n                        index = 0\n                        clip = data;\n                    }\n                    if ((index) < 2) {\n                        \/\/ clip container\n                        const clipContainer = $(\"<div>\").addClass(\"clipContainer \");\n                        \/\/ new badge\n                        if (clip.isNew) {\n                            clipContainer.append('<span class=\"isNewBadge\">NEW<\/span>');\n                        }\n                        \/\/ video\n                        let videoElement = document.createElement('video');\n                        videoElement.setAttribute('playsinline', '');\n                        videoElement.setAttribute('webkit-playsinline', '');\n                        videoElement.setAttribute('x5-playsinline', '');\n                        videoElement.setAttribute('preload', 'auto');\n                        \n                        clipContainer.append(videoElement);\n                        \/\/ clip name and artist name\n                        let clipName = '';\n                        let artistName = '';\n                        if(\"footage\" == 'footage') {\n                            clipName = clip.clipNameForUrl;\n                            clipName = clipName.replace(\/-\/g, \", \");\n                            clipName = $(\"<a>\").addClass(\"clipName\").attr(\"href\", \"https:\/\/artlist.io\/stock-footage\/clip\/\" + clip.clipNameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").text(clipName);\n                            artistName = $(\"<div>\").addClass(\"artistName\").text('By ' + clip.filmMakerDisplayName + '');\n                        } else if(\"footage\" == 'templates') {\n                            clipName = $(\"<a>\").addClass(\"clipName\").attr(\"href\", \"https:\/\/artlist.io\/video-templates\/\" + clip.nameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").text(clip.name);\n                            artistName = $(\"<div>\").addClass(\"artistName\").text('By ' + clip.artistName + '');\n                        }\n                        const clipNames = $(\"<span>\").addClass(\"clipNames\").append(clipName, artistName);\n                        \/\/ download button\n                        let clipDownload = '';\n                        if(\"footage\" == 'footage') {\n                            clipDownload = $(\"<a>\").addClass(\"clipDownload\").attr(\"href\", \"https:\/\/artlist.io\/stock-footage\/clip\/\" + clip.clipNameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").html('<i class=\"icon download white\"><\/i>');\n                        } else if(\"footage\" == 'templates') {\n                            clipDownload = $(\"<a>\").addClass(\"clipDownload\").attr(\"href\", \"https:\/\/artlist.io\/video-templates\/\" + clip.nameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").html('<i class=\"icon download white\"><\/i>');\n                        }\n                        \/\/ overlay\n                        const overlay = $(\"<div>\").addClass(\"overlay\");\n                        overlay.append(clipNames, clipDownload);\n\n                        \/\/ APPEND ALL ELEMENTS INTO AUDIO PLAYER CONTAINER\n                        clipContainer.append(videoElement, overlay);\n\n                        \/\/ if this is a preview of only one specific clip (by id)\n                        if(\"669343\" !== '') {\n                            $(container).addClass(\"clipContainerSingular\")\n                        }\n\n                        \/\/ append audio player container into main playlist container\n                        container.append(clipContainer[0]);\n\n                        if(\"footage\" == 'footage') {\n                            playerSrc =  clip.clipPath;\n                        } else if(\"footage\" == 'templates') {\n                            playerSrc =  clip.previewVideoFileUrl;\n                        }\n                        const player = videojs(videoElement, {\n                            muted: true,\n                            autoplay: true,\n                        });\n\n                        player.src({\n                            src: playerSrc,\n                            type: 'application\/x-mpegURL'\n                        });\n\n                        \/* SEGMENT EVENTS *\/\n                        const special_data = getProps();\n\n                        \/* media played *\/\n                        var $videoElement = $(videoElement);\n                        $videoElement.on('play', function() {\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media played\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n\n                        \/* media paused *\/\n                        var $videoElement = $(videoElement);\n                        $videoElement.on('pause', function() {\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media paused\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n\n                        \/* media viewed *\/\n                        const observer = new IntersectionObserver(entries => {\n                            entries.forEach(entry => {\n                                if (entry.isIntersecting) {\n                                    var assetId = clip.id;\n                                    var artist = clip.filmMakerDisplayName || clip.artistName;\n                                    var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                                    var asset_type = null;\n                                    if(\"footage\" == 'footage') {\n                                        asset_type = 'footage';\n                                    } else if(\"footage\" == 'templates') {\n                                        asset_type = 'template';\n                                    }\n                                    analytics.track(\"media viewed\", {\n                                        asset_id: assetId || null,\n                                        asset_type: asset_type || null,\n                                        click_source: 'player',\n                                        artist: artist || null,\n                                        title: title || null,\n                                        genre: null,\n                                        ...special_data,\n                                    });\n                                    observer.unobserve(entry.target);\n                                }\n                            });\n                        }, {\n                            threshold: 0.5\n                        });\n                        observer.observe($videoElement[0]);\n\n                        \/* media downloaded *\/\n                        $videoElement.closest('.clipContainer').find('.clipName').on('click', function() {\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media downloaded\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n                        $videoElement.closest('.clipContainer').find('.clipDownload').on('click', function() {\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media downloaded\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n\n                        \/\/ check screen size\n                        var mobileScreen = window.matchMedia('(max-width: 767px)');\n                        if (mobileScreen.matches) { \/\/ mobile\n                            const observer = new IntersectionObserver(function(entries) {\n                                entries.forEach(entry => {\n                                    if (entry.isIntersecting) {\n                                        player.play(); \/\/ Play the video when it enters the viewport\n                                    } else {\n                                        player.pause(); \/\/ Pause the video when it goes out of the viewport\n                                    }\n                                });\n                            });\n                            observer.observe(videoElement);\n                        } else { \/\/ desktop\n                            clipContainer.on('mouseenter', function() {\n                                player.play();\n                            });\n\n                            clipContainer.on('mouseleave', function() {\n                                player.pause();\n                            });\n                        }\n\n                    }\n                    if(\"669343\" !== '') { \/\/ if this is a request for a specific clip by id - then break out of loop after first time bc it's not an array\n                        return false;\n                    }\n                });\n            }\n\n        });\n    <\/script>\n\n    \n<p>Meanwhile, adding another term like \u201ccity\u201d can present you with results such as this:<\/p>\n\n    <div class=\"clipsContainer\" id=\"69d06cf96b9ed\"><\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n\n            if(\"footage\" == 'footage') {\n                if(\"506166\" == '') { \/\/ if this is a request for multiple clips by attributes\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query ClipList($page: Int, $sortType: Int, $categoryIds: String, $searchTerm: String) {\n\t\t\t\t\t\t\t\tclipList(page: $page, sortType: $sortType, categoryIds: $categoryIds, searchTerm: $searchTerm) {\n\t\t\t\t\t\t\t\t  exactResults  {\n\t\t\t\t\t\t\t\t\tclipPath\n\t\t\t\t\t\t\t\t\tclipNameForUrl\n\t\t\t\t\t\t\t\t\tid\n\t\t\t\t\t\t\t\t\tisNew\n\t\t\t\t\t\t\t\t\tfilmMakerDisplayName\n\t\t\t\t\t\t\t\t\timageUrl\n\t\t\t\t\t\t\t\t\tthumbnailUrl\n\t\t\t\t\t\t\t\t\twidth\n\t\t\t\t\t\t\t\t\tvideoUrl\n\t\t\t\t\t\t\t\t\trawFileExt\n\t\t\t\t\t\t\t\t  }\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}`,\n                            variables: `{\n\t\t\t\t\t\t\t\t\"page\": 1,\n\t\t\t\t\t\t\t\t\"sortType\": 1,\n\t\t\t\t\t\t\t\t\"categoryIds\": null,\n\t\t\t\t\t\t\t\t\"searchTerm\": \"\"\n\t\t\t\t\t\t\t}`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('footage list: ', res);\n                            var data = res.data.clipList.exactResults;\n                            if ($(\"#69d06cf96b9ed\").length && data.length > 0) {\n                                createClipsGrid(data, \"69d06cf96b9ed\");\n                            } else if ($(\"#69d06cf96b9ed\").length && data.length == 0) {\n                                $(\"#69d06cf96b9ed\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                } else if(\"506166\" !== '') { \/\/ if this is a request for a specific clip by id\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query Clip($clipId: Int!) {\n\t\t\t\t\t\t\t\tclip(id: $clipId) {\n\t\t\t\t\t\t\t\t\tclipPath\n\t\t\t\t\t\t\t\t\tclipNameForUrl\n\t\t\t\t\t\t\t\t\tid\n\t\t\t\t\t\t\t\t\tisNew\n\t\t\t\t\t\t\t\t\tfilmMakerDisplayName\n\t\t\t\t\t\t\t\t\timageUrl\n\t\t\t\t\t\t\t\t\tthumbnailUrl\n\t\t\t\t\t\t\t\t\twidth\n\t\t\t\t\t\t\t\t\tvideoUrl\n\t\t\t\t\t\t\t\t\trawFileExt\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}`,\n                            variables: `{\n\t\t\t\t\t\t\t\t\"clipId\": 506166\t\t\t\t\t\t\t}`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('specific footage: ', res);\n                            var data = res.data.clip;\n                            if ($(\"#69d06cf96b9ed\").length && data !== '') {\n                                createClipsGrid(data, \"69d06cf96b9ed\");\n                            } else if ($(\"#69d06cf96b9ed\").length && data.length == '') {\n                                $(\"#69d06cf96b9ed\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                }\n            } else if(\"footage\" == 'templates') {\n                if(\"506166\" === '') {\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query TemplatesList($payload: TemplatesByTermSearchPayload!) {\n                                templatesList(payload: $payload) {\n                                    nameForUrl\n                                    id\n                                    name\n                                    isNew\n                                    artistName\n                                    thumbnailUrl\n                                    previewVideoFileUrl\n                                }\n                            }`,\n                            variables: `{\n                                \"payload\": {\n                                    \"page\": 1,\n                                    \"take\": 2,\n                                    \"sortBy\": \"1\",\n                                    \"categories\": null,\n                                    \"searchTerms\": \"\"\n                                }\n                            }`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('templates list: ', res);\n                            var data = res.data.templatesList;\n                            if ($(\"#69d06cf96b9ed\").length && data.length > 0) {\n                                createClipsGrid(data, \"69d06cf96b9ed\");\n                            } else if ($(\"#69d06cf96b9ed\").length && data.length == 0) {\n                                $(\"#69d06cf96b9ed\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                    } else if(\"506166\" !== '') {\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query Template($ids: [String!]!, $page: Int!, $take: Int!) {\n\t\t\t\t\t\t\t\ttemplatesByIds(ids: $ids, page: $page, take: $take) {\n\t\t\t\t\t\t\t\t\tnameForUrl\n                                    id\n                                    name\n                                    isNew\n                                    artistName\n                                    thumbnailUrl\n                                    previewVideoFileUrl\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}`,\n                            variables: `{\n                                \"ids\": [\"506166\"],\n                                \"page\": 1,\n                                \"take\": 1\n\t\t\t\t\t\t\t}`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('specific template: ', res);\n                            var data = res.data.templatesByIds[0];\n                            if ($(\"#69d06cf96b9ed\").length && data !== '') {\n                                createClipsGrid(data, \"69d06cf96b9ed\");\n                            } else if ($(\"#69d06cf96b9ed\").length && data.length == '') {\n                                $(\"#69d06cf96b9ed\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                }\n            }\n\n            function createClipsGrid(data, clipsContainerId){\n                const container = $(\"#\" + clipsContainerId);\n                let playerSrc = '';\n\n                $.each(data, function(index, clip) {\n                    if(\"506166\" !== '') { \/\/ if this is a request for a specific clip by id - then the data is not an array of clips but only one clip and that's why the \"clip\" variable is actually the \"data\"\n                        index = 0\n                        clip = data;\n                    }\n                    if ((index) < 2) {\n                        \/\/ clip container\n                        const clipContainer = $(\"<div>\").addClass(\"clipContainer \");\n                        \/\/ new badge\n                        if (clip.isNew) {\n                            clipContainer.append('<span class=\"isNewBadge\">NEW<\/span>');\n                        }\n                        \/\/ video\n                        let videoElement = document.createElement('video');\n                        videoElement.setAttribute('playsinline', '');\n                        videoElement.setAttribute('webkit-playsinline', '');\n                        videoElement.setAttribute('x5-playsinline', '');\n                        videoElement.setAttribute('preload', 'auto');\n                        \n                        clipContainer.append(videoElement);\n                        \/\/ clip name and artist name\n                        let clipName = '';\n                        let artistName = '';\n                        if(\"footage\" == 'footage') {\n                            clipName = clip.clipNameForUrl;\n                            clipName = clipName.replace(\/-\/g, \", \");\n                            clipName = $(\"<a>\").addClass(\"clipName\").attr(\"href\", \"https:\/\/artlist.io\/stock-footage\/clip\/\" + clip.clipNameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").text(clipName);\n                            artistName = $(\"<div>\").addClass(\"artistName\").text('By ' + clip.filmMakerDisplayName + '');\n                        } else if(\"footage\" == 'templates') {\n                            clipName = $(\"<a>\").addClass(\"clipName\").attr(\"href\", \"https:\/\/artlist.io\/video-templates\/\" + clip.nameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").text(clip.name);\n                            artistName = $(\"<div>\").addClass(\"artistName\").text('By ' + clip.artistName + '');\n                        }\n                        const clipNames = $(\"<span>\").addClass(\"clipNames\").append(clipName, artistName);\n                        \/\/ download button\n                        let clipDownload = '';\n                        if(\"footage\" == 'footage') {\n                            clipDownload = $(\"<a>\").addClass(\"clipDownload\").attr(\"href\", \"https:\/\/artlist.io\/stock-footage\/clip\/\" + clip.clipNameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").html('<i class=\"icon download white\"><\/i>');\n                        } else if(\"footage\" == 'templates') {\n                            clipDownload = $(\"<a>\").addClass(\"clipDownload\").attr(\"href\", \"https:\/\/artlist.io\/video-templates\/\" + clip.nameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").html('<i class=\"icon download white\"><\/i>');\n                        }\n                        \/\/ overlay\n                        const overlay = $(\"<div>\").addClass(\"overlay\");\n                        overlay.append(clipNames, clipDownload);\n\n                        \/\/ APPEND ALL ELEMENTS INTO AUDIO PLAYER CONTAINER\n                        clipContainer.append(videoElement, overlay);\n\n                        \/\/ if this is a preview of only one specific clip (by id)\n                        if(\"506166\" !== '') {\n                            $(container).addClass(\"clipContainerSingular\")\n                        }\n\n                        \/\/ append audio player container into main playlist container\n                        container.append(clipContainer[0]);\n\n                        if(\"footage\" == 'footage') {\n                            playerSrc =  clip.clipPath;\n                        } else if(\"footage\" == 'templates') {\n                            playerSrc =  clip.previewVideoFileUrl;\n                        }\n                        const player = videojs(videoElement, {\n                            muted: true,\n                            autoplay: true,\n                        });\n\n                        player.src({\n                            src: playerSrc,\n                            type: 'application\/x-mpegURL'\n                        });\n\n                        \/* SEGMENT EVENTS *\/\n                        const special_data = getProps();\n\n                        \/* media played *\/\n                        var $videoElement = $(videoElement);\n                        $videoElement.on('play', function() {\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media played\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n\n                        \/* media paused *\/\n                        var $videoElement = $(videoElement);\n                        $videoElement.on('pause', function() {\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media paused\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n\n                        \/* media viewed *\/\n                        const observer = new IntersectionObserver(entries => {\n                            entries.forEach(entry => {\n                                if (entry.isIntersecting) {\n                                    var assetId = clip.id;\n                                    var artist = clip.filmMakerDisplayName || clip.artistName;\n                                    var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                                    var asset_type = null;\n                                    if(\"footage\" == 'footage') {\n                                        asset_type = 'footage';\n                                    } else if(\"footage\" == 'templates') {\n                                        asset_type = 'template';\n                                    }\n                                    analytics.track(\"media viewed\", {\n                                        asset_id: assetId || null,\n                                        asset_type: asset_type || null,\n                                        click_source: 'player',\n                                        artist: artist || null,\n                                        title: title || null,\n                                        genre: null,\n                                        ...special_data,\n                                    });\n                                    observer.unobserve(entry.target);\n                                }\n                            });\n                        }, {\n                            threshold: 0.5\n                        });\n                        observer.observe($videoElement[0]);\n\n                        \/* media downloaded *\/\n                        $videoElement.closest('.clipContainer').find('.clipName').on('click', function() {\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media downloaded\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n                        $videoElement.closest('.clipContainer').find('.clipDownload').on('click', function() {\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media downloaded\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n\n                        \/\/ check screen size\n                        var mobileScreen = window.matchMedia('(max-width: 767px)');\n                        if (mobileScreen.matches) { \/\/ mobile\n                            const observer = new IntersectionObserver(function(entries) {\n                                entries.forEach(entry => {\n                                    if (entry.isIntersecting) {\n                                        player.play(); \/\/ Play the video when it enters the viewport\n                                    } else {\n                                        player.pause(); \/\/ Pause the video when it goes out of the viewport\n                                    }\n                                });\n                            });\n                            observer.observe(videoElement);\n                        } else { \/\/ desktop\n                            clipContainer.on('mouseenter', function() {\n                                player.play();\n                            });\n\n                            clipContainer.on('mouseleave', function() {\n                                player.pause();\n                            });\n                        }\n\n                    }\n                    if(\"506166\" !== '') { \/\/ if this is a request for a specific clip by id - then break out of loop after first time bc it's not an array\n                        return false;\n                    }\n                });\n            }\n\n        });\n    <\/script>\n\n    \n\n    <div class=\"clipsContainer\" id=\"69d06cf96ba98\"><\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n\n            if(\"footage\" == 'footage') {\n                if(\"507735\" == '') { \/\/ if this is a request for multiple clips by attributes\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query ClipList($page: Int, $sortType: Int, $categoryIds: String, $searchTerm: String) {\n\t\t\t\t\t\t\t\tclipList(page: $page, sortType: $sortType, categoryIds: $categoryIds, searchTerm: $searchTerm) {\n\t\t\t\t\t\t\t\t  exactResults  {\n\t\t\t\t\t\t\t\t\tclipPath\n\t\t\t\t\t\t\t\t\tclipNameForUrl\n\t\t\t\t\t\t\t\t\tid\n\t\t\t\t\t\t\t\t\tisNew\n\t\t\t\t\t\t\t\t\tfilmMakerDisplayName\n\t\t\t\t\t\t\t\t\timageUrl\n\t\t\t\t\t\t\t\t\tthumbnailUrl\n\t\t\t\t\t\t\t\t\twidth\n\t\t\t\t\t\t\t\t\tvideoUrl\n\t\t\t\t\t\t\t\t\trawFileExt\n\t\t\t\t\t\t\t\t  }\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}`,\n                            variables: `{\n\t\t\t\t\t\t\t\t\"page\": 1,\n\t\t\t\t\t\t\t\t\"sortType\": 1,\n\t\t\t\t\t\t\t\t\"categoryIds\": null,\n\t\t\t\t\t\t\t\t\"searchTerm\": \"\"\n\t\t\t\t\t\t\t}`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('footage list: ', res);\n                            var data = res.data.clipList.exactResults;\n                            if ($(\"#69d06cf96ba98\").length && data.length > 0) {\n                                createClipsGrid(data, \"69d06cf96ba98\");\n                            } else if ($(\"#69d06cf96ba98\").length && data.length == 0) {\n                                $(\"#69d06cf96ba98\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                } else if(\"507735\" !== '') { \/\/ if this is a request for a specific clip by id\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query Clip($clipId: Int!) {\n\t\t\t\t\t\t\t\tclip(id: $clipId) {\n\t\t\t\t\t\t\t\t\tclipPath\n\t\t\t\t\t\t\t\t\tclipNameForUrl\n\t\t\t\t\t\t\t\t\tid\n\t\t\t\t\t\t\t\t\tisNew\n\t\t\t\t\t\t\t\t\tfilmMakerDisplayName\n\t\t\t\t\t\t\t\t\timageUrl\n\t\t\t\t\t\t\t\t\tthumbnailUrl\n\t\t\t\t\t\t\t\t\twidth\n\t\t\t\t\t\t\t\t\tvideoUrl\n\t\t\t\t\t\t\t\t\trawFileExt\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}`,\n                            variables: `{\n\t\t\t\t\t\t\t\t\"clipId\": 507735\t\t\t\t\t\t\t}`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('specific footage: ', res);\n                            var data = res.data.clip;\n                            if ($(\"#69d06cf96ba98\").length && data !== '') {\n                                createClipsGrid(data, \"69d06cf96ba98\");\n                            } else if ($(\"#69d06cf96ba98\").length && data.length == '') {\n                                $(\"#69d06cf96ba98\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                }\n            } else if(\"footage\" == 'templates') {\n                if(\"507735\" === '') {\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query TemplatesList($payload: TemplatesByTermSearchPayload!) {\n                                templatesList(payload: $payload) {\n                                    nameForUrl\n                                    id\n                                    name\n                                    isNew\n                                    artistName\n                                    thumbnailUrl\n                                    previewVideoFileUrl\n                                }\n                            }`,\n                            variables: `{\n                                \"payload\": {\n                                    \"page\": 1,\n                                    \"take\": 2,\n                                    \"sortBy\": \"1\",\n                                    \"categories\": null,\n                                    \"searchTerms\": \"\"\n                                }\n                            }`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('templates list: ', res);\n                            var data = res.data.templatesList;\n                            if ($(\"#69d06cf96ba98\").length && data.length > 0) {\n                                createClipsGrid(data, \"69d06cf96ba98\");\n                            } else if ($(\"#69d06cf96ba98\").length && data.length == 0) {\n                                $(\"#69d06cf96ba98\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                    } else if(\"507735\" !== '') {\n                    $.ajax({\n                        method: \"POST\",\n                        url: \"https:\/\/search-api.artlist.me\/v1\/graphql\",\n                        contentType: \"application\/json\",\n                        data: JSON.stringify({\n                            query: `query Template($ids: [String!]!, $page: Int!, $take: Int!) {\n\t\t\t\t\t\t\t\ttemplatesByIds(ids: $ids, page: $page, take: $take) {\n\t\t\t\t\t\t\t\t\tnameForUrl\n                                    id\n                                    name\n                                    isNew\n                                    artistName\n                                    thumbnailUrl\n                                    previewVideoFileUrl\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}`,\n                            variables: `{\n                                \"ids\": [\"507735\"],\n                                \"page\": 1,\n                                \"take\": 1\n\t\t\t\t\t\t\t}`,\n                        })\n                    }).done(function (res) {\n                        if(res == '') {\n                            console.log('none');\n                        } else {\n                            console.log('specific template: ', res);\n                            var data = res.data.templatesByIds[0];\n                            if ($(\"#69d06cf96ba98\").length && data !== '') {\n                                createClipsGrid(data, \"69d06cf96ba98\");\n                            } else if ($(\"#69d06cf96ba98\").length && data.length == '') {\n                                $(\"#69d06cf96ba98\").empty().append('<div class=\"noClipsError\">No clips were found.<\/div>');\n                            }\n                        }\n                    });\n                }\n            }\n\n            function createClipsGrid(data, clipsContainerId){\n                const container = $(\"#\" + clipsContainerId);\n                let playerSrc = '';\n\n                $.each(data, function(index, clip) {\n                    if(\"507735\" !== '') { \/\/ if this is a request for a specific clip by id - then the data is not an array of clips but only one clip and that's why the \"clip\" variable is actually the \"data\"\n                        index = 0\n                        clip = data;\n                    }\n                    if ((index) < 2) {\n                        \/\/ clip container\n                        const clipContainer = $(\"<div>\").addClass(\"clipContainer \");\n                        \/\/ new badge\n                        if (clip.isNew) {\n                            clipContainer.append('<span class=\"isNewBadge\">NEW<\/span>');\n                        }\n                        \/\/ video\n                        let videoElement = document.createElement('video');\n                        videoElement.setAttribute('playsinline', '');\n                        videoElement.setAttribute('webkit-playsinline', '');\n                        videoElement.setAttribute('x5-playsinline', '');\n                        videoElement.setAttribute('preload', 'auto');\n                        \n                        clipContainer.append(videoElement);\n                        \/\/ clip name and artist name\n                        let clipName = '';\n                        let artistName = '';\n                        if(\"footage\" == 'footage') {\n                            clipName = clip.clipNameForUrl;\n                            clipName = clipName.replace(\/-\/g, \", \");\n                            clipName = $(\"<a>\").addClass(\"clipName\").attr(\"href\", \"https:\/\/artlist.io\/stock-footage\/clip\/\" + clip.clipNameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").text(clipName);\n                            artistName = $(\"<div>\").addClass(\"artistName\").text('By ' + clip.filmMakerDisplayName + '');\n                        } else if(\"footage\" == 'templates') {\n                            clipName = $(\"<a>\").addClass(\"clipName\").attr(\"href\", \"https:\/\/artlist.io\/video-templates\/\" + clip.nameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").text(clip.name);\n                            artistName = $(\"<div>\").addClass(\"artistName\").text('By ' + clip.artistName + '');\n                        }\n                        const clipNames = $(\"<span>\").addClass(\"clipNames\").append(clipName, artistName);\n                        \/\/ download button\n                        let clipDownload = '';\n                        if(\"footage\" == 'footage') {\n                            clipDownload = $(\"<a>\").addClass(\"clipDownload\").attr(\"href\", \"https:\/\/artlist.io\/stock-footage\/clip\/\" + clip.clipNameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").html('<i class=\"icon download white\"><\/i>');\n                        } else if(\"footage\" == 'templates') {\n                            clipDownload = $(\"<a>\").addClass(\"clipDownload\").attr(\"href\", \"https:\/\/artlist.io\/video-templates\/\" + clip.nameForUrl + \"\/\" + clip.id + \"?download=1&utm_source=blog\").attr(\"target\", \"_blank\").html('<i class=\"icon download white\"><\/i>');\n                        }\n                        \/\/ overlay\n                        const overlay = $(\"<div>\").addClass(\"overlay\");\n                        overlay.append(clipNames, clipDownload);\n\n                        \/\/ APPEND ALL ELEMENTS INTO AUDIO PLAYER CONTAINER\n                        clipContainer.append(videoElement, overlay);\n\n                        \/\/ if this is a preview of only one specific clip (by id)\n                        if(\"507735\" !== '') {\n                            $(container).addClass(\"clipContainerSingular\")\n                        }\n\n                        \/\/ append audio player container into main playlist container\n                        container.append(clipContainer[0]);\n\n                        if(\"footage\" == 'footage') {\n                            playerSrc =  clip.clipPath;\n                        } else if(\"footage\" == 'templates') {\n                            playerSrc =  clip.previewVideoFileUrl;\n                        }\n                        const player = videojs(videoElement, {\n                            muted: true,\n                            autoplay: true,\n                        });\n\n                        player.src({\n                            src: playerSrc,\n                            type: 'application\/x-mpegURL'\n                        });\n\n                        \/* SEGMENT EVENTS *\/\n                        const special_data = getProps();\n\n                        \/* media played *\/\n                        var $videoElement = $(videoElement);\n                        $videoElement.on('play', function() {\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media played\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n\n                        \/* media paused *\/\n                        var $videoElement = $(videoElement);\n                        $videoElement.on('pause', function() {\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media paused\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n\n                        \/* media viewed *\/\n                        const observer = new IntersectionObserver(entries => {\n                            entries.forEach(entry => {\n                                if (entry.isIntersecting) {\n                                    var assetId = clip.id;\n                                    var artist = clip.filmMakerDisplayName || clip.artistName;\n                                    var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                                    var asset_type = null;\n                                    if(\"footage\" == 'footage') {\n                                        asset_type = 'footage';\n                                    } else if(\"footage\" == 'templates') {\n                                        asset_type = 'template';\n                                    }\n                                    analytics.track(\"media viewed\", {\n                                        asset_id: assetId || null,\n                                        asset_type: asset_type || null,\n                                        click_source: 'player',\n                                        artist: artist || null,\n                                        title: title || null,\n                                        genre: null,\n                                        ...special_data,\n                                    });\n                                    observer.unobserve(entry.target);\n                                }\n                            });\n                        }, {\n                            threshold: 0.5\n                        });\n                        observer.observe($videoElement[0]);\n\n                        \/* media downloaded *\/\n                        $videoElement.closest('.clipContainer').find('.clipName').on('click', function() {\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media downloaded\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n                        $videoElement.closest('.clipContainer').find('.clipDownload').on('click', function() {\n                            var assetId = clip.id;\n                            var artist = clip.filmMakerDisplayName || clip.artistName;\n                            var title = clip.clipNameForUrl ? clip.clipNameForUrl.replace(\/-\/g, \", \") : clip.name;\n                            var asset_type = null;\n                            if(\"footage\" == 'footage') {\n                                asset_type = 'footage';\n                            } else if(\"footage\" == 'templates') {\n                                asset_type = 'template';\n                            }\n                            analytics.track(\"media downloaded\", {\n                                asset_id: assetId || null,\n                                asset_type: asset_type || null,\n                                click_source: 'player',\n                                artist: artist || null,\n                                title: title || null,\n                                genre: null,\n                                ...special_data,\n                            });\n                        });\n\n                        \/\/ check screen size\n                        var mobileScreen = window.matchMedia('(max-width: 767px)');\n                        if (mobileScreen.matches) { \/\/ mobile\n                            const observer = new IntersectionObserver(function(entries) {\n                                entries.forEach(entry => {\n                                    if (entry.isIntersecting) {\n                                        player.play(); \/\/ Play the video when it enters the viewport\n                                    } else {\n                                        player.pause(); \/\/ Pause the video when it goes out of the viewport\n                                    }\n                                });\n                            });\n                            observer.observe(videoElement);\n                        } else { \/\/ desktop\n                            clipContainer.on('mouseenter', function() {\n                                player.play();\n                            });\n\n                            clipContainer.on('mouseleave', function() {\n                                player.pause();\n                            });\n                        }\n\n                    }\n                    if(\"507735\" !== '') { \/\/ if this is a request for a specific clip by id - then break out of loop after first time bc it's not an array\n                        return false;\n                    }\n                });\n            }\n\n        });\n    <\/script>\n\n    \n<p>Whatever you\u2019re looking for, you can find it on Artlist. Even if you\u2019re building a video loop from scratch, be sure to check out all of the great templates and assets that are available to you at the click of a button!<\/p>\n<h2>Wrapping up<\/h2>\n<p>So, that\u2019s just about everything you need to know about the recurring world of VJ loops! Simple, effective, and with plenty of options to download today, they\u2019re a great asset to utilize at your next event or presentation. If you\u2019re feeling creative and up to the challenge, it can also be a lot of fun to experiment and create your own!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ever heard of a VJ loop before? Perhaps not. But we guarantee you\u2019ve seen one. Whether you\u2019re new to the world of VJ loops and want to learn more, or you\u2019re interested in making your own and finding VJ loops that you can use in your own work, keep on reading. Today, we\u2019re taking a [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":15919,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_uag_custom_page_level_css":"","footnotes":""},"categories":[588,464],"tags":[],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>VJ Loops: get to know ready-to-use video loops | Artlist Blog<\/title>\n<meta name=\"description\" content=\"VJ loops are a loop of seamlessly recurring footage, typically 8 to 16 seconds in length. But why are they so useful?\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/new-blog.artlist.io\/blog\/vj-loops\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"VJ Loops: get to know ready-to-use video loops | Artlist Blog\" \/>\n<meta property=\"og:description\" content=\"VJ loops are a loop of seamlessly recurring footage, typically 8 to 16 seconds in length. But why are they so useful?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/new-blog.artlist.io\/blog\/vj-loops\/\" \/>\n<meta property=\"og:site_name\" content=\"Artlist Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-04T09:39:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-10T08:48:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/new-blog.artlist.io\/blog\/wp-content\/uploads\/2023\/12\/291123-VJ-Loops-blog-cover-1-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"717\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Josh Edwards\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Josh Edwards\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/new-blog.artlist.io\/blog\/vj-loops\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/new-blog.artlist.io\/blog\/vj-loops\/\"},\"author\":{\"name\":\"Josh Edwards\",\"@id\":\"https:\/\/new-blog.artlist.io\/blog\/#\/schema\/person\/3a0fe1e8faacee1a6c5243ac506a55c8\"},\"headline\":\"Understanding VJ loops\",\"datePublished\":\"2023-12-04T09:39:52+00:00\",\"dateModified\":\"2024-01-10T08:48:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/new-blog.artlist.io\/blog\/vj-loops\/\"},\"wordCount\":783,\"publisher\":{\"@id\":\"https:\/\/new-blog.artlist.io\/blog\/#organization\"},\"articleSection\":[\"All Creative Assets\",\"Royalty-Free Footage\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/new-blog.artlist.io\/blog\/vj-loops\/\",\"url\":\"https:\/\/new-blog.artlist.io\/blog\/vj-loops\/\",\"name\":\"VJ Loops: get to know ready-to-use video loops | Artlist Blog\",\"isPartOf\":{\"@id\":\"https:\/\/new-blog.artlist.io\/blog\/#website\"},\"datePublished\":\"2023-12-04T09:39:52+00:00\",\"dateModified\":\"2024-01-10T08:48:05+00:00\",\"description\":\"VJ loops are a loop of seamlessly recurring footage, typically 8 to 16 seconds in length. But why are they so useful?\",\"breadcrumb\":{\"@id\":\"https:\/\/new-blog.artlist.io\/blog\/vj-loops\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/new-blog.artlist.io\/blog\/vj-loops\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/new-blog.artlist.io\/blog\/vj-loops\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/new-blog.artlist.io\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Royalty-Free Footage\",\"item\":\"https:\/\/new-blog.artlist.io\/blog\/royalty-free-footage\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Understanding VJ loops\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/new-blog.artlist.io\/blog\/#website\",\"url\":\"https:\/\/new-blog.artlist.io\/blog\/\",\"name\":\"Artlist Blog\",\"description\":\"Just artlist blog website\",\"publisher\":{\"@id\":\"https:\/\/new-blog.artlist.io\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/new-blog.artlist.io\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/new-blog.artlist.io\/blog\/#organization\",\"name\":\"Artlist Blog\",\"url\":\"https:\/\/new-blog.artlist.io\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/new-blog.artlist.io\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/new-blog.artlist.io\/blog\/wp-content\/uploads\/2024\/10\/artlist-blog-logo.svg\",\"contentUrl\":\"https:\/\/new-blog.artlist.io\/blog\/wp-content\/uploads\/2024\/10\/artlist-blog-logo.svg\",\"width\":143,\"height\":28,\"caption\":\"Artlist Blog\"},\"image\":{\"@id\":\"https:\/\/new-blog.artlist.io\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/new-blog.artlist.io\/blog\/#\/schema\/person\/3a0fe1e8faacee1a6c5243ac506a55c8\",\"name\":\"Josh Edwards\",\"description\":\"Josh Edwards is an accomplished filmmaker, industry writing veteran, storyteller based in Indonesia (by way of the UK), and industry writer in the Blade Ronner Media Writing Collective. He's passionate about travel and documents adventures and stories through his films.\",\"sameAs\":[\"https:\/\/www.instagram.com\/joshedwardsfilms\/\",\"https:\/\/www.linkedin.com\/in\/joshedwardsfilms\/\",\"https:\/\/www.youtube.com\/c\/JoshEdwardsFilms\"],\"url\":\"https:\/\/new-blog.artlist.io\/blog\/author\/joshedwards\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"VJ Loops: get to know ready-to-use video loops | Artlist Blog","description":"VJ loops are a loop of seamlessly recurring footage, typically 8 to 16 seconds in length. But why are they so useful?","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/new-blog.artlist.io\/blog\/vj-loops\/","og_locale":"en_US","og_type":"article","og_title":"VJ Loops: get to know ready-to-use video loops | Artlist Blog","og_description":"VJ loops are a loop of seamlessly recurring footage, typically 8 to 16 seconds in length. But why are they so useful?","og_url":"https:\/\/new-blog.artlist.io\/blog\/vj-loops\/","og_site_name":"Artlist Blog","article_published_time":"2023-12-04T09:39:52+00:00","article_modified_time":"2024-01-10T08:48:05+00:00","og_image":[{"width":2560,"height":717,"url":"https:\/\/new-blog.artlist.io\/blog\/wp-content\/uploads\/2023\/12\/291123-VJ-Loops-blog-cover-1-scaled.jpg","type":"image\/jpeg"}],"author":"Josh Edwards","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Josh Edwards","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/new-blog.artlist.io\/blog\/vj-loops\/#article","isPartOf":{"@id":"https:\/\/new-blog.artlist.io\/blog\/vj-loops\/"},"author":{"name":"Josh Edwards","@id":"https:\/\/new-blog.artlist.io\/blog\/#\/schema\/person\/3a0fe1e8faacee1a6c5243ac506a55c8"},"headline":"Understanding VJ loops","datePublished":"2023-12-04T09:39:52+00:00","dateModified":"2024-01-10T08:48:05+00:00","mainEntityOfPage":{"@id":"https:\/\/new-blog.artlist.io\/blog\/vj-loops\/"},"wordCount":783,"publisher":{"@id":"https:\/\/new-blog.artlist.io\/blog\/#organization"},"articleSection":["All Creative Assets","Royalty-Free Footage"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/new-blog.artlist.io\/blog\/vj-loops\/","url":"https:\/\/new-blog.artlist.io\/blog\/vj-loops\/","name":"VJ Loops: get to know ready-to-use video loops | Artlist Blog","isPartOf":{"@id":"https:\/\/new-blog.artlist.io\/blog\/#website"},"datePublished":"2023-12-04T09:39:52+00:00","dateModified":"2024-01-10T08:48:05+00:00","description":"VJ loops are a loop of seamlessly recurring footage, typically 8 to 16 seconds in length. But why are they so useful?","breadcrumb":{"@id":"https:\/\/new-blog.artlist.io\/blog\/vj-loops\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/new-blog.artlist.io\/blog\/vj-loops\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/new-blog.artlist.io\/blog\/vj-loops\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/new-blog.artlist.io\/blog\/"},{"@type":"ListItem","position":2,"name":"Royalty-Free Footage","item":"https:\/\/new-blog.artlist.io\/blog\/royalty-free-footage\/"},{"@type":"ListItem","position":3,"name":"Understanding VJ loops"}]},{"@type":"WebSite","@id":"https:\/\/new-blog.artlist.io\/blog\/#website","url":"https:\/\/new-blog.artlist.io\/blog\/","name":"Artlist Blog","description":"Just artlist blog website","publisher":{"@id":"https:\/\/new-blog.artlist.io\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/new-blog.artlist.io\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/new-blog.artlist.io\/blog\/#organization","name":"Artlist Blog","url":"https:\/\/new-blog.artlist.io\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/new-blog.artlist.io\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/new-blog.artlist.io\/blog\/wp-content\/uploads\/2024\/10\/artlist-blog-logo.svg","contentUrl":"https:\/\/new-blog.artlist.io\/blog\/wp-content\/uploads\/2024\/10\/artlist-blog-logo.svg","width":143,"height":28,"caption":"Artlist Blog"},"image":{"@id":"https:\/\/new-blog.artlist.io\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/new-blog.artlist.io\/blog\/#\/schema\/person\/3a0fe1e8faacee1a6c5243ac506a55c8","name":"Josh Edwards","description":"Josh Edwards is an accomplished filmmaker, industry writing veteran, storyteller based in Indonesia (by way of the UK), and industry writer in the Blade Ronner Media Writing Collective. He's passionate about travel and documents adventures and stories through his films.","sameAs":["https:\/\/www.instagram.com\/joshedwardsfilms\/","https:\/\/www.linkedin.com\/in\/joshedwardsfilms\/","https:\/\/www.youtube.com\/c\/JoshEdwardsFilms"],"url":"https:\/\/new-blog.artlist.io\/blog\/author\/joshedwards\/"}]}},"uagb_featured_image_src":{"full":["https:\/\/new-blog.artlist.io\/blog\/wp-content\/uploads\/2023\/12\/291123-VJ-Loops-blog-cover-1-scaled.jpg",2560,717,false],"thumbnail":["https:\/\/new-blog.artlist.io\/blog\/wp-content\/uploads\/2023\/12\/291123-VJ-Loops-blog-cover-1-150x150.jpg",150,150,true],"medium":["https:\/\/new-blog.artlist.io\/blog\/wp-content\/uploads\/2023\/12\/291123-VJ-Loops-blog-cover-1-300x84.jpg",300,84,true],"medium_large":["https:\/\/new-blog.artlist.io\/blog\/wp-content\/uploads\/2023\/12\/291123-VJ-Loops-blog-cover-1-768x215.jpg",768,215,true],"large":["https:\/\/new-blog.artlist.io\/blog\/wp-content\/uploads\/2023\/12\/291123-VJ-Loops-blog-cover-1-1024x287.jpg",1024,287,true],"1536x1536":["https:\/\/new-blog.artlist.io\/blog\/wp-content\/uploads\/2023\/12\/291123-VJ-Loops-blog-cover-1-1536x430.jpg",1536,430,true],"2048x2048":["https:\/\/new-blog.artlist.io\/blog\/wp-content\/uploads\/2023\/12\/291123-VJ-Loops-blog-cover-1-2048x574.jpg",2048,574,true]},"uagb_author_info":{"display_name":"Josh Edwards","author_link":"https:\/\/new-blog.artlist.io\/blog\/author\/joshedwards\/"},"uagb_comment_info":0,"uagb_excerpt":"Ever heard of a VJ loop before? Perhaps not. But we guarantee you\u2019ve seen one. Whether you\u2019re new to the world of VJ loops and want to learn more, or you\u2019re interested in making your own and finding VJ loops that you can use in your own work, keep on reading. Today, we\u2019re taking a&hellip;","_links":{"self":[{"href":"https:\/\/new-blog.artlist.io\/blog\/wp-json\/wp\/v2\/posts\/15917"}],"collection":[{"href":"https:\/\/new-blog.artlist.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/new-blog.artlist.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/new-blog.artlist.io\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/new-blog.artlist.io\/blog\/wp-json\/wp\/v2\/comments?post=15917"}],"version-history":[{"count":1,"href":"https:\/\/new-blog.artlist.io\/blog\/wp-json\/wp\/v2\/posts\/15917\/revisions"}],"predecessor-version":[{"id":15918,"href":"https:\/\/new-blog.artlist.io\/blog\/wp-json\/wp\/v2\/posts\/15917\/revisions\/15918"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/new-blog.artlist.io\/blog\/wp-json\/wp\/v2\/media\/15919"}],"wp:attachment":[{"href":"https:\/\/new-blog.artlist.io\/blog\/wp-json\/wp\/v2\/media?parent=15917"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/new-blog.artlist.io\/blog\/wp-json\/wp\/v2\/categories?post=15917"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/new-blog.artlist.io\/blog\/wp-json\/wp\/v2\/tags?post=15917"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}