diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 707becf1d..b336038de 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,3 +1,8 @@ +# Title (remove section) +_Add either feature or bugfix to the title inline with the software version increment_ +New Feature - [FEATURE] +Patch or Bugfix - [BUGFIX] + # Description Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change. diff --git a/.github/workflows/version_bump.yml b/.github/workflows/version_bump.yml index 4f119c173..b858e9940 100644 --- a/.github/workflows/version_bump.yml +++ b/.github/workflows/version_bump.yml @@ -3,6 +3,8 @@ name: "Version Increment" on: # Run this action on any Pull Request raised against ARM pull_request: + # Ensure changes re-run the version script (i.e. title change) + types: [opened, edited, synchronize] # Don't run on changes to the below paths paths-ignore: - 'arm_wiki/**' @@ -46,53 +48,80 @@ jobs: - name: Determine new version if: env.VERSION_UPDATED == 'false' id: determine-version + env: + # Safely get title (avoid injection attacks) + PR_TITLE: ${{ github.event.pull_request.title }} run: | - PR_TITLE=$(jq -r '.pull_request.title' "$GITHUB_EVENT_PATH") + # Set Title environment flag to false + TITLE_FLAG="false" + echo "PR Title: $PR_TITLE" if [[ "$PR_TITLE" == *"[FEATURE]"* ]]; then VERSION_TYPE="minor" echo "VERSION_TYPE=$VERSION_TYPE" >> $GITHUB_ENV echo "PR set to FEATURE updating minor version" + TITLE_FLAG="true" elif [[ "$PR_TITLE" == *"[BUGFIX]"* ]]; then VERSION_TYPE="patch" echo "VERSION_TYPE=$VERSION_TYPE" >> $GITHUB_ENV echo "PR set to BUGFIX updating patch version" + TITLE_FLAG="true" else echo "No version bump flag found in PR title. Exiting." echo "Edit your PR title to include either FEATURE or BUGFIX" - exit 1 fi - CURRENT_VERSION=$(cat VERSION) - IFS='.' read -r -a VERSION_PARTS <<< "$CURRENT_VERSION" - if [ "$VERSION_TYPE" == "minor" ]; then - VERSION_PARTS[1]=$((VERSION_PARTS[1]+1)) - VERSION_PARTS[2]=0 - elif [ "$VERSION_TYPE" == "patch" ]; then - VERSION_PARTS[2]=$((VERSION_PARTS[2]+1)) + + # If Feature or Bugfix update the version + if [[ "$TITLE_FLAG" == "true" ]]; then + CURRENT_VERSION=$(cat VERSION) + IFS='.' read -r -a VERSION_PARTS <<< "$CURRENT_VERSION" + if [[ "$VERSION_TYPE" == "minor" ]]; then + VERSION_PARTS[1]=$((VERSION_PARTS[1]+1)) + VERSION_PARTS[2]=0 + elif [[ "$VERSION_TYPE" == "patch" ]]; then + VERSION_PARTS[2]=$((VERSION_PARTS[2]+1)) + fi + NEW_VERSION="${VERSION_PARTS[0]}.${VERSION_PARTS[1]}.${VERSION_PARTS[2]}" + echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_ENV + echo "CURRENT_VERSION=$CURRENT_VERSION" >> $GITHUB_ENV + echo "New Version: " $NEW_VERSION fi - NEW_VERSION="${VERSION_PARTS[0]}.${VERSION_PARTS[1]}.${VERSION_PARTS[2]}" - echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_ENV - echo "CURRENT_VERSION=$CURRENT_VERSION" >> $GITHUB_ENV - echo "New Version: " $NEW_VERSION + + # Set variables to global environment variables for later + echo "TITLE_FLAG=$TITLE_FLAG" >> $GITHUB_ENV + echo "PR_TITLE=$PR_TITLE" >> $GITHUB_ENV + echo "VERSION_TYPE=$VERSION_TYPE" >> $GITHUB_ENV + + - name: Configure Git user + run: | + git config --local user.email "github-actions[bot]@users.noreply.github.com" + git config --local user.name "github-actions[bot]" - name: Pull latest changes from remote - if: env.VERSION_UPDATED == 'false' + if: env.VERSION_UPDATED == 'false' && env.TITLE_FLAG == 'true' run: | git pull --rebase origin ${{ github.head_ref }} - - name: Update VERSION file - if: env.VERSION_UPDATED == 'false' + - name: Update VERSION file and Push Changes + if: env.VERSION_UPDATED == 'false' && env.TITLE_FLAG == 'true' run: | echo "$NEW_VERSION" > VERSION git add VERSION - git config --local user.email "github-actions[bot]@users.noreply.github.com" - git config --local user.name "github-actions[bot]" git commit -m "[Automated] Release: ${VERSION_TYPE} - Version from $CURRENT_VERSION to $NEW_VERSION" + + # Use the pull request's branch name to push changes + BRANCH="${{ github.head_ref }}" + echo "Pushing changes to branch: $BRANCH" + + # Push changes to the PR branch + git push origin HEAD:$BRANCH - - name: Push changes - if: env.VERSION_UPDATED == 'false' + - name: Debug Environment Variables run: | - git push origin ${{ github.head_ref }} + echo "PR_TITLE=${{ env.PR_TITLE }}" + echo "NEW_VERSION=${{ env.NEW_VERSION }}" + echo "CURRENT_VERSION=${{ env.CURRENT_VERSION }}" + echo "VERSION_TYPE=${{ env.VERSION_TYPE }}" - name: Comment on PR if: env.VERSION_UPDATED == 'false' @@ -100,19 +129,32 @@ jobs: with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | + // Retrieve variables from the environment + const titleFlag = process.env.TITLE_FLAG; const prNumber = context.issue.number; + const prTitle = process.env.PR_TITLE; const newVersion = process.env.NEW_VERSION; const currentVersion = process.env.CURRENT_VERSION; const versionType = process.env.VERSION_TYPE; + + // Prepare the message based on the title flag + let prBody; + if (titleFlag === "false") { + prBody = `Version Bot\n **PR title:** ${prTitle}\n **No valid version flag found**. PR title must include either [FEATURE] or [BUGFIX] to auto-increment the version.\n **Please update the PR title** and re-run the workflow.`; + } else { + prBody = `Version Bot:\n **PR title:** ${prTitle}\n Updated version: **${currentVersion}** to **${newVersion}**\n Release version: **${versionType}**`; + } + + // Generate PR comment github.rest.issues.createComment({ owner: context.repo.owner, repo: context.repo.repo, issue_number: prNumber, - body: `Release type: ${versionType}. The version has been incremented from ${currentVersion} to ${newVersion} based on the PR title flag.` + body: prBody }) - name: Set tag for non-default branch - if: steps.branch-name.outputs.is_default == 'false' && steps.branch-name.outputs.default_branch != '' + if: steps.branch-name.outputs.is_default == 'false' && steps.branch-name.outputs.default_branch != '' && env.TITLE_FLAG == 'true' run: | echo "Branch name is ${{ steps.branch-name.outputs.ref_branch }}" echo "Main name is ${{ steps.branch-name.outputs.default_branch }}" diff --git a/VERSION b/VERSION index 10c2c0c3d..f161b5d80 100755 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.10.0 +2.10.0 \ No newline at end of file diff --git a/arm-dependencies b/arm-dependencies index 68591478a..f949ac0c9 160000 --- a/arm-dependencies +++ b/arm-dependencies @@ -1 +1 @@ -Subproject commit 68591478ac84b0e493a3ba6f90369ae0105939a0 +Subproject commit f949ac0c9da5dbbf3ec584dc3bcbd31842e20127 diff --git a/arm/ripper/arm_ripper.py b/arm/ripper/arm_ripper.py index 0079d89bf..73a01ccd7 100755 --- a/arm/ripper/arm_ripper.py +++ b/arm/ripper/arm_ripper.py @@ -44,7 +44,9 @@ def rip_visual_media(have_dupes, job, logfile, protection): makemkv_out_path = None hb_in_path = str(job.devpath) # Do we need to use MakeMKV - Blu-rays, protected dvd's, and dvd with mainfeature off - if rip_with_mkv(job, protection): + use_make_mkv = rip_with_mkv(job, protection) + logging.debug(f"Using MakeMKV: [{use_make_mkv}]") + if use_make_mkv: logging.info("************* Ripping disc with MakeMKV *************") # Run MakeMKV and get path to output job.status = "ripping" @@ -68,12 +70,16 @@ def rip_visual_media(have_dupes, job, logfile, protection): hb_in_path = makemkv_out_path # Begin transcoding section - only transcode if skip_transcode is false start_transcode(job, logfile, hb_in_path, hb_out_path, protection) + # --------------- POST PROCESSING --------------- - if job.config.SKIP_TRANSCODE: - # Delete the transcode path and update the out path to RAW path + # If ripped with MakeMKV remove the 'out' folder and set the raw as the output + logging.debug(f"Transcode status: [{job.config.SKIP_TRANSCODE}] and MakeMKV Status: [{use_make_mkv}]") + if job.config.SKIP_TRANSCODE and use_make_mkv: utils.delete_raw_files([hb_out_path]) hb_out_path = hb_in_path + # Update final path if user has set a custom/manual title + logging.debug(f"Job title status: [{job.title_manual}]") if job.title_manual: # Remove the old final dir utils.delete_raw_files([final_directory]) @@ -81,6 +87,7 @@ def rip_visual_media(have_dupes, job, logfile, protection): final_directory = os.path.join(job.config.COMPLETED_PATH, type_sub_folder, job_title) # Update the job.path with the final directory utils.database_updater({'path': final_directory}, job) + # Move to final folder move_files_post(hb_out_path, job) # Movie the movie poster if we have one - no longer needed, now handled by save_movie_poster diff --git a/arm_wiki/Setting-up-ARM-manually-(Debian-OMV).md b/arm_wiki/Alternate-Install-Debian.md similarity index 92% rename from arm_wiki/Setting-up-ARM-manually-(Debian-OMV).md rename to arm_wiki/Alternate-Install-Debian.md index 70d1484a7..c9c8a94b7 100644 --- a/arm_wiki/Setting-up-ARM-manually-(Debian-OMV).md +++ b/arm_wiki/Alternate-Install-Debian.md @@ -1,4 +1,14 @@ -# IMPORTANT: This installation method is no longer supported. Please install ARM as a [Docker Container](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/docker) instead +# IMPORTANT + +*** +This installation method is not supported or maintained by the ARM Developers. +For full support and continued maintenance, +recommend installing ARM via the supported [Docker Container](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/docker). +This installation guide has been left within the Wiki, as some users do not install via docker. + +**Use at your own risk** + +*** ## Manual Installation Guide diff --git a/arm_wiki/Setting-up-ARM-script-(Debian-OMV).md b/arm_wiki/Alternate-Install-OMV.md similarity index 81% rename from arm_wiki/Setting-up-ARM-script-(Debian-OMV).md rename to arm_wiki/Alternate-Install-OMV.md index 81a97177e..e16e5737e 100644 --- a/arm_wiki/Setting-up-ARM-script-(Debian-OMV).md +++ b/arm_wiki/Alternate-Install-OMV.md @@ -1,4 +1,14 @@ -# IMPORTANT: This installation method is no longer supported. Please install ARM as a [Docker Container](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/docker) instead +# IMPORTANT + +*** +This installation method is not supported or maintained by the ARM Developers. +For full support and continued maintenance, +recommend installing ARM via the supported [Docker Container](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/docker). +This installation guide has been left within the Wiki, as some users do not install via docker. + +**Use at your own risk** + +*** # Auto Install Script For OpenMediaVault/Debian diff --git a/arm_wiki/Alternate-Install-TrueNAS.md b/arm_wiki/Alternate-Install-TrueNAS.md new file mode 100644 index 000000000..4339bb61e --- /dev/null +++ b/arm_wiki/Alternate-Install-TrueNAS.md @@ -0,0 +1,140 @@ +# TrueNAS Installation Guide + +> [!Important] +> +> This installation method is not supported, maintained or tested by the ARM Developers during upgrades. + +This is a step-by-step walkthrough adding ARM (Automatic Ripping Machine) to a +TrueNAS Scale system as a custom app. + +**Note**: The following guide was performed on TrueNAS Scale Cobie (24.04). +Prior versions of TrueNAS Scale have an issue with GPU Allocation, which Cobia fixes. + + +1. **Create App** + + Create a custom app via Apps → Discover Apps → Custom App + +> [!TIP] +> +> Refer to the TrueNAS Documentation for additional information: +> [Documentation Hub](https://www.truenas.com/docs/scale/24.04/scaletutorials/apps/usingcustomapp/) + + +2. **Set the App Name** + + Name the Application, e.g. `arm`, `autorip`, or any other arbitrary name. + + +3. **Set the Repository** + + Set the *Image Repository* to `automaticrippingmachine/automatic-ripping-machine` + and leave the _Image Tage_ on `latest`. + + +4. **Managing Permissions** + + The ARM container's internal user has User ID (`uid`) `1000` and Group ID (`gid`) `1000`. + In most TrueNAS Scale installations, no user or group with this ID exists, and directory/file permissions + are likely not these ids. Therefore, you will need to make sure the container user has read and write permissions + in the paths you will be setting in Step 6. + + You have 2 choices for this: + - **Preferred**: + In the **Container Environment Variables** section add the variables `ARM_UID` and `ARM_GID` and set both + to `568`. This is TrueNAS' default `apps` user/group, which will most likely already have access to your + directories and files. + - **Alternate**: + Adjust the directory and file permissions to allow read/write access for user and group ID `1000`, + either by `chown`ing the directories/files, or adding corresponding ACLs. + + +5. **Port Forwarding** + + Enable port forwarding to allow access to ARM outside the docker container. + ARM uses a default internal port of `8080`, configure the 'Node Port' to any unused port. + + | Container Port | Node Port | Protocol | + |----------------|---------------|------------------| + | `8080` | `` | `TCP Protocol` | + + Where `your-port` is the port the WebUI will be reachable at later. + Make sure it does not conflict with a port of your other Apps. + + + +6. **Storage** + + Under **Storage** you need to map the 5 directories listed below. + Note the *Host Paths* need to be created ahead of time to show up in the *Host Path* selector. + Where you put these is your choice, but specifically for the `media` and `music` volumes, + a path on your storage pools is highly recommended. For a reference what each of these directories are used for, + read our guide on [Understanding Docker Volumes for A.R.M.](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/docker#understanding-docker-volumes-for-arm). + + Next to *Host Path Volumes* click *Add* and configure the following directories: + + | Local Path | ARM Docker Directory | + |--------------------------------|----------------------| + | `` | `/home/arm` | + | `` | `/home/arm/music` | + | `` | `/home/arm/logs` | + | `` | `/home/arm/media` | + | `` | `/etc/arm/config` | + +> [!IMPORTANT] +> Please make sure to ***not*** check any of the *Read Only* boxes. + +7. **Media Drives** + + Assign the required CD, DVD or Blu-ray drives in the system to ARM. + + _needs verification, see PR comments_ + + In the **Workload Details** section under *Security Context*, enable the *Privileged Mode* checkbox. + +> [!WARNING] +> As of the current TrueNAS Scale Cobia release, there seems to be no way to pass only a single drive to a Docker container. +> This may change in Electric Eel with the replacement of the Kubernetes Engine in favor of Docker Compose. +> +> That being said, running containers in +> [Privileged Mode comes with inherent security risks](https://docs.docker.com/security/faqs/containers/). +> If you are not comfortable with this, you may want to hold off for now and check back later after Electric Eel is released. + + +8. **GPU Configuration** (Optional) + + If you don’t have a compatible GPU or wish to keep your video files raw, + you can skip this step as this is only required for transcoding. + Continue down to the **Resource Reservation** section and into the *GPU Configuration* + If you do, continue down to the **Resource Reservation** section. Under *GPU Configuration* allocate at least a + single one of the compatible GPUs to enable the NVENC. + It will show you multiple GPUs that you can allocate, choose at least one. + +> [!IMPORTANT] +> +> For NVIDIA GPUs, not only do you need to allocate your GPU, but you must also add a pair of variables in the **Container Environment Variables** section: +> - Name: `NVIDIA_VISIBLE_DEVICES` Value: `all` +> - Name: `NVIDIA_DRIVER_CAPABILITIES` Value: `all` + + +9. **Enable Web Portal** (Optional) + + Not a necessary step, but this will create a button on the ARM app in TrueNAS Scale + to allow quick access to the ARM Web GUI. + _Note:_ Port forwarding is required to enable the Web Portal + + + + +10. **Install** + + Click the *Install* button at the bottom and wait for it to complete. + + +If everything was done properly, ARM should now work. +Head into the WebGUI either using the web portal button on the ARM app if you made one +or using the `ip:port` in the browser to check if ARM is working. + +### Contributors: +* provscan (via discord) +* [mihawk90](https://github.com/mihawk90) diff --git a/arm_wiki/Setting-up-ARM-manually-(Ubuntu).md b/arm_wiki/Alternate-Install-Ubuntu.md similarity index 92% rename from arm_wiki/Setting-up-ARM-manually-(Ubuntu).md rename to arm_wiki/Alternate-Install-Ubuntu.md index ee4db8e36..2b6364f7d 100644 --- a/arm_wiki/Setting-up-ARM-manually-(Ubuntu).md +++ b/arm_wiki/Alternate-Install-Ubuntu.md @@ -1,4 +1,14 @@ -# IMPORTANT: This installation method is no longer supported. Please install ARM as a [Docker Container](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/docker) instead +# IMPORTANT + +*** +This installation method is not supported or maintained by the ARM Developers. +For full support and continued maintenance, +recommend installing ARM via the supported [Docker Container](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/docker). +This installation guide has been left within the Wiki, as some users do not install via docker. + +**Use at your own risk** + +*** ## Manual Install Guide diff --git a/arm_wiki/Configuring-ARM.md b/arm_wiki/Configuring-ARM.md index b08a3ad7a..47babb497 100644 --- a/arm_wiki/Configuring-ARM.md +++ b/arm_wiki/Configuring-ARM.md @@ -11,7 +11,7 @@ - For ARM to identify movie/tv titles register for an API key at OMDb API: http://www.omdbapi.com/apikey.aspx and set the OMDB_API_KEY parameter in the config file. -**Email notifcations** +**Email Notifications** A lot of random problems are found in the sysmail, email alerting is a most effective method for debugging and monitoring. diff --git a/arm_wiki/Known-Issues.md b/arm_wiki/Known-Issues.md deleted file mode 100644 index 3eaee17e3..000000000 --- a/arm_wiki/Known-Issues.md +++ /dev/null @@ -1,4 +0,0 @@ -The following is a list of known issues relating to ARM: - -* If the host running the container mid-job, any data that wasn't at rest is lost. Additionally, the job logic will be lest in a broken state and must be deleted. -* Movies with a `/` in the name can break the rip \ No newline at end of file diff --git a/arm_wiki/MakeMKV-Info.md b/arm_wiki/MakeMKV-Info.md index c1ff04fc7..0147e6082 100644 --- a/arm_wiki/MakeMKV-Info.md +++ b/arm_wiki/MakeMKV-Info.md @@ -16,7 +16,21 @@ choose "Arm Settings" from the navigation bar, go to the "Ripper Settings" tab a If you leave the feild empty, A.R.M. will use a Beta key instead. ## MakeMKV Settings -MakeMKV uses the concept of profiles to decide which audio tracks and which subtitle tracks to include in the + +### `settings.conf` +`makemkvcon` respects the `~/.MakeMKV/settings.conf` created by the MakeMKV GUI, which makes it possible to configure certain aspects of MakeMKV through the GUI on your Desktop. + +> [!WARNING] +> It is however ***not*** recommended to simply copy an existing `settings.conf` into A.R.M.'s `~/.MakeMKV` directory as the file contains some machine-specific settings that may or may not interfere with ripping via A.R.M. + +Two specific settings that may be particularly useful to create or copy are the `app_DefaultSelectionString` and `app_DefaultOutputFileName` keys, which store the GUI's ["Default selection rule"](https://forum.makemkv.com/forum/viewtopic.php?t=4386) and ["Output file name template"](https://forum.makemkv.com/forum/viewtopic.php?t=18313) under Preferences > Advanced respectively. Check the linked MakeMKV forum threads for their syntax. + +> [!NOTE] +> * While the `dvd_MinimumTitleLength` (corresponding to the GUIs Preferences > Video > "Minimum title length (seconds)" setting) is harmless to create, it has no effect as it is overriden by A.R.M.'s `MINLENGTH` setting. +> * The `app_Key` should be left untouched. If you have a permanent key see [MakeMKV Licence](#makemkv-licence) above. + +### Profiles +MakeMKV can also use the concept of profiles to decide which audio tracks and which subtitle tracks to include in the *.mkv files. The defaults are usually sufficient. However, A.R.M. allows you to change these defaults if needed. This is considered advance usage of MakeMKV and A.R.M. The list below contains some information as to where to start, these are links to MakeMKV forum pages. @@ -28,4 +42,4 @@ You can use the information above to learn how to create an MakeMKV conversion p your A.R.M. installation URL, choose "Arm Settings" from the navigation bar, go to the "Ripper Settings" tab and scroll down to the MKV_ARGS field. In this field enter `--profile=/` Note that the file location must be accessible by the arm user and must be owned by the arm user (or at the very least readable). -It is recommended to place it in the `/home/arm/` directory. \ No newline at end of file +It is recommended to place it in the `/home/arm/` directory. diff --git a/arm_wiki/Status-Known-Issues.md b/arm_wiki/Status-Known-Issues.md new file mode 100644 index 000000000..770e13efb --- /dev/null +++ b/arm_wiki/Status-Known-Issues.md @@ -0,0 +1,7 @@ +# Known Issues + +The following is a list of known issues relating to ARM: + +* If the host running the container mid-job, any data that wasn't at rest is lost. Additionally, the job logic will be lest in a broken state and must be deleted. +* Movies with a `/` in the name can break the rip +* SQLite has a read / write limit, depending on ARM use the database can enter a state where ripping fails due to an inability to read or write data to the database. (resolved in 3.x) \ No newline at end of file diff --git a/arm_wiki/Status-Roadmap.md b/arm_wiki/Status-Roadmap.md new file mode 100644 index 000000000..5b630e7ba --- /dev/null +++ b/arm_wiki/Status-Roadmap.md @@ -0,0 +1,97 @@ +# Automatic Ripping Machine (ARM) Development Roadmap + +## Overview +The ARM development roadmap outlines the key features, enhancements, and milestones planned for the project. +The aim of this page is to provide some information around where the developers are focusing effort and time to upgrade ARM. + +--- + +## v2.x Goals and Objectives +ARM version 2.x is the current released codebase. +The goals and objectives for any v2.x software is: + +1. Maintain the software, resolving any bugs +2. Resolve any security issues as they arise +3. Implement small features as requested by the community + +--- + +## v3.x Goals and Objectives +The primary goals and objectives of the ARM development roadmap are: + +1. Improve system performance and stability + 1. Rewrite of ARM Ripper Code + 2. Rewrite of ARM UI code +2. Move from docker to docker-compose +3. Move the database from SQLite to MySQL +4. Implementation of Sessions + +--- + +### Improve system performance and stability +- **1:** Rewrite and separation of ARM UI code from the Ripper code base +- **2:** Following 1, rewrite of the Ripper code base +- **3:** Implementation of pytest (unit testing) against all rewritten code + +### Move from docker to docker-compose +- **1:** Update docker build and run files to docker-compose +- **2:** Split the ARM Ripper and ARM UI into seperate containers +- **3:** Implement MySQL docker container as a new standalone image +- **4:** Implement container networking between containers + +### Move the database from SQLite to MySQL +- **1:** Migrate the current database from SQLite to MySQL +- **2:** Support user migration of existing databases to the new container + +### Implementation of Sessions +Implementation of sessions to be conducted once both the rewrite and docker-compose completed + +Details from Community Discussion - [ARM Sessions for Drives](https://github.com/automatic-ripping-machine/automatic-ripping-machine/discussions/815) + +ARM Default data types - not user editable, based on the current ARM architecture +User Sessions - User editable configuration for sessions, an example set below. User can create, read, update and delete any session + +Before starting down the path of implementing this, rather large change, I would like feedback from the ARM users on what they would like in such an update. If you could respond, with any pro's/con's/I can help statements, I will compile them below + +**Behaviour** +Edited to add behaviour. These items will be added into the [Project Sessions](https://github.com/orgs/automatic-ripping-machine/projects/6) as tasks for the developers (or anyone) to implement. +The idea with implementing each of these will be a gradual progress towards the ARM sessions. +- ARM default data types will not change, these will be defined within the ARM code base as specific methods of ripping media **[new]** +- ARM User Sessions will be defined within the ARM code base but within the initial database load and configurable by the user to change specific fields as required **[new]** +- Ripping a movie - will rip a movie as the current ARM does **[update]** +- Ripping a TV Show will rip similar to a movie; however, using the session a User will specify the TV series to be ripped and which season is being ripped. Noting that a lot of TV series have strange disk names. Using data from movie database, ARM will use the TV series length to find the number of episodes on the disk and commence ripping. The user will be able to specify which episode the session is starting at, and then the format of the episode naming **[new]** +- Add in TV Series episode name convention. For example SERIES E1E02, Series_s01_e02, or others as defined by the user **[new]** +- Ripping music will be similar to current, but allow for multiple abcde configurations that can rip with different settings, i.e. MP3, FLAC **[new]** +- Ripping media like a home movie, or some other content that needs transcoding but with no media lookup **[new]** +- Ripping/copying data with no media look up or transcoding **[update]** +- Ripping/copying data as an ISO with no media lookup **[update]** + +Overview of what some of the settings and sessions could look like. +**ARM Default Data Types** +- DVD: ARM will rip new media as a movie +- Bluray: ARM will rip new media as a blueray movie +- Music: ARM will rip new media as a music +- Data: ARM will rip new media as a data disk (copy contents) +- ISO: ARM will rip new media as an ISO image of the disk + +**User Sessions** +- Movie - DVD: ARM session to rip DVD movies - Type: DVD +- Movie - Blueray: ARM sessionto rip Bluray movies - Type: Bluray +- TV - DVD: ARM session to rip DVD TV Series - Type: DVD +- TV - Blueray: ARM session to rip Bluray TV Series - Type: Bluray +- Music - MP3 : ARM session to rip music as mp3 - Type: Music +- Music - flac: ARM session to rip music as flac - Type: Music +- Data: ARM session to rip data disk - Type: Data +- HomeMovie - DVD: ARM session to rip dvd contents but with no title lookup - Type: DVD +- HomeMovie - Bluray: ARM session to rip dvd contents but with no title lookup - Type: Bluray +- ISO: ARM session to create ISO - Type: iso + +**Example UI changes** +Sessions listed against the ARM system drives - from [microtechno9000 fork](https://github.com/microtechno9000/automatic-ripping-machine/tree/sessions) +![arm_sessions_drives](https://user-images.githubusercontent.com/62650032/230104782-76f405fa-907e-4848-ab3b-9889609200ce.png) + +User editable session / configuration +![arm_sessions_edit](https://user-images.githubusercontent.com/62650032/230104790-a2441e99-df04-4601-8a21-60989e22a55d.png) + +Help file, explaining how to use sessions and what they do +![arm_sessions_help](https://user-images.githubusercontent.com/62650032/230104798-0266fa2a-d305-40f7-95bb-5abc6d5d9eb1.png) \ No newline at end of file diff --git a/arm_wiki/_Sidebar.md b/arm_wiki/_Sidebar.md index 1f7d8f5b7..cbd337859 100644 --- a/arm_wiki/_Sidebar.md +++ b/arm_wiki/_Sidebar.md @@ -2,18 +2,20 @@ **Getting Started** - [Getting Started](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/Getting-Started) + - **Docker** - [Pull prebuilt image](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/docker) - [Build from Dockerfile](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/Building-ARM-docker-image-from-source) + - **Manual Install** - - [Ubuntu](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/Setting-up-ARM-manually-(Ubuntu)) - - [Debian](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/Setting-up-ARM-manually-(Debian-OMV)) - - [Open Media Vault](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/Setting-up-ARM-manually-(Debian-OMV)) + - See Alternate Installations + - **Automatic script install** - [Open Media Vault/ Debian (Install script)](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/Setting-up-ARM-script-(Debian-OMV)) - [Ubuntu 20.04 (install script)](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/Ubuntu-20.04-Automatic-Installation) - [Upgrading from old versions](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/upgrading) + **Web Page Overview** - _Coming Soon_ - **Jobs** @@ -25,34 +27,50 @@ **Configuration** - [Configuration](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/Configuring-ARM) + - **Configuration Files** - [arm.yaml](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/config-arm.yaml) - [apprise.yaml](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/config-apprise.yaml) - [.abcde.conf](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/config-abcde.conf) - [Skins for ARM ui](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/config-ui-skins) - [MakeMKV](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/MakeMKV-Info) + + - **Alternate Installations** + - [Ubuntu](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/Alternate-Install-Ubuntu) + - [Debian](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/Alternate-Install-Debian) + - [Open Media Vault](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/Alternate-Install-OMV) + - [TrueNAS](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/Alternate-Install-TrueNAS) + **Hardware Configuration** - [Adding Intel QSV Support](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/intel-qsv) - [Adding AMD VCE Support](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/amd-vce) - [NVIDIA NVENC support](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/nvidia) + **Troubleshooting** - [FAQ](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/FAQ) - [General Troubleshooting](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/General-Troubleshooting) - [Docker Troubleshooting](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/Docker-Troubleshooting) - [Open An Issue](https://github.com/automatic-ripping-machine/automatic-ripping-machine/issues/new/choose) + +**ARM Status** + - [Known Issues](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/Status-Known-Issues) + - [Development Path](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/Status-Roadmap) + + **Contributing to ARM** - [ARM Code](http://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/Contribute) - [ARM Wiki](http://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/Contribute-Wiki) - [Docker Dev guide](http://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/Contribute-Docker) - [ARM Development Tools (devtools)](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/Contribute-DevTools) + **How ARM Works** - [ARM workflow diagram](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/workflow-diagram) - **More Info** - [Related Projects and HowTos](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/related-howtos) - [Hardware/OS HowTo's](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/VMware) - [The ARM Change log](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/Change-Log) - - [The ARM License](https://github.com/automatic-ripping-machine/automatic-ripping-machine/blob/v2_devel/LICENSE) \ No newline at end of file + - [The ARM License](https://github.com/automatic-ripping-machine/automatic-ripping-machine/blob/v2_devel/LICENSE) diff --git a/arm_wiki/images/setup_truenas_portforwarding.png b/arm_wiki/images/setup_truenas_portforwarding.png new file mode 100644 index 000000000..dccdf3db3 Binary files /dev/null and b/arm_wiki/images/setup_truenas_portforwarding.png differ diff --git a/arm_wiki/images/setup_truenas_webui.png b/arm_wiki/images/setup_truenas_webui.png new file mode 100644 index 000000000..8cda53195 Binary files /dev/null and b/arm_wiki/images/setup_truenas_webui.png differ diff --git a/requirements.txt b/requirements.txt old mode 100755 new mode 100644 index c7945b96d..97f3dfe96 --- a/requirements.txt +++ b/requirements.txt @@ -2,7 +2,7 @@ #requirements added for PR#551 argparse==1.4.0 -colorama==0.4.4 +colorama==0.4.6 #requirements added for PR#650 -flake8==6.0.0 +flake8==7.1.1 waitress==2.1.2 \ No newline at end of file