Skip to content

Instantly share code, notes, and snippets.

@TheLouisHong
Last active February 11, 2023 08:06
Show Gist options
  • Star 28 You must be signed in to star a gist
  • Fork 6 You must be signed in to fork a gist
  • Save TheLouisHong/964294f0cd9c980947d7997c39843961 to your computer and use it in GitHub Desktop.
Save TheLouisHong/964294f0cd9c980947d7997c39843961 to your computer and use it in GitHub Desktop.
Downloads all the free Mixamo Animations

Step 1

Go to https://www.mixamo.com/store/#/search?page=1, make sure you're logged in.

Step 2

open up chrome console by pressing F12 on your keyboard on the Mixamo webpage. Click on the "Console" tab in the new window (developer console).

Step 3

Paste in "DownloadMixamoByLouisHong.js" into the console input and return. It'll starting downloading from that page and until the last page.

// Anonymous "self-invoking" function
alert("Thank you for using this script created by Louis Hong (/u/loolo78)\n\nThe download will now begin.");
(function() {
// Load the script
var script = document.createElement("SCRIPT");
script.src = 'https://code.jquery.com/jquery-latest.min.js';
script.type = 'text/javascript';
document.getElementsByTagName("head")[0].appendChild(script);
// Poll for jQuery to come into existance
var checkReady = function(callback) {
if (window.jQuery) {
callback(jQuery);
}
else {
window.setTimeout(function() {
checkReady(callback);
}, 20);
}
}
;
// Start polling...
checkReady(function($) {
$(function() {
console.log("JQuery loaded, start downloading")
start()
});
});
})();
// http://facebook.com/anders.tornblad
// anders.tornblad@gmail.com
//------
function fetchList() {
console.log("Fetch all the animation in this page, you can optimized this by setting to page to 96 per page on the upper right")
return $("#site > div > div > div > div.product-results > div.product-list.thumbnails-md")[0].childNodes
}
function nextPage() {
console.log("This page is done, loading next page.")
var lastButton = $("#site > div > div > div > div.product-results > div.pagination-holder > ul")[0].lastChild.firstChild
lastButton.click()
}
function start() {
list = fetchList()
var i = 0
var purchased = false
var newPage = false
var loadingDog = false
var downloadObserver = new MutationObserver(function(mutations) {
if ($(".spinner-dog").length != 0) {
console.log("Waiting for page to load")
loadingDog = true
return
}
if (newPage && loadingDog) {
list = fetchList()
if (list.length == 0) {
return
}
window.scrollTo(0,document.body.scrollHeight);
newPage = false
loadingDog = false
list[0].click()
}
var download = $("#site > div > div.product-preview-holder.col-sm-6.col-push-6 > div > div.editor.row.row-no-gutter > div.editor-sidebar.col-xs-4 > div.sidebar-header > button")[0]
if (i >= list.length) {
nextPage()
$("#site > div > div.product-preview-holder.col-sm-6.col-push-6 > div > div.product-nav > button")[0].click()
i = 0
purchased = false
newPage = true
return
}
if (download.childNodes[0].innerHTML === "Loading…") {
return
}
if (download.childNodes[0].data === "Adding...") {
return
}
if (download.childNodes[0].data === "View / Download") {
list[i++].click()
purchased = false
console.log("This animation has already been downloaded")
return
} else {
if (!purchased) {
console.log("Downloading new animation")
download.click()
purchased = true
}
}
}
)
downloadObserver.observe($("#site > div")[0], {
childList: true,
subtree: true,
attributes: true,
characterData: true
})
list[0].click()
}
@MaxxieDivine
Copy link

I really appreciate the script! However, I see that the script is adding the assets to my account, but isn't downloading them. Any idea why that might be happening? Below is a screenshot of the console while the script is running.

image

@Salja
Copy link

Salja commented Mar 24, 2017

same here some idea ?

@Gabrielkang
Copy link

I am having the same problem. Is there any chance someone can fix this? I'm not familiar with js or I'd do it myself.

@ernestp
Copy link

ernestp commented May 25, 2017

New error starting today: (index):9 Uncaught TypeError: Cannot read property 'childNodes' of undefined

@jkevinp
Copy link

jkevinp commented Jun 6, 2017

change fetchList

function fetchList() {
    console.log("Fetch all the animation in this page, you can optimized this by setting to page to 96 per page on the upper right")
    return $("div.product-list.thumbnails-md")[0].childNodes;
}

@DakotaMcCutch
Copy link

Change Fetchlist to (They Changed it again)

function fetchList() {
console.log("Fetch all the animation in this page, you can optimized this by setting to page to 96 per page on the upper right")
return $("div.product-list.thumbnails-sm")[0].childNodes;
}

@ConflictedDev
Copy link

Thanks for the efforts with the script Louis.

I found some things that needed tweaking but I ended up writing my own from scratch for fun (as I wanted to make it more flexible for people with different settings or who want to change things).
I also made a simple download script since this only adds assets to an account (if anyone wants it - feel free to go to my GitHub to grab it).

@ChairGraveyard
Copy link

This worked for me for the fetchList function, though I'm still getting the header errors.

function fetchList() {
    console.log("Fetch all the animation in this page, you can optimized this by setting to page to 96 per page on the upper right")
    return $("div.product-list.thumbnails-md")[0].childNodes;
}

@DakotaMcCutch
Copy link

@ChairGraveyard I just realized they have 3.
div.product-list.thumbnails-sm
div.product-list.thumbnails-md
div.product-list.thumbnails-lg

@TheLouisHong
Copy link
Author

http://pastebin.com/v12t7rzX This version is much better than mine. Use this one!

@ConflictedDev
Copy link

ConflictedDev commented Jul 30, 2017

@DakotaMcCutch Yeah filter settings affects the naming, the one I made doesn't matter what you have as settings (but the version loolo posted in the comment above seems much nicer and quicker; though, not sure if it breaks the service's terms of use); I also included a way to download the assets more easily afterward - https://github.com/ConflictedDev/MixamoAnimationsDownload.

@stanchiang
Copy link

any way to do it with the new store?
lost my set and can't find anywhere to bulk download online

help is much appreciated.
Thanks!

@stipebosnjak
Copy link

@stanchiang You can download the packs.
Here you are actually, already gone trough it.
Dropbox - Mixamo animation packs

@GameMaster79
Copy link

This is all really cool and just what I was looking for but I think some of us will have a new problem. These scrips and your awesome drop box file are the stock animations. I think a lot of us need the in place animations. Its a check box when you are looking at individual animations. I would love to avoid checking that box on 2200 animations. Anyone have a solution?

@gnuton
Copy link

gnuton commented Nov 8, 2017

@GameMaster79 If you use mixamo animations with unreal, you can force them to stay in place.

@gnuton
Copy link

gnuton commented Nov 30, 2017

Wrote a new script to download all mixamo animations for a single character
https://www.youtube.com/watch?v=EuAjnKAehGI&t=5s

@dassoubarna
Copy link

Is there any way to download all characters from mixamo at a time?

@Membasoft
Copy link

Hi.
I have learned to use this script but it gives me the following message:

VM306: 10 Refused to load the script 'https://code.jquery.com/jquery-latest.min.js' because it violates the following Content Security Policy directive: "script-src https: //bam.nr-data .net https: //.newrelic.com https://assets.adobedtm.com https: //.cloudfront.net 'unsafe-eval' 'self' ".

What I can do?

@harrism76
Copy link

Is there a way to add the option to see if a page has the inplace check box, and only download the animations with in place selected.

@krazyjakee
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment