115 Cloud Sync - MiCat-S/Mi302 GitHub Wiki

繁體中文 | 简体中文 | English

This page covers logging in to 115 Cloud (115 網盤), turning 115 folders into local .strm files, how incremental sync, full sync, deletion and the circuit breaker work, how to browse folders on 115 and hand a wrong one to MoviePilot, how to transfer other people's 115 shares, how to rapid-upload from Aliyun Drive, and how to empty the 115 recycle bin. The web admin page is only in Traditional Chinese, so button and field names below are given in English with the original label in parentheses.

The 115 Cloud tab has seven buttons at the top: Account (帳號), Sync (同步), Offline download (離線下載), Transfer shares (轉存分享), Aliyun rapid upload (阿里雲盤秒傳), Organise 115 (整理 115 網盤) and Recycle bin (回收站). Each one shows only its group of cards, and the tab reopens on the one you looked at last. Sync holds the Sync tasks (同步任務), Sync (同步) and Sync options (同步選項) cards. Browse 115 (瀏覽 115) is a separate page in the sidebar.

Logging in to 115

Mi302 logs in to 115 by itself. You do not need MoviePilot or any other 115 tool. The login is stored in the database (data/library.db), not in the config file.

QR-code login

  1. Open the 115 Cloud tab (115 網盤) of the web admin page.
  2. On the Account card (帳號), click Scan QR code (掃碼登入).
  3. Scan the QR code with the 115 mobile app and confirm on the phone.

The status next to the code changes from "waiting for scan" (等待掃描…) to "scanned, confirm on the phone" (已掃描,請在手機上確認), and a "115 login succeeded" (115 登入成功) message appears. If the code expires, click the button again. Once logged in, the button reads Scan again (重新掃碼登入).

A QR-code login takes one of 115's device slots. 115 allows one login per device type, so another login of the same type is kicked out. The default type is Alipay mini program. If you use that type yourself, expand Advanced: device type used by QR login, 115 open platform (進階:掃碼佔用的裝置類型、115 開放平台) on the Account card, change Device type used by QR login (掃碼登入佔用的 115 裝置類型), click Save device type and AppID (儲存裝置類型和 AppID), then Scan again. The new type only applies from the next scan.

Option Value in the config file (p115.app)
Alipay mini program (支付寶小程式, default) alipaymini
WeChat mini program (微信小程式) wechatmini
115 TV (115 TV 版) tv
115 Manager, Android (115 管理(Android)) qandroid
115, iOS (115(iOS)) ios
115, Android (115(Android)) android
Web (網頁版) web

Pasting a cookie

You can also use the cookie of a browser that is logged in to 115:

  1. On the Account card, expand Paste a cookie instead (改用貼上 cookie).
  2. Paste the cookie into 115 cookie. It looks like UID=…; CID=…; SEID=….
  3. Click Save cookie (儲存 cookie).

The cookie may only contain ASCII letters, digits and symbols, on a single line. If it contains Chinese characters, an ellipsis (…) or a line break, Mi302 rejects it and asks you to copy it from the browser again. Mi302 does not test the cookie when saving it; the Cookie row on the Account card shows whether it works.

A cookie can also go into p115.cookies in the config file. Mi302 only reads it at startup, and only when the database has no 115 login yet, so a change needs a restart. If you log out of 115 while p115.cookies is still set, the next start logs in with it again.

Logging out

Click Log out of 115 (登出 115) and confirm. After logging out, Mi302 cannot sync or play anything from 115 until you log in again. Logging out does not remove an open-platform authorization; use Revoke (取消授權) for that.

Account card

After login, the Account card on the 115 Cloud tab shows:

  • Avatar, account name and UID.
  • VIP level and expiry date, or "permanent VIP" (永久 VIP).
  • Storage: used, total and free, with a usage bar.
  • Whether the cookie is still valid. If not, the reason 115 gave is shown; scan the QR code again.
  • How you logged in (QR code, pasted cookie, or cookie from the config file), the device type taken by the QR login, and the login time.
  • With an open-platform authorization: its status and when the token expires.
  • Devices logged in to this account (目前登入這個帳號的裝置): every device logged in to the account, with Mi302 marked as "this server" (本伺服器). This shows whether another login of the same type has kicked Mi302 out.

Account data is cached for one minute. The Refresh button (重新整理) in the card's corner queries 115 right away. The Overview tab (概覽) has a summary card and shows used storage as a percentage.

115 open platform (advanced)

Most users can skip this. It is only for people who registered their own application on the 115 open platform and have an AppID.

  1. On the Account card, expand Advanced: device type used by QR login, 115 open platform (進階:掃碼佔用的裝置類型、115 開放平台).
  2. Enter the AppID and click Authorize (授權).
  3. Scan and authorize with the 115 mobile app.

Once authorized, folder lookups, folder listings, new-file listings and direct links go through the open platform first and fall back to the QR or cookie login when it fails. The token lasts about two hours; Mi302 renews it automatically when it is about to expire. If 115 refuses the renewal, authorize again. Revoke (取消授權) removes the authorization. You can pre-fill the AppID and keep it with Save device type and AppID in the same section (p115.open_app_id).

Reading life events and exporting the directory tree need a QR or cookie login. With only the open platform, incremental sync only picks up new files by modification time, and full sync lists folders one level at a time.

Sync tasks

A sync task maps one 115 folder to one local folder. On the Sync tasks card (同步任務) of the 115 Cloud tab:

  1. 115 folder (115 目錄): a path on 115, for example /影視/電影, or click Browse (瀏覽).
  2. Local folder (放到本機資料夾): a folder on the server, for example /media/movies/115, or click Browse.
  3. Click Add task (新增任務).

Rules:

  • The local folder must be an absolute path starting with /.
  • Two tasks cannot use the same local folder, or folders inside each other. Otherwise cleaning up stale strm files for one task would delete the other's files.
  • The local folder must be inside a library, or players will not see it. If it is not, the task shows "not in any library, players cannot see it" (不在任何媒體庫裡,播放器看不到). A subfolder of a library folder works well, for example /media/movies/115.
  • The folder structure on 115 is kept as it is.

The task list shows when each task last ran an incremental and a full sync. The trash icon deletes a task; strm files it already created stay. Tasks are stored in p115.strm.tasks in the config file.

strm files

For every video on 115, sync creates a .strm file with the same name. These extensions count as video: .mkv, .mp4, .m4v, .avi, .ts, .m2ts, .mov, .wmv, .flv, .webm, .rmvb, .mpg, .mpeg, .iso, .3gp.

A strm file holds a short link back to Mi302:

http://192.168.1.10:8096/d/abcdefghijklmnopq.mkv
  • The middle part is the pickcode, the 17-character code 115 uses to identify a file. At playback Mi302 uses it to fetch a direct link from 115 and redirects the player there with HTTP 302. See Playback.
  • The extension is the original file's extension, so players and the scanner know the container format.
  • With Append the original file name to strm URLs (strm 網址後附上原檔名) on the Sync options card (同步選項), the link ends with ?/original-file-name. This is only for humans; Mi302 ignores it.
  • Skip videos smaller than (MB) (略過小於這個大小的影片(MB), p115.strm.min_size_mb) in the sync options skips small videos when set above 0. For example, 50 skips most trailers.

Server address in strm files

Mi302 picks the address in this order:

  1. Server URL in strm files (strm 裡的伺服器網址, p115.strm.base_url) on the Sync options card, if set.
  2. The address in your browser's address bar the last time you opened the 115 Cloud tab or started a sync. So open the admin page with an address players can reach, such as http://192.168.1.10:8096, not localhost.
  3. Otherwise http://127.0.0.1:<port>.

The address in use is shown on the Sync card (同步) as "server address in strm" (strm 內的伺服器位址). Behind a reverse proxy, or for access from outside your network, set the public address. See Playback.

After you change the server URL or the file-name option and save, Mi302 rewrites the existing strm files in the background, and the save message says so. This only reads and writes local files: it makes no requests to 115 and needs no sync or rescan. The pickcode does not change, so existing media info is kept. Only strm files that Mi302 created inside the sync task folders are changed; strm files from other tools (other URLs, local paths) are left alone.

Next to the address on the Sync card there is Rewrite existing strm to this address (把現有 strm 改成這個網址), to run it by hand at any time, for example when the setting is empty and you opened the admin page from a new address. The line below it shows how many files the last rewrite changed. While it runs you can click Stop (停止): what is rewritten stays, and running it again continues with the rest.

When a file on 115 is replaced (another file in the same place, so the pickcode changes), sync rewrites the strm file and deletes the old X-mediainfo.json so it gets probed again. See Media Info.

Metadata download

With Also download nfo, posters and subtitles from 115 (一併下載 115 上的 nfo、海報、字幕, p115.strm.download_metadata, on by default), these files on 115 are downloaded to the matching local location: .nfo, .jpg, .jpeg, .png, .webp, .srt, .ass, .ssa, .sup, .vtt.

  • A local file with the same size is not downloaded again.
  • Failed downloads appear in the sync errors and are retried by the next full sync.
  • Every file needs one direct-link request to 115, so downloads are spaced at least 0.5 seconds apart (or p115.strm.request_delay if that is larger; 0 turns the spacing off). A full sync writes all strm files first and downloads these files last, so new videos do not wait for them.
  • If 115 starts rate limiting during the downloads, the rest are skipped for this run while strm files are still written; the sync result says so, and the next full sync fetches them.
  • Files larger than 64 MB are not downloaded (a normal nfo, image or subtitle is never that big).
  • Mi302 does not scrape by itself. When 115 has no nfo files and posters, let MoviePilot do the scraping (fetching metadata and artwork). See MoviePilot.

Incremental sync and full sync

Incremental sync Full sync
Based on 115 life events, plus a scan by modification time 115 directory-tree export, plus one listing of all files
Handles uploads, received files, copies, moves, renames, deletions compares the whole folder again and fills gaps
Speed fast, reads only the events since the last sync fine with many folders, but waits for 115 to build the tree
Use for running every few minutes running weekly (the default) to catch anything missed

Incremental sync

Life events are 115's activity log: a record of every operation in your drive. Incremental sync has two steps:

  1. Read life events. Mi302 reads the events since the last sync. If a file has several events, only the last one counts, because that is its current state.
    • Upload, receive, copy, or move into the synced folder from outside: create the strm file. When a whole folder moves in, Mi302 lists its contents.
    • Move or rename inside the synced folder (files or folders): the local strm file moves too, together with the nfo, posters, subtitles and X-mediainfo.json that share its name (for example the ones MoviePilot scraped), so nothing needs to be scraped again. When a folder moves onto a folder that already exists, the two are merged; files already at the destination are not overwritten.
    • Delete, or move out of the synced folder: with Follow deletions (跟著刪) on, delete the local strm file and its metadata; otherwise leave it.
    • Events that do not change files, such as views, stars and tags, are ignored.
  2. Scan by modification time. Mi302 asks 115 for files in the synced folder modified since the last sync (with 10 extra minutes of overlap). This catches uploads that produce no event, such as offline downloads or uploads by third-party tools. The list is newest first and stops at the first old file, so one request is usually enough.

Life events only carry file ids. So during full sync Mi302 records which local path each 115 file and folder maps to, and incremental sync uses that index to find the local copy.

Full sync

Full sync has three steps:

  1. Export the directory tree. Mi302 asks 115 to build a tree of the whole synced folder, the same as "export directory tree" (导出目录树) on the 115 website. This returns the names of every folder and file at once. 115 puts the export file in your drive's root folder; Mi302 deletes it after reading. If deleting fails, the log names the file so you can delete it yourself. Mi302 waits up to 15 minutes for 115 to build the tree.
  2. List all files. One listing returns the pickcode, size and parent folder of every file under the synced folder, 1150 files per request.
  3. Match paths. The tree has only names and the file list has only folder ids, so Mi302 matches them by the file names inside each folder. Only folders whose file names are too generic (for example two seasons that both contain just 01.mkv) and folders that contain only subfolders (for example a series folder with only season folders) need a separate path lookup. Results are remembered, so the next full sync does not look them up again.

This avoids listing every folder one by one; even thousands of folders take only a few requests. Mi302 falls back to listing folder by folder in these cases, waiting Seconds to wait before listing each 115 folder (每列一個 115 目錄前等待的秒數, p115.strm.request_delay, default 0.2) before each folder:

  • The export, the file listing or a path lookup fails, for example because another directory-tree export is running on 115.
  • Only the open platform is logged in; the tree export needs a QR or cookie login.
  • The listing has more than 10% fewer videos than the tree, which means it is incomplete.

A few videos that are in the tree but missing from 115's listing are not treated as deleted; their strm files are kept this time. The sync result mentions all of these cases.

Before a full sync starts, Mi302 turns on the "recent records" (最近记录) switch of 115's life feature (115 records no events while it is off) and remembers the newest event. Changes made during the full sync are picked up by the next incremental sync.

When incremental sync runs a full sync instead

  • The task has never had a full sync, including new tasks and tasks carried over from an older version: the first incremental sync runs a full sync to build the index.
  • The last event Mi302 read is no longer in 115's window (115 keeps only about the latest 10,000 events): a full sync runs so nothing in between is missed.

The sync result lists these tasks after "switched to full sync" (已改跑全量:).

Starting a sync

  • Buttons: Incremental sync (增量同步) and Full sync (全量同步) on the Sync card of the 115 Cloud tab, or Incremental sync and Full (全量) on the 115 sync card (115 同步) of the Overview tab. Only one sync runs at a time; clicking during a sync shows "already syncing" (已經在同步中).
  • Stop (停止): shown on the Sync card while a sync runs. It stops between two files; this run's progress is not saved and no strm file is deleted, and the next sync redoes the unfinished part. Scheduled syncs carry on.
  • Schedule: two fields on the Sync options card (同步選項). Click Save sync options (儲存同步選項) after changing them.
  • Command line: see below.

Schedule

Field Config key Default Meaning
Auto incremental sync interval (minutes) (自動增量同步間隔(分鐘)) p115.strm.interval 0 0 = off; 5 is a good value
Auto full sync interval (hours) (自動全量同步間隔(小時)) p115.strm.full_interval 168 0 = off; 168 = weekly
  • Mi302 checks once a minute, so a new interval applies right away.
  • The incremental interval counts from when Mi302 started.
  • The full interval counts from the last full sync of the task that has gone longest without one. That time is stored in the database, so restarting does not reset it. A task must have synced once before scheduled full syncs start.
  • When both are due, only the full sync runs, for all tasks.
  • Nothing runs while 115 is not logged in, there are no tasks, or the circuit breaker is open.

Command line

# full sync
.venv/bin/python -m embyserver -c config.yaml --sync-115
# incremental sync
.venv/bin/python -m embyserver -c config.yaml --sync-115 incremental

This syncs, scans the changed places and sends new files to MoviePilot according to your settings, then exits. It suits cron and similar schedulers. Run it as the account that runs Mi302, from the folder Mi302 normally starts in, so it uses the same data (server.data_dir, ./data by default, is relative to that folder). For the one-line installer on Linux:

cd /opt/mi302/config
sudo -u <user> env PYTHONPATH=/opt/mi302 /opt/mi302/.venv/bin/python -m embyserver -c config.yaml --sync-115 incremental

This is a separate process that does not know whether the server is syncing at the same moment, so avoid running both at once.

Sync result

The Sync card (also on the Overview tab) shows the last sync:

  • Status: done (完成) or with errors (有錯誤), incremental or full, and how long ago.
  • Counters: life events (生活事件) and moved (搬移), for incremental only; new files (新檔案), updated (更新), unchanged (未變), metadata (中繼資料), deleted (刪除).
  • Notes, for example a switch to full sync, a fallback to folder-by-folder listing, or deletions skipped for safety.
  • Errors: the first 5, the rest are in the log. An error in one task does not stop the others.

After a sync

  • Scan: with Rescan libraries after sync (同步完自動重新掃描媒體庫, p115.strm.scan_after_sync, on by default) on the Sync options card, only the series or movies with new, updated, moved or deleted files are rescanned. See Library and Scanning.
  • Scrape: new strm files are sent to MoviePilot (同步產生新的 strm 後自動送去刮削). See MoviePilot.
  • Probe: with batch probing (批次探測) and probing after sync (同步產生新的 strm 後自動探測) on, new strm files and files replaced on 115 are probed for media info in the background. See Media Info.
  • Fill missing episodes: with Fill after full sync (全量同步後自動補全) on, every full sync sends all series that have a tmdbid to MoviePilot as subscriptions.

Follow deletions

Follow deletions (跟著刪, p115.strm.delete_stale) in the sync options is off by default. When it is on, videos deleted on 115 or moved out of the synced folder also lose their local strm file and scraped metadata.

What gets deleted:

  • The video's strm file.
  • Metadata with the same name as the strm file, such as X.nfo, X-poster.jpg, X.zh.srt and X-mediainfo.json. If the folder also has X-2.strm, then X-2.nfo belongs to X-2 and is not deleted with X.
  • nfo files, images and subtitles in folders that no longer contain any video, and folders left empty.

Files with any other extension are never touched.

Incremental sync deletes based on events: deletion, moving out of the synced folder, or renaming to a name that is not a video. Full sync deletes local strm files that 115 no longer lists.

To avoid deleting by mistake, full sync skips deletion in these cases and says so in the sync result:

  • Some folders' paths could not be resolved, so some files have an unknown location.
  • 115 listed no videos at all while the local folder has videos. Usually the 115 folder is wrong, or 115 returned an incomplete answer.
  • Videos in the tree but missing from 115's listing keep their strm files. They are only deleted when a later full sync finds them in neither.
  • More than 100 strm files to delete are unknown to the sync records (they did not come from this 115 folder) and they are more than half of the local strm files: most likely the task's 115 folder was changed to another folder that also has videos, so these are kept. Files really deleted on 115 are in the sync records and are still deleted. If the folder is right, delete those local strm files yourself.

When 115 returns an error or rate-limits the request, the whole task fails instead of being treated as an empty folder.

If a file on 115 only changed the letter case of its name: on a case-insensitive disk such as macOS, old and new are the same file and nothing is deleted; on a case-sensitive disk the old strm file is deleted and its nfo and posters are renamed to the new name.

Deleting a sync task never deletes the strm files it created, whether this option is on or off.

Offline download

Offline download (離線下載) on the 115 Cloud tab hands magnet, ed2k, http, https and ftp links to 115, which downloads them into your cloud drive (115's cloud download). Nothing goes through this machine or uses its bandwidth.

  1. Paste the links under Links (連結), one per line. A bare torrent info hash (40 hex characters) also works and becomes a magnet link. Lines that are not links are not sent; the result says how many were left out.
  2. Under Save to (存到), type a 115 folder or pick one with Choose… (選擇…); leave it empty for 115's default cloud-download folder. The last one used is remembered in this browser.
  3. Click Add download (加入下載). A link 115 already has a task for is reported as already existing (任務已存在).

Download tasks (下載任務) below lists the cloud-download tasks on 115: name, size, progress (refreshed every 5 seconds while something is downloading), finished or failed. Open folder (打開資料夾) on a finished task shows the files in Browse 115. The top right shows how many tasks you can still add this month (115's quota, which depends on the membership level).

  • Saved inside a sync folder: once downloaded, the next incremental sync creates the strm files and adds them to the library (and sends them to MoviePilot for scraping if that is on).
  • Saved elsewhere: use Organise… (整理…) in Browse 115 to let MoviePilot move them into the library.
  • Delete… (刪除…) removes only the task record; the downloaded files stay on 115. To delete the files as well, type 刪檔案 ("delete files") in the confirmation.
  • Add again (重新加入), on failed tasks, first removes that failed record (not the files; otherwise 115 says the task already exists) and then adds the original link again to the original folder.
  • Clear finished (清除已完成) and Clear failed (清除失敗的) remove those task records in one go without touching files.

With 115 open platform authorisation its cloud-download API is used; otherwise the QR-code login cookie. The cookie path uses the 115 mobile app's interface, which has no official documentation, so it fails when 115 changes it; the error message is shown as is.

Transfer shares

Transfer shares (轉存分享) on the 115 Cloud tab saves other people's 115 share links into your own 115 and then hands them to MoviePilot to be organised into the library. Shared folders and file names come in every shape, so each share first goes into a temporary subfolder and always goes through MoviePilot; nothing is saved straight into the library.

  1. Paste the shares under Links (連結), one per line: https://115.com/s/sw…?password=abcd, or the same on 115cdn.com or anxia.com. An access code on the same line is recognised too (访问码:abcd, 提取碼: abcd, 密码 abcd, simplified or traditional). Shares without an access code are read as well. A share pasted twice counts once; lines that are not share links are skipped and counted.

  2. Click Read shares (讀取分享). Each share gets a block with its title, total size, and every folder and file at its top level with a checkbox (all ticked by default; untick what you do not want). Shares that cannot be read (gone, expired, wrong access code) show 115's own message. Only the first 1000 top-level items are listed.

  3. Under Save to (存到), choose a 115 folder that already exists (it is not created for you). Each share gets a subfolder in it named after the share title, or title (share code) if that name is taken. The last one used is remembered in this browser. Use a folder outside the sync folders, for example /待整理: inside a sync folder, the next incremental sync creates strm files for the original names before anything is organised, and the page warns about it.

  4. Under Organise to (整理到), choose what happens after the transfer:

    • A MoviePilot library folder whose storage is 115 (for example 日番(/cms/电视剧/日番)): MoviePilot previews it in the background and the entries without problems are organised right away (renamed to MoviePilot's format and moved into that library folder, without scraping); the emptied temporary subfolder then goes to the 115 recycle bin. Entries with problems are skipped and stay in Organising 115 for you to look at.
    • Another 115 folder… (其他 115 資料夾…): type or choose a 115 folder and it is organised there the same way.
    • Don't organise yet (先不整理): only add it to Organise 115 (pinned to the top of the list, like Organise this folder… (整理這個資料夾…) in Browse 115) and preview and organise it yourself.

    The choice is remembered in this browser. When MoviePilot's directory settings cannot be read, only the last two are offered; without MoviePilot settings, only Don't organise yet. The reason is shown below the list.

  5. Click Transfer (轉存) and confirm. The shares are handled one at a time on the server (closing the page does not stop it): create the subfolder, ask 115 to transfer, wait for 115 to finish (every ticked item shows up in the subfolder and the file count inside stops changing; at most 10 minutes), add it to Organise 115. The card shows how far each share has got and then the result: transfer failed (with 115's reason), added to Organise 115, or handed to MoviePilot (results in Organise 115).

There is no Follow MoviePilot's directory settings option here: when MoviePilot picks a folder itself it only accepts sources under one of its download folders. The transferred files sit in a temporary 115 folder that is neither a download folder nor a library folder, so it cannot pick one (its preview only says 整理任务处理失败). You therefore choose where they go, and Mi302 sends that as a specified 115 folder.

  • Stop (停止) finishes the share in hand and stops. What was transferred stays on 115 and what was added stays in the Organise 115 list; the rest is not done, and nothing is handed to MoviePilot (use Organise all (全部整理) in Organise 115 when you want it).
  • Another organise job is running (organise all, deleting selected entries, asking MoviePilot to check, or a single organise run): the shares are still transferred and added to the list, but organising does not start; click Organise all in Organise 115 once that job is done.
  • The transfer itself never deletes anything: when a transfer fails, the subfolder it created stays; delete it in Browse 115 if it is empty.

Limits:

  • It needs the QR-code login (cookie); open platform authorisation alone is not enough.
  • It uses interfaces of 115's web version that have no official documentation (reading shares, transferring, creating folders, counting files in a folder), so it fails when 115 changes them; the error message is shown as is.
  • The list at the top of Organise 115 (folders added from Browse 115) holds at most 20 entries. When more than 20 shares are transferred at once, the earlier ones drop off the list; their result says where the files are, so add them again from Browse 115.
  • It does not start while 115 is rate-limiting (see Circuit breaker); if that happens halfway, the remaining shares are not done and the reason is shown.

Rapid upload from Aliyun Drive

Aliyun rapid upload (阿里雲盤秒傳) on the 115 Cloud tab rapid-uploads a folder (or a single file) from Aliyun Drive (阿里雲盤) to 115 and then hands it to MoviePilot to be organised into the library. Aliyun Drive's file listing gives the SHA1 of every file; when 115 already has the same file (someone uploaded it before), it is "uploaded" instantly by hash, without going through this machine and without downloading anything. Files 115 does not have are never really uploaded; they are only listed.

Logging in to Aliyun Drive

Why the login is needed: besides listing the files, 115 often asks for a second check during a rapid upload, the SHA1 of a small piece in the middle of the file, as proof that you really have it. Mi302 reads that piece (a few KB) from Aliyun Drive and sends it back to 115.

  1. Get a refresh token with OpenList's tool: open https://api.oplist.org/, choose the Aliyun Drive QR login, scan it with the Aliyun Drive app and copy the refresh token.
  2. Paste it into the Aliyun Drive account (阿里雲盤帳號) card and click Log in (登入). The account name and its drives (資源庫 resource drive, 備份盤 backup drive) are then shown.
  3. Without your own client id, the refresh token is sent to an OpenList service (https://api.oplist.org/alicloud/renewapi) to get access tokens, the same way OpenList itself does it. To avoid that, fill in your own Aliyun Drive open-platform Client ID and Client Secret under Advanced (進階) (the refresh token must then come from that app as well), and Mi302 asks Aliyun Drive directly; the online API URL can also be changed (must be https://). See Configuration reference.
  4. The refresh token is stored in Mi302's database, not in the config file. Aliyun Drive hands out a new refresh token with every access token, and Mi302 stores it again. Log out (登出) removes it.

Rapid upload

  1. Under Source (來源), type an Aliyun Drive path; the top level is 資源庫 and 備份盤, e.g. /資源庫/電視劇/凡人修仙传. Or click Choose… (選擇…) and go down level by level (each level shows how many files it has).
  2. Videos and subtitles only (只要影片和字幕), on by default and remembered in this browser: nfo files, images and the like are left out.
  3. Click Read (讀取): it shows how many videos and subtitles there are, the total size, files without a SHA1 from Aliyun Drive and files over 115's single-file limit (both cannot be rapid-uploaded and are skipped), and the first 200 files. At most 5000 files at a time.
  4. Under Save to (存到), choose an existing 115 folder, preferably outside the sync folders, e.g. /待整理 (same reason as for Transfer shares). Mi302 creates a new folder in it named after the source (a single file: its name without the extension), adding " (2)", " (3)" if the name is taken; subfolders keep the original structure.
  5. Organise to (整理到) is the same menu as for transferring shares: with a library folder or another 115 folder, MoviePilot organises the result in the background afterwards and the emptied folder goes to the 115 recycle bin; Don't organise yet (先不整理) only adds it to Organise 115. The choice is remembered in this browser, separately from Transfer shares.
  6. Click Start rapid upload (開始秒傳) and confirm. The files are done one at a time on the server (closing the page does not stop it), at least 1 second apart between 115 requests. The card shows which file it is on and how many succeeded, were missing on 115, failed or were skipped; afterwards the ones that did not succeed are listed with the reason (up to 200).
  • Nothing succeeded: the folder it created is empty and goes to the 115 recycle bin, recorded under Recycle bin → Deleted by Mi302 (Mi302 刪掉的) with the source 秒傳沒成功的空資料夾.
  • Stop (停止) finishes the file in hand and stops; what was uploaded is added to Organise 115 but not handed to MoviePilot.
  • 115 rate-limiting (circuit breaker): the whole run stops and the result says where the uploaded files are; add them from Browse 115 once 115 recovers.

Limits:

  • It needs the QR-code login to 115 (cookie).
  • Files 115 does not have cannot be rapid-uploaded, and Mi302 never really uploads them.
  • 115's rapid upload has no official documentation (it follows OpenList and p115client), and Aliyun Drive is used through its open platform; if either side changes, it fails and the error message is shown as is. 115's second check is time-limited, so a slow answer fails (sig invalid).
  • At most 5000 files at a time; files without a SHA1 or over 115's single-file limit are skipped.
  • Listing folders and getting download links follow Aliyun Drive's rate limits (4 listings and 1 download link per second), so a folder with many subfolders takes a while.

Browsing 115

The Browse 115 (瀏覽 115) page in the sidebar shows what is inside folders on 115. The first time it opens at the 115 folder of the first sync task (or at the root when there are no sync tasks), and afterwards where you left off; Back to the sync folder (回到同步目錄) returns to the start. Click a folder to open it; click any part of the path at the top, or Up (上一層), to go back. Each folder you open costs one directory listing on 115.

  • Subfolders: click the name to open one. Organise… (整理…) on the right adds that folder to Organise 115 (整理 115 網盤).
  • Videos: size, upload time, and what Mi302's library made of them.
  • Other files (nfo, images, subtitles) are listed in grey. Files load 1000 at a time; click Load more (再載入) at the bottom for the rest. Select all (全選) only selects files already loaded, and the selection count says how many are not loaded yet.
  • Every row has a checkbox, with Select all (全選) above. Organise selected… (整理選取的…) adds the ticked folders to Organise 115 (files cannot be organised on their own and are skipped); Delete selected… (刪除選取的…) moves them to the 115 recycle bin (restorable on 115), folders with everything inside, and for anything inside a sync folder also removes the local strm and nfo files and library entries. Before deleting, Mi302 lists the folder again and only deletes what really is in it. Deleting needs the QR-code (cookie) login to 115.

Marks next to a video:

Mark Meaning
Title S01E10 An episode in the library. With "number guessed from the file name" (集號是從檔名猜的) or "episode number not recognised" (認不出集號) next to it, the number may be wrong
Movie: Title (Year) (電影:…) A movie in the library
strm exists, not scanned yet (有 strm,還沒掃描) Synced to a strm, not yet picked up by a library scan
Not in the library (no strm) (不在媒體庫(沒有 strm)) Inside a sync folder but without a strm, for example smaller than the size limit in the sync options, or not synced yet

If a folder looks wrong, click Organise this folder… (整理這個資料夾…), or Organise… on a subfolder: it is pinned at the top of the Organise 115 card on the 115 tab and marked Added to organise (已加進整理) here, so you can keep browsing and pick more. When done, Go organise (N) (去整理) at the top of the page takes you to that card, where MoviePilot renames, moves and scrapes them on 115, again with a preview before anything runs; see Organising 115. Reorganisation progress is shown on this page too.

Organising 115

Videos organised by MoviePilot are named after its rename format, for example 凡人修仙传 (2020) {tmdbid=106449}/Season 1/凡人修仙传 - S01E176 - 第 176 集.mp4. Folders saved from other people's shares often look different, and their episode numbers may not be recognisable:

/TV/Donghua/F 凡人修仙传{tmdbid-106449} 更176|停更|预计第二季度更新/凡人修仙传 EP001_风起天南.mp4
/TV/Variety/康熙来了 (2004)/康熙来了 EP01.mp4      ← next to an existing "康熙来了 (2004) {tmdbid=6836}"
/TV/Drama/大道朝天 (2024) {tmdbid=…}/Season 1/10.xxx.mp4      ← the folder is fine, only file names are not

The Organise 115 (整理 115 網盤) card on the 115 tab finds these, hands each whole folder to MoviePilot, or deletes what you don't want. Recognition and naming are done by MoviePilot: Mi302 does not judge names itself and does not guess TMDB IDs, types or seasons. It needs the MoviePilot connection set up on the MoviePilot tab (the API token is enough on V3; older versions need an administrator's username and password), and previewing or organising also needs a 115 login.

What is listed

Reason Meaning
In the library, N episodes have numbers guessed from the file name and N episodes have no recognised number (媒體庫裡 N 集的集號是從檔名猜的、N 集認不出集號) The library scan guessed the number from names like "10.xxx" or "第10集", or could not recognise it at all. Listed without asking MoviePilot
Folder name differs from MoviePilot's (資料夾名稱和 MoviePilot 的不一樣) For example it would rename "F 凡人修仙传{tmdbid-106449} 更176…" to "凡人修仙传 (2020) {tmdbid=106449}". If a folder with that name already exists next to it, the entry says it will be merged into it
Videos lie directly in the folder (影片直接放在資料夾裡) MoviePilot's TV rename format has season folders, but the videos are not in one
File names differ from MoviePilot's (檔名和 MoviePilot 的不一樣) The current and the new file names are shown, e.g. "1 → 凡人修仙传 - S02E01 - 第 1 集". A difference in word order alone does not count: MoviePilot reverses effect tags such as "DV HQ", so asking again about a name it produced itself flips the order
No folder of its own (沒有自己的資料夾) A movie that shares its folder with other movies; listed on its own. When the folder is named after the movie but holds more than one video (often a duplicate that 115 suffixed with "(1)"), the entry says the folder holds N other videos (資料夾裡還有另外 N 支影片)
Inside another folder named after the title (套在另一個以片名命名的資料夾裡) The whole show or movie folder sits inside a folder named after the title, such as "H-画江湖之天罡-2023-[tmdb=1221210]" (for example after a wrong organise); organising moves it one level above that folder
MoviePilot cannot recognise it (MoviePilot 認不出來) It cannot tell which title this is; set the type and TMDB ID yourself, or rename it on 115

The last four need Check with MoviePilot (問 MoviePilot 檢查) first. For every show and movie in the library that lies inside a sync folder, Mi302 asks MoviePilot what it would be called after organising (MoviePilot's "query the organised name" API, the same logic its own UI uses): once for the folder, and once each for one or two sample videos. The check runs in the background; the card shows how far it is and how many it found, and results appear as they come in. A large library takes a while the first time (two or three questions per folder, each making MoviePilot query TMDB). Stop (停止) ends the check once the folders being asked right now are done; the rest are asked next time. Answers are stored in Mi302's database, and folders whose name and videos have not changed are not asked again. After changing MoviePilot's rename format, click Check everything again (全部重新檢查). The list is recalculated after each library scan or 115 sync.

You can search by name, or show only shows, only movies, or Only wrong episode numbers (只看集號不對的). With more than one sync folder (often one per category, such as Chinese dramas and Chinese animation), the All sync folders drop-down (全部同步目錄) shows only the entries under one of them.

In Browse 115 (瀏覽 115), Organise this folder… (整理這個資料夾…) or Organise… (整理…) on a subfolder pins that folder at the top of the list, marked Added from Browse 115 (從瀏覽 115 加進來). It works for folders outside the library and outside the sync folders too (for example an inbox folder). Pinned folders are stored in Mi302's database and survive a restart (up to 20). Done with it (不看了) removes it.

What to check for each entry

  • Organise into (整理到): MoviePilot's directory settings (照 MoviePilot 的目錄設定), the default; the same parent folder (同一層), next to the current folder (when the item sits in a folder named after the movie, such as a movie file inside "H-画江湖之天罡-2023-[tmdb=1221210]", it goes one level above that folder, so the new movie folder is not created inside the old one); or a given 115 folder (指定的 115 資料夾). Organise everything into (全部整理到) above the list changes all entries at once; an entry you changed yourself no longer follows it. The choice is remembered in this browser.
  • MoviePilot's directory settings: when MoviePilot picks a directory itself it only looks at download folders (the source must be under a download folder whose storage is also 115), so a folder already in the library never matches and its preview only says 整理任务处理失败 ("organise task failed"). Mi302 therefore reads MoviePilot's directory settings. A folder already inside one of its library folders on 115 stays in its current category folder, as with the same parent folder, and only the folder and file names change; the preview names the library entry. An entry limited to movies or to shows is only used for those. For a folder outside every library folder (for example an inbox inside a download folder), MoviePilot picks the directory itself; if it cannot, the preview says so, and you can choose the same parent folder or a given folder instead.
  • Options sent to MoviePilot: the switches in its own organise dialog, by type (按类型分类), by category (按类别分类), scrape metadata (刮削元数据) and reuse recognition from history (复用历史识别信息), are always off. No type or category folders are added, nothing is scraped on 115 (the local nfo files and posters move with the strm files), and old organise records are not used for recognition. Files are moved.
  • Each part: a folder with subfolders is sent one subfolder at a time, plus once for the videos lying directly in it (a subfolder may be a different title, like "虚天战纪.导演剪辑版 (2025) [tmdb-282348]" inside the 凡人修仙传 folder). Each part defaults to Let MoviePilot recognise it (讓 MoviePilot 自己認); Set… (指定…) lets you set the type, TMDB ID, season and episode format for that part only.
  • Episode format (集數定位): for when MoviePilot cannot find the episode number (e.g. "10.xxx.mp4"). {ep} marks the episode number and {a}, {b} any text, e.g. {ep}.{a}. Recommend (推薦) asks MoviePilot first; only if it cannot recommend one does Mi302 offer its own guess from the file names, and it says which one you got.

Preview

Each entry has Preview (預覽), Organise (整理) and Delete… (刪除…) on its right. Preview previews that entry only. Organise previews it first if needed and, if anything can be organised, asks before running it, so one click organises one entry. To handle several at once, tick them and use Preview selected (預覽選取的) and Run (執行) in the bar pinned to the bottom of the screen, without scrolling to the end of the list. Select all (全選) ticks every entry on this page (and those pinned from Browse 115); press it again to untick them. Delete (刪除) moves every ticked entry (including ones ticked on other pages) to the 115 recycle bin as a whole (restorable in 115) and removes their local strm, nfo and library entries, after listing their names for confirmation. The server then deletes them one by one (it finishes even if you close the page); progress is shown at the top of the card with a Stop (停止) button, and anything that could not be deleted is listed with the reason. To delete only some episodes of a show, use that entry's Delete….

Organise all (全部整理): Organise all (N) in the bottom bar works through the whole list, not just this page; with a search, a sync folder or a kind selected, only the matching entries, plus any pinned from Browse 115. Mi302 previews them one by one in the background and organises those without problems straight away, into the place chosen under Organise everything into. It skips an entry when MoviePilot recognised a different title (a wrong TMDB id in the folder name, see below), when MoviePilot would not organise some file (not recognised, no episode number), when there is a "check this" note (for example two files going to the same place), when the recognised season differs from the library, or when the organise history or the target folder cannot be read. A show is skipped as a whole if one episode fails, never half organised. Files already named to the format, or whose target already has a file with that name, are still not sent. The progress bar in the bottom bar shows how far it is and how many were organised or skipped; Stop (停止) stops after the current entry, and closing the page does not stop it. Afterwards the top of the card lists the skipped and failed entries with the reason, and Find in list (在清單上找) takes you to it; details are kept for at most 2000 entries, while the counts include all of them. After 5 previews in a row fail (for example MoviePilot's directory settings do not match, or 115 cannot be read) it stops.

Holding back, and very large folders: Not now (先不整理) on the right of an entry marks it; Organise all skips it and it moves to the end of the list (Organise again (恢復整理) undoes it; organising it on its own still works). The kind Held back only (只看先不整理的) lists just those, and Organise all then does just those. In addition, skip anything that would send more than N videos at once (一次要送超過 N 支影片的先不整理; default 300, 0 = no limit, remembered in this browser): MoviePilot previews and organises a whole season (or folder) in one go, and a show with thousands of episodes can take several GB of memory and get the MoviePilot process killed. Do the rest first and deal with the big ones later.

When MoviePilot goes away: if MoviePilot cannot be reached during Organise all (killed by the system, restarting), Mi302 waits for it (up to 15 minutes), gives it another minute once it answers, then redoes the same entry, which does not count as skipped. If the connection drops or times out halfway through a preview or an organise, MoviePilot may still be working on that entry in the background, so it is not sent again: the entry is recorded as skipped or failed, and the next one is only sent once MoviePilot answers again, so work does not pile up. The result says how many times this happened; if it happens often, look at MoviePilot's log and the machine's memory. With a local (non-Docker) MoviePilot install, the frontend on port 3000 shuts itself down when the backend is too busy to answer its health check, and stays down; in that case point Mi302's MoviePilot URL at the backend on port 3001 (for example http://127.0.0.1:3001). While it runs, single entries cannot be organised or deleted and Check with MoviePilot (問 MoviePilot 檢查) is unavailable; while a check runs, Organise all cannot start. Move old folders with no videos left to the 115 recycle bin sits under Organise everything into and applies to both.

As with File manager → Organise in MoviePilot's own UI, the whole folder is sent: videos, subtitles and audio tracks inside are organised together, following MoviePilot's format. After the preview each part shows what MoviePilot recognised, such as "→ 凡人修仙传 第 2 季(174 個)" or "→ 虚天战纪(電影)(2 個)"; if it is wrong, set it for that part and preview again. A common case is 预计第二季度 in a folder name: MoviePilot takes it as season 2, and Mi302 points it out when that differs from the season in the library.

Mi302 also blocks what MoviePilot itself does not:

  • Files already named to the format (new location equals the current one) are not sent, nor are files that would move out of the sync folders (they would disappear from the library). When a folder contains such files, only the other videos are sent, one by one, with subtitles following their videos. So when a folder is mostly fine and only a few file names are off, only those few are touched.
  • When the overwrite mode of MoviePilot's library folder is keep latest (保留最新), renames inside the same folder are not sent. If the target does not exist yet, MoviePilot first deletes the other versions of that episode in the target folder, and the source file is one of them.
  • Two files organised to the same location: a note says only one will stay.
  • A different title recognised: when the TMDB id in a folder name (for example [tmdb=287013] written by CMS) is wrong, MoviePilot looks up that id and finds some other title, and organising would move the whole show into that title's folder. Mi302 flags two cases and names the id: files with episode numbers recognised as a movie (the id is not a TV show, so MoviePilot falls back to the movie with the same id, for example 仙剑奇侠传 recognised as The Ragamuffin from 1916); and a recognised title that appears in none of the folder name, the file names or the library title, with a year more than one year off (for example 斗罗大陆 from 2018 recognised as 斗罗大陆Ⅱ绝世唐门 from 2023). A different title alone (an English folder recognised under its Chinese title) or a different year alone does not count. Set the right TMDB id on that part and preview again, and the note goes away.
  • When MoviePilot's preview only says 整理任务处理失败,请稍后重试 ("organise task failed, try again later") for a file, the reason is only in its log, usually a directory setting that does not match; Mi302 adds this hint.
  • Files without a recognisable episode number (extras, compilations, trailers…, shown as 未识别到文件集数) are not organised by MoviePilot, and stay untouched if you keep them. They show their size and a Delete this one (刪掉這支) button that moves only that file to the 115 recycle bin (restorable in 115) and removes its local strm and library entry; other files in the folder are not touched. Once it is gone, Organise all no longer skips the whole show because of it.
  • For files that were outside the sync folders to begin with, a new location outside them only gives the note that Mi302 will not create strm files for them.

MoviePilot's preview does not check whether the target already has a file with the same name; the real run then fails with 媒体库存在同名文件 ("the library already has a file with this name"), and a file that failed before is retried in the background with the old plan. So the Mi302 preview looks in the target folder on 115. A file whose target already exists is not sent when the overwrite mode is never (always the case for the same parent folder or a given folder); the entry says the target already has a file with this name and this one is most likely a duplicate, and shows the size of both files. If they match, click Delete this copy (刪掉這支) next to that file: only this copy goes to the 115 recycle bin (restorable on 115), its local strm and library entry are removed, and the copy at the target stays. When the library folder overwrites (overwrite, by size, keep latest), the file is sent with a note that it will replace the existing one or keep one of them by that rule.

Running it

Click Organise on an entry, or Run in the bottom bar. The previewed entries are organised in the background, with the settings from the preview. When MoviePilot has successful organise records for these files (the preview says how many), Mi302 reorganises them the way MoviePilot's own UI does: the old records are cleared, and for records made by copying or linking the old target files are deleted too. Otherwise MoviePilot would skip them as already organised, which the preview cannot show. Progress is shown at the top of the card (and on the Browse 115 page), with a Stop (停止) button: the batch already sent to MoviePilot finishes, nothing more is sent and old folders are not cleaned up; previewing again continues with the rest. 115 only allows a few requests per second and each video needs several to move and rename, so a folder of a few hundred episodes takes ten minutes or more. Afterwards:

With MoviePilot's Mi302 Organizer plugin installed (1.1.0 or later), the plugin works out the new names for previews with MoviePilot's own rules: seconds for hundreds of episodes, and the same names MoviePilot would produce. Folders that already have the right structure and only need new names are marked as rename-only (只需要改名) in the preview and are renamed by the plugin when run (one request per file, much faster than the organise flow); anything that has to move, gain a season folder or merge into another folder still goes to MoviePilot's organise flow. See MoviePilot.

  • With Move old folders with no videos left to the 115 recycle bin (整理完後,沒有影片留下的舊資料夾移到 115 回收站) on (the default), emptied old folders go to the recycle bin together with the nfo files and images left inside, restorable on 115; an outer folder named after the title (such as "H-画江湖之天罡-2023-[tmdb=1221210]") goes too once it is empty. Folders that still hold videos (skipped or failed ones) are kept; use Duplicate files (重複檔案) for them. Before moving a folder Mi302 checks it is still where it was; if MoviePilot already deleted it, it is left alone. This switch is remembered in this browser.
  • When MoviePilot puts files into its own organise queue and works on them in the background (for example a file that failed before and is retried with the old plan), the result says MoviePilot background (MoviePilot 背景處理). These count neither as organised nor as failed; see MoviePilot's organise history for the outcome. The incremental sync about 20 seconds after organising still runs, but MoviePilot has usually not finished by then: the local strm files for these follow at the next incremental sync after it finishes (the automatic interval, or Incremental sync (增量同步) by hand). MoviePilot's notification to its media server (Mi302) after organising only rescans locally; it does not move strm files.
  • Files MoviePilot skips (already organised, the episode format does not match that file, the target already has that episode…) are not moved. They are marked Skipped (略過) and counted separately as Skipped by MoviePilot (MoviePilot 略過), with MoviePilot's reason and, when it gives one, its suggestion ("MoviePilot 建議:…"). A run with skipped files is not shown as a green Done; in Organise all such a folder is listed as needing a look, with "MoviePilot skipped N" (MoviePilot 略過了 N 支).
  • Local nfo files with -1 numbers are deleted and an incremental sync runs about 20 seconds later, moving the local strm files along. After the sync and a scan, the organised folders are gone from the list.

Deleting

If you would rather not organise something, click Delete… (刪除…) on its row. Everything goes to the 115 recycle bin (restorable on 115), and the local strm and nfo files and library entries are removed too. Deleting needs the QR-code (cookie) login to 115, and waits while a 115 sync or a MoviePilot reorganisation is running.

  • Shows: every episode of the show in the library is listed, grouped by season. By default only episodes with unrecognised numbers are ticked; episodes whose number was guessed from the file name are usually real episodes with non-standard names, better organised than deleted. The buttons tick Unrecognised numbers (認不出集號的), Wrong numbers, including guessed (集號不對的(含猜的)), Every episode of the show (整部劇每一集), or Select none (全不選). Also move the show folder to the 115 recycle bin if no videos are left (刪完沒有影片留下的話,劇集資料夾也移到 115 回收站), ticked by default, moves the folder with its leftover nfo files and images only after Mi302 has checked on 115 that no videos remain. Delete the whole show… (整部劇刪掉…) moves the show folder with everything in it, including files that never made it into the library.
  • Movies and folders added from Browse 115: the whole folder (or the single file, for a movie without its own folder) goes to the recycle bin.

115 recycle bin

Files deleted on 115 first go to 115's recycle bin, where they can still be restored in 115; Mi302 also sends deleted duplicates there. The 115 recycle bin (115 回收站) card on the 115 tab:

  • The bin is read when you open Recycle bin (回收站) at the top of the page. It lists each item's name, size, deletion time and original folder, 50 per page. Refresh (重新整理) reads it again.
  • Empty recycle bin… (清空回收站…) permanently deletes everything in the bin. After that, the files cannot be recovered in 115 either.

Emptying asks for confirmation twice:

  1. Type 清空 ("empty") in the confirmation box. Anything else cancels.
  2. With QR-code (cookie) login only, enter your 115 security key (安全密鑰, 6 digits). If you turned off the security-key requirement for emptying the bin in 115 (帳號安全 → 安全密鑰), leave it empty.

With 115 open platform authorisation, Mi302 empties the bin through the open platform, which needs no security key; it falls back to the cookie only if the open platform fails. Emptying the bin is recorded in the log.

The Deleted by Mi302 (Mi302 刪掉的) card below lists what Mi302 itself sent to the 115 recycle bin: duplicates, empty folders, Browse 115, Organise 115 and old folders cleaned up after organising, with name, source, time, size and original path. You can filter by source; 50 per page, up to 5000 entries are kept. To restore something, look for that name in 115's recycle bin. The list is kept by Mi302 and needs no 115 request; after the bin is emptied the entries stay, but the files can no longer be recovered.

Duplicate files

The Duplicates and big files card (重複和大檔案) on the Tools tab (整理) finds duplicate videos on 115 and deletes the extra copies, and also lists the big files that take up space. One Scan (掃描) looks for three kinds, shown on three tabs:

Tab What counts as a duplicate Default
Identical (完全相同) Same SHA1 (a fingerprint of the content) and size, even with different names One copy suggested to keep, the rest ticked
Versions (不同版本) The same movie or episode in your library, but different files, for example 1080p and 2160p Nothing ticked; you choose
Big files (大檔案) Not duplicates: videos of 1 GB or more, filtered by size and by movie or episode Nothing ticked; you choose

Scanning

  1. Scope: the sync tasks' 115 folders by default. Pick a 115 folder… (改選 115 目錄…) lets you choose any folder, for example the whole drive /.
  2. Scan (掃描): Mi302 lists every video in the scope. 115 includes the SHA1 in its file listings, so forty thousand videos take about forty requests. For files outside the sync folders, the folder path is looked up once per folder. Rate limiting trips the circuit breaker as usual.
  3. Results: the top shows how many groups each kind of duplicate has, how much deleting per the suggestions would free, and how many videos are 1 GB or more. Each group is a card, largest savings first, 20 groups per page, searchable.

Identical files

  • One copy per group is suggested to keep: the one with a local strm first, then one with complete numbering in its file name, then the earliest upload. The others are ticked, and you can change any tick.
  • Complete numbering in the file name means an episode shows both season and episode (S01E02, 1x02) and a movie shows its year. Names with only an episode number (EP05, 第5集, 10.xxx) are incomplete and marked Incomplete numbering in file name (檔名編號不完整).
  • Each copy shows its 115 path, its upload time, and the tags suggested to keep (建議保留), has strm (有 strm), outside sync folders (不在同步目錄) and has watch history (有觀看紀錄).
  • Groups whose local strm files belong to the same series in the library are merged into one row per series, showing how many episodes have identical files, the number of files and how much following the suggestion would free; click the name to expand the episodes. Follow suggestion (照建議勾選) and Delete ticked in this series (刪這部劇勾選的) on the right act on the whole series. Movies and files outside the library are one group per row. Pages count rows.

Versions

  • How the same title is recognised: movies by tmdbid (from a scraped nfo), otherwise by title and year; episodes by series, season and episode number. Only files in the sync folders that have a strm are considered, so the library knows what they are.

  • Episodes with an unknown number are skipped: no episode number in the library, or -1 in the nfo with nothing usable in the file name. An episode is also skipped when its 115 file name shows an episode number that differs from the library's, so nothing is deleted by mistake. Older versions treated a whole season whose episode numbers the scraper could not read as one episode; after updating, those old results are cleared and the page asks you to click Scan (掃描) again.

  • Not treated as duplicates: split files (CD1, Part 2) and files holding several episodes (E01E02, E01-02). Different cuts such as director's cut or extended are grouped separately. Groups where every copy is identical are left to the Identical tab.

  • The list shows one row per series: its name, how many episodes have versions, the number of files and how much following the suggestion would free; click the name to expand the episodes (the row then shows how many are ticked). Follow suggestion (照建議勾選) and Delete ticked in this series (刪這部劇勾選的) on the right act on the whole series; each episode can still be ticked and deleted on its own. Each movie is one row with nothing to expand. Pages count series and movies.

  • Each version shows resolution, HDR or Dolby Vision, codec, the first audio track, the number of audio and subtitle tracks, and size. Quality comes from extracted media info (see Media Info); anything missing is guessed from the file name and marked from file name (看檔名).

  • The files differ, so nothing is ticked by default. Which copy is suggested for keeping depends on Suggest keeping (建議保留) in the action bar:

    Option Suggested copy
    1080P, else 4K (1080P(沒有再 4K)), the default 1080P; if there is none, 4K; if neither exists, the highest remaining
    4K, else 1080P (4K(沒有再 1080P)) 4K; if there is none, 1080P, then the highest remaining
    Highest resolution (解析度最高的) The highest resolution

    With equal resolution a file name with complete numbering wins, then the smaller file, then the earliest upload; copies whose resolution cannot be told come last. Changing the option recalculates the existing results at once, without finding duplicates again. Tick as suggested (照建議勾選) on a group ticks that group, and Tick all as suggested (全部照建議勾選) at the top ticks every group, including pages you have not opened. For example, choose 1080P, else 4K and click Tick all as suggested to keep only the 1080P copy in every group.

Big files

  • The same scan records every video of 1 GB or more (115 includes the size in its listings, so this costs no extra requests), largest first, 20 per page.
  • At the top, choose Larger than (大於) 1, 2, 5, 10, 20, 40, 60 or 100 GB (remembered in this browser) and the kind: movies and episodes, movies only, episodes only, or not in the library; you can also search file names and paths. The top of the list shows how many match and their total size. The default is larger than 20 GB; the 1 GB or more (all) count in the summary covers everything the scan recorded, while the list shows only what matches. The delete confirmation repeats the conditions.
  • Each file shows its size, resolution, HDR, codec and audio (from media info when available, otherwise from the file name), whether it is a movie or an episode, N other versions (還有 N 個其他版本; the same movie or episode has other files, see Versions above) and Has watch history (有觀看紀錄).
  • These are not duplicates, so nothing is ticked and nothing has to be kept. Tick files one by one, or click Tick everything that matches (勾選符合條件的全部), which includes pages you have not opened; changing the size, kind or search cancels it, so nothing you have not seen gets ticked.
  • Deleted files leave the library. For files marked as having other versions, watch history moves to another version; otherwise it is gone.

Deleting

  • A bar above the list has Tick all as suggested (全部照建議勾選; on Big files, Tick everything that matches) and Untick all (全部取消勾選), which work on every tab and include pages you have not opened, plus a Delete ticked button that shows how many files are ticked and their total size (刪除勾選的 N 個). The same button is repeated below the list.
  • With a search, Tick all as suggested ticks only the groups that match it, and deleting removes only the ticked files in those groups; groups the search did not find are left alone. The confirmation names the search.
  • Delete ticked (刪除勾選的) handles every group on the current tab, including pages you have not opened; Delete ticked in this group (刪這一組勾選的) handles one group. The confirmation shows the count and size, and more than 50 files asks a second time. Every duplicate group must keep at least one copy (big files need not).
  • Files go to the 115 recycle bin and can be restored there, until the bin is emptied (see 115 recycle bin). One request handles up to a hundred files.
  • The lists reflect the last scan, so right before deleting Mi302 lists the scanned folders on 115 again (the same way the scan does, not file by file). A file is deleted only if at least one of the copies to keep in its group is still there; if the copies to keep are gone (deleted in the 115 app or by MoviePilot), it is left alone and you are asked to scan again. Files that are already gone from 115 are dropped from the list, and if 115 cannot be listed nothing is deleted.
  • The local strm and its same-name nfo, posters, subtitles and X-mediainfo.json are deleted too (regardless of the follow-deletions setting), and only the affected series or movies are rescanned.
  • Watch history of the deleted copy (played, resume position, favourite) moves to the kept copy, per user. For big files it moves to another version of the same title or an identical copy; if there is none, it is gone.
  • What was deleted is listed, with its name and original path, under Deleted by Mi302 (Mi302 刪掉的) on the Recycle bin tab of 115 Cloud, to find it in the 115 recycle bin; Show deletion log (看刪除紀錄) at the bottom of the card jumps there with only duplicate files shown.
  • Stop (停止) is available while scanning or deleting: a stopped scan keeps the previous results; deleting stops after the current batch (up to 100 files), and files already in the recycle bin stay there.
  • Deleting needs QR-code (cookie) login; it is not available with only the open platform.
  • Results reflect the moment you clicked Scan. If files were moved, renamed or deleted on 115 since, scan again before deleting.

Empty folders

The Empty folders card (空資料夾) on the Tools tab (整理) finds folders on 115 that hold no media files and, once you tick them, moves them to the 115 recycle bin. Typical ones are old folders left behind after organising: the videos were moved away and only nfo files, posters and subtitles are left, or nothing at all.

What counts as empty

  • Nothing in the folder or any of its subfolders is a video, music or an external audio track: it is completely empty, or holds only things like nfo files, images, subtitles and text files. Media is recognised by extension; common video formats (including strm, DVD vob and VCD dat) and music formats all count, erring on the side of listing fewer folders.
  • Only the outermost folder is listed: if a whole series folder has no videos, the series folder is listed (its seasons go with it when deleted) rather than each season; an empty season inside a series that does have videos is listed on its own.
  • These are never listed:
    • The scope itself and folders at the top level of 115 (for example /影視).
    • The sync tasks' 115 folders, and the download and library folders on 115 in MoviePilot's directory settings, plus the folders above them. MoviePilot's directory settings can only be read while MoviePilot is reachable; the card shows a notice when they cannot be read.
    • Parts of a Blu-ray or DVD disc: folders with BDMV, VIDEO_TS, CERTIFICATE and the like in their path, or that sit next to BDMV or VIDEO_TS.
    • Folders changed within the last hour: MoviePilot may have just created them and not moved the videos in yet, or a download may still be running.

Scanning for empty folders

  1. Scope: the sync tasks' 115 folders by default. Pick a 115 folder… (改選 115 目錄…) lets you choose any folder, for example an inbox folder or the whole drive /.
  2. Scan (掃描): Mi302 first uses 115's directory tree export to get the names of every folder and file in the scope at once, then lists all files once more with their sizes (the tree cannot tell whether a bottom-level entry is a file or an empty folder). From these two it works out which folders are empty, what is in them and how big they are, without listing folders one by one; a library of forty thousand videos takes one or two hundred requests. When the scope is the whole drive /, each top-level folder is scanned separately. QR-code (cookie) login is required. A folder whose export fails is skipped this time (the list keeps its previous results); Mi302 does not fall back to listing folder by folder, because listing thousands of folders one by one gets rate-limited by 115. Scanning is not possible while 115 is syncing (syncing exports the tree too, and 115 runs one export at a time); wait until the sync finishes.
  3. Checking: each parent folder is listed once to get the folders' ids and modification times; only a folder whose subfolders also hold files is listed completely to work out its size. These one-by-one listings are at least 1 second apart (or Seconds to wait before listing each 115 folder (每列一個 115 目錄前等待的秒數) if that is larger), slower still just after the circuit breaker recovers, and rate limiting trips the circuit breaker as usual.
  4. Results: the top shows how many empty folders were found, the total size of the files in them, and how many were left out for the reasons above. The list is sorted by path, 50 per page, and can be searched by path. Each folder shows Completely empty (完全是空的) or how many files and folders it holds, plus its size, modification time and the first few file names; when the files add up to more than 100 MB the size is shown in yellow, so check whether there is more than nfo files and images (an archive, for example). Open (打開) shows the folder in Browse 115 (瀏覽 115).

Deleting empty folders

  • Tick folders one by one, or press Select all (全選) to tick everything that matches the search, including pages you have not opened; changing the search clears Select all so nothing unseen gets ticked. The bar shows how many folders are ticked and the total size of their files.
  • Delete ticked (刪除勾選的) asks for confirmation with the count, and asks a second time for more than 50. The folders are handled in the background, grouped by parent folder; Stop (停止) stops after the current folder.
  • Right before deleting, each folder is checked on 115 again: the tree of each parent folder is exported again and the parent is listed once (no folder-by-folder listing). The folder must still be in the same parent folder with the same name, unchanged for the last hour, and still without media files. Only then does it go to the 115 recycle bin together with the nfo files and images in it, where it can be restored. Folders that fail the check are kept and listed under Not deleted (沒刪的) with the reason; if the export fails, that group is not deleted this time; folders that were moved, renamed or now contain media are removed from the list.
  • For folders inside a sync folder, the nfo files and images Mi302 downloaded into the matching local folder are deleted too (other files are left alone), the local folder is removed once empty, and those places are rescanned.
  • Deleting is not possible while MoviePilot is organising (Run or Organise all in Organising 115) or while 115 is syncing; wait until it finishes. Organising cannot start while folders are being deleted either.
  • Deleting needs QR-code (cookie) login; it is not available with only the open platform.
  • Results reflect the moment you clicked Scan. If things changed on 115 since, scan again before deleting.

Circuit breaker

115's firewall is sensitive: sending more requests after being rate-limited only extends the block. So when 115 rate-limits Mi302 or the login becomes invalid, Mi302 pauses background work: sync and media-info probing.

Rate limiting Login invalid
Detected by HTTP 405 or 429 from 115, error code 770004, or a message containing 访问上限, 访问被阻断, 操作太频繁, 请求过于频繁, 登录异常 or Too Many Requests error code 99 or 990001, or a message such as 请重新登录, 登录失效, 登录已过期 or 登录超时
Pause 45 minutes, then resumes by itself until you scan the QR code again, paste a new cookie, or log out
Shown as a yellow notice: 115 rate-limited, background sync paused, retry in about N minutes, playback not affected a red notice: 115 login invalid, please scan the QR code again

While the breaker is open:

  • No sync starts, and the sync result says why. A running sync stops as soon as it is rate-limited, and the remaining tasks are skipped.
  • Scheduled syncs wait, and media-info probing stops.
  • Playback does not go through the breaker and still fetches direct links from 115.
  • The breaker state is stored in the database: after Mi302 restarts (an update, a reboot) the cooldown keeps counting, so it does not go straight back to hitting 115.

The notice appears on the Account cards of the 115 Cloud and Overview tabs and on the Media info card (媒體資訊) of the Tools tab.

For one hour after recovering from rate limiting, media-info probing runs slower: for the first 30 minutes the interval between direct-link requests is 4 times longer and the hourly cap is a quarter, for the next 30 minutes 2 times and a half, then back to normal. Sync spaces its metadata downloads out by the same factor and is otherwise not slowed down. The Media info card says it is slowing down while this lasts.

Other settings

  • Seconds to wait before listing each 115 folder (p115.strm.request_delay, default 0.2): the pause before each request when listing folder by folder, looking up a folder path or checking empty folders. Too fast may get you rate-limited. On the 115 Cloud tab → Sync options.
  • p115.timeout (default 15 seconds): timeout for requests to 115. Config file only; needs a restart.

Every key is described in the Configuration Reference.

⚠️ **GitHub.com Fallback** ⚠️