Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Automover for unRAID

Featured Replies

On 10/20/2025 at 12:37 AM, jcofer555 said:

the removal of unraid mover has been removed from this plugin due to the complexities of how it needs to be implemented

What's the procedure for the plugin then? Do I have to completely disable the Unraid Mover in the settings, and then the plugin will monitor and move the files based on the settings (cache->array) and the filters?

  • Replies 156
  • Views 8.2k
  • Created
  • Last Reply

Top Posters In This Topic

Most Popular Posts

  • unraid doesn't make this easy to do because to do so you have to hijack the native mover entirely and the other complication is for when users have the mover tuning plugin which already hijacks the na

  • that's how the new version i put out the other day does it actually :) so if you are on the newest version then that's how it'll work for ya

  • Thank you. Logs cleared, will check it in the AM. Much better :) Automover session finished - 2025-11-12 06:00:01 Duration: 0s Usage below threshold — nothing to do cache usage: 1% Threshold:75% Stop

Posted Images

  • Author
6 minutes ago, cnvscgn said:

What's the procedure for the plugin then? Do I have to completely disable the Unraid Mover in the settings, and then the plugin will monitor and move the files based on the settings (cache->array) and the filters?

unraid doesn't have a "disable" option for the mover yet, hopefully they are going to include the option at some point. best you do can is set it for monthly and then the rest of the month the plugin will do the job. once unraid offers a disabled option then you can just use that and yea this plugin would monitor and move the files based on your share settings and the filters used

The latest version 2025.10.80 has a bit of broken CSS. When the QBit checkbox is enabled, it causes the checkboxes to overlap the bottom of the container.

image.png

  • Author
4 hours ago, foamy said:

The latest version 2025.10.80 has a bit of broken CSS. When the QBit checkbox is enabled, it causes the checkboxes to overlap the bottom of the container.

image.png

What os version are you on?

1 minute ago, jcofer555 said:

What os version are you on?

7.1.4

  • Author
15 minutes ago, foamy said:

7.1.4

What browser? I just tested with os 7.1.4 with both Firefox and edge on windows and they were fine

23 minutes ago, jcofer555 said:

What browser? I just tested with os 7.1.4 with both Firefox and edge on windows and they were fine

I'm using Waterfox 6.6.4 on macOS Tahoe. I get the same behavior in Safari. Note, I'm not on an enormous screen, if that matters, I'm using a 13" Macbook Air. The browser width is ~1265px. I only know this because it trips a separate bug where there is a horizontal scroll bar due to a bad CSS default for the whole web UI. I'm hoping Unraid 7.2 fixes that.

I believe the issue is that the rectangle the content intends to live in is set to a fixed height, so it doesn't flex when child content wants it to be taller. It probably shouldn't be based on viewport height if the intent is to use it as a wrapper for variable height content that can be taller than the viewport. In DevTools, if I disable the height and max-height CSS in the class below, it renders properly both with and without the Qbit checkbox enabled

image.png

#automover-settings {
  flex: 1;
  height: 105vh; /* can probably remove this */
  max-width: 450px; /* this may not be a good idea for variable width screens */
  max-height: 105vh; /* can probably remove this */
}
  • Author
18 minutes ago, foamy said:

I'm using Waterfox 6.6.4 on macOS Tahoe. I get the same behavior in Safari. Note, I'm not on an enormous screen, if that matters, I'm using a 13" Macbook Air. The browser width is ~1265px. I only know this because it trips a separate bug where there is a horizontal scroll bar due to a bad CSS default for the whole web UI. I'm hoping Unraid 7.2 fixes that.

I believe the issue is that the rectangle the content intends to live in is set to a fixed height, so it doesn't flex when child content wants it to be taller. It probably shouldn't be based on viewport height if the intent is to use it as a wrapper for variable height content that can be taller than the viewport. In DevTools, if I disable the height and max-height CSS in the class below, it renders properly both with and without the Qbit checkbox enabled

image.png

#automover-settings {
  flex: 1;
  height: 105vh; /* can probably remove this */max-width: 450px; /* this may not be a good idea for variable width screens */max-height: 105vh; /* can probably remove this */
}

good catch, that section was meant to be deleted, it's a duplicate to what is at the top. on the next update it'll be removed

6 minutes ago, jcofer555 said:

good catch, that section was meant to be deleted, it's a duplicate to what is at the top. on the next update it'll be removed

Another CSS tweak would be making these consistent, since both are logging containers. Right nmow, they use different margins for the text containers I'd even go further to suggest stacking them, with the run history on top and made less tall, to allow for the file migration log/history to be wider. That current layout is hard to use since it wraps so much of the content. I only see like 5-8 file migration log lines due to the current wrapping.

image.png

  • Author
2 minutes ago, foamy said:

Another CSS tweak would be making these consistent, since both are logging containers. Right nmow, they use different margins for the text containers I'd even go further to suggest stacking them, with the run history on top and made less tall, to allow for the file migration log/history to be wider. That current layout is hard to use since it wraps so much of the content. I only see like 5-8 file migration log lines due to the current wrapping.

image.png

yea not sure how much better css will get to be honest, i'm not very good with it and dealing with multiple size screens is not an easy thing. likely the smaller the screen the more issues people will notice sadly. i'll do what i can but have 0 devices to test with so it's not super likely i'll be able to fix all of them. stacking them would just pose a similar issue as they grow in height one would get pushed out on smaller screens when one gets long that or i'd have to set max heights which has it's own nuances

  • Author
12 hours ago, foamy said:

Another CSS tweak would be making these consistent, since both are logging containers. Right nmow, they use different margins for the text containers I'd even go further to suggest stacking them, with the run history on top and made less tall, to allow for the file migration log/history to be wider. That current layout is hard to use since it wraps so much of the content. I only see like 5-8 file migration log lines due to the current wrapping.

image.png

2025.10.81.4 update hopefully helps with the smaller screens

4 hours ago, jcofer555 said:

2025.10.81.4 update hopefully helps with the smaller screens

Vertical is good, but now the first column spills over horizontally. Yeah, I know, CSS sucks. I hate it as much as you do. :)

image.png

Edited by foamy

  • Author
3 minutes ago, foamy said:

Vertical is good, but now the first column spills over horizontally. Yeah, I know, CSS sucks. I hate it as much as you do. :)

image.png

yes i suspected some of them would still be off, glad to hear the vertical is good. will work on the others over time but can't guarantee anything

  • Author
18 hours ago, foamy said:

Vertical is good, but now the first column spills over horizontally. Yeah, I know, CSS sucks. I hate it as much as you do. :)

image.png

i released a new update with some more css changes, hopefully it helps

41 minutes ago, jcofer555 said:

i released a new update with some more css changes, hopefully it helps

Chef's kiss, looking good now.

Also, awesome work incorporating jdupes. I haven't tried it yet, but looking forward to replacing the custom Docker container I built just to run that.

Mind sharing the arguments you pass for that command?

  • Author
4 minutes ago, foamy said:

Chef's kiss, looking good now.

Also, awesome work incorporating jdupes. I haven't tried it yet, but looking forward to replacing the custom Docker container I built just to run that.

Mind sharing the arguments you pass for that command?

nice, glad to hear it's better

if [[ "$ENABLE_JDUPES" == "yes" ]]; then
if command -v jdupes >/dev/null 2>&1; then
  TEMP_LIST="/tmp/automover_jdupes_list.txt"
  HASH_DIR="$HASH_PATH"
  HASH_DB="${HASH_DIR}/jdupes_hash_database.db"

  # Ensure HASH_DIR
  if [[ ! -d "$HASH_DIR" ]]; then
    mkdir -p "$HASH_DIR"
    chmod 777 "$HASH_DIR"
  else
    echo "Using existing jdupes database: $HASH_DB" >> "$LAST_RUN_FILE"
  fi

if [[ ! -f "$HASH_DB" ]]; then
  touch "$HASH_DB"
  chmod 666 "$HASH_DB"
  echo "Creating jdupes hash database at $HASH_DIR" >> "$LAST_RUN_FILE"
fi

  # Extract destination file paths from Automover log
  grep -E -- ' -> ' "$AUTOMOVER_LOG" | awk -F'->' '{gsub(/^[ \t]+|[ \t]+$/, "", $2); print $2}' > "$TEMP_LIST"

  if [[ ! -s "$TEMP_LIST" ]]; then
    echo "No moved files found, skipping jdupes step" >> "$LAST_RUN_FILE"
    return
  fi

  # Determine affected shares from destination paths (e.g., /mnt/user0/movies)
  mapfile -t SHARES < <(awk -F'/' '$2=="mnt" && $3=="user0" && $4!="" {print $4}' "$TEMP_LIST" | sort -u)

  # Excluded shares
  EXCLUDES=("appdata" "system" "domains" "isos")

  for share in "${SHARES[@]}"; do
    # Skip excluded shares
    skip=false
    for ex in "${EXCLUDES[@]}"; do
      [[ "$share" == "$ex" ]] && skip=true && break
    done
    [[ "$skip" == true ]] && {
      echo "Skipping excluded share: $share" >> "$LAST_RUN_FILE"
      continue
    }

    SHARE_PATH="/mnt/user/${share}"

    [[ -d "$SHARE_PATH" ]] || {
      echo "Skipping missing path: $SHARE_PATH" >> "$LAST_RUN_FILE"
      continue
    }

    echo "Jdupes processing share $share" >> "$LAST_RUN_FILE"

    # Run jdupes on this share’s destination folder
/usr/bin/jdupes -rLX onlyext:mp4,mkv,avi -y "$HASH_DB" "$SHARE_PATH" 2>&1 \
  | grep -v -E \
      -e "^Creating a new hash database " \
      -e "^[[:space:]]*AT YOUR OWN RISK\. Report hashdb issues to jody@jodybruchon\.com" \
      -e "^[[:space:]]*yet and basic .*" \
      -e "^[[:space:]]*but there are LOTS OF QUIRKS.*" \
      -e "^WARNING: THE HASH DATABASE FEATURE IS UNDER HEAVY DEVELOPMENT!.*" \
  >> "$LAST_RUN_FILE"

    echo "Completed jdupes step for $share" >> "$LAST_RUN_FILE"
  done

else
  echo "Jdupes not installed, skipping jdupes step" >> "$LAST_RUN_FILE"
fi
fi
2 hours ago, jcofer555 said:

nice, glad to hear it's better

if [[ "$ENABLE_JDUPES" == "yes" ]]; thenif command -v jdupes >/dev/null 2>&1; then
  TEMP_LIST="/tmp/automover_jdupes_list.txt"
  HASH_DIR="$HASH_PATH"
  HASH_DB="${HASH_DIR}/jdupes_hash_database.db"

  # Ensure HASH_DIRif [[ ! -d "$HASH_DIR" ]]; then
    mkdir -p "$HASH_DIR"
    chmod 777 "$HASH_DIR"else
    echo "Using existing jdupes database: $HASH_DB" >> "$LAST_RUN_FILE"fi

if [[ ! -f "$HASH_DB" ]]; thentouch "$HASH_DB"chmod 666 "$HASH_DB"echo "Creating jdupes hash database at $HASH_DIR" >> "$LAST_RUN_FILE"fi

  # Extract destination file paths from Automover log
  grep -E -- ' -> ' "$AUTOMOVER_LOG" | awk -F'->' '{gsub(/^[ \t]+|[ \t]+$/, "", $2); print $2}' > "$TEMP_LIST"

  if [[ ! -s "$TEMP_LIST" ]]; then
    echo "No moved files found, skipping jdupes step" >> "$LAST_RUN_FILE"
    returnfi

  # Determine affected shares from destination paths (e.g., /mnt/user0/movies)mapfile -t SHARES < <(awk -F'/' '$2=="mnt" && $3=="user0" && $4!="" {print $4}' "$TEMP_LIST" | sort -u)

  # Excluded shares
  EXCLUDES=("appdata" "system" "domains" "isos")

  for share in "${SHARES[@]}"; do
    # Skip excluded shares
    skip=false
    for ex in "${EXCLUDES[@]}"; do
      [[ "$share" == "$ex" ]] && skip=true && break
    done
    [[ "$skip" == true ]] && {
      echo "Skipping excluded share: $share" >> "$LAST_RUN_FILE"
      continue
    }

    SHARE_PATH="/mnt/user/${share}"

    [[ -d "$SHARE_PATH" ]] || {
      echo "Skipping missing path: $SHARE_PATH" >> "$LAST_RUN_FILE"
      continue
    }

    echo "Jdupes processing share $share" >> "$LAST_RUN_FILE"

    # Run jdupes on this share’s destination folder
/usr/bin/jdupes -rLX onlyext:mp4,mkv,avi -y "$HASH_DB" "$SHARE_PATH" 2>&1 \
  | grep -v -E \
      -e "^Creating a new hash database " \
      -e "^[[:space:]]*AT YOUR OWN RISK\. Report hashdb issues to jody@jodybruchon\.com" \
      -e "^[[:space:]]*yet and basic .*" \
      -e "^[[:space:]]*but there are LOTS OF QUIRKS.*" \
      -e "^WARNING: THE HASH DATABASE FEATURE IS UNDER HEAVY DEVELOPMENT!.*" \
  >> "$LAST_RUN_FILE"

    echo "Completed jdupes step for $share" >> "$LAST_RUN_FILE"done

elseecho "Jdupes not installed, skipping jdupes step" >> "$LAST_RUN_FILE"fifi

Was there a driver behind hardcoding it for the video file extensions? I know it's a common use case, but it does limit it.

  • Author
8 hours ago, foamy said:

Was there a driver behind hardcoding it for the video file extensions? I know it's a common use case, but it does limit it.

avoidance of linking config files and breaking one or both and performance so it doesn't have to scan the metadata of every file and instead only those extensions with those being the most common. i used the example from trash guides for the command

Anyone else seeing where if you have an empty directory (including shares), it's deleting the folder/share? I have even tried adding it as an exclusion via /somepath and /somepath/ and the share is still deleted. I realize most use cases may never have an empty source directory but I will in mine.

  • Author
1 hour ago, NetmaninTN said:

Anyone else seeing where if you have an empty directory (including shares), it's deleting the folder/share? I have even tried adding it as an exclusion via /somepath and /somepath/ and the share is still deleted. I realize most use cases may never have an empty source directory but I will in mine.

exclusions are just to exclude from moving, i have it set currently to delete empty folders/datasets after moving but i could make it a checkbox option if you'd like

21 minutes ago, jcofer555 said:

exclusions are just to exclude from moving, i have it set currently to delete empty folders/datasets after moving but i could make it a checkbox option if you'd like

That would be perfect!

  • Author
2 hours ago, NetmaninTN said:

That would be perfect!

sounds good, i'll have an update out soonish

  • Author
6 hours ago, NetmaninTN said:

That would be perfect!

2025.10.82 is released with a fix for this

I'm not sure if this is a bug, or just expected behavior.

Reconstruct write should ideally only be enabled if there is content to move. I was scratching my head as to why my drives were spinning up unexpectedly, only to find the correlation in turbo write enabling being tied to the cron schedule of the plugin. I have a 3TB cache, and don't fill it quickly, so the unexpected spin-ups are just wasted electricity for me.

Automover session finished - 2025-11-08 08:00:01
Duration: 0s
Usage below threshold — nothing to do
cache usage: 15% Threshold:50% Stop Threshold:0%
Enabled reconstructive write mode (turbo write)
Automover session started - 2025-11-08 08:00:01

EDIT: Adding some clarity. My observation is this:

  1. The plugin enables turbo write before checking if it's actually going to move anything. This should move to after the check

  2. It doesn't revert the turbo write setting back to whatever it previously was.

In my case, My array is broken out into 3 user shares across 7 drives. I expect 3 of those 7 to be spun down nearly all the time. 1 of the 7 is specific to time machine backups, so it's spun up when backups are occurring/most of the time, and this is how I spotted that turbo writes were still going even when the automover plugin wasn't doing anything.

Edited by foamy

  • Author
6 hours ago, foamy said:

I'm not sure if this is a bug, or just expected behavior.

Reconstruct write should ideally only be enabled if there is content to move. I was scratching my head as to why my drives were spinning up unexpectedly, only to find the correlation in turbo write enabling being tied to the cron schedule of the plugin. I have a 3TB cache, and don't fill it quickly, so the unexpected spin-ups are just wasted electricity for me.

Automover session finished - 2025-11-08 08:00:01
Duration: 0s
Usage below threshold — nothing to do
cache usage: 15% Threshold:50% Stop Threshold:0%
Enabled reconstructive write mode (turbo write)
Automover session started - 2025-11-08 08:00:01

EDIT: Adding some clarity. My observation is this:

  1. The plugin enables turbo write before checking if it's actually going to move anything. This should move to after the check

  2. It doesn't revert the turbo write setting back to whatever it previously was.

In my case, My array is broken out into 3 user shares across 7 drives. I expect 3 of those 7 to be spun down nearly all the time. 1 of the 7 is specific to time machine backups, so it's spun up when backups are occurring/most of the time, and this is how I spotted that turbo writes were still going even when the automover plugin wasn't doing anything.

yea it's on my to-do list along with better reporting of the setting in the logs

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.