Skip to content

Instantly share code, notes, and snippets.

@ojame
Created June 29, 2017 05:47
Show Gist options
  • Star 21 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save ojame/93560d99149124ea2f89b9d78cbcadd1 to your computer and use it in GitHub Desktop.
Save ojame/93560d99149124ea2f89b9d78cbcadd1 to your computer and use it in GitHub Desktop.
Delete all movies that haven't been 'downloaded' in Radarr. Mass/bulk deleting.
// Go to Radarr and click 'settings' => 'general'.
// Open the JavaScript Console in Google Chrome (View => Developer => Javascript Console)
// Past the following in. Hit enter and away you go.
const key = document.getElementsByClassName('x-api-key')[0].value;
if (!key) {
alert('Navigate to /settings/general and run again');
}
let ids = [];
let _movies = [];
let index = 0;
const percent = () => {
return `[${(((index + 1) / _movies.length) * 100).toFixed(2)}%]`
}
const deleteMovie = (id) =>
fetch(`/api/movie/${id}`, {
method: 'DELETE',
headers: {
'X-Api-Key': key,
},
}).then(() => {
index++;
if (ids[index]) {
console.log(`${percent()} Deleting ${_movies.find(m => m.id === ids[index]).title}`);
deleteMovie(ids[index]);
} else {
console.log('Finished deleting movies')
alert('It looks like all movies were deleted');
}
})
console.log('Fetching list of your movies, this could take a while...');
console.log('Please don\'t refresh this page until finished');
fetch('/api/movie', {
headers: {
'X-Api-Key': key,
}
}).then(res => res.json()).then(movies => {
console.log('Movie list fetched');
_movies = movies;
const downloaded = movies.filter(movie => !movie.downloaded);
ids = downloaded.map(movie => movie.id);
if (ids.length) {
console.log(`${percent()} Deleting ${movies.find(m => m.id === ids[index]).title}`);
deleteMovie(ids[index]);
} else {
alert('There doesn`t seem to be any movies to delete');
}
});
@tbgoose
Copy link

tbgoose commented May 27, 2018

Any chance this can be altered (or forked rather) to be able to delete all movies that have been downloaded? My database is messed up and I want to start again...

@ardean
Copy link

ardean commented May 20, 2019

delete all movies using API v2 (Radarr Version 2)

(async () => {
  const { apiKey } = window.Radarr;

  const res = await fetch("/api/v2/movie", {
    headers: {
      "X-Api-Key": apiKey
    }
  });
  const movies = await res.json();
  const ids = movies.map(movie => movie.id);

  console.info("Movie list fetched", ids);

  for (const id of ids) {
    await fetch(`/api/movie/${id}`, {
      method: "DELETE",
      headers: {
        "X-Api-Key": apiKey
      }
    });

    console.info(`deleted movie ${id}`);
  }
})();

@spmvoss
Copy link

spmvoss commented Oct 14, 2019

Awesome, this helped a lot thank you! For anyone else stumbling upon this, you can easily change it to delete all unmonitored by changing !movie.downloaded to !movie.monitored in line 49.

@Vengance09
Copy link

Just wanted to pop in and say thank you! this was super helpful. I moved my setup from Couch Potato and SickBread to Sonarr+Radarr

@Fronix
Copy link

Fronix commented Apr 7, 2020

Nice stuff!

I needed some extra functions like deleting never downloaded movies and never watched movies. So I expanded upon your script a little. Added some extra stuff, deleting X months old movies, blacklisting id's that you don't want to delete but get included anyway etc.

Link to gist: https://gist.github.com/Fronix/92dd3319845e61c7af063db5f6e8961b

code removed, please use the gist

@infamousjoeg
Copy link

SO MUCH TIME SAVED! LOVE THIS!

For anyone avoiding Chrome, this also works in the Web Console of Firefox...

@nocomputeruser
Copy link

I tried running the delete.js code in the javascript console, but I am getting a "Uncaught TypeError: Cannot read property 'value' of undefined
at :1:60". Any thoughts on what I might be doing wrong?

@ChadTaljaardt
Copy link

I tried running the delete.js code in the javascript console, but I am getting a "Uncaught TypeError: Cannot read property 'value' of undefined at :1:60". Any thoughts on what I might be doing wrong?

Change this line

const key = document.getElementsByClassName('x-api-key')[0].value;

to this

const key = document.getElementsByName('apiKey')[0].value;

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