MCPcopy Index your code
hub / github.com/automatic-ripping-machine/automatic-ripping-machine

github.com/automatic-ripping-machine/automatic-ripping-machine @2.23.3 sqlite

repository ↗ · DeepWiki ↗ · release 2.23.3 ↗
727 symbols 2,307 edges 93 files 400 documented · 55%
README

Automatic Ripping Machine (ARM)

CI Publish Docker Image Docker

GitHub forks GitHub stars GitHub issues GitHub pull requests GitHub contributors GitHub last commit

GitHub license

GitHub release (latest by date) GitHub release Date Python Versions

Wiki Discord

Overview

Insert an optical disc (Blu-ray, DVD, CD) and checks to see if it's audio, video (Movie or TV), or data, then rips it.

See: https://b3n.org/automatic-ripping-machine

Features

  • Detects insertion of disc using udev
  • Determines disc type...
  • If video (Blu-ray or DVD)
    • Retrieve title from disc or OMDb API to name the folder "Movie Title (Year)" so that Plex or Emby can pick it up
    • Determine if video is Movie or TV using OMDb API
    • Rip using MakeMKV or HandBrake (can rip all features or main feature)
    • Eject disc and queue up Handbrake transcoding when done
    • Transcoding jobs are asynchronously batched from ripping
    • Send notifications via IFTTT, Pushbullet, Slack, Discord, and many more!
  • If audio (CD) - rip using abcde (get disc-data and album art from musicbrainz)
  • If data (Blu-ray, DVD, DVD-Audio or CD) - make an ISO backup
  • Headless, designed to be run from a server
  • Can rip from multiple-optical drives in parallel
  • Python Flask UI to interact with ripping jobs, view logs, update jobs, etc

Usage

  • Insert disc
  • Wait for disc to eject
  • Repeat

Requirements

  • A system capable of running Docker containers
  • One or more optical drives to rip Blu-rays, DVDs, and CDs
  • Lots of drive space (I suggest using a NAS) to store your movies

Install

For normal installation please see the wiki.

For docker installation please see here.

For WSL Integration please see here

Troubleshooting

Please see the wiki for troubleshooting.

Contributing

Pull requests are welcome. Please see the Contributing Guide

If you set ARM up in a different environment (hardware/OS/virtual/etc.), please consider submitting a howto to the wiki.

License

MIT License

Core symbols most depended-on inside this repo

debug
called by 393
arm/models/system_drives.py
pretty_table
called by 10
arm/models/job.py
get_d
called by 10
arm/models/job.py
parse_content
called by 9
arm/ripper/makemkv.py
notify
called by 9
arm/ripper/utils.py
find_matching_file
called by 9
arm/ripper/utils.py
database_updater
called by 9
arm/ripper/utils.py
updateContents
called by 9
arm/ui/static/js/jobRefresh.js

Shape

Function 492
Method 138
Class 56
Route 41

Languages

Python74%
TypeScript26%

Modules by API surface

arm/ui/static/js/jquery-3.5.1.min.js83 symbols
arm/ripper/makemkv.py71 symbols
arm/ui/static/js/popper.min.js51 symbols
arm/ui/utils.py36 symbols
arm/ripper/utils.py34 symbols
arm/ui/settings/settings.py27 symbols
test/unittest/test_ripper_ARMInfo.py22 symbols
arm/ui/json_api.py20 symbols
arm/ui/jobs/jobs.py20 symbols
arm/ui/settings/DriveUtils.py19 symbols
arm/models/job.py19 symbols
arm/ui/static/js/database.js15 symbols

Dependencies from manifests, versioned

argparse1.4.0 · 1×
colorama0.4.6 · 1×
flake87.3.0 · 1×
waitress2.1.2 · 1×

For agents

$ claude mcp add automatic-ripping-machine \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact