diff --git a/audio_transcription.log b/audio_transcription.log index edc11d6..d3b5689 100644 --- a/audio_transcription.log +++ b/audio_transcription.log @@ -89540,3 +89540,1052 @@ 2025-03-22 13:33:34,393 - logging_config - INFO - Course 667 JSON file already exists, using local file. 2025-03-22 13:33:34,394 - logging_config - INFO - Reading JSON file: course/667/json/【投资30讲】1.14 3056.hk对我和社群的意义….json 2025-03-22 13:33:34,394 - logging_config - INFO - Writing Markdown file: course/667/【投资30讲】1.14 3056.hk对我和社群的意义…_logseq.md +2025-04-11 19:58:18,260 - logging_config - INFO - The maximum course ID is 675 +2025-04-11 19:58:18,260 - logging_config - INFO - Processing course ID: 670 +2025-04-11 19:58:18,515 - logging_config - INFO - Processing course ID: 671 +2025-04-11 19:58:18,802 - logging_config - INFO - Processing course ID: 672 +2025-04-11 19:58:19,051 - logging_config - INFO - Processing course ID: 673 +2025-04-11 19:58:19,340 - logging_config - INFO - Processing course ID: 674 +2025-04-11 19:58:19,648 - logging_config - INFO - Processing course ID: 675 +2025-04-11 19:58:19,955 - logging_config - ERROR - Failed to download 16、蛋壳投资在这个时代里为什么这么靠谱?.mp4: Command 'aria2c -o "course/670/mp4/16、蛋壳投资在这个时代里为什么这么靠谱?.mp4" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/8361fe81-9ffb-4dc4-99c4-a892c9d4884a.mp4' returned non-zero exit status 127. +2025-04-11 19:58:19,956 - logging_config - WARNING - Retrying 16、蛋壳投资在这个时代里为什么这么靠谱?.mp4... (1/3) +2025-04-11 19:58:19,964 - logging_config - ERROR - Failed to download 16、蛋壳投资在这个时代里为什么这么靠谱?.mp4: Command 'aria2c -o "course/670/mp4/mp4/16、蛋壳投资在这个时代里为什么这么靠谱?.mp4" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/8361fe81-9ffb-4dc4-99c4-a892c9d4884a.mp4' returned non-zero exit status 127. +2025-04-11 19:58:19,964 - logging_config - WARNING - Retrying 16、蛋壳投资在这个时代里为什么这么靠谱?.mp4... (2/3) +2025-04-11 19:58:19,972 - logging_config - ERROR - Failed to download 16、蛋壳投资在这个时代里为什么这么靠谱?.mp4: Command 'aria2c -o "course/670/mp4/mp4/mp4/16、蛋壳投资在这个时代里为什么这么靠谱?.mp4" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/8361fe81-9ffb-4dc4-99c4-a892c9d4884a.mp4' returned non-zero exit status 127. +2025-04-11 19:58:19,972 - logging_config - ERROR - Failed to download 16、蛋壳投资在这个时代里为什么这么靠谱?.mp4 after 3 attempts. +2025-04-11 19:58:19,982 - logging_config - ERROR - Failed to download d0711a91-01c5-48ad-bdc6-fd60d0091cb6.jpg: Command 'aria2c -o "course/671/jpg/d0711a91-01c5-48ad-bdc6-fd60d0091cb6.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/d0711a91-01c5-48ad-bdc6-fd60d0091cb6.webp' returned non-zero exit status 127. +2025-04-11 19:58:19,986 - logging_config - ERROR - Failed to download 96a62d4d-b0b2-4778-bd4b-2a4e6d50130a.mp3: Command 'aria2c -o "course/671/96a62d4d-b0b2-4778-bd4b-2a4e6d50130a.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/96a62d4d-b0b2-4778-bd4b-2a4e6d50130a.mp3' returned non-zero exit status 127. +2025-04-11 19:58:19,987 - logging_config - ERROR - Failed to download a8243f58-5623-4769-bc56-66c4d9471b82.mp3: Command 'aria2c -o "course/671/a8243f58-5623-4769-bc56-66c4d9471b82.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/a8243f58-5623-4769-bc56-66c4d9471b82.mp3' returned non-zero exit status 127. +2025-04-11 19:58:19,987 - logging_config - WARNING - Retrying d0711a91-01c5-48ad-bdc6-fd60d0091cb6.jpg... (1/3) +2025-04-11 19:58:19,987 - logging_config - WARNING - Retrying 96a62d4d-b0b2-4778-bd4b-2a4e6d50130a.mp3... (1/3) +2025-04-11 19:58:19,987 - logging_config - WARNING - Retrying a8243f58-5623-4769-bc56-66c4d9471b82.mp3... (1/3) +2025-04-11 19:58:19,989 - logging_config - ERROR - Failed to download b095e7b8-adf4-42fd-bc87-0e689eb7b7cb.mp3: Command 'aria2c -o "course/671/b095e7b8-adf4-42fd-bc87-0e689eb7b7cb.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/b095e7b8-adf4-42fd-bc87-0e689eb7b7cb.mp3' returned non-zero exit status 127. +2025-04-11 19:58:19,989 - logging_config - ERROR - Failed to download 1137ba89-ceba-4d98-9f64-35097398ab09.mp3: Command 'aria2c -o "course/671/1137ba89-ceba-4d98-9f64-35097398ab09.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/1137ba89-ceba-4d98-9f64-35097398ab09.mp3' returned non-zero exit status 127. +2025-04-11 19:58:19,993 - logging_config - ERROR - Failed to download d0711a91-01c5-48ad-bdc6-fd60d0091cb6.jpg: Command 'aria2c -o "course/671/jpg/jpg/d0711a91-01c5-48ad-bdc6-fd60d0091cb6.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/d0711a91-01c5-48ad-bdc6-fd60d0091cb6.webp' returned non-zero exit status 127. +2025-04-11 19:58:19,994 - logging_config - WARNING - Retrying b095e7b8-adf4-42fd-bc87-0e689eb7b7cb.mp3... (1/3) +2025-04-11 19:58:19,994 - logging_config - WARNING - Retrying 1137ba89-ceba-4d98-9f64-35097398ab09.mp3... (1/3) +2025-04-11 19:58:19,994 - logging_config - WARNING - Retrying d0711a91-01c5-48ad-bdc6-fd60d0091cb6.jpg... (2/3) +2025-04-11 19:58:19,997 - logging_config - ERROR - Failed to download 96a62d4d-b0b2-4778-bd4b-2a4e6d50130a.mp3: Command 'aria2c -o "course/671/96a62d4d-b0b2-4778-bd4b-2a4e6d50130a.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/96a62d4d-b0b2-4778-bd4b-2a4e6d50130a.mp3' returned non-zero exit status 127. +2025-04-11 19:58:19,998 - logging_config - ERROR - Failed to download a8243f58-5623-4769-bc56-66c4d9471b82.mp3: Command 'aria2c -o "course/671/a8243f58-5623-4769-bc56-66c4d9471b82.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/a8243f58-5623-4769-bc56-66c4d9471b82.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,002 - logging_config - WARNING - Retrying 96a62d4d-b0b2-4778-bd4b-2a4e6d50130a.mp3... (2/3) +2025-04-11 19:58:20,003 - logging_config - ERROR - Failed to download b095e7b8-adf4-42fd-bc87-0e689eb7b7cb.mp3: Command 'aria2c -o "course/671/b095e7b8-adf4-42fd-bc87-0e689eb7b7cb.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/b095e7b8-adf4-42fd-bc87-0e689eb7b7cb.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,003 - logging_config - WARNING - Retrying a8243f58-5623-4769-bc56-66c4d9471b82.mp3... (2/3) +2025-04-11 19:58:20,004 - logging_config - ERROR - Failed to download 1137ba89-ceba-4d98-9f64-35097398ab09.mp3: Command 'aria2c -o "course/671/1137ba89-ceba-4d98-9f64-35097398ab09.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/1137ba89-ceba-4d98-9f64-35097398ab09.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,005 - logging_config - WARNING - Retrying b095e7b8-adf4-42fd-bc87-0e689eb7b7cb.mp3... (2/3) +2025-04-11 19:58:20,008 - logging_config - WARNING - Retrying 1137ba89-ceba-4d98-9f64-35097398ab09.mp3... (2/3) +2025-04-11 19:58:20,008 - logging_config - ERROR - Failed to download 96a62d4d-b0b2-4778-bd4b-2a4e6d50130a.mp3: Command 'aria2c -o "course/671/96a62d4d-b0b2-4778-bd4b-2a4e6d50130a.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/96a62d4d-b0b2-4778-bd4b-2a4e6d50130a.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,011 - logging_config - ERROR - Failed to download d0711a91-01c5-48ad-bdc6-fd60d0091cb6.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/d0711a91-01c5-48ad-bdc6-fd60d0091cb6.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/d0711a91-01c5-48ad-bdc6-fd60d0091cb6.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,011 - logging_config - ERROR - Failed to download a8243f58-5623-4769-bc56-66c4d9471b82.mp3: Command 'aria2c -o "course/671/a8243f58-5623-4769-bc56-66c4d9471b82.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/a8243f58-5623-4769-bc56-66c4d9471b82.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,013 - logging_config - ERROR - Failed to download 96a62d4d-b0b2-4778-bd4b-2a4e6d50130a.mp3 after 3 attempts. +2025-04-11 19:58:20,014 - logging_config - ERROR - Failed to download d0711a91-01c5-48ad-bdc6-fd60d0091cb6.jpg after 3 attempts. +2025-04-11 19:58:20,014 - logging_config - ERROR - Failed to download a8243f58-5623-4769-bc56-66c4d9471b82.mp3 after 3 attempts. +2025-04-11 19:58:20,015 - logging_config - ERROR - Failed to download b095e7b8-adf4-42fd-bc87-0e689eb7b7cb.mp3: Command 'aria2c -o "course/671/b095e7b8-adf4-42fd-bc87-0e689eb7b7cb.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/b095e7b8-adf4-42fd-bc87-0e689eb7b7cb.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,017 - logging_config - ERROR - Failed to download 1137ba89-ceba-4d98-9f64-35097398ab09.mp3: Command 'aria2c -o "course/671/1137ba89-ceba-4d98-9f64-35097398ab09.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/1137ba89-ceba-4d98-9f64-35097398ab09.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,020 - logging_config - ERROR - Failed to download 8ea6664b-ded6-4877-af3f-5a42c82ced1b.jpg: Command 'aria2c -o "course/671/jpg/8ea6664b-ded6-4877-af3f-5a42c82ced1b.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/8ea6664b-ded6-4877-af3f-5a42c82ced1b.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,021 - logging_config - ERROR - Failed to download b095e7b8-adf4-42fd-bc87-0e689eb7b7cb.mp3 after 3 attempts. +2025-04-11 19:58:20,021 - logging_config - ERROR - Failed to download 1137ba89-ceba-4d98-9f64-35097398ab09.mp3 after 3 attempts. +2025-04-11 19:58:20,021 - logging_config - WARNING - Retrying 8ea6664b-ded6-4877-af3f-5a42c82ced1b.jpg... (1/3) +2025-04-11 19:58:20,022 - logging_config - ERROR - Failed to download 1a69ac76-0dfd-4050-924f-02e115c265b8.mp3: Command 'aria2c -o "course/671/1a69ac76-0dfd-4050-924f-02e115c265b8.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/1a69ac76-0dfd-4050-924f-02e115c265b8.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,024 - logging_config - ERROR - Failed to download 3a830b70-ea66-45ed-927f-aadce9da506f.jpg: Command 'aria2c -o "course/671/jpg/3a830b70-ea66-45ed-927f-aadce9da506f.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/3a830b70-ea66-45ed-927f-aadce9da506f.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,026 - logging_config - WARNING - Retrying 1a69ac76-0dfd-4050-924f-02e115c265b8.mp3... (1/3) +2025-04-11 19:58:20,027 - logging_config - ERROR - Failed to download 50be901a-724b-40c3-a6e1-2d5d5f5820fd.jpg: Command 'aria2c -o "course/671/jpg/50be901a-724b-40c3-a6e1-2d5d5f5820fd.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/50be901a-724b-40c3-a6e1-2d5d5f5820fd.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,027 - logging_config - WARNING - Retrying 3a830b70-ea66-45ed-927f-aadce9da506f.jpg... (1/3) +2025-04-11 19:58:20,029 - logging_config - ERROR - Failed to download 73c70423-6089-4b44-a402-01942f9da3e4.mp3: Command 'aria2c -o "course/671/73c70423-6089-4b44-a402-01942f9da3e4.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/73c70423-6089-4b44-a402-01942f9da3e4.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,029 - logging_config - WARNING - Retrying 50be901a-724b-40c3-a6e1-2d5d5f5820fd.jpg... (1/3) +2025-04-11 19:58:20,029 - logging_config - WARNING - Retrying 73c70423-6089-4b44-a402-01942f9da3e4.mp3... (1/3) +2025-04-11 19:58:20,032 - logging_config - ERROR - Failed to download 1a69ac76-0dfd-4050-924f-02e115c265b8.mp3: Command 'aria2c -o "course/671/1a69ac76-0dfd-4050-924f-02e115c265b8.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/1a69ac76-0dfd-4050-924f-02e115c265b8.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,032 - logging_config - ERROR - Failed to download 8ea6664b-ded6-4877-af3f-5a42c82ced1b.jpg: Command 'aria2c -o "course/671/jpg/jpg/8ea6664b-ded6-4877-af3f-5a42c82ced1b.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/8ea6664b-ded6-4877-af3f-5a42c82ced1b.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,034 - logging_config - WARNING - Retrying 1a69ac76-0dfd-4050-924f-02e115c265b8.mp3... (2/3) +2025-04-11 19:58:20,035 - logging_config - ERROR - Failed to download 3a830b70-ea66-45ed-927f-aadce9da506f.jpg: Command 'aria2c -o "course/671/jpg/jpg/3a830b70-ea66-45ed-927f-aadce9da506f.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/3a830b70-ea66-45ed-927f-aadce9da506f.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,035 - logging_config - WARNING - Retrying 8ea6664b-ded6-4877-af3f-5a42c82ced1b.jpg... (2/3) +2025-04-11 19:58:20,037 - logging_config - ERROR - Failed to download 50be901a-724b-40c3-a6e1-2d5d5f5820fd.jpg: Command 'aria2c -o "course/671/jpg/jpg/50be901a-724b-40c3-a6e1-2d5d5f5820fd.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/50be901a-724b-40c3-a6e1-2d5d5f5820fd.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,038 - logging_config - WARNING - Retrying 3a830b70-ea66-45ed-927f-aadce9da506f.jpg... (2/3) +2025-04-11 19:58:20,038 - logging_config - ERROR - Failed to download 73c70423-6089-4b44-a402-01942f9da3e4.mp3: Command 'aria2c -o "course/671/73c70423-6089-4b44-a402-01942f9da3e4.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/73c70423-6089-4b44-a402-01942f9da3e4.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,040 - logging_config - WARNING - Retrying 50be901a-724b-40c3-a6e1-2d5d5f5820fd.jpg... (2/3) +2025-04-11 19:58:20,040 - logging_config - ERROR - Failed to download 1a69ac76-0dfd-4050-924f-02e115c265b8.mp3: Command 'aria2c -o "course/671/1a69ac76-0dfd-4050-924f-02e115c265b8.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/1a69ac76-0dfd-4050-924f-02e115c265b8.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,042 - logging_config - WARNING - Retrying 73c70423-6089-4b44-a402-01942f9da3e4.mp3... (2/3) +2025-04-11 19:58:20,044 - logging_config - ERROR - Failed to download 1a69ac76-0dfd-4050-924f-02e115c265b8.mp3 after 3 attempts. +2025-04-11 19:58:20,044 - logging_config - ERROR - Failed to download 8ea6664b-ded6-4877-af3f-5a42c82ced1b.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/8ea6664b-ded6-4877-af3f-5a42c82ced1b.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/8ea6664b-ded6-4877-af3f-5a42c82ced1b.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,046 - logging_config - ERROR - Failed to download 3a830b70-ea66-45ed-927f-aadce9da506f.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/3a830b70-ea66-45ed-927f-aadce9da506f.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/3a830b70-ea66-45ed-927f-aadce9da506f.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,047 - logging_config - ERROR - Failed to download 8ea6664b-ded6-4877-af3f-5a42c82ced1b.jpg after 3 attempts. +2025-04-11 19:58:20,048 - logging_config - ERROR - Failed to download 50be901a-724b-40c3-a6e1-2d5d5f5820fd.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/50be901a-724b-40c3-a6e1-2d5d5f5820fd.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/50be901a-724b-40c3-a6e1-2d5d5f5820fd.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,048 - logging_config - ERROR - Failed to download 3a830b70-ea66-45ed-927f-aadce9da506f.jpg after 3 attempts. +2025-04-11 19:58:20,050 - logging_config - ERROR - Failed to download 73c70423-6089-4b44-a402-01942f9da3e4.mp3: Command 'aria2c -o "course/671/73c70423-6089-4b44-a402-01942f9da3e4.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/73c70423-6089-4b44-a402-01942f9da3e4.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,050 - logging_config - ERROR - Failed to download 50be901a-724b-40c3-a6e1-2d5d5f5820fd.jpg after 3 attempts. +2025-04-11 19:58:20,053 - logging_config - ERROR - Failed to download 73c70423-6089-4b44-a402-01942f9da3e4.mp3 after 3 attempts. +2025-04-11 19:58:20,053 - logging_config - ERROR - Failed to download 864709c3-38a1-47e5-90bc-a2566c5a5011.mp3: Command 'aria2c -o "course/671/864709c3-38a1-47e5-90bc-a2566c5a5011.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/864709c3-38a1-47e5-90bc-a2566c5a5011.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,053 - logging_config - ERROR - Failed to download 4ec2bb3d-13be-461f-ac98-8e5126d43612.mp3: Command 'aria2c -o "course/671/4ec2bb3d-13be-461f-ac98-8e5126d43612.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4ec2bb3d-13be-461f-ac98-8e5126d43612.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,055 - logging_config - WARNING - Retrying 864709c3-38a1-47e5-90bc-a2566c5a5011.mp3... (1/3) +2025-04-11 19:58:20,057 - logging_config - ERROR - Failed to download 0cdf6ae2-a4a7-4a07-a9bc-f065ad3f78fe.mp3: Command 'aria2c -o "course/671/0cdf6ae2-a4a7-4a07-a9bc-f065ad3f78fe.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/0cdf6ae2-a4a7-4a07-a9bc-f065ad3f78fe.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,057 - logging_config - WARNING - Retrying 4ec2bb3d-13be-461f-ac98-8e5126d43612.mp3... (1/3) +2025-04-11 19:58:20,059 - logging_config - ERROR - Failed to download 516e5086-6094-4f3e-acee-ade1e1d3af44.mp3: Command 'aria2c -o "course/671/516e5086-6094-4f3e-acee-ade1e1d3af44.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/516e5086-6094-4f3e-acee-ade1e1d3af44.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,059 - logging_config - WARNING - Retrying 0cdf6ae2-a4a7-4a07-a9bc-f065ad3f78fe.mp3... (1/3) +2025-04-11 19:58:20,061 - logging_config - WARNING - Retrying 516e5086-6094-4f3e-acee-ade1e1d3af44.mp3... (1/3) +2025-04-11 19:58:20,061 - logging_config - ERROR - Failed to download 2e2b20b4-8658-4c63-a4b2-da15917e9d7e.mp3: Command 'aria2c -o "course/671/2e2b20b4-8658-4c63-a4b2-da15917e9d7e.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/2e2b20b4-8658-4c63-a4b2-da15917e9d7e.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,062 - logging_config - ERROR - Failed to download 864709c3-38a1-47e5-90bc-a2566c5a5011.mp3: Command 'aria2c -o "course/671/864709c3-38a1-47e5-90bc-a2566c5a5011.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/864709c3-38a1-47e5-90bc-a2566c5a5011.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,064 - logging_config - ERROR - Failed to download 4ec2bb3d-13be-461f-ac98-8e5126d43612.mp3: Command 'aria2c -o "course/671/4ec2bb3d-13be-461f-ac98-8e5126d43612.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4ec2bb3d-13be-461f-ac98-8e5126d43612.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,064 - logging_config - WARNING - Retrying 2e2b20b4-8658-4c63-a4b2-da15917e9d7e.mp3... (1/3) +2025-04-11 19:58:20,064 - logging_config - WARNING - Retrying 864709c3-38a1-47e5-90bc-a2566c5a5011.mp3... (2/3) +2025-04-11 19:58:20,064 - logging_config - WARNING - Retrying 4ec2bb3d-13be-461f-ac98-8e5126d43612.mp3... (2/3) +2025-04-11 19:58:20,066 - logging_config - ERROR - Failed to download 0cdf6ae2-a4a7-4a07-a9bc-f065ad3f78fe.mp3: Command 'aria2c -o "course/671/0cdf6ae2-a4a7-4a07-a9bc-f065ad3f78fe.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/0cdf6ae2-a4a7-4a07-a9bc-f065ad3f78fe.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,070 - logging_config - ERROR - Failed to download 2e2b20b4-8658-4c63-a4b2-da15917e9d7e.mp3: Command 'aria2c -o "course/671/2e2b20b4-8658-4c63-a4b2-da15917e9d7e.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/2e2b20b4-8658-4c63-a4b2-da15917e9d7e.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,070 - logging_config - ERROR - Failed to download 516e5086-6094-4f3e-acee-ade1e1d3af44.mp3: Command 'aria2c -o "course/671/516e5086-6094-4f3e-acee-ade1e1d3af44.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/516e5086-6094-4f3e-acee-ade1e1d3af44.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,071 - logging_config - WARNING - Retrying 0cdf6ae2-a4a7-4a07-a9bc-f065ad3f78fe.mp3... (2/3) +2025-04-11 19:58:20,071 - logging_config - WARNING - Retrying 2e2b20b4-8658-4c63-a4b2-da15917e9d7e.mp3... (2/3) +2025-04-11 19:58:20,071 - logging_config - WARNING - Retrying 516e5086-6094-4f3e-acee-ade1e1d3af44.mp3... (2/3) +2025-04-11 19:58:20,072 - logging_config - ERROR - Failed to download 864709c3-38a1-47e5-90bc-a2566c5a5011.mp3: Command 'aria2c -o "course/671/864709c3-38a1-47e5-90bc-a2566c5a5011.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/864709c3-38a1-47e5-90bc-a2566c5a5011.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,073 - logging_config - ERROR - Failed to download 4ec2bb3d-13be-461f-ac98-8e5126d43612.mp3: Command 'aria2c -o "course/671/4ec2bb3d-13be-461f-ac98-8e5126d43612.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4ec2bb3d-13be-461f-ac98-8e5126d43612.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,075 - logging_config - ERROR - Failed to download 864709c3-38a1-47e5-90bc-a2566c5a5011.mp3 after 3 attempts. +2025-04-11 19:58:20,075 - logging_config - ERROR - Failed to download 0cdf6ae2-a4a7-4a07-a9bc-f065ad3f78fe.mp3: Command 'aria2c -o "course/671/0cdf6ae2-a4a7-4a07-a9bc-f065ad3f78fe.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/0cdf6ae2-a4a7-4a07-a9bc-f065ad3f78fe.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,075 - logging_config - ERROR - Failed to download 4ec2bb3d-13be-461f-ac98-8e5126d43612.mp3 after 3 attempts. +2025-04-11 19:58:20,076 - logging_config - ERROR - Failed to download 0cdf6ae2-a4a7-4a07-a9bc-f065ad3f78fe.mp3 after 3 attempts. +2025-04-11 19:58:20,077 - logging_config - ERROR - Failed to download 2e2b20b4-8658-4c63-a4b2-da15917e9d7e.mp3: Command 'aria2c -o "course/671/2e2b20b4-8658-4c63-a4b2-da15917e9d7e.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/2e2b20b4-8658-4c63-a4b2-da15917e9d7e.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,080 - logging_config - ERROR - Failed to download 2e2b20b4-8658-4c63-a4b2-da15917e9d7e.mp3 after 3 attempts. +2025-04-11 19:58:20,081 - logging_config - ERROR - Failed to download 21d71121-eeed-4a51-a34d-9231d2aad55f.mp3: Command 'aria2c -o "course/671/21d71121-eeed-4a51-a34d-9231d2aad55f.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/21d71121-eeed-4a51-a34d-9231d2aad55f.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,082 - logging_config - ERROR - Failed to download 1f509648-5a78-4960-b62d-f7e4bc5f9b86.mp3: Command 'aria2c -o "course/671/1f509648-5a78-4960-b62d-f7e4bc5f9b86.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/1f509648-5a78-4960-b62d-f7e4bc5f9b86.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,082 - logging_config - ERROR - Failed to download 516e5086-6094-4f3e-acee-ade1e1d3af44.mp3: Command 'aria2c -o "course/671/516e5086-6094-4f3e-acee-ade1e1d3af44.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/516e5086-6094-4f3e-acee-ade1e1d3af44.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,082 - logging_config - WARNING - Retrying 21d71121-eeed-4a51-a34d-9231d2aad55f.mp3... (1/3) +2025-04-11 19:58:20,082 - logging_config - WARNING - Retrying 1f509648-5a78-4960-b62d-f7e4bc5f9b86.mp3... (1/3) +2025-04-11 19:58:20,082 - logging_config - ERROR - Failed to download 516e5086-6094-4f3e-acee-ade1e1d3af44.mp3 after 3 attempts. +2025-04-11 19:58:20,085 - logging_config - ERROR - Failed to download 9749ba72-3317-45e7-afd1-29ca4e6636da.mp3: Command 'aria2c -o "course/671/9749ba72-3317-45e7-afd1-29ca4e6636da.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/9749ba72-3317-45e7-afd1-29ca4e6636da.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,086 - logging_config - ERROR - Failed to download 4c09afdc-42a1-4bf3-8a50-dd50458b24ac.mp3: Command 'aria2c -o "course/671/4c09afdc-42a1-4bf3-8a50-dd50458b24ac.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4c09afdc-42a1-4bf3-8a50-dd50458b24ac.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,086 - logging_config - ERROR - Failed to download 21d71121-eeed-4a51-a34d-9231d2aad55f.mp3: Command 'aria2c -o "course/671/21d71121-eeed-4a51-a34d-9231d2aad55f.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/21d71121-eeed-4a51-a34d-9231d2aad55f.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,086 - logging_config - WARNING - Retrying 9749ba72-3317-45e7-afd1-29ca4e6636da.mp3... (1/3) +2025-04-11 19:58:20,086 - logging_config - WARNING - Retrying 4c09afdc-42a1-4bf3-8a50-dd50458b24ac.mp3... (1/3) +2025-04-11 19:58:20,087 - logging_config - WARNING - Retrying 21d71121-eeed-4a51-a34d-9231d2aad55f.mp3... (2/3) +2025-04-11 19:58:20,089 - logging_config - ERROR - Failed to download 1f509648-5a78-4960-b62d-f7e4bc5f9b86.mp3: Command 'aria2c -o "course/671/1f509648-5a78-4960-b62d-f7e4bc5f9b86.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/1f509648-5a78-4960-b62d-f7e4bc5f9b86.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,090 - logging_config - ERROR - Failed to download 496aa188-d99a-4c7c-bf7e-3a25b5a52032.jpg: Command 'aria2c -o "course/671/jpg/496aa188-d99a-4c7c-bf7e-3a25b5a52032.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/496aa188-d99a-4c7c-bf7e-3a25b5a52032.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,091 - logging_config - WARNING - Retrying 1f509648-5a78-4960-b62d-f7e4bc5f9b86.mp3... (2/3) +2025-04-11 19:58:20,091 - logging_config - ERROR - Failed to download 9749ba72-3317-45e7-afd1-29ca4e6636da.mp3: Command 'aria2c -o "course/671/9749ba72-3317-45e7-afd1-29ca4e6636da.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/9749ba72-3317-45e7-afd1-29ca4e6636da.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,091 - logging_config - WARNING - Retrying 496aa188-d99a-4c7c-bf7e-3a25b5a52032.jpg... (1/3) +2025-04-11 19:58:20,092 - logging_config - ERROR - Failed to download 4c09afdc-42a1-4bf3-8a50-dd50458b24ac.mp3: Command 'aria2c -o "course/671/4c09afdc-42a1-4bf3-8a50-dd50458b24ac.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4c09afdc-42a1-4bf3-8a50-dd50458b24ac.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,093 - logging_config - WARNING - Retrying 9749ba72-3317-45e7-afd1-29ca4e6636da.mp3... (2/3) +2025-04-11 19:58:20,094 - logging_config - WARNING - Retrying 4c09afdc-42a1-4bf3-8a50-dd50458b24ac.mp3... (2/3) +2025-04-11 19:58:20,094 - logging_config - ERROR - Failed to download 21d71121-eeed-4a51-a34d-9231d2aad55f.mp3: Command 'aria2c -o "course/671/21d71121-eeed-4a51-a34d-9231d2aad55f.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/21d71121-eeed-4a51-a34d-9231d2aad55f.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,097 - logging_config - ERROR - Failed to download 1f509648-5a78-4960-b62d-f7e4bc5f9b86.mp3: Command 'aria2c -o "course/671/1f509648-5a78-4960-b62d-f7e4bc5f9b86.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/1f509648-5a78-4960-b62d-f7e4bc5f9b86.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,098 - logging_config - ERROR - Failed to download 21d71121-eeed-4a51-a34d-9231d2aad55f.mp3 after 3 attempts. +2025-04-11 19:58:20,098 - logging_config - ERROR - Failed to download 496aa188-d99a-4c7c-bf7e-3a25b5a52032.jpg: Command 'aria2c -o "course/671/jpg/jpg/496aa188-d99a-4c7c-bf7e-3a25b5a52032.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/496aa188-d99a-4c7c-bf7e-3a25b5a52032.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,098 - logging_config - ERROR - Failed to download 1f509648-5a78-4960-b62d-f7e4bc5f9b86.mp3 after 3 attempts. +2025-04-11 19:58:20,099 - logging_config - ERROR - Failed to download 9749ba72-3317-45e7-afd1-29ca4e6636da.mp3: Command 'aria2c -o "course/671/9749ba72-3317-45e7-afd1-29ca4e6636da.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/9749ba72-3317-45e7-afd1-29ca4e6636da.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,100 - logging_config - WARNING - Retrying 496aa188-d99a-4c7c-bf7e-3a25b5a52032.jpg... (2/3) +2025-04-11 19:58:20,101 - logging_config - ERROR - Failed to download 4c09afdc-42a1-4bf3-8a50-dd50458b24ac.mp3: Command 'aria2c -o "course/671/4c09afdc-42a1-4bf3-8a50-dd50458b24ac.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4c09afdc-42a1-4bf3-8a50-dd50458b24ac.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,101 - logging_config - ERROR - Failed to download 9749ba72-3317-45e7-afd1-29ca4e6636da.mp3 after 3 attempts. +2025-04-11 19:58:20,103 - logging_config - ERROR - Failed to download ea22a8b6-d273-416c-b1cc-5a79cd2a4cb3.jpg: Command 'aria2c -o "course/671/jpg/ea22a8b6-d273-416c-b1cc-5a79cd2a4cb3.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/ea22a8b6-d273-416c-b1cc-5a79cd2a4cb3.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,103 - logging_config - ERROR - Failed to download 4c09afdc-42a1-4bf3-8a50-dd50458b24ac.mp3 after 3 attempts. +2025-04-11 19:58:20,103 - logging_config - WARNING - Retrying ea22a8b6-d273-416c-b1cc-5a79cd2a4cb3.jpg... (1/3) +2025-04-11 19:58:20,106 - logging_config - ERROR - Failed to download 32d4ea6d-7bbd-4adf-bdd0-9c0cc508ebd9.mp3: Command 'aria2c -o "course/671/32d4ea6d-7bbd-4adf-bdd0-9c0cc508ebd9.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/32d4ea6d-7bbd-4adf-bdd0-9c0cc508ebd9.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,106 - logging_config - ERROR - Failed to download 496aa188-d99a-4c7c-bf7e-3a25b5a52032.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/496aa188-d99a-4c7c-bf7e-3a25b5a52032.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/496aa188-d99a-4c7c-bf7e-3a25b5a52032.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,108 - logging_config - ERROR - Failed to download 80ec288c-4a5a-418c-873a-f9c5f2432203.mp3: Command 'aria2c -o "course/671/80ec288c-4a5a-418c-873a-f9c5f2432203.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/80ec288c-4a5a-418c-873a-f9c5f2432203.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,109 - logging_config - WARNING - Retrying 32d4ea6d-7bbd-4adf-bdd0-9c0cc508ebd9.mp3... (1/3) +2025-04-11 19:58:20,109 - logging_config - ERROR - Failed to download 496aa188-d99a-4c7c-bf7e-3a25b5a52032.jpg after 3 attempts. +2025-04-11 19:58:20,109 - logging_config - WARNING - Retrying 80ec288c-4a5a-418c-873a-f9c5f2432203.mp3... (1/3) +2025-04-11 19:58:20,109 - logging_config - ERROR - Failed to download dd07a431-5cbc-4adf-91b8-0707961a70eb.jpg: Command 'aria2c -o "course/671/jpg/dd07a431-5cbc-4adf-91b8-0707961a70eb.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/dd07a431-5cbc-4adf-91b8-0707961a70eb.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,112 - logging_config - ERROR - Failed to download ea22a8b6-d273-416c-b1cc-5a79cd2a4cb3.jpg: Command 'aria2c -o "course/671/jpg/jpg/ea22a8b6-d273-416c-b1cc-5a79cd2a4cb3.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/ea22a8b6-d273-416c-b1cc-5a79cd2a4cb3.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,114 - logging_config - WARNING - Retrying dd07a431-5cbc-4adf-91b8-0707961a70eb.jpg... (1/3) +2025-04-11 19:58:20,114 - logging_config - ERROR - Failed to download 32d4ea6d-7bbd-4adf-bdd0-9c0cc508ebd9.mp3: Command 'aria2c -o "course/671/32d4ea6d-7bbd-4adf-bdd0-9c0cc508ebd9.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/32d4ea6d-7bbd-4adf-bdd0-9c0cc508ebd9.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,114 - logging_config - WARNING - Retrying ea22a8b6-d273-416c-b1cc-5a79cd2a4cb3.jpg... (2/3) +2025-04-11 19:58:20,115 - logging_config - WARNING - Retrying 32d4ea6d-7bbd-4adf-bdd0-9c0cc508ebd9.mp3... (2/3) +2025-04-11 19:58:20,115 - logging_config - ERROR - Failed to download 7b157f7c-ea91-4fe7-8ae5-c9427f819a93.jpg: Command 'aria2c -o "course/671/jpg/7b157f7c-ea91-4fe7-8ae5-c9427f819a93.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/7b157f7c-ea91-4fe7-8ae5-c9427f819a93.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,117 - logging_config - ERROR - Failed to download 80ec288c-4a5a-418c-873a-f9c5f2432203.mp3: Command 'aria2c -o "course/671/80ec288c-4a5a-418c-873a-f9c5f2432203.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/80ec288c-4a5a-418c-873a-f9c5f2432203.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,118 - logging_config - ERROR - Failed to download dd07a431-5cbc-4adf-91b8-0707961a70eb.jpg: Command 'aria2c -o "course/671/jpg/jpg/dd07a431-5cbc-4adf-91b8-0707961a70eb.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/dd07a431-5cbc-4adf-91b8-0707961a70eb.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,119 - logging_config - WARNING - Retrying 7b157f7c-ea91-4fe7-8ae5-c9427f819a93.jpg... (1/3) +2025-04-11 19:58:20,119 - logging_config - WARNING - Retrying 80ec288c-4a5a-418c-873a-f9c5f2432203.mp3... (2/3) +2025-04-11 19:58:20,119 - logging_config - WARNING - Retrying dd07a431-5cbc-4adf-91b8-0707961a70eb.jpg... (2/3) +2025-04-11 19:58:20,120 - logging_config - ERROR - Failed to download ea22a8b6-d273-416c-b1cc-5a79cd2a4cb3.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/ea22a8b6-d273-416c-b1cc-5a79cd2a4cb3.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/ea22a8b6-d273-416c-b1cc-5a79cd2a4cb3.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,122 - logging_config - ERROR - Failed to download 32d4ea6d-7bbd-4adf-bdd0-9c0cc508ebd9.mp3: Command 'aria2c -o "course/671/32d4ea6d-7bbd-4adf-bdd0-9c0cc508ebd9.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/32d4ea6d-7bbd-4adf-bdd0-9c0cc508ebd9.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,123 - logging_config - ERROR - Failed to download 7b157f7c-ea91-4fe7-8ae5-c9427f819a93.jpg: Command 'aria2c -o "course/671/jpg/jpg/7b157f7c-ea91-4fe7-8ae5-c9427f819a93.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/7b157f7c-ea91-4fe7-8ae5-c9427f819a93.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,123 - logging_config - ERROR - Failed to download ea22a8b6-d273-416c-b1cc-5a79cd2a4cb3.jpg after 3 attempts. +2025-04-11 19:58:20,123 - logging_config - ERROR - Failed to download 32d4ea6d-7bbd-4adf-bdd0-9c0cc508ebd9.mp3 after 3 attempts. +2025-04-11 19:58:20,123 - logging_config - WARNING - Retrying 7b157f7c-ea91-4fe7-8ae5-c9427f819a93.jpg... (2/3) +2025-04-11 19:58:20,125 - logging_config - ERROR - Failed to download 80ec288c-4a5a-418c-873a-f9c5f2432203.mp3: Command 'aria2c -o "course/671/80ec288c-4a5a-418c-873a-f9c5f2432203.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/80ec288c-4a5a-418c-873a-f9c5f2432203.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,128 - logging_config - ERROR - Failed to download 25c1397b-97c8-4fb7-ba4e-24735f2f8b77.mp3: Command 'aria2c -o "course/671/25c1397b-97c8-4fb7-ba4e-24735f2f8b77.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/25c1397b-97c8-4fb7-ba4e-24735f2f8b77.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,128 - logging_config - ERROR - Failed to download dd07a431-5cbc-4adf-91b8-0707961a70eb.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/dd07a431-5cbc-4adf-91b8-0707961a70eb.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/dd07a431-5cbc-4adf-91b8-0707961a70eb.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,128 - logging_config - ERROR - Failed to download 80ec288c-4a5a-418c-873a-f9c5f2432203.mp3 after 3 attempts. +2025-04-11 19:58:20,128 - logging_config - WARNING - Retrying 25c1397b-97c8-4fb7-ba4e-24735f2f8b77.mp3... (1/3) +2025-04-11 19:58:20,128 - logging_config - ERROR - Failed to download dd07a431-5cbc-4adf-91b8-0707961a70eb.jpg after 3 attempts. +2025-04-11 19:58:20,132 - logging_config - ERROR - Failed to download 7b157f7c-ea91-4fe7-8ae5-c9427f819a93.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/7b157f7c-ea91-4fe7-8ae5-c9427f819a93.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/7b157f7c-ea91-4fe7-8ae5-c9427f819a93.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,132 - logging_config - ERROR - Failed to download b99fc092-55e5-4a9f-96ae-04c2e18e459d.mp3: Command 'aria2c -o "course/671/b99fc092-55e5-4a9f-96ae-04c2e18e459d.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/b99fc092-55e5-4a9f-96ae-04c2e18e459d.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,133 - logging_config - ERROR - Failed to download 7b157f7c-ea91-4fe7-8ae5-c9427f819a93.jpg after 3 attempts. +2025-04-11 19:58:20,133 - logging_config - ERROR - Failed to download 0eba36e0-7ed3-420d-be33-42f07691443d.mp3: Command 'aria2c -o "course/671/0eba36e0-7ed3-420d-be33-42f07691443d.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/0eba36e0-7ed3-420d-be33-42f07691443d.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,133 - logging_config - WARNING - Retrying b99fc092-55e5-4a9f-96ae-04c2e18e459d.mp3... (1/3) +2025-04-11 19:58:20,134 - logging_config - WARNING - Retrying 0eba36e0-7ed3-420d-be33-42f07691443d.mp3... (1/3) +2025-04-11 19:58:20,134 - logging_config - ERROR - Failed to download 25c1397b-97c8-4fb7-ba4e-24735f2f8b77.mp3: Command 'aria2c -o "course/671/25c1397b-97c8-4fb7-ba4e-24735f2f8b77.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/25c1397b-97c8-4fb7-ba4e-24735f2f8b77.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,136 - logging_config - WARNING - Retrying 25c1397b-97c8-4fb7-ba4e-24735f2f8b77.mp3... (2/3) +2025-04-11 19:58:20,138 - logging_config - ERROR - Failed to download 07dddab7-5700-4501-ae66-82dca4a58a3e.mp3: Command 'aria2c -o "course/671/07dddab7-5700-4501-ae66-82dca4a58a3e.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/07dddab7-5700-4501-ae66-82dca4a58a3e.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,138 - logging_config - ERROR - Failed to download 4f94be91-14f8-4ffb-92be-102be9349e75.mp3: Command 'aria2c -o "course/671/4f94be91-14f8-4ffb-92be-102be9349e75.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4f94be91-14f8-4ffb-92be-102be9349e75.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,139 - logging_config - WARNING - Retrying 07dddab7-5700-4501-ae66-82dca4a58a3e.mp3... (1/3) +2025-04-11 19:58:20,139 - logging_config - WARNING - Retrying 4f94be91-14f8-4ffb-92be-102be9349e75.mp3... (1/3) +2025-04-11 19:58:20,139 - logging_config - ERROR - Failed to download b99fc092-55e5-4a9f-96ae-04c2e18e459d.mp3: Command 'aria2c -o "course/671/b99fc092-55e5-4a9f-96ae-04c2e18e459d.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/b99fc092-55e5-4a9f-96ae-04c2e18e459d.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,139 - logging_config - ERROR - Failed to download 0eba36e0-7ed3-420d-be33-42f07691443d.mp3: Command 'aria2c -o "course/671/0eba36e0-7ed3-420d-be33-42f07691443d.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/0eba36e0-7ed3-420d-be33-42f07691443d.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,142 - logging_config - ERROR - Failed to download 25c1397b-97c8-4fb7-ba4e-24735f2f8b77.mp3: Command 'aria2c -o "course/671/25c1397b-97c8-4fb7-ba4e-24735f2f8b77.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/25c1397b-97c8-4fb7-ba4e-24735f2f8b77.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,142 - logging_config - WARNING - Retrying b99fc092-55e5-4a9f-96ae-04c2e18e459d.mp3... (2/3) +2025-04-11 19:58:20,142 - logging_config - WARNING - Retrying 0eba36e0-7ed3-420d-be33-42f07691443d.mp3... (2/3) +2025-04-11 19:58:20,142 - logging_config - ERROR - Failed to download 25c1397b-97c8-4fb7-ba4e-24735f2f8b77.mp3 after 3 attempts. +2025-04-11 19:58:20,144 - logging_config - ERROR - Failed to download 07dddab7-5700-4501-ae66-82dca4a58a3e.mp3: Command 'aria2c -o "course/671/07dddab7-5700-4501-ae66-82dca4a58a3e.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/07dddab7-5700-4501-ae66-82dca4a58a3e.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,146 - logging_config - WARNING - Retrying 07dddab7-5700-4501-ae66-82dca4a58a3e.mp3... (2/3) +2025-04-11 19:58:20,146 - logging_config - ERROR - Failed to download 4f94be91-14f8-4ffb-92be-102be9349e75.mp3: Command 'aria2c -o "course/671/4f94be91-14f8-4ffb-92be-102be9349e75.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4f94be91-14f8-4ffb-92be-102be9349e75.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,148 - logging_config - ERROR - Failed to download b99fc092-55e5-4a9f-96ae-04c2e18e459d.mp3: Command 'aria2c -o "course/671/b99fc092-55e5-4a9f-96ae-04c2e18e459d.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/b99fc092-55e5-4a9f-96ae-04c2e18e459d.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,149 - logging_config - WARNING - Retrying 4f94be91-14f8-4ffb-92be-102be9349e75.mp3... (2/3) +2025-04-11 19:58:20,149 - logging_config - ERROR - Failed to download 0eba36e0-7ed3-420d-be33-42f07691443d.mp3: Command 'aria2c -o "course/671/0eba36e0-7ed3-420d-be33-42f07691443d.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/0eba36e0-7ed3-420d-be33-42f07691443d.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,149 - logging_config - ERROR - Failed to download b99fc092-55e5-4a9f-96ae-04c2e18e459d.mp3 after 3 attempts. +2025-04-11 19:58:20,150 - logging_config - ERROR - Failed to download 0eba36e0-7ed3-420d-be33-42f07691443d.mp3 after 3 attempts. +2025-04-11 19:58:20,150 - logging_config - ERROR - Failed to download ae0e7ddc-ae5c-4669-98b2-9b409ab9a37f.mp3: Command 'aria2c -o "course/671/ae0e7ddc-ae5c-4669-98b2-9b409ab9a37f.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/ae0e7ddc-ae5c-4669-98b2-9b409ab9a37f.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,152 - logging_config - ERROR - Failed to download 07dddab7-5700-4501-ae66-82dca4a58a3e.mp3: Command 'aria2c -o "course/671/07dddab7-5700-4501-ae66-82dca4a58a3e.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/07dddab7-5700-4501-ae66-82dca4a58a3e.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,153 - logging_config - WARNING - Retrying ae0e7ddc-ae5c-4669-98b2-9b409ab9a37f.mp3... (1/3) +2025-04-11 19:58:20,153 - logging_config - ERROR - Failed to download 07dddab7-5700-4501-ae66-82dca4a58a3e.mp3 after 3 attempts. +2025-04-11 19:58:20,153 - logging_config - ERROR - Failed to download 4f94be91-14f8-4ffb-92be-102be9349e75.mp3: Command 'aria2c -o "course/671/4f94be91-14f8-4ffb-92be-102be9349e75.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4f94be91-14f8-4ffb-92be-102be9349e75.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,155 - logging_config - ERROR - Failed to download 4f94be91-14f8-4ffb-92be-102be9349e75.mp3 after 3 attempts. +2025-04-11 19:58:20,155 - logging_config - ERROR - Failed to download 5a8344a2-0ed0-41c9-9461-f08e130b23d6.mp3: Command 'aria2c -o "course/671/5a8344a2-0ed0-41c9-9461-f08e130b23d6.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/5a8344a2-0ed0-41c9-9461-f08e130b23d6.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,157 - logging_config - ERROR - Failed to download 79a5793c-371f-4ee5-bca4-80293021db0b.jpg: Command 'aria2c -o "course/671/jpg/79a5793c-371f-4ee5-bca4-80293021db0b.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/79a5793c-371f-4ee5-bca4-80293021db0b.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,157 - logging_config - ERROR - Failed to download ae0e7ddc-ae5c-4669-98b2-9b409ab9a37f.mp3: Command 'aria2c -o "course/671/ae0e7ddc-ae5c-4669-98b2-9b409ab9a37f.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/ae0e7ddc-ae5c-4669-98b2-9b409ab9a37f.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,157 - logging_config - WARNING - Retrying 5a8344a2-0ed0-41c9-9461-f08e130b23d6.mp3... (1/3) +2025-04-11 19:58:20,158 - logging_config - ERROR - Failed to download 142af99f-0b77-4a25-b216-971e301a4b1d.jpg: Command 'aria2c -o "course/671/jpg/142af99f-0b77-4a25-b216-971e301a4b1d.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/142af99f-0b77-4a25-b216-971e301a4b1d.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,158 - logging_config - WARNING - Retrying 79a5793c-371f-4ee5-bca4-80293021db0b.jpg... (1/3) +2025-04-11 19:58:20,158 - logging_config - WARNING - Retrying ae0e7ddc-ae5c-4669-98b2-9b409ab9a37f.mp3... (2/3) +2025-04-11 19:58:20,159 - logging_config - WARNING - Retrying 142af99f-0b77-4a25-b216-971e301a4b1d.jpg... (1/3) +2025-04-11 19:58:20,161 - logging_config - ERROR - Failed to download 50eb71a8-af97-4786-9f29-ce62a6311855.mp3: Command 'aria2c -o "course/671/50eb71a8-af97-4786-9f29-ce62a6311855.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/50eb71a8-af97-4786-9f29-ce62a6311855.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,163 - logging_config - ERROR - Failed to download 5a8344a2-0ed0-41c9-9461-f08e130b23d6.mp3: Command 'aria2c -o "course/671/5a8344a2-0ed0-41c9-9461-f08e130b23d6.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/5a8344a2-0ed0-41c9-9461-f08e130b23d6.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,165 - logging_config - ERROR - Failed to download 79a5793c-371f-4ee5-bca4-80293021db0b.jpg: Command 'aria2c -o "course/671/jpg/jpg/79a5793c-371f-4ee5-bca4-80293021db0b.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/79a5793c-371f-4ee5-bca4-80293021db0b.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,165 - logging_config - WARNING - Retrying 50eb71a8-af97-4786-9f29-ce62a6311855.mp3... (1/3) +2025-04-11 19:58:20,165 - logging_config - WARNING - Retrying 5a8344a2-0ed0-41c9-9461-f08e130b23d6.mp3... (2/3) +2025-04-11 19:58:20,165 - logging_config - WARNING - Retrying 79a5793c-371f-4ee5-bca4-80293021db0b.jpg... (2/3) +2025-04-11 19:58:20,166 - logging_config - ERROR - Failed to download ae0e7ddc-ae5c-4669-98b2-9b409ab9a37f.mp3: Command 'aria2c -o "course/671/ae0e7ddc-ae5c-4669-98b2-9b409ab9a37f.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/ae0e7ddc-ae5c-4669-98b2-9b409ab9a37f.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,168 - logging_config - ERROR - Failed to download 142af99f-0b77-4a25-b216-971e301a4b1d.jpg: Command 'aria2c -o "course/671/jpg/jpg/142af99f-0b77-4a25-b216-971e301a4b1d.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/142af99f-0b77-4a25-b216-971e301a4b1d.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,170 - logging_config - ERROR - Failed to download ae0e7ddc-ae5c-4669-98b2-9b409ab9a37f.mp3 after 3 attempts. +2025-04-11 19:58:20,170 - logging_config - ERROR - Failed to download 50eb71a8-af97-4786-9f29-ce62a6311855.mp3: Command 'aria2c -o "course/671/50eb71a8-af97-4786-9f29-ce62a6311855.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/50eb71a8-af97-4786-9f29-ce62a6311855.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,170 - logging_config - WARNING - Retrying 142af99f-0b77-4a25-b216-971e301a4b1d.jpg... (2/3) +2025-04-11 19:58:20,172 - logging_config - ERROR - Failed to download 5a8344a2-0ed0-41c9-9461-f08e130b23d6.mp3: Command 'aria2c -o "course/671/5a8344a2-0ed0-41c9-9461-f08e130b23d6.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/5a8344a2-0ed0-41c9-9461-f08e130b23d6.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,172 - logging_config - WARNING - Retrying 50eb71a8-af97-4786-9f29-ce62a6311855.mp3... (2/3) +2025-04-11 19:58:20,174 - logging_config - ERROR - Failed to download 79a5793c-371f-4ee5-bca4-80293021db0b.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/79a5793c-371f-4ee5-bca4-80293021db0b.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/79a5793c-371f-4ee5-bca4-80293021db0b.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,174 - logging_config - ERROR - Failed to download 5a8344a2-0ed0-41c9-9461-f08e130b23d6.mp3 after 3 attempts. +2025-04-11 19:58:20,175 - logging_config - ERROR - Failed to download 79a5793c-371f-4ee5-bca4-80293021db0b.jpg after 3 attempts. +2025-04-11 19:58:20,175 - logging_config - ERROR - Failed to download bf6c8eae-17a2-4ad8-8e32-716743438850.mp3: Command 'aria2c -o "course/671/bf6c8eae-17a2-4ad8-8e32-716743438850.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/bf6c8eae-17a2-4ad8-8e32-716743438850.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,177 - logging_config - ERROR - Failed to download 142af99f-0b77-4a25-b216-971e301a4b1d.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/142af99f-0b77-4a25-b216-971e301a4b1d.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/142af99f-0b77-4a25-b216-971e301a4b1d.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,178 - logging_config - WARNING - Retrying bf6c8eae-17a2-4ad8-8e32-716743438850.mp3... (1/3) +2025-04-11 19:58:20,178 - logging_config - ERROR - Failed to download 50eb71a8-af97-4786-9f29-ce62a6311855.mp3: Command 'aria2c -o "course/671/50eb71a8-af97-4786-9f29-ce62a6311855.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/50eb71a8-af97-4786-9f29-ce62a6311855.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,178 - logging_config - ERROR - Failed to download 142af99f-0b77-4a25-b216-971e301a4b1d.jpg after 3 attempts. +2025-04-11 19:58:20,179 - logging_config - ERROR - Failed to download 50eb71a8-af97-4786-9f29-ce62a6311855.mp3 after 3 attempts. +2025-04-11 19:58:20,182 - logging_config - ERROR - Failed to download 3cb35a33-1dbe-4951-a3d1-9d2574a4802e.mp3: Command 'aria2c -o "course/671/3cb35a33-1dbe-4951-a3d1-9d2574a4802e.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/3cb35a33-1dbe-4951-a3d1-9d2574a4802e.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,183 - logging_config - WARNING - Retrying 3cb35a33-1dbe-4951-a3d1-9d2574a4802e.mp3... (1/3) +2025-04-11 19:58:20,182 - logging_config - ERROR - Failed to download 85cd4588-063f-48b2-8e23-69df43186e68.jpg: Command 'aria2c -o "course/671/jpg/85cd4588-063f-48b2-8e23-69df43186e68.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/85cd4588-063f-48b2-8e23-69df43186e68.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,184 - logging_config - ERROR - Failed to download 25e3701a-8e37-471e-ba71-287caedc7856.jpg: Command 'aria2c -o "course/671/jpg/25e3701a-8e37-471e-ba71-287caedc7856.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/25e3701a-8e37-471e-ba71-287caedc7856.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,185 - logging_config - ERROR - Failed to download 42c67ddc-7544-4774-8f92-5f6270c9905c.mp3: Command 'aria2c -o "course/671/42c67ddc-7544-4774-8f92-5f6270c9905c.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/42c67ddc-7544-4774-8f92-5f6270c9905c.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,185 - logging_config - WARNING - Retrying 85cd4588-063f-48b2-8e23-69df43186e68.jpg... (1/3) +2025-04-11 19:58:20,185 - logging_config - WARNING - Retrying 25e3701a-8e37-471e-ba71-287caedc7856.jpg... (1/3) +2025-04-11 19:58:20,185 - logging_config - WARNING - Retrying 42c67ddc-7544-4774-8f92-5f6270c9905c.mp3... (1/3) +2025-04-11 19:58:20,188 - logging_config - ERROR - Failed to download bf6c8eae-17a2-4ad8-8e32-716743438850.mp3: Command 'aria2c -o "course/671/bf6c8eae-17a2-4ad8-8e32-716743438850.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/bf6c8eae-17a2-4ad8-8e32-716743438850.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,190 - logging_config - ERROR - Failed to download 85cd4588-063f-48b2-8e23-69df43186e68.jpg: Command 'aria2c -o "course/671/jpg/jpg/85cd4588-063f-48b2-8e23-69df43186e68.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/85cd4588-063f-48b2-8e23-69df43186e68.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,190 - logging_config - WARNING - Retrying bf6c8eae-17a2-4ad8-8e32-716743438850.mp3... (2/3) +2025-04-11 19:58:20,190 - logging_config - WARNING - Retrying 85cd4588-063f-48b2-8e23-69df43186e68.jpg... (2/3) +2025-04-11 19:58:20,190 - logging_config - ERROR - Failed to download 3cb35a33-1dbe-4951-a3d1-9d2574a4802e.mp3: Command 'aria2c -o "course/671/3cb35a33-1dbe-4951-a3d1-9d2574a4802e.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/3cb35a33-1dbe-4951-a3d1-9d2574a4802e.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,194 - logging_config - ERROR - Failed to download 25e3701a-8e37-471e-ba71-287caedc7856.jpg: Command 'aria2c -o "course/671/jpg/jpg/25e3701a-8e37-471e-ba71-287caedc7856.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/25e3701a-8e37-471e-ba71-287caedc7856.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,194 - logging_config - WARNING - Retrying 3cb35a33-1dbe-4951-a3d1-9d2574a4802e.mp3... (2/3) +2025-04-11 19:58:20,195 - logging_config - ERROR - Failed to download 42c67ddc-7544-4774-8f92-5f6270c9905c.mp3: Command 'aria2c -o "course/671/42c67ddc-7544-4774-8f92-5f6270c9905c.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/42c67ddc-7544-4774-8f92-5f6270c9905c.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,195 - logging_config - WARNING - Retrying 25e3701a-8e37-471e-ba71-287caedc7856.jpg... (2/3) +2025-04-11 19:58:20,196 - logging_config - WARNING - Retrying 42c67ddc-7544-4774-8f92-5f6270c9905c.mp3... (2/3) +2025-04-11 19:58:20,196 - logging_config - ERROR - Failed to download bf6c8eae-17a2-4ad8-8e32-716743438850.mp3: Command 'aria2c -o "course/671/bf6c8eae-17a2-4ad8-8e32-716743438850.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/bf6c8eae-17a2-4ad8-8e32-716743438850.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,197 - logging_config - ERROR - Failed to download 85cd4588-063f-48b2-8e23-69df43186e68.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/85cd4588-063f-48b2-8e23-69df43186e68.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/85cd4588-063f-48b2-8e23-69df43186e68.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,199 - logging_config - ERROR - Failed to download bf6c8eae-17a2-4ad8-8e32-716743438850.mp3 after 3 attempts. +2025-04-11 19:58:20,199 - logging_config - ERROR - Failed to download 85cd4588-063f-48b2-8e23-69df43186e68.jpg after 3 attempts. +2025-04-11 19:58:20,199 - logging_config - ERROR - Failed to download 3cb35a33-1dbe-4951-a3d1-9d2574a4802e.mp3: Command 'aria2c -o "course/671/3cb35a33-1dbe-4951-a3d1-9d2574a4802e.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/3cb35a33-1dbe-4951-a3d1-9d2574a4802e.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,201 - logging_config - ERROR - Failed to download 25e3701a-8e37-471e-ba71-287caedc7856.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/25e3701a-8e37-471e-ba71-287caedc7856.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/25e3701a-8e37-471e-ba71-287caedc7856.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,202 - logging_config - ERROR - Failed to download 3cb35a33-1dbe-4951-a3d1-9d2574a4802e.mp3 after 3 attempts. +2025-04-11 19:58:20,203 - logging_config - ERROR - Failed to download 42c67ddc-7544-4774-8f92-5f6270c9905c.mp3: Command 'aria2c -o "course/671/42c67ddc-7544-4774-8f92-5f6270c9905c.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/42c67ddc-7544-4774-8f92-5f6270c9905c.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,203 - logging_config - ERROR - Failed to download 25e3701a-8e37-471e-ba71-287caedc7856.jpg after 3 attempts. +2025-04-11 19:58:20,205 - logging_config - ERROR - Failed to download 21234237-9f4a-4271-8a69-b7c4e9073f37.jpg: Command 'aria2c -o "course/671/jpg/21234237-9f4a-4271-8a69-b7c4e9073f37.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/21234237-9f4a-4271-8a69-b7c4e9073f37.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,205 - logging_config - ERROR - Failed to download 42c67ddc-7544-4774-8f92-5f6270c9905c.mp3 after 3 attempts. +2025-04-11 19:58:20,205 - logging_config - ERROR - Failed to download 3baa0ea6-db5d-49ad-ab63-bc241d882713.mp3: Command 'aria2c -o "course/671/3baa0ea6-db5d-49ad-ab63-bc241d882713.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/3baa0ea6-db5d-49ad-ab63-bc241d882713.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,207 - logging_config - WARNING - Retrying 21234237-9f4a-4271-8a69-b7c4e9073f37.jpg... (1/3) +2025-04-11 19:58:20,209 - logging_config - WARNING - Retrying 3baa0ea6-db5d-49ad-ab63-bc241d882713.mp3... (1/3) +2025-04-11 19:58:20,210 - logging_config - ERROR - Failed to download 9fee680e-0bfd-445a-b6ff-aa1b6156c52d.mp3: Command 'aria2c -o "course/671/9fee680e-0bfd-445a-b6ff-aa1b6156c52d.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/9fee680e-0bfd-445a-b6ff-aa1b6156c52d.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,211 - logging_config - ERROR - Failed to download 02e0a7e1-1291-4ea7-b32f-52641bda1d3f.mp3: Command 'aria2c -o "course/671/02e0a7e1-1291-4ea7-b32f-52641bda1d3f.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/02e0a7e1-1291-4ea7-b32f-52641bda1d3f.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,212 - logging_config - WARNING - Retrying 9fee680e-0bfd-445a-b6ff-aa1b6156c52d.mp3... (1/3) +2025-04-11 19:58:20,212 - logging_config - WARNING - Retrying 02e0a7e1-1291-4ea7-b32f-52641bda1d3f.mp3... (1/3) +2025-04-11 19:58:20,214 - logging_config - ERROR - Failed to download 38eda222-9c27-418a-a946-b7a3d4c92549.mp3: Command 'aria2c -o "course/671/38eda222-9c27-418a-a946-b7a3d4c92549.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/38eda222-9c27-418a-a946-b7a3d4c92549.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,215 - logging_config - ERROR - Failed to download 21234237-9f4a-4271-8a69-b7c4e9073f37.jpg: Command 'aria2c -o "course/671/jpg/jpg/21234237-9f4a-4271-8a69-b7c4e9073f37.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/21234237-9f4a-4271-8a69-b7c4e9073f37.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,217 - logging_config - WARNING - Retrying 38eda222-9c27-418a-a946-b7a3d4c92549.mp3... (1/3) +2025-04-11 19:58:20,217 - logging_config - ERROR - Failed to download 3baa0ea6-db5d-49ad-ab63-bc241d882713.mp3: Command 'aria2c -o "course/671/3baa0ea6-db5d-49ad-ab63-bc241d882713.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/3baa0ea6-db5d-49ad-ab63-bc241d882713.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,217 - logging_config - WARNING - Retrying 21234237-9f4a-4271-8a69-b7c4e9073f37.jpg... (2/3) +2025-04-11 19:58:20,219 - logging_config - ERROR - Failed to download 9fee680e-0bfd-445a-b6ff-aa1b6156c52d.mp3: Command 'aria2c -o "course/671/9fee680e-0bfd-445a-b6ff-aa1b6156c52d.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/9fee680e-0bfd-445a-b6ff-aa1b6156c52d.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,219 - logging_config - WARNING - Retrying 3baa0ea6-db5d-49ad-ab63-bc241d882713.mp3... (2/3) +2025-04-11 19:58:20,220 - logging_config - WARNING - Retrying 9fee680e-0bfd-445a-b6ff-aa1b6156c52d.mp3... (2/3) +2025-04-11 19:58:20,221 - logging_config - ERROR - Failed to download 02e0a7e1-1291-4ea7-b32f-52641bda1d3f.mp3: Command 'aria2c -o "course/671/02e0a7e1-1291-4ea7-b32f-52641bda1d3f.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/02e0a7e1-1291-4ea7-b32f-52641bda1d3f.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,225 - logging_config - WARNING - Retrying 02e0a7e1-1291-4ea7-b32f-52641bda1d3f.mp3... (2/3) +2025-04-11 19:58:20,225 - logging_config - ERROR - Failed to download 38eda222-9c27-418a-a946-b7a3d4c92549.mp3: Command 'aria2c -o "course/671/38eda222-9c27-418a-a946-b7a3d4c92549.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/38eda222-9c27-418a-a946-b7a3d4c92549.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,225 - logging_config - ERROR - Failed to download 21234237-9f4a-4271-8a69-b7c4e9073f37.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/21234237-9f4a-4271-8a69-b7c4e9073f37.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/21234237-9f4a-4271-8a69-b7c4e9073f37.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,227 - logging_config - WARNING - Retrying 38eda222-9c27-418a-a946-b7a3d4c92549.mp3... (2/3) +2025-04-11 19:58:20,227 - logging_config - ERROR - Failed to download 3baa0ea6-db5d-49ad-ab63-bc241d882713.mp3: Command 'aria2c -o "course/671/3baa0ea6-db5d-49ad-ab63-bc241d882713.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/3baa0ea6-db5d-49ad-ab63-bc241d882713.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,227 - logging_config - ERROR - Failed to download 21234237-9f4a-4271-8a69-b7c4e9073f37.jpg after 3 attempts. +2025-04-11 19:58:20,229 - logging_config - ERROR - Failed to download 9fee680e-0bfd-445a-b6ff-aa1b6156c52d.mp3: Command 'aria2c -o "course/671/9fee680e-0bfd-445a-b6ff-aa1b6156c52d.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/9fee680e-0bfd-445a-b6ff-aa1b6156c52d.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,229 - logging_config - ERROR - Failed to download 3baa0ea6-db5d-49ad-ab63-bc241d882713.mp3 after 3 attempts. +2025-04-11 19:58:20,231 - logging_config - ERROR - Failed to download 02e0a7e1-1291-4ea7-b32f-52641bda1d3f.mp3: Command 'aria2c -o "course/671/02e0a7e1-1291-4ea7-b32f-52641bda1d3f.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/02e0a7e1-1291-4ea7-b32f-52641bda1d3f.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,231 - logging_config - ERROR - Failed to download 9fee680e-0bfd-445a-b6ff-aa1b6156c52d.mp3 after 3 attempts. +2025-04-11 19:58:20,233 - logging_config - ERROR - Failed to download 02e0a7e1-1291-4ea7-b32f-52641bda1d3f.mp3 after 3 attempts. +2025-04-11 19:58:20,234 - logging_config - ERROR - Failed to download 38eda222-9c27-418a-a946-b7a3d4c92549.mp3: Command 'aria2c -o "course/671/38eda222-9c27-418a-a946-b7a3d4c92549.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/38eda222-9c27-418a-a946-b7a3d4c92549.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,234 - logging_config - ERROR - Failed to download 3eb66499-72c9-49c2-86e4-a7daf16c29ce.mp3: Command 'aria2c -o "course/671/3eb66499-72c9-49c2-86e4-a7daf16c29ce.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/3eb66499-72c9-49c2-86e4-a7daf16c29ce.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,236 - logging_config - ERROR - Failed to download 5d96cb2e-158e-4e46-b07a-e12487712c30.mp3: Command 'aria2c -o "course/671/5d96cb2e-158e-4e46-b07a-e12487712c30.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/5d96cb2e-158e-4e46-b07a-e12487712c30.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,237 - logging_config - WARNING - Retrying 5d96cb2e-158e-4e46-b07a-e12487712c30.mp3... (1/3) +2025-04-11 19:58:20,237 - logging_config - ERROR - Failed to download 38eda222-9c27-418a-a946-b7a3d4c92549.mp3 after 3 attempts. +2025-04-11 19:58:20,237 - logging_config - WARNING - Retrying 3eb66499-72c9-49c2-86e4-a7daf16c29ce.mp3... (1/3) +2025-04-11 19:58:20,241 - logging_config - ERROR - Failed to download eb273fda-3d76-4c0b-b02f-62ec769058e1.jpg: Command 'aria2c -o "course/671/jpg/eb273fda-3d76-4c0b-b02f-62ec769058e1.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/eb273fda-3d76-4c0b-b02f-62ec769058e1.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,241 - logging_config - ERROR - Failed to download 64647a46-c6c8-43b6-affb-c750c5c3a9ac.mp3: Command 'aria2c -o "course/671/64647a46-c6c8-43b6-affb-c750c5c3a9ac.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/64647a46-c6c8-43b6-affb-c750c5c3a9ac.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,241 - logging_config - ERROR - Failed to download 5d96cb2e-158e-4e46-b07a-e12487712c30.mp3: Command 'aria2c -o "course/671/5d96cb2e-158e-4e46-b07a-e12487712c30.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/5d96cb2e-158e-4e46-b07a-e12487712c30.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,242 - logging_config - WARNING - Retrying eb273fda-3d76-4c0b-b02f-62ec769058e1.jpg... (1/3) +2025-04-11 19:58:20,242 - logging_config - WARNING - Retrying 64647a46-c6c8-43b6-affb-c750c5c3a9ac.mp3... (1/3) +2025-04-11 19:58:20,242 - logging_config - WARNING - Retrying 5d96cb2e-158e-4e46-b07a-e12487712c30.mp3... (2/3) +2025-04-11 19:58:20,243 - logging_config - ERROR - Failed to download 9c455a2e-6f32-4d45-8340-bc1810fe3488.jpg: Command 'aria2c -o "course/671/jpg/9c455a2e-6f32-4d45-8340-bc1810fe3488.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/9c455a2e-6f32-4d45-8340-bc1810fe3488.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,245 - logging_config - ERROR - Failed to download 3eb66499-72c9-49c2-86e4-a7daf16c29ce.mp3: Command 'aria2c -o "course/671/3eb66499-72c9-49c2-86e4-a7daf16c29ce.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/3eb66499-72c9-49c2-86e4-a7daf16c29ce.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,247 - logging_config - ERROR - Failed to download eb273fda-3d76-4c0b-b02f-62ec769058e1.jpg: Command 'aria2c -o "course/671/jpg/jpg/eb273fda-3d76-4c0b-b02f-62ec769058e1.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/eb273fda-3d76-4c0b-b02f-62ec769058e1.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,247 - logging_config - WARNING - Retrying 9c455a2e-6f32-4d45-8340-bc1810fe3488.jpg... (1/3) +2025-04-11 19:58:20,247 - logging_config - WARNING - Retrying 3eb66499-72c9-49c2-86e4-a7daf16c29ce.mp3... (2/3) +2025-04-11 19:58:20,247 - logging_config - WARNING - Retrying eb273fda-3d76-4c0b-b02f-62ec769058e1.jpg... (2/3) +2025-04-11 19:58:20,248 - logging_config - ERROR - Failed to download 64647a46-c6c8-43b6-affb-c750c5c3a9ac.mp3: Command 'aria2c -o "course/671/64647a46-c6c8-43b6-affb-c750c5c3a9ac.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/64647a46-c6c8-43b6-affb-c750c5c3a9ac.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,252 - logging_config - ERROR - Failed to download 5d96cb2e-158e-4e46-b07a-e12487712c30.mp3: Command 'aria2c -o "course/671/5d96cb2e-158e-4e46-b07a-e12487712c30.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/5d96cb2e-158e-4e46-b07a-e12487712c30.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,252 - logging_config - WARNING - Retrying 64647a46-c6c8-43b6-affb-c750c5c3a9ac.mp3... (2/3) +2025-04-11 19:58:20,252 - logging_config - ERROR - Failed to download 9c455a2e-6f32-4d45-8340-bc1810fe3488.jpg: Command 'aria2c -o "course/671/jpg/jpg/9c455a2e-6f32-4d45-8340-bc1810fe3488.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/9c455a2e-6f32-4d45-8340-bc1810fe3488.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,253 - logging_config - ERROR - Failed to download 5d96cb2e-158e-4e46-b07a-e12487712c30.mp3 after 3 attempts. +2025-04-11 19:58:20,254 - logging_config - ERROR - Failed to download 3eb66499-72c9-49c2-86e4-a7daf16c29ce.mp3: Command 'aria2c -o "course/671/3eb66499-72c9-49c2-86e4-a7daf16c29ce.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/3eb66499-72c9-49c2-86e4-a7daf16c29ce.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,254 - logging_config - WARNING - Retrying 9c455a2e-6f32-4d45-8340-bc1810fe3488.jpg... (2/3) +2025-04-11 19:58:20,255 - logging_config - ERROR - Failed to download eb273fda-3d76-4c0b-b02f-62ec769058e1.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/eb273fda-3d76-4c0b-b02f-62ec769058e1.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/eb273fda-3d76-4c0b-b02f-62ec769058e1.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,256 - logging_config - ERROR - Failed to download 3eb66499-72c9-49c2-86e4-a7daf16c29ce.mp3 after 3 attempts. +2025-04-11 19:58:20,257 - logging_config - ERROR - Failed to download eb273fda-3d76-4c0b-b02f-62ec769058e1.jpg after 3 attempts. +2025-04-11 19:58:20,258 - logging_config - ERROR - Failed to download 64647a46-c6c8-43b6-affb-c750c5c3a9ac.mp3: Command 'aria2c -o "course/671/64647a46-c6c8-43b6-affb-c750c5c3a9ac.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/64647a46-c6c8-43b6-affb-c750c5c3a9ac.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,259 - logging_config - ERROR - Failed to download 54d08d54-6cd4-4c30-b1fa-142da9caae9a.jpg: Command 'aria2c -o "course/671/jpg/54d08d54-6cd4-4c30-b1fa-142da9caae9a.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/54d08d54-6cd4-4c30-b1fa-142da9caae9a.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,261 - logging_config - ERROR - Failed to download 9c455a2e-6f32-4d45-8340-bc1810fe3488.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/9c455a2e-6f32-4d45-8340-bc1810fe3488.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/9c455a2e-6f32-4d45-8340-bc1810fe3488.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,261 - logging_config - ERROR - Failed to download 64647a46-c6c8-43b6-affb-c750c5c3a9ac.mp3 after 3 attempts. +2025-04-11 19:58:20,261 - logging_config - WARNING - Retrying 54d08d54-6cd4-4c30-b1fa-142da9caae9a.jpg... (1/3) +2025-04-11 19:58:20,261 - logging_config - ERROR - Failed to download 9c455a2e-6f32-4d45-8340-bc1810fe3488.jpg after 3 attempts. +2025-04-11 19:58:20,262 - logging_config - ERROR - Failed to download fdeadf67-7999-469a-9c11-eb4bef42562f.jpg: Command 'aria2c -o "course/671/jpg/fdeadf67-7999-469a-9c11-eb4bef42562f.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/fdeadf67-7999-469a-9c11-eb4bef42562f.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,266 - logging_config - ERROR - Failed to download 31cb719d-f186-49e9-8eaf-75c37d062251.mp3: Command 'aria2c -o "course/671/31cb719d-f186-49e9-8eaf-75c37d062251.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/31cb719d-f186-49e9-8eaf-75c37d062251.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,266 - logging_config - ERROR - Failed to download 14b01486-9a63-4e04-bf32-4b038713d1d0.mp3: Command 'aria2c -o "course/671/14b01486-9a63-4e04-bf32-4b038713d1d0.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/14b01486-9a63-4e04-bf32-4b038713d1d0.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,266 - logging_config - WARNING - Retrying fdeadf67-7999-469a-9c11-eb4bef42562f.jpg... (1/3) +2025-04-11 19:58:20,266 - logging_config - WARNING - Retrying 31cb719d-f186-49e9-8eaf-75c37d062251.mp3... (1/3) +2025-04-11 19:58:20,266 - logging_config - WARNING - Retrying 14b01486-9a63-4e04-bf32-4b038713d1d0.mp3... (1/3) +2025-04-11 19:58:20,267 - logging_config - ERROR - Failed to download 54d08d54-6cd4-4c30-b1fa-142da9caae9a.jpg: Command 'aria2c -o "course/671/jpg/jpg/54d08d54-6cd4-4c30-b1fa-142da9caae9a.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/54d08d54-6cd4-4c30-b1fa-142da9caae9a.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,271 - logging_config - ERROR - Failed to download fdeadf67-7999-469a-9c11-eb4bef42562f.jpg: Command 'aria2c -o "course/671/jpg/jpg/fdeadf67-7999-469a-9c11-eb4bef42562f.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/fdeadf67-7999-469a-9c11-eb4bef42562f.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,272 - logging_config - WARNING - Retrying 54d08d54-6cd4-4c30-b1fa-142da9caae9a.jpg... (2/3) +2025-04-11 19:58:20,272 - logging_config - ERROR - Failed to download 4d5b9bbc-1de4-4c85-a190-31e71dfd1190.mp3: Command 'aria2c -o "course/671/4d5b9bbc-1de4-4c85-a190-31e71dfd1190.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4d5b9bbc-1de4-4c85-a190-31e71dfd1190.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,272 - logging_config - WARNING - Retrying fdeadf67-7999-469a-9c11-eb4bef42562f.jpg... (2/3) +2025-04-11 19:58:20,273 - logging_config - ERROR - Failed to download 31cb719d-f186-49e9-8eaf-75c37d062251.mp3: Command 'aria2c -o "course/671/31cb719d-f186-49e9-8eaf-75c37d062251.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/31cb719d-f186-49e9-8eaf-75c37d062251.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,274 - logging_config - WARNING - Retrying 4d5b9bbc-1de4-4c85-a190-31e71dfd1190.mp3... (1/3) +2025-04-11 19:58:20,275 - logging_config - WARNING - Retrying 31cb719d-f186-49e9-8eaf-75c37d062251.mp3... (2/3) +2025-04-11 19:58:20,275 - logging_config - ERROR - Failed to download 14b01486-9a63-4e04-bf32-4b038713d1d0.mp3: Command 'aria2c -o "course/671/14b01486-9a63-4e04-bf32-4b038713d1d0.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/14b01486-9a63-4e04-bf32-4b038713d1d0.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,277 - logging_config - ERROR - Failed to download 54d08d54-6cd4-4c30-b1fa-142da9caae9a.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/54d08d54-6cd4-4c30-b1fa-142da9caae9a.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/54d08d54-6cd4-4c30-b1fa-142da9caae9a.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,279 - logging_config - WARNING - Retrying 14b01486-9a63-4e04-bf32-4b038713d1d0.mp3... (2/3) +2025-04-11 19:58:20,279 - logging_config - ERROR - Failed to download fdeadf67-7999-469a-9c11-eb4bef42562f.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/fdeadf67-7999-469a-9c11-eb4bef42562f.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/fdeadf67-7999-469a-9c11-eb4bef42562f.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,279 - logging_config - ERROR - Failed to download 54d08d54-6cd4-4c30-b1fa-142da9caae9a.jpg after 3 attempts. +2025-04-11 19:58:20,281 - logging_config - ERROR - Failed to download 4d5b9bbc-1de4-4c85-a190-31e71dfd1190.mp3: Command 'aria2c -o "course/671/4d5b9bbc-1de4-4c85-a190-31e71dfd1190.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4d5b9bbc-1de4-4c85-a190-31e71dfd1190.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,281 - logging_config - ERROR - Failed to download fdeadf67-7999-469a-9c11-eb4bef42562f.jpg after 3 attempts. +2025-04-11 19:58:20,281 - logging_config - WARNING - Retrying 4d5b9bbc-1de4-4c85-a190-31e71dfd1190.mp3... (2/3) +2025-04-11 19:58:20,281 - logging_config - ERROR - Failed to download 31cb719d-f186-49e9-8eaf-75c37d062251.mp3: Command 'aria2c -o "course/671/31cb719d-f186-49e9-8eaf-75c37d062251.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/31cb719d-f186-49e9-8eaf-75c37d062251.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,284 - logging_config - ERROR - Failed to download 14b01486-9a63-4e04-bf32-4b038713d1d0.mp3: Command 'aria2c -o "course/671/14b01486-9a63-4e04-bf32-4b038713d1d0.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/14b01486-9a63-4e04-bf32-4b038713d1d0.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,285 - logging_config - ERROR - Failed to download 31cb719d-f186-49e9-8eaf-75c37d062251.mp3 after 3 attempts. +2025-04-11 19:58:20,286 - logging_config - ERROR - Failed to download 3e549f6a-b521-4d1a-99f1-19e15e274206.mp3: Command 'aria2c -o "course/671/3e549f6a-b521-4d1a-99f1-19e15e274206.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/3e549f6a-b521-4d1a-99f1-19e15e274206.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,286 - logging_config - ERROR - Failed to download 14b01486-9a63-4e04-bf32-4b038713d1d0.mp3 after 3 attempts. +2025-04-11 19:58:20,287 - logging_config - WARNING - Retrying 3e549f6a-b521-4d1a-99f1-19e15e274206.mp3... (1/3) +2025-04-11 19:58:20,290 - logging_config - ERROR - Failed to download ce9c8df2-3661-494d-bffb-1921d19a59e6.mp3: Command 'aria2c -o "course/671/ce9c8df2-3661-494d-bffb-1921d19a59e6.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/ce9c8df2-3661-494d-bffb-1921d19a59e6.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,290 - logging_config - ERROR - Failed to download 4d5b9bbc-1de4-4c85-a190-31e71dfd1190.mp3: Command 'aria2c -o "course/671/4d5b9bbc-1de4-4c85-a190-31e71dfd1190.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4d5b9bbc-1de4-4c85-a190-31e71dfd1190.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,290 - logging_config - WARNING - Retrying ce9c8df2-3661-494d-bffb-1921d19a59e6.mp3... (1/3) +2025-04-11 19:58:20,290 - logging_config - ERROR - Failed to download e9ec9385-c687-40cb-aa9d-00905ae82c3b.mp3: Command 'aria2c -o "course/671/e9ec9385-c687-40cb-aa9d-00905ae82c3b.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/e9ec9385-c687-40cb-aa9d-00905ae82c3b.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,290 - logging_config - ERROR - Failed to download 4d5b9bbc-1de4-4c85-a190-31e71dfd1190.mp3 after 3 attempts. +2025-04-11 19:58:20,291 - logging_config - WARNING - Retrying e9ec9385-c687-40cb-aa9d-00905ae82c3b.mp3... (1/3) +2025-04-11 19:58:20,291 - logging_config - ERROR - Failed to download c7b2e82c-0b9d-49d6-bb5a-8e0810fc6fba.mp3: Command 'aria2c -o "course/671/c7b2e82c-0b9d-49d6-bb5a-8e0810fc6fba.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/c7b2e82c-0b9d-49d6-bb5a-8e0810fc6fba.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,292 - logging_config - ERROR - Failed to download 3e549f6a-b521-4d1a-99f1-19e15e274206.mp3: Command 'aria2c -o "course/671/3e549f6a-b521-4d1a-99f1-19e15e274206.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/3e549f6a-b521-4d1a-99f1-19e15e274206.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,294 - logging_config - ERROR - Failed to download ce9c8df2-3661-494d-bffb-1921d19a59e6.mp3: Command 'aria2c -o "course/671/ce9c8df2-3661-494d-bffb-1921d19a59e6.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/ce9c8df2-3661-494d-bffb-1921d19a59e6.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,294 - logging_config - WARNING - Retrying c7b2e82c-0b9d-49d6-bb5a-8e0810fc6fba.mp3... (1/3) +2025-04-11 19:58:20,295 - logging_config - WARNING - Retrying 3e549f6a-b521-4d1a-99f1-19e15e274206.mp3... (2/3) +2025-04-11 19:58:20,295 - logging_config - WARNING - Retrying ce9c8df2-3661-494d-bffb-1921d19a59e6.mp3... (2/3) +2025-04-11 19:58:20,296 - logging_config - ERROR - Failed to download ecc87d22-04e6-44b6-9f33-975f232c7663.jpg: Command 'aria2c -o "course/671/jpg/ecc87d22-04e6-44b6-9f33-975f232c7663.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/ecc87d22-04e6-44b6-9f33-975f232c7663.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,298 - logging_config - WARNING - Retrying ecc87d22-04e6-44b6-9f33-975f232c7663.jpg... (1/3) +2025-04-11 19:58:20,299 - logging_config - ERROR - Failed to download e9ec9385-c687-40cb-aa9d-00905ae82c3b.mp3: Command 'aria2c -o "course/671/e9ec9385-c687-40cb-aa9d-00905ae82c3b.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/e9ec9385-c687-40cb-aa9d-00905ae82c3b.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,300 - logging_config - ERROR - Failed to download c7b2e82c-0b9d-49d6-bb5a-8e0810fc6fba.mp3: Command 'aria2c -o "course/671/c7b2e82c-0b9d-49d6-bb5a-8e0810fc6fba.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/c7b2e82c-0b9d-49d6-bb5a-8e0810fc6fba.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,300 - logging_config - WARNING - Retrying e9ec9385-c687-40cb-aa9d-00905ae82c3b.mp3... (2/3) +2025-04-11 19:58:20,300 - logging_config - WARNING - Retrying c7b2e82c-0b9d-49d6-bb5a-8e0810fc6fba.mp3... (2/3) +2025-04-11 19:58:20,300 - logging_config - ERROR - Failed to download 3e549f6a-b521-4d1a-99f1-19e15e274206.mp3: Command 'aria2c -o "course/671/3e549f6a-b521-4d1a-99f1-19e15e274206.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/3e549f6a-b521-4d1a-99f1-19e15e274206.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,303 - logging_config - ERROR - Failed to download 3e549f6a-b521-4d1a-99f1-19e15e274206.mp3 after 3 attempts. +2025-04-11 19:58:20,303 - logging_config - ERROR - Failed to download ecc87d22-04e6-44b6-9f33-975f232c7663.jpg: Command 'aria2c -o "course/671/jpg/jpg/ecc87d22-04e6-44b6-9f33-975f232c7663.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/ecc87d22-04e6-44b6-9f33-975f232c7663.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,303 - logging_config - ERROR - Failed to download ce9c8df2-3661-494d-bffb-1921d19a59e6.mp3: Command 'aria2c -o "course/671/ce9c8df2-3661-494d-bffb-1921d19a59e6.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/ce9c8df2-3661-494d-bffb-1921d19a59e6.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,304 - logging_config - ERROR - Failed to download e9ec9385-c687-40cb-aa9d-00905ae82c3b.mp3: Command 'aria2c -o "course/671/e9ec9385-c687-40cb-aa9d-00905ae82c3b.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/e9ec9385-c687-40cb-aa9d-00905ae82c3b.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,304 - logging_config - WARNING - Retrying ecc87d22-04e6-44b6-9f33-975f232c7663.jpg... (2/3) +2025-04-11 19:58:20,304 - logging_config - ERROR - Failed to download ce9c8df2-3661-494d-bffb-1921d19a59e6.mp3 after 3 attempts. +2025-04-11 19:58:20,305 - logging_config - ERROR - Failed to download e9ec9385-c687-40cb-aa9d-00905ae82c3b.mp3 after 3 attempts. +2025-04-11 19:58:20,306 - logging_config - ERROR - Failed to download c7b2e82c-0b9d-49d6-bb5a-8e0810fc6fba.mp3: Command 'aria2c -o "course/671/c7b2e82c-0b9d-49d6-bb5a-8e0810fc6fba.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/c7b2e82c-0b9d-49d6-bb5a-8e0810fc6fba.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,309 - logging_config - ERROR - Failed to download c7b2e82c-0b9d-49d6-bb5a-8e0810fc6fba.mp3 after 3 attempts. +2025-04-11 19:58:20,309 - logging_config - ERROR - Failed to download 4a82e720-e9a9-4243-a808-539533a1a51c.jpg: Command 'aria2c -o "course/671/jpg/4a82e720-e9a9-4243-a808-539533a1a51c.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4a82e720-e9a9-4243-a808-539533a1a51c.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,309 - logging_config - ERROR - Failed to download ecc87d22-04e6-44b6-9f33-975f232c7663.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/ecc87d22-04e6-44b6-9f33-975f232c7663.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/ecc87d22-04e6-44b6-9f33-975f232c7663.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,309 - logging_config - WARNING - Retrying 4a82e720-e9a9-4243-a808-539533a1a51c.jpg... (1/3) +2025-04-11 19:58:20,311 - logging_config - ERROR - Failed to download ecc87d22-04e6-44b6-9f33-975f232c7663.jpg after 3 attempts. +2025-04-11 19:58:20,312 - logging_config - ERROR - Failed to download 36958cbc-8974-4781-843a-82e7b6c2dbf3.jpg: Command 'aria2c -o "course/671/jpg/36958cbc-8974-4781-843a-82e7b6c2dbf3.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/36958cbc-8974-4781-843a-82e7b6c2dbf3.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,313 - logging_config - ERROR - Failed to download 4084447f-68be-4940-ac81-cb5627fce1aa.jpg: Command 'aria2c -o "course/671/jpg/4084447f-68be-4940-ac81-cb5627fce1aa.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4084447f-68be-4940-ac81-cb5627fce1aa.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,314 - logging_config - ERROR - Failed to download 8c7a8b5a-1655-4ad2-88fb-9a27f4ccdf4b.mp3: Command 'aria2c -o "course/671/8c7a8b5a-1655-4ad2-88fb-9a27f4ccdf4b.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/8c7a8b5a-1655-4ad2-88fb-9a27f4ccdf4b.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,314 - logging_config - WARNING - Retrying 36958cbc-8974-4781-843a-82e7b6c2dbf3.jpg... (1/3) +2025-04-11 19:58:20,314 - logging_config - WARNING - Retrying 4084447f-68be-4940-ac81-cb5627fce1aa.jpg... (1/3) +2025-04-11 19:58:20,315 - logging_config - WARNING - Retrying 8c7a8b5a-1655-4ad2-88fb-9a27f4ccdf4b.mp3... (1/3) +2025-04-11 19:58:20,318 - logging_config - ERROR - Failed to download 4a82e720-e9a9-4243-a808-539533a1a51c.jpg: Command 'aria2c -o "course/671/jpg/jpg/4a82e720-e9a9-4243-a808-539533a1a51c.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4a82e720-e9a9-4243-a808-539533a1a51c.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,318 - logging_config - ERROR - Failed to download 36958cbc-8974-4781-843a-82e7b6c2dbf3.jpg: Command 'aria2c -o "course/671/jpg/jpg/36958cbc-8974-4781-843a-82e7b6c2dbf3.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/36958cbc-8974-4781-843a-82e7b6c2dbf3.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,319 - logging_config - WARNING - Retrying 4a82e720-e9a9-4243-a808-539533a1a51c.jpg... (2/3) +2025-04-11 19:58:20,319 - logging_config - ERROR - Failed to download b79a6edf-79dc-4611-8125-3d65020ea794.mp3: Command 'aria2c -o "course/671/b79a6edf-79dc-4611-8125-3d65020ea794.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/b79a6edf-79dc-4611-8125-3d65020ea794.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,319 - logging_config - WARNING - Retrying 36958cbc-8974-4781-843a-82e7b6c2dbf3.jpg... (2/3) +2025-04-11 19:58:20,320 - logging_config - WARNING - Retrying b79a6edf-79dc-4611-8125-3d65020ea794.mp3... (1/3) +2025-04-11 19:58:20,320 - logging_config - ERROR - Failed to download 4084447f-68be-4940-ac81-cb5627fce1aa.jpg: Command 'aria2c -o "course/671/jpg/jpg/4084447f-68be-4940-ac81-cb5627fce1aa.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4084447f-68be-4940-ac81-cb5627fce1aa.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,322 - logging_config - ERROR - Failed to download 8c7a8b5a-1655-4ad2-88fb-9a27f4ccdf4b.mp3: Command 'aria2c -o "course/671/8c7a8b5a-1655-4ad2-88fb-9a27f4ccdf4b.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/8c7a8b5a-1655-4ad2-88fb-9a27f4ccdf4b.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,322 - logging_config - WARNING - Retrying 4084447f-68be-4940-ac81-cb5627fce1aa.jpg... (2/3) +2025-04-11 19:58:20,323 - logging_config - ERROR - Failed to download 4a82e720-e9a9-4243-a808-539533a1a51c.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/4a82e720-e9a9-4243-a808-539533a1a51c.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4a82e720-e9a9-4243-a808-539533a1a51c.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,323 - logging_config - WARNING - Retrying 8c7a8b5a-1655-4ad2-88fb-9a27f4ccdf4b.mp3... (2/3) +2025-04-11 19:58:20,324 - logging_config - ERROR - Failed to download 4a82e720-e9a9-4243-a808-539533a1a51c.jpg after 3 attempts. +2025-04-11 19:58:20,324 - logging_config - ERROR - Failed to download 36958cbc-8974-4781-843a-82e7b6c2dbf3.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/36958cbc-8974-4781-843a-82e7b6c2dbf3.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/36958cbc-8974-4781-843a-82e7b6c2dbf3.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,325 - logging_config - ERROR - Failed to download b79a6edf-79dc-4611-8125-3d65020ea794.mp3: Command 'aria2c -o "course/671/b79a6edf-79dc-4611-8125-3d65020ea794.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/b79a6edf-79dc-4611-8125-3d65020ea794.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,327 - logging_config - ERROR - Failed to download 4084447f-68be-4940-ac81-cb5627fce1aa.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/4084447f-68be-4940-ac81-cb5627fce1aa.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4084447f-68be-4940-ac81-cb5627fce1aa.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,327 - logging_config - ERROR - Failed to download 36958cbc-8974-4781-843a-82e7b6c2dbf3.jpg after 3 attempts. +2025-04-11 19:58:20,327 - logging_config - WARNING - Retrying b79a6edf-79dc-4611-8125-3d65020ea794.mp3... (2/3) +2025-04-11 19:58:20,328 - logging_config - ERROR - Failed to download 4084447f-68be-4940-ac81-cb5627fce1aa.jpg after 3 attempts. +2025-04-11 19:58:20,328 - logging_config - ERROR - Failed to download 8c7a8b5a-1655-4ad2-88fb-9a27f4ccdf4b.mp3: Command 'aria2c -o "course/671/8c7a8b5a-1655-4ad2-88fb-9a27f4ccdf4b.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/8c7a8b5a-1655-4ad2-88fb-9a27f4ccdf4b.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,331 - logging_config - ERROR - Failed to download 1b466f26-9764-4915-9f00-b34c5298d88d.mp3: Command 'aria2c -o "course/671/1b466f26-9764-4915-9f00-b34c5298d88d.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/1b466f26-9764-4915-9f00-b34c5298d88d.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,332 - logging_config - ERROR - Failed to download 292dc45e-a378-4fc0-844c-a94962f7f2d8.mp3: Command 'aria2c -o "course/671/292dc45e-a378-4fc0-844c-a94962f7f2d8.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/292dc45e-a378-4fc0-844c-a94962f7f2d8.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,332 - logging_config - ERROR - Failed to download 8c7a8b5a-1655-4ad2-88fb-9a27f4ccdf4b.mp3 after 3 attempts. +2025-04-11 19:58:20,332 - logging_config - WARNING - Retrying 1b466f26-9764-4915-9f00-b34c5298d88d.mp3... (1/3) +2025-04-11 19:58:20,332 - logging_config - WARNING - Retrying 292dc45e-a378-4fc0-844c-a94962f7f2d8.mp3... (1/3) +2025-04-11 19:58:20,333 - logging_config - ERROR - Failed to download b79a6edf-79dc-4611-8125-3d65020ea794.mp3: Command 'aria2c -o "course/671/b79a6edf-79dc-4611-8125-3d65020ea794.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/b79a6edf-79dc-4611-8125-3d65020ea794.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,336 - logging_config - ERROR - Failed to download b79a6edf-79dc-4611-8125-3d65020ea794.mp3 after 3 attempts. +2025-04-11 19:58:20,336 - logging_config - ERROR - Failed to download 38889361-bc14-44ea-a1c3-f483037b7f83.jpg: Command 'aria2c -o "course/671/jpg/38889361-bc14-44ea-a1c3-f483037b7f83.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/38889361-bc14-44ea-a1c3-f483037b7f83.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,336 - logging_config - ERROR - Failed to download 345c91a9-014e-40de-a00b-fdfd8a07c469.mp3: Command 'aria2c -o "course/671/345c91a9-014e-40de-a00b-fdfd8a07c469.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/345c91a9-014e-40de-a00b-fdfd8a07c469.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,336 - logging_config - WARNING - Retrying 38889361-bc14-44ea-a1c3-f483037b7f83.jpg... (1/3) +2025-04-11 19:58:20,338 - logging_config - WARNING - Retrying 345c91a9-014e-40de-a00b-fdfd8a07c469.mp3... (1/3) +2025-04-11 19:58:20,338 - logging_config - ERROR - Failed to download 1b466f26-9764-4915-9f00-b34c5298d88d.mp3: Command 'aria2c -o "course/671/1b466f26-9764-4915-9f00-b34c5298d88d.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/1b466f26-9764-4915-9f00-b34c5298d88d.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,341 - logging_config - ERROR - Failed to download 0f720a86-74d9-4eee-8af9-af03ddc62a9e.mp3: Command 'aria2c -o "course/671/0f720a86-74d9-4eee-8af9-af03ddc62a9e.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/0f720a86-74d9-4eee-8af9-af03ddc62a9e.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,341 - logging_config - ERROR - Failed to download 292dc45e-a378-4fc0-844c-a94962f7f2d8.mp3: Command 'aria2c -o "course/671/292dc45e-a378-4fc0-844c-a94962f7f2d8.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/292dc45e-a378-4fc0-844c-a94962f7f2d8.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,341 - logging_config - WARNING - Retrying 1b466f26-9764-4915-9f00-b34c5298d88d.mp3... (2/3) +2025-04-11 19:58:20,341 - logging_config - WARNING - Retrying 0f720a86-74d9-4eee-8af9-af03ddc62a9e.mp3... (1/3) +2025-04-11 19:58:20,341 - logging_config - WARNING - Retrying 292dc45e-a378-4fc0-844c-a94962f7f2d8.mp3... (2/3) +2025-04-11 19:58:20,344 - logging_config - ERROR - Failed to download 345c91a9-014e-40de-a00b-fdfd8a07c469.mp3: Command 'aria2c -o "course/671/345c91a9-014e-40de-a00b-fdfd8a07c469.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/345c91a9-014e-40de-a00b-fdfd8a07c469.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,344 - logging_config - WARNING - Retrying 345c91a9-014e-40de-a00b-fdfd8a07c469.mp3... (2/3) +2025-04-11 19:58:20,345 - logging_config - ERROR - Failed to download 1b466f26-9764-4915-9f00-b34c5298d88d.mp3: Command 'aria2c -o "course/671/1b466f26-9764-4915-9f00-b34c5298d88d.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/1b466f26-9764-4915-9f00-b34c5298d88d.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,345 - logging_config - ERROR - Failed to download 38889361-bc14-44ea-a1c3-f483037b7f83.jpg: Command 'aria2c -o "course/671/jpg/jpg/38889361-bc14-44ea-a1c3-f483037b7f83.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/38889361-bc14-44ea-a1c3-f483037b7f83.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,347 - logging_config - ERROR - Failed to download 1b466f26-9764-4915-9f00-b34c5298d88d.mp3 after 3 attempts. +2025-04-11 19:58:20,347 - logging_config - ERROR - Failed to download 0f720a86-74d9-4eee-8af9-af03ddc62a9e.mp3: Command 'aria2c -o "course/671/0f720a86-74d9-4eee-8af9-af03ddc62a9e.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/0f720a86-74d9-4eee-8af9-af03ddc62a9e.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,347 - logging_config - WARNING - Retrying 38889361-bc14-44ea-a1c3-f483037b7f83.jpg... (2/3) +2025-04-11 19:58:20,349 - logging_config - WARNING - Retrying 0f720a86-74d9-4eee-8af9-af03ddc62a9e.mp3... (2/3) +2025-04-11 19:58:20,349 - logging_config - ERROR - Failed to download 292dc45e-a378-4fc0-844c-a94962f7f2d8.mp3: Command 'aria2c -o "course/671/292dc45e-a378-4fc0-844c-a94962f7f2d8.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/292dc45e-a378-4fc0-844c-a94962f7f2d8.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,350 - logging_config - ERROR - Failed to download 345c91a9-014e-40de-a00b-fdfd8a07c469.mp3: Command 'aria2c -o "course/671/345c91a9-014e-40de-a00b-fdfd8a07c469.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/345c91a9-014e-40de-a00b-fdfd8a07c469.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,351 - logging_config - ERROR - Failed to download 292dc45e-a378-4fc0-844c-a94962f7f2d8.mp3 after 3 attempts. +2025-04-11 19:58:20,352 - logging_config - ERROR - Failed to download c91e527f-f5ae-479e-8c5d-6bb7871a112f.jpg: Command 'aria2c -o "course/671/jpg/c91e527f-f5ae-479e-8c5d-6bb7871a112f.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/c91e527f-f5ae-479e-8c5d-6bb7871a112f.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,352 - logging_config - ERROR - Failed to download 345c91a9-014e-40de-a00b-fdfd8a07c469.mp3 after 3 attempts. +2025-04-11 19:58:20,353 - logging_config - ERROR - Failed to download 38889361-bc14-44ea-a1c3-f483037b7f83.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/38889361-bc14-44ea-a1c3-f483037b7f83.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/38889361-bc14-44ea-a1c3-f483037b7f83.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,353 - logging_config - WARNING - Retrying c91e527f-f5ae-479e-8c5d-6bb7871a112f.jpg... (1/3) +2025-04-11 19:58:20,355 - logging_config - ERROR - Failed to download 0f720a86-74d9-4eee-8af9-af03ddc62a9e.mp3: Command 'aria2c -o "course/671/0f720a86-74d9-4eee-8af9-af03ddc62a9e.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/0f720a86-74d9-4eee-8af9-af03ddc62a9e.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,355 - logging_config - ERROR - Failed to download 38889361-bc14-44ea-a1c3-f483037b7f83.jpg after 3 attempts. +2025-04-11 19:58:20,356 - logging_config - ERROR - Failed to download d9297f09-737d-4b5a-98d8-2d333144f338.jpg: Command 'aria2c -o "course/671/jpg/d9297f09-737d-4b5a-98d8-2d333144f338.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/d9297f09-737d-4b5a-98d8-2d333144f338.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,357 - logging_config - ERROR - Failed to download 0f720a86-74d9-4eee-8af9-af03ddc62a9e.mp3 after 3 attempts. +2025-04-11 19:58:20,358 - logging_config - ERROR - Failed to download 68193e3b-122b-4b69-836c-77933b9983d6.mp3: Command 'aria2c -o "course/671/68193e3b-122b-4b69-836c-77933b9983d6.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/68193e3b-122b-4b69-836c-77933b9983d6.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,359 - logging_config - WARNING - Retrying d9297f09-737d-4b5a-98d8-2d333144f338.jpg... (1/3) +2025-04-11 19:58:20,360 - logging_config - ERROR - Failed to download c91e527f-f5ae-479e-8c5d-6bb7871a112f.jpg: Command 'aria2c -o "course/671/jpg/jpg/c91e527f-f5ae-479e-8c5d-6bb7871a112f.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/c91e527f-f5ae-479e-8c5d-6bb7871a112f.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,361 - logging_config - WARNING - Retrying 68193e3b-122b-4b69-836c-77933b9983d6.mp3... (1/3) +2025-04-11 19:58:20,362 - logging_config - WARNING - Retrying c91e527f-f5ae-479e-8c5d-6bb7871a112f.jpg... (2/3) +2025-04-11 19:58:20,362 - logging_config - ERROR - Failed to download 4d376953-71a9-4cd5-b4d4-642b31571784.mp3: Command 'aria2c -o "course/671/4d376953-71a9-4cd5-b4d4-642b31571784.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4d376953-71a9-4cd5-b4d4-642b31571784.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,365 - logging_config - WARNING - Retrying 4d376953-71a9-4cd5-b4d4-642b31571784.mp3... (1/3) +2025-04-11 19:58:20,365 - logging_config - ERROR - Failed to download 8365ff24-4ac5-4ecb-a914-845daa73d7a1.mp3: Command 'aria2c -o "course/671/8365ff24-4ac5-4ecb-a914-845daa73d7a1.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/8365ff24-4ac5-4ecb-a914-845daa73d7a1.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,366 - logging_config - ERROR - Failed to download d9297f09-737d-4b5a-98d8-2d333144f338.jpg: Command 'aria2c -o "course/671/jpg/jpg/d9297f09-737d-4b5a-98d8-2d333144f338.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/d9297f09-737d-4b5a-98d8-2d333144f338.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,367 - logging_config - WARNING - Retrying 8365ff24-4ac5-4ecb-a914-845daa73d7a1.mp3... (1/3) +2025-04-11 19:58:20,367 - logging_config - WARNING - Retrying d9297f09-737d-4b5a-98d8-2d333144f338.jpg... (2/3) +2025-04-11 19:58:20,367 - logging_config - ERROR - Failed to download 68193e3b-122b-4b69-836c-77933b9983d6.mp3: Command 'aria2c -o "course/671/68193e3b-122b-4b69-836c-77933b9983d6.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/68193e3b-122b-4b69-836c-77933b9983d6.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,367 - logging_config - ERROR - Failed to download c91e527f-f5ae-479e-8c5d-6bb7871a112f.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/c91e527f-f5ae-479e-8c5d-6bb7871a112f.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/c91e527f-f5ae-479e-8c5d-6bb7871a112f.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,370 - logging_config - WARNING - Retrying 68193e3b-122b-4b69-836c-77933b9983d6.mp3... (2/3) +2025-04-11 19:58:20,370 - logging_config - ERROR - Failed to download c91e527f-f5ae-479e-8c5d-6bb7871a112f.jpg after 3 attempts. +2025-04-11 19:58:20,370 - logging_config - ERROR - Failed to download 4d376953-71a9-4cd5-b4d4-642b31571784.mp3: Command 'aria2c -o "course/671/4d376953-71a9-4cd5-b4d4-642b31571784.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4d376953-71a9-4cd5-b4d4-642b31571784.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,372 - logging_config - WARNING - Retrying 4d376953-71a9-4cd5-b4d4-642b31571784.mp3... (2/3) +2025-04-11 19:58:20,372 - logging_config - ERROR - Failed to download d9297f09-737d-4b5a-98d8-2d333144f338.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/d9297f09-737d-4b5a-98d8-2d333144f338.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/d9297f09-737d-4b5a-98d8-2d333144f338.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,373 - logging_config - ERROR - Failed to download d9297f09-737d-4b5a-98d8-2d333144f338.jpg after 3 attempts. +2025-04-11 19:58:20,373 - logging_config - ERROR - Failed to download 8365ff24-4ac5-4ecb-a914-845daa73d7a1.mp3: Command 'aria2c -o "course/671/8365ff24-4ac5-4ecb-a914-845daa73d7a1.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/8365ff24-4ac5-4ecb-a914-845daa73d7a1.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,374 - logging_config - ERROR - Failed to download 68193e3b-122b-4b69-836c-77933b9983d6.mp3: Command 'aria2c -o "course/671/68193e3b-122b-4b69-836c-77933b9983d6.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/68193e3b-122b-4b69-836c-77933b9983d6.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,375 - logging_config - ERROR - Failed to download ac02899b-9c43-4a23-bc30-724ac340cd23.jpg: Command 'aria2c -o "course/671/jpg/ac02899b-9c43-4a23-bc30-724ac340cd23.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/ac02899b-9c43-4a23-bc30-724ac340cd23.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,376 - logging_config - WARNING - Retrying 8365ff24-4ac5-4ecb-a914-845daa73d7a1.mp3... (2/3) +2025-04-11 19:58:20,376 - logging_config - ERROR - Failed to download 68193e3b-122b-4b69-836c-77933b9983d6.mp3 after 3 attempts. +2025-04-11 19:58:20,376 - logging_config - WARNING - Retrying ac02899b-9c43-4a23-bc30-724ac340cd23.jpg... (1/3) +2025-04-11 19:58:20,379 - logging_config - ERROR - Failed to download 4d376953-71a9-4cd5-b4d4-642b31571784.mp3: Command 'aria2c -o "course/671/4d376953-71a9-4cd5-b4d4-642b31571784.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4d376953-71a9-4cd5-b4d4-642b31571784.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,380 - logging_config - ERROR - Failed to download 09a4ecdb-33c3-40ed-b400-697f219a0379.mp3: Command 'aria2c -o "course/671/09a4ecdb-33c3-40ed-b400-697f219a0379.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/09a4ecdb-33c3-40ed-b400-697f219a0379.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,380 - logging_config - ERROR - Failed to download 4d376953-71a9-4cd5-b4d4-642b31571784.mp3 after 3 attempts. +2025-04-11 19:58:20,380 - logging_config - ERROR - Failed to download 8365ff24-4ac5-4ecb-a914-845daa73d7a1.mp3: Command 'aria2c -o "course/671/8365ff24-4ac5-4ecb-a914-845daa73d7a1.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/8365ff24-4ac5-4ecb-a914-845daa73d7a1.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,380 - logging_config - WARNING - Retrying 09a4ecdb-33c3-40ed-b400-697f219a0379.mp3... (1/3) +2025-04-11 19:58:20,381 - logging_config - ERROR - Failed to download 8365ff24-4ac5-4ecb-a914-845daa73d7a1.mp3 after 3 attempts. +2025-04-11 19:58:20,382 - logging_config - ERROR - Failed to download cbbacd0c-7584-4e99-b5ca-624cf0d79900.mp3: Command 'aria2c -o "course/671/cbbacd0c-7584-4e99-b5ca-624cf0d79900.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/cbbacd0c-7584-4e99-b5ca-624cf0d79900.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,384 - logging_config - WARNING - Retrying cbbacd0c-7584-4e99-b5ca-624cf0d79900.mp3... (1/3) +2025-04-11 19:58:20,385 - logging_config - ERROR - Failed to download ac02899b-9c43-4a23-bc30-724ac340cd23.jpg: Command 'aria2c -o "course/671/jpg/jpg/ac02899b-9c43-4a23-bc30-724ac340cd23.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/ac02899b-9c43-4a23-bc30-724ac340cd23.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,386 - logging_config - ERROR - Failed to download 09a4ecdb-33c3-40ed-b400-697f219a0379.mp3: Command 'aria2c -o "course/671/09a4ecdb-33c3-40ed-b400-697f219a0379.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/09a4ecdb-33c3-40ed-b400-697f219a0379.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,386 - logging_config - ERROR - Failed to download 39316b2a-d94d-489f-87dc-8197be7dd619.jpg: Command 'aria2c -o "course/671/jpg/39316b2a-d94d-489f-87dc-8197be7dd619.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/39316b2a-d94d-489f-87dc-8197be7dd619.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,386 - logging_config - WARNING - Retrying ac02899b-9c43-4a23-bc30-724ac340cd23.jpg... (2/3) +2025-04-11 19:58:20,386 - logging_config - WARNING - Retrying 09a4ecdb-33c3-40ed-b400-697f219a0379.mp3... (2/3) +2025-04-11 19:58:20,386 - logging_config - WARNING - Retrying 39316b2a-d94d-489f-87dc-8197be7dd619.jpg... (1/3) +2025-04-11 19:58:20,389 - logging_config - ERROR - Failed to download 841b7582-a33b-49d4-89d4-3c7d67c76229.mp3: Command 'aria2c -o "course/671/841b7582-a33b-49d4-89d4-3c7d67c76229.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/841b7582-a33b-49d4-89d4-3c7d67c76229.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,391 - logging_config - ERROR - Failed to download 09a4ecdb-33c3-40ed-b400-697f219a0379.mp3: Command 'aria2c -o "course/671/09a4ecdb-33c3-40ed-b400-697f219a0379.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/09a4ecdb-33c3-40ed-b400-697f219a0379.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,392 - logging_config - ERROR - Failed to download cbbacd0c-7584-4e99-b5ca-624cf0d79900.mp3: Command 'aria2c -o "course/671/cbbacd0c-7584-4e99-b5ca-624cf0d79900.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/cbbacd0c-7584-4e99-b5ca-624cf0d79900.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,392 - logging_config - WARNING - Retrying 841b7582-a33b-49d4-89d4-3c7d67c76229.mp3... (1/3) +2025-04-11 19:58:20,392 - logging_config - ERROR - Failed to download 09a4ecdb-33c3-40ed-b400-697f219a0379.mp3 after 3 attempts. +2025-04-11 19:58:20,392 - logging_config - WARNING - Retrying cbbacd0c-7584-4e99-b5ca-624cf0d79900.mp3... (2/3) +2025-04-11 19:58:20,394 - logging_config - ERROR - Failed to download 39316b2a-d94d-489f-87dc-8197be7dd619.jpg: Command 'aria2c -o "course/671/jpg/jpg/39316b2a-d94d-489f-87dc-8197be7dd619.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/39316b2a-d94d-489f-87dc-8197be7dd619.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,395 - logging_config - ERROR - Failed to download ac02899b-9c43-4a23-bc30-724ac340cd23.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/ac02899b-9c43-4a23-bc30-724ac340cd23.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/ac02899b-9c43-4a23-bc30-724ac340cd23.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,397 - logging_config - ERROR - Failed to download 841b7582-a33b-49d4-89d4-3c7d67c76229.mp3: Command 'aria2c -o "course/671/841b7582-a33b-49d4-89d4-3c7d67c76229.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/841b7582-a33b-49d4-89d4-3c7d67c76229.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,397 - logging_config - ERROR - Failed to download ac02899b-9c43-4a23-bc30-724ac340cd23.jpg after 3 attempts. +2025-04-11 19:58:20,397 - logging_config - WARNING - Retrying 39316b2a-d94d-489f-87dc-8197be7dd619.jpg... (2/3) +2025-04-11 19:58:20,397 - logging_config - ERROR - Failed to download 28e88bad-a7df-4cca-8065-b8676ea64a2f.mp3: Command 'aria2c -o "course/671/28e88bad-a7df-4cca-8065-b8676ea64a2f.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/28e88bad-a7df-4cca-8065-b8676ea64a2f.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,397 - logging_config - WARNING - Retrying 841b7582-a33b-49d4-89d4-3c7d67c76229.mp3... (2/3) +2025-04-11 19:58:20,400 - logging_config - ERROR - Failed to download cbbacd0c-7584-4e99-b5ca-624cf0d79900.mp3: Command 'aria2c -o "course/671/cbbacd0c-7584-4e99-b5ca-624cf0d79900.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/cbbacd0c-7584-4e99-b5ca-624cf0d79900.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,401 - logging_config - WARNING - Retrying 28e88bad-a7df-4cca-8065-b8676ea64a2f.mp3... (1/3) +2025-04-11 19:58:20,402 - logging_config - ERROR - Failed to download cbbacd0c-7584-4e99-b5ca-624cf0d79900.mp3 after 3 attempts. +2025-04-11 19:58:20,403 - logging_config - ERROR - Failed to download 995bbc25-3d09-4931-a4b6-ab9c2ebe72f4.jpg: Command 'aria2c -o "course/671/jpg/995bbc25-3d09-4931-a4b6-ab9c2ebe72f4.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/995bbc25-3d09-4931-a4b6-ab9c2ebe72f4.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,404 - logging_config - ERROR - Failed to download 39316b2a-d94d-489f-87dc-8197be7dd619.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/39316b2a-d94d-489f-87dc-8197be7dd619.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/39316b2a-d94d-489f-87dc-8197be7dd619.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,406 - logging_config - ERROR - Failed to download 841b7582-a33b-49d4-89d4-3c7d67c76229.mp3: Command 'aria2c -o "course/671/841b7582-a33b-49d4-89d4-3c7d67c76229.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/841b7582-a33b-49d4-89d4-3c7d67c76229.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,406 - logging_config - WARNING - Retrying 995bbc25-3d09-4931-a4b6-ab9c2ebe72f4.jpg... (1/3) +2025-04-11 19:58:20,406 - logging_config - ERROR - Failed to download 39316b2a-d94d-489f-87dc-8197be7dd619.jpg after 3 attempts. +2025-04-11 19:58:20,407 - logging_config - ERROR - Failed to download 841b7582-a33b-49d4-89d4-3c7d67c76229.mp3 after 3 attempts. +2025-04-11 19:58:20,407 - logging_config - ERROR - Failed to download 28e88bad-a7df-4cca-8065-b8676ea64a2f.mp3: Command 'aria2c -o "course/671/28e88bad-a7df-4cca-8065-b8676ea64a2f.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/28e88bad-a7df-4cca-8065-b8676ea64a2f.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,409 - logging_config - ERROR - Failed to download 0540d1c1-5c18-422f-b714-67ff2b4f7aa9.jpg: Command 'aria2c -o "course/671/jpg/0540d1c1-5c18-422f-b714-67ff2b4f7aa9.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/0540d1c1-5c18-422f-b714-67ff2b4f7aa9.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,409 - logging_config - WARNING - Retrying 28e88bad-a7df-4cca-8065-b8676ea64a2f.mp3... (2/3) +2025-04-11 19:58:20,409 - logging_config - WARNING - Retrying 0540d1c1-5c18-422f-b714-67ff2b4f7aa9.jpg... (1/3) +2025-04-11 19:58:20,412 - logging_config - ERROR - Failed to download 995bbc25-3d09-4931-a4b6-ab9c2ebe72f4.jpg: Command 'aria2c -o "course/671/jpg/jpg/995bbc25-3d09-4931-a4b6-ab9c2ebe72f4.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/995bbc25-3d09-4931-a4b6-ab9c2ebe72f4.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,412 - logging_config - WARNING - Retrying 995bbc25-3d09-4931-a4b6-ab9c2ebe72f4.jpg... (2/3) +2025-04-11 19:58:20,414 - logging_config - ERROR - Failed to download 28e88bad-a7df-4cca-8065-b8676ea64a2f.mp3: Command 'aria2c -o "course/671/28e88bad-a7df-4cca-8065-b8676ea64a2f.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/28e88bad-a7df-4cca-8065-b8676ea64a2f.mp3' returned non-zero exit status 127. +2025-04-11 19:58:20,414 - logging_config - ERROR - Failed to download 28e88bad-a7df-4cca-8065-b8676ea64a2f.mp3 after 3 attempts. +2025-04-11 19:58:20,415 - logging_config - ERROR - Failed to download 0540d1c1-5c18-422f-b714-67ff2b4f7aa9.jpg: Command 'aria2c -o "course/671/jpg/jpg/0540d1c1-5c18-422f-b714-67ff2b4f7aa9.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/0540d1c1-5c18-422f-b714-67ff2b4f7aa9.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,415 - logging_config - WARNING - Retrying 0540d1c1-5c18-422f-b714-67ff2b4f7aa9.jpg... (2/3) +2025-04-11 19:58:20,417 - logging_config - ERROR - Failed to download 995bbc25-3d09-4931-a4b6-ab9c2ebe72f4.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/995bbc25-3d09-4931-a4b6-ab9c2ebe72f4.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/995bbc25-3d09-4931-a4b6-ab9c2ebe72f4.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,417 - logging_config - ERROR - Failed to download 995bbc25-3d09-4931-a4b6-ab9c2ebe72f4.jpg after 3 attempts. +2025-04-11 19:58:20,419 - logging_config - ERROR - Failed to download 0540d1c1-5c18-422f-b714-67ff2b4f7aa9.jpg: Command 'aria2c -o "course/671/jpg/jpg/jpg/0540d1c1-5c18-422f-b714-67ff2b4f7aa9.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/0540d1c1-5c18-422f-b714-67ff2b4f7aa9.webp' returned non-zero exit status 127. +2025-04-11 19:58:20,419 - logging_config - ERROR - Failed to download 0540d1c1-5c18-422f-b714-67ff2b4f7aa9.jpg after 3 attempts. +2025-04-11 20:00:40,393 - logging_config - INFO - The maximum course ID is 675 +2025-04-11 20:00:40,394 - logging_config - INFO - Processing course ID: 670 +2025-04-11 20:00:40,394 - logging_config - INFO - Course 670 JSON file already exists, using local file. +2025-04-11 20:00:40,395 - logging_config - INFO - Processing course ID: 671 +2025-04-11 20:00:40,395 - logging_config - INFO - Course 671 JSON file already exists, using local file. +2025-04-11 20:00:40,396 - logging_config - INFO - Processing course ID: 672 +2025-04-11 20:00:40,396 - logging_config - INFO - Course 672 JSON file already exists, using local file. +2025-04-11 20:00:40,396 - logging_config - INFO - Processing course ID: 673 +2025-04-11 20:00:40,397 - logging_config - INFO - Course 673 JSON file already exists, using local file. +2025-04-11 20:00:40,397 - logging_config - INFO - Processing course ID: 674 +2025-04-11 20:00:40,397 - logging_config - INFO - Course 674 JSON file already exists, using local file. +2025-04-11 20:00:40,398 - logging_config - INFO - Processing course ID: 675 +2025-04-11 20:00:40,398 - logging_config - INFO - Course 675 JSON file already exists, using local file. +2025-04-11 20:00:44,293 - logging_config - INFO - Download Command: aria2c -o "course/670/mp4/16、蛋壳投资在这个时代里为什么这么靠谱?.mp4" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/8361fe81-9ffb-4dc4-99c4-a892c9d4884a.mp4 +2025-04-11 20:01:25,265 - logging_config - INFO - The maximum course ID is 675 +2025-04-11 20:01:25,266 - logging_config - INFO - Processing course ID: 672 +2025-04-11 20:01:25,266 - logging_config - INFO - Course 672 JSON file already exists, using local file. +2025-04-11 20:01:25,267 - logging_config - INFO - Processing course ID: 673 +2025-04-11 20:01:25,267 - logging_config - INFO - Course 673 JSON file already exists, using local file. +2025-04-11 20:01:25,268 - logging_config - INFO - Processing course ID: 674 +2025-04-11 20:01:25,268 - logging_config - INFO - Course 674 JSON file already exists, using local file. +2025-04-11 20:01:25,268 - logging_config - INFO - Processing course ID: 675 +2025-04-11 20:01:25,268 - logging_config - INFO - Course 675 JSON file already exists, using local file. +2025-04-11 20:01:25,269 - logging_config - INFO - 字符串为空 +2025-04-11 20:02:11,391 - logging_config - ERROR - Failed to download 80780c92-0cf9-4ae7-be68-fd0bdaa7b948.m3u8: Command 'aria2c -o "course/672/m3u8/80780c92-0cf9-4ae7-be68-fd0bdaa7b948.m3u8" -x 16 -s 16 https://pili-vod.songy.info/80780c92-0cf9-4ae7-be68-fd0bdaa7b948.m3u8' returned non-zero exit status 7. +2025-04-11 20:02:11,393 - logging_config - WARNING - Retrying 80780c92-0cf9-4ae7-be68-fd0bdaa7b948.m3u8... (1/3) +2025-04-12 13:43:43,694 - logging_config - INFO - The maximum course ID is 675 +2025-04-12 13:43:43,694 - logging_config - INFO - Processing course ID: 672 +2025-04-12 13:43:43,694 - logging_config - INFO - Course 672 JSON file already exists, using local file. +2025-04-12 13:43:43,695 - logging_config - INFO - Processing course ID: 673 +2025-04-12 13:43:43,695 - logging_config - INFO - Course 673 JSON file already exists, using local file. +2025-04-12 13:43:43,696 - logging_config - INFO - Processing course ID: 674 +2025-04-12 13:43:43,696 - logging_config - INFO - Course 674 JSON file already exists, using local file. +2025-04-12 13:43:43,697 - logging_config - INFO - Processing course ID: 675 +2025-04-12 13:43:43,697 - logging_config - INFO - Course 675 JSON file already exists, using local file. +2025-04-12 13:43:43,697 - logging_config - INFO - 字符串为空 +2025-04-12 13:44:08,583 - logging_config - ERROR - Failed to download 80780c92-0cf9-4ae7-be68-fd0bdaa7b948.m3u8: Command 'aria2c -o "course/672/m3u8/80780c92-0cf9-4ae7-be68-fd0bdaa7b948.m3u8" -x 16 -s 16 https://pili-vod.songy.info/80780c92-0cf9-4ae7-be68-fd0bdaa7b948.m3u8' returned non-zero exit status 7. +2025-04-12 13:44:08,584 - logging_config - WARNING - Retrying 80780c92-0cf9-4ae7-be68-fd0bdaa7b948.m3u8... (1/3) +2025-04-13 08:32:50,539 - logging_config - INFO - The maximum course ID is 675 +2025-04-13 08:32:50,540 - logging_config - INFO - Processing course ID: 672 +2025-04-13 08:32:50,540 - logging_config - INFO - Course 672 JSON file already exists, using local file. +2025-04-13 08:32:50,541 - logging_config - INFO - Processing course ID: 673 +2025-04-13 08:32:50,541 - logging_config - INFO - Course 673 JSON file already exists, using local file. +2025-04-13 08:32:50,542 - logging_config - INFO - Processing course ID: 674 +2025-04-13 08:32:50,542 - logging_config - INFO - Course 674 JSON file already exists, using local file. +2025-04-13 08:32:50,543 - logging_config - INFO - Processing course ID: 675 +2025-04-13 08:32:50,543 - logging_config - INFO - Course 675 JSON file already exists, using local file. +2025-04-13 08:32:50,544 - logging_config - INFO - 字符串为空 +2025-04-13 08:32:54,053 - logging_config - INFO - Download Command: aria2c -o "course/672/m3u8/80780c92-0cf9-4ae7-be68-fd0bdaa7b948.m3u8" -x 16 -s 16 https://pili-vod.songy.info/80780c92-0cf9-4ae7-be68-fd0bdaa7b948.m3u8 +2025-04-13 08:32:54,749 - logging_config - INFO - Download Command: aria2c -o "course/673/39167e1f-ba1c-4cdd-9348-88332aa49cdb.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/39167e1f-ba1c-4cdd-9348-88332aa49cdb.mp3 +2025-04-13 08:32:54,758 - logging_config - INFO - Download Command: aria2c -o "course/673/a8daceb8-6c2d-45cc-bd1f-4231e06ba776.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/a8daceb8-6c2d-45cc-bd1f-4231e06ba776.mp3 +2025-04-13 08:32:54,825 - logging_config - INFO - Download Command: aria2c -o "course/673/d5755fa6-c813-4f91-b25e-d825799eb7b1.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/d5755fa6-c813-4f91-b25e-d825799eb7b1.mp3 +2025-04-13 08:32:54,861 - logging_config - INFO - Download Command: aria2c -o "course/673/52f83bf7-a898-4e05-835c-4a270f8f1487.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/52f83bf7-a898-4e05-835c-4a270f8f1487.mp3 +2025-04-13 08:32:54,922 - logging_config - INFO - Download Command: aria2c -o "course/673/c3a874dd-b6f5-4251-98a1-76df3d4e05bb.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/c3a874dd-b6f5-4251-98a1-76df3d4e05bb.mp3 +2025-04-13 08:32:55,022 - logging_config - INFO - Download Command: aria2c -o "course/673/jpg/a251ddaf-6ce1-4dcf-9ef3-dd775caa5ef6.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/a251ddaf-6ce1-4dcf-9ef3-dd775caa5ef6.webp +2025-04-13 08:32:55,050 - logging_config - INFO - Download Command: aria2c -o "course/673/jpg/113c9037-1b88-4b9c-87a3-936a57a9717a.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/113c9037-1b88-4b9c-87a3-936a57a9717a.webp +2025-04-13 08:32:55,197 - logging_config - INFO - Download Command: aria2c -o "course/673/jpg/7a20ddbe-8272-4da2-9fa5-2494e8a78107.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/7a20ddbe-8272-4da2-9fa5-2494e8a78107.webp +2025-04-13 08:32:55,222 - logging_config - INFO - Download Command: aria2c -o "course/673/1dad0daa-48c0-4b0c-8408-7fce2ad6bf16.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/1dad0daa-48c0-4b0c-8408-7fce2ad6bf16.mp3 +2025-04-13 08:32:55,248 - logging_config - INFO - Download Command: aria2c -o "course/673/e9f4db38-8c4d-4fc2-aba2-811eb4becbe6.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/e9f4db38-8c4d-4fc2-aba2-811eb4becbe6.mp3 +2025-04-13 08:32:55,383 - logging_config - INFO - Download Command: aria2c -o "course/673/86b6f7e1-d67c-44e4-a56c-b925dec424cc.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/86b6f7e1-d67c-44e4-a56c-b925dec424cc.mp3 +2025-04-13 08:32:55,427 - logging_config - INFO - Download Command: aria2c -o "course/673/4a08c2e6-af40-49a7-9a52-b7cabb42d6f9.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4a08c2e6-af40-49a7-9a52-b7cabb42d6f9.mp3 +2025-04-13 08:32:55,541 - logging_config - INFO - Download Command: aria2c -o "course/673/74ce3b90-d47d-4cba-a36b-bf7ad9f78a9f.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/74ce3b90-d47d-4cba-a36b-bf7ad9f78a9f.mp3 +2025-04-13 08:32:55,558 - logging_config - INFO - Download Command: aria2c -o "course/673/dfd41e24-5afa-432d-9049-f49c94e88e2b.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/dfd41e24-5afa-432d-9049-f49c94e88e2b.mp3 +2025-04-13 08:32:55,614 - logging_config - INFO - Download Command: aria2c -o "course/673/b826b730-0330-49db-9058-fe787e38694f.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/b826b730-0330-49db-9058-fe787e38694f.mp3 +2025-04-13 08:32:55,713 - logging_config - INFO - Download Command: aria2c -o "course/673/82f1d538-63a4-4170-81a5-cba09ded6d79.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/82f1d538-63a4-4170-81a5-cba09ded6d79.mp3 +2025-04-13 08:32:55,796 - logging_config - INFO - Download Command: aria2c -o "course/673/667ec28f-e457-4a5c-a59d-6e411626cb16.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/667ec28f-e457-4a5c-a59d-6e411626cb16.mp3 +2025-04-13 08:32:55,871 - logging_config - INFO - Download Command: aria2c -o "course/673/94af980e-02fd-4175-acd3-fcaf91b3e118.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/94af980e-02fd-4175-acd3-fcaf91b3e118.mp3 +2025-04-13 08:32:55,932 - logging_config - INFO - Download Command: aria2c -o "course/673/jpg/2d458864-5e9e-4824-8663-3821704c7be8.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/2d458864-5e9e-4824-8663-3821704c7be8.webp +2025-04-13 08:32:56,043 - logging_config - INFO - Download Command: aria2c -o "course/673/jpg/863041b5-4fcb-4b24-a70b-a187432bc75b.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/863041b5-4fcb-4b24-a70b-a187432bc75b.webp +2025-04-13 08:32:56,062 - logging_config - INFO - Download Command: aria2c -o "course/673/jpg/f672bbe9-f3cb-4622-bce5-3b9a8d150308.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/f672bbe9-f3cb-4622-bce5-3b9a8d150308.webp +2025-04-13 08:32:56,122 - logging_config - INFO - Download Command: aria2c -o "course/673/38216055-4cc8-4339-a5da-dd428fbddde9.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/38216055-4cc8-4339-a5da-dd428fbddde9.mp3 +2025-04-13 08:32:56,180 - logging_config - INFO - Download Command: aria2c -o "course/673/d9f99925-70a4-4d74-9a47-0e54a4839eb3.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/d9f99925-70a4-4d74-9a47-0e54a4839eb3.mp3 +2025-04-13 08:32:56,303 - logging_config - INFO - Download Command: aria2c -o "course/673/200ac8aa-068e-4d79-aeb7-346d19bf0c3a.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/200ac8aa-068e-4d79-aeb7-346d19bf0c3a.mp3 +2025-04-13 08:32:56,356 - logging_config - INFO - Download Command: aria2c -o "course/673/3f02652a-abb7-4697-8f70-a5c6e1bab585.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/3f02652a-abb7-4697-8f70-a5c6e1bab585.mp3 +2025-04-13 08:32:56,497 - logging_config - INFO - Download Command: aria2c -o "course/673/84ae903f-b706-493b-bc48-af925b2aa0e9.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/84ae903f-b706-493b-bc48-af925b2aa0e9.mp3 +2025-04-13 08:32:56,511 - logging_config - INFO - Download Command: aria2c -o "course/673/8a0befda-7d9d-41f8-9239-8e8617057e63.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/8a0befda-7d9d-41f8-9239-8e8617057e63.mp3 +2025-04-13 08:32:56,545 - logging_config - INFO - Download Command: aria2c -o "course/673/02e40e46-e0db-4494-ad09-6f2c5f23681c.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/02e40e46-e0db-4494-ad09-6f2c5f23681c.mp3 +2025-04-13 08:32:56,659 - logging_config - INFO - Download Command: aria2c -o "course/673/8216d093-efc8-4fa6-8412-eda6b5f7389e.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/8216d093-efc8-4fa6-8412-eda6b5f7389e.mp3 +2025-04-13 08:32:56,724 - logging_config - INFO - Download Command: aria2c -o "course/673/9c96b000-f2bc-487e-8a8f-37d9ee66ba42.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/9c96b000-f2bc-487e-8a8f-37d9ee66ba42.mp3 +2025-04-13 08:32:56,885 - logging_config - INFO - Download Command: aria2c -o "course/673/d8ad04cd-203b-4aff-9f0b-4b7cee771c28.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/d8ad04cd-203b-4aff-9f0b-4b7cee771c28.mp3 +2025-04-13 08:32:56,887 - logging_config - INFO - Download Command: aria2c -o "course/673/9f30124b-5b64-414a-8552-180b03345170.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/9f30124b-5b64-414a-8552-180b03345170.mp3 +2025-04-13 08:32:57,008 - logging_config - INFO - Download Command: aria2c -o "course/673/9a027d99-e7fc-49ac-aa4b-0d7c2a0e9dc2.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/9a027d99-e7fc-49ac-aa4b-0d7c2a0e9dc2.mp3 +2025-04-13 08:32:57,092 - logging_config - INFO - Download Command: aria2c -o "course/673/4406854f-350d-4065-8290-9a1295bed86b.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4406854f-350d-4065-8290-9a1295bed86b.mp3 +2025-04-13 08:32:57,242 - logging_config - INFO - Download Command: aria2c -o "course/673/b1de3908-c47b-455f-a8e6-48dcf91ef7a3.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/b1de3908-c47b-455f-a8e6-48dcf91ef7a3.mp3 +2025-04-13 08:32:57,287 - logging_config - INFO - Download Command: aria2c -o "course/673/7f177862-047b-48d2-b0d7-ffa22b9cee0c.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/7f177862-047b-48d2-b0d7-ffa22b9cee0c.mp3 +2025-04-13 08:32:57,371 - logging_config - INFO - Download Command: aria2c -o "course/673/jpg/ab4fec97-2ff0-4b1e-aa6f-3f398704ce8a.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/ab4fec97-2ff0-4b1e-aa6f-3f398704ce8a.webp +2025-04-13 08:32:57,460 - logging_config - INFO - Download Command: aria2c -o "course/673/e9b6791c-98bf-4494-b33d-3c201d89bc4d.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/e9b6791c-98bf-4494-b33d-3c201d89bc4d.mp3 +2025-04-13 08:32:57,545 - logging_config - INFO - Download Command: aria2c -o "course/673/jpg/364623da-860d-4f11-a52d-054150a3d2c1.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/364623da-860d-4f11-a52d-054150a3d2c1.webp +2025-04-13 08:32:57,558 - logging_config - INFO - Download Command: aria2c -o "course/673/55cc39f0-8689-44d5-bbe5-de4c906991ac.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/55cc39f0-8689-44d5-bbe5-de4c906991ac.mp3 +2025-04-13 08:32:57,640 - logging_config - INFO - Download Command: aria2c -o "course/673/jpg/842713cc-8b0a-4608-9095-9f810175cbc3.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/842713cc-8b0a-4608-9095-9f810175cbc3.webp +2025-04-13 08:32:57,747 - logging_config - INFO - Download Command: aria2c -o "course/673/jpg/c775047c-d77f-4c81-9769-7c9f84f0841d.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/c775047c-d77f-4c81-9769-7c9f84f0841d.webp +2025-04-13 08:32:57,809 - logging_config - INFO - Download Command: aria2c -o "course/673/0d83f121-5ba8-4c49-89c4-cea223e614e6.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/0d83f121-5ba8-4c49-89c4-cea223e614e6.mp3 +2025-04-13 08:32:57,882 - logging_config - INFO - Download Command: aria2c -o "course/673/ffb8af9b-5019-4711-8053-60b9dd0bc74d.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/ffb8af9b-5019-4711-8053-60b9dd0bc74d.mp3 +2025-04-13 08:32:57,886 - logging_config - INFO - Download Command: aria2c -o "course/673/0d512d12-cb44-4bac-b193-482d515565c0.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/0d512d12-cb44-4bac-b193-482d515565c0.mp3 +2025-04-13 08:32:58,009 - logging_config - INFO - Download Command: aria2c -o "course/673/36d859ae-f72b-4f61-af44-09e26c111c51.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/36d859ae-f72b-4f61-af44-09e26c111c51.mp3 +2025-04-13 08:32:58,256 - logging_config - INFO - Download Command: aria2c -o "course/673/dfdc767f-758b-45ac-be17-8f79d11e7d00.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/dfdc767f-758b-45ac-be17-8f79d11e7d00.mp3 +2025-04-13 08:32:58,303 - logging_config - INFO - Download Command: aria2c -o "course/673/8a3c9638-3bec-4480-beb5-aa8750c53d0c.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/8a3c9638-3bec-4480-beb5-aa8750c53d0c.mp3 +2025-04-13 08:32:58,344 - logging_config - INFO - Download Command: aria2c -o "course/673/jpg/395e871e-bc9c-45a4-87f4-807366014f40.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/395e871e-bc9c-45a4-87f4-807366014f40.webp +2025-04-13 08:32:58,349 - logging_config - INFO - Download Command: aria2c -o "course/673/696dc853-03e3-4f9f-aca5-fbf61878cac3.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/696dc853-03e3-4f9f-aca5-fbf61878cac3.mp3 +2025-04-13 08:32:58,476 - logging_config - INFO - Download Command: aria2c -o "course/673/ef2fd751-dd21-4a11-abca-94a3f4831804.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/ef2fd751-dd21-4a11-abca-94a3f4831804.mp3 +2025-04-13 08:32:58,555 - logging_config - INFO - Download Command: aria2c -o "course/673/339421cb-a8e3-45cb-97c4-952af687ab97.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/339421cb-a8e3-45cb-97c4-952af687ab97.mp3 +2025-04-13 08:32:58,639 - logging_config - INFO - Download Command: aria2c -o "course/673/jpg/3c6acd2d-a766-4df6-bf91-9a22f72950d9.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/3c6acd2d-a766-4df6-bf91-9a22f72950d9.webp +2025-04-13 08:32:58,841 - logging_config - INFO - Download Command: aria2c -o "course/673/64d95060-2c36-4817-bfe0-aff363d3f543.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/64d95060-2c36-4817-bfe0-aff363d3f543.mp3 +2025-04-13 08:32:58,877 - logging_config - INFO - Download Command: aria2c -o "course/673/849a03f8-5b9c-4ae7-a241-06b8f87b6310.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/849a03f8-5b9c-4ae7-a241-06b8f87b6310.mp3 +2025-04-13 08:32:58,898 - logging_config - INFO - Download Command: aria2c -o "course/673/6997c09b-c9d7-4577-b19b-6ed5db8d37d6.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/6997c09b-c9d7-4577-b19b-6ed5db8d37d6.mp3 +2025-04-13 08:32:58,904 - logging_config - INFO - Download Command: aria2c -o "course/673/jpg/2d221353-3184-4d0d-9608-1d9f435e3b25.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/2d221353-3184-4d0d-9608-1d9f435e3b25.webp +2025-04-13 08:32:59,009 - logging_config - INFO - Download Command: aria2c -o "course/673/18afec44-9f06-46de-ab4b-ef62e901c935.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/18afec44-9f06-46de-ab4b-ef62e901c935.mp3 +2025-04-13 08:32:59,169 - logging_config - INFO - Download Command: aria2c -o "course/673/jpg/a53e2628-17f8-4344-a796-b9cfc8c63f05.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/a53e2628-17f8-4344-a796-b9cfc8c63f05.webp +2025-04-13 08:33:04,449 - logging_config - INFO - Download Command: aria2c -o "course/674/jpg/e087f32e-3270-4149-92a1-811798829cf5.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/e087f32e-3270-4149-92a1-811798829cf5.webp +2025-04-13 08:33:04,471 - logging_config - INFO - Download Command: aria2c -o "course/674/dc74d410-fe8a-4bc5-a9a1-dc1b50760e85.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/dc74d410-fe8a-4bc5-a9a1-dc1b50760e85.mp3 +2025-04-13 08:33:04,479 - logging_config - INFO - Download Command: aria2c -o "course/674/1c9f92d7-8860-498c-8809-c5b864c5c241.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/1c9f92d7-8860-498c-8809-c5b864c5c241.mp3 +2025-04-13 08:33:04,515 - logging_config - INFO - Download Command: aria2c -o "course/674/jpg/4c759dec-3f5e-4571-84c4-1f1ce659cd25.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4c759dec-3f5e-4571-84c4-1f1ce659cd25.webp +2025-04-13 08:33:04,580 - logging_config - INFO - Download Command: aria2c -o "course/674/f8da1934-ae9d-4aa9-977e-941bd9e275bf.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/f8da1934-ae9d-4aa9-977e-941bd9e275bf.mp3 +2025-04-13 08:33:04,660 - logging_config - INFO - Download Command: aria2c -o "course/674/png/mmexport1743856033622.png" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/65ace20c-4a8a-491d-ad36-1d6ade371804.webp +2025-04-13 08:33:04,682 - logging_config - INFO - Download Command: aria2c -o "course/674/86cfa2d5-33b1-4d8c-91c2-e3b5d0adf4d9.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/86cfa2d5-33b1-4d8c-91c2-e3b5d0adf4d9.mp3 +2025-04-13 08:33:04,689 - logging_config - INFO - Download Command: aria2c -o "course/674/jpg/b0a77dbc-e34b-463d-b579-feba29ea005e.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/b0a77dbc-e34b-463d-b579-feba29ea005e.webp +2025-04-13 08:33:04,741 - logging_config - INFO - Download Command: aria2c -o "course/674/72e25b35-7bae-4fc3-baf9-5172031504a8.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/72e25b35-7bae-4fc3-baf9-5172031504a8.mp3 +2025-04-13 08:33:04,786 - logging_config - INFO - Download Command: aria2c -o "course/674/12a030a8-131b-4cff-9d29-2c5542b14f9d.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/12a030a8-131b-4cff-9d29-2c5542b14f9d.mp3 +2025-04-13 08:33:04,972 - logging_config - INFO - Download Command: aria2c -o "course/674/25c6f004-84b1-41aa-ad1f-13e868889328.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/25c6f004-84b1-41aa-ad1f-13e868889328.mp3 +2025-04-13 08:33:05,110 - logging_config - INFO - Download Command: aria2c -o "course/674/0ba8ee99-8848-4b70-b2c0-714c6babe981.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/0ba8ee99-8848-4b70-b2c0-714c6babe981.mp3 +2025-04-13 08:33:05,120 - logging_config - INFO - Download Command: aria2c -o "course/674/0b8056d3-47e8-40fe-b0df-c9a36e55d6ee.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/0b8056d3-47e8-40fe-b0df-c9a36e55d6ee.mp3 +2025-04-13 08:33:05,161 - logging_config - INFO - Download Command: aria2c -o "course/674/jpg/14b7ec4f-a91f-4903-8c60-6d91d0980b82.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/14b7ec4f-a91f-4903-8c60-6d91d0980b82.webp +2025-04-13 08:33:05,182 - logging_config - INFO - Download Command: aria2c -o "course/674/d8d9bc33-bf3e-4b4f-9257-fedf46574107.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/d8d9bc33-bf3e-4b4f-9257-fedf46574107.mp3 +2025-04-13 08:33:05,394 - logging_config - INFO - Download Command: aria2c -o "course/674/2446ac15-f69e-42fa-b9e8-454ce1200cbe.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/2446ac15-f69e-42fa-b9e8-454ce1200cbe.mp3 +2025-04-13 08:33:05,462 - logging_config - INFO - Download Command: aria2c -o "course/674/f9fdb1c3-1849-4823-b4fe-61a2e6bf336a.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/f9fdb1c3-1849-4823-b4fe-61a2e6bf336a.mp3 +2025-04-13 08:33:05,486 - logging_config - INFO - Download Command: aria2c -o "course/674/b6d63403-a16a-4a4a-ab26-8666f5eb3a1d.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/b6d63403-a16a-4a4a-ab26-8666f5eb3a1d.mp3 +2025-04-13 08:33:05,516 - logging_config - INFO - Download Command: aria2c -o "course/674/37565444-39d2-4651-ad06-444e9a265fc5.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/37565444-39d2-4651-ad06-444e9a265fc5.mp3 +2025-04-13 08:33:05,589 - logging_config - INFO - Download Command: aria2c -o "course/674/33562b06-426d-44dc-8068-0e564393830d.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/33562b06-426d-44dc-8068-0e564393830d.mp3 +2025-04-13 08:33:05,684 - logging_config - INFO - Download Command: aria2c -o "course/674/39ce51ba-8eb8-4b2a-aee2-81edfed1b8bd.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/39ce51ba-8eb8-4b2a-aee2-81edfed1b8bd.mp3 +2025-04-13 08:33:05,766 - logging_config - INFO - Download Command: aria2c -o "course/674/4c66e41c-c03d-49fb-80c2-0b5c095e4b6e.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4c66e41c-c03d-49fb-80c2-0b5c095e4b6e.mp3 +2025-04-13 08:33:05,841 - logging_config - INFO - Download Command: aria2c -o "course/674/3ca659aa-80d2-4a04-8e44-1a95a43c49c9.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/3ca659aa-80d2-4a04-8e44-1a95a43c49c9.mp3 +2025-04-13 08:33:05,915 - logging_config - INFO - Download Command: aria2c -o "course/674/a0bce9f0-a130-4c3c-ab67-97e437ffd6b1.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/a0bce9f0-a130-4c3c-ab67-97e437ffd6b1.mp3 +2025-04-13 08:33:06,041 - logging_config - INFO - Download Command: aria2c -o "course/674/56fb08d1-32fb-4025-92d3-0253a8d8a49d.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/56fb08d1-32fb-4025-92d3-0253a8d8a49d.mp3 +2025-04-13 08:33:06,071 - logging_config - INFO - Download Command: aria2c -o "course/674/97368108-5682-4124-93cc-6ed3d082c404.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/97368108-5682-4124-93cc-6ed3d082c404.mp3 +2025-04-13 08:33:06,102 - logging_config - INFO - Download Command: aria2c -o "course/674/496975a0-ddaa-4488-a1d5-13b324012518.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/496975a0-ddaa-4488-a1d5-13b324012518.mp3 +2025-04-13 08:33:06,242 - logging_config - INFO - Download Command: aria2c -o "course/674/bc15b181-9e29-4e2c-8b56-77766c556608.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/bc15b181-9e29-4e2c-8b56-77766c556608.mp3 +2025-04-13 08:33:06,269 - logging_config - INFO - Download Command: aria2c -o "course/674/jpg/e1926a5a-2809-4f28-9ac1-f3c1c71f15e4.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/e1926a5a-2809-4f28-9ac1-f3c1c71f15e4.webp +2025-04-13 08:33:06,412 - logging_config - INFO - Download Command: aria2c -o "course/674/4a5a5ec1-5abb-4561-9abb-7e0e4dadcc5b.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4a5a5ec1-5abb-4561-9abb-7e0e4dadcc5b.mp3 +2025-04-13 08:33:06,430 - logging_config - INFO - Download Command: aria2c -o "course/674/8b2c736b-fae7-44fa-bfeb-3b33ca1784e8.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/8b2c736b-fae7-44fa-bfeb-3b33ca1784e8.mp3 +2025-04-13 08:33:06,561 - logging_config - INFO - Download Command: aria2c -o "course/674/aa3984dc-17af-48c1-b3f7-baa400c664a7.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/aa3984dc-17af-48c1-b3f7-baa400c664a7.mp3 +2025-04-13 08:33:06,574 - logging_config - INFO - Download Command: aria2c -o "course/674/49615f84-77d9-4ccb-adea-b681201e4b94.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/49615f84-77d9-4ccb-adea-b681201e4b94.mp3 +2025-04-13 08:33:06,698 - logging_config - INFO - Download Command: aria2c -o "course/674/08c6e6c0-6901-473c-b488-2270a47cf0e2.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/08c6e6c0-6901-473c-b488-2270a47cf0e2.mp3 +2025-04-13 08:33:06,823 - logging_config - INFO - Download Command: aria2c -o "course/674/815c1d6c-6928-4882-9d51-98cb91d18434.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/815c1d6c-6928-4882-9d51-98cb91d18434.mp3 +2025-04-13 08:33:06,855 - logging_config - INFO - Download Command: aria2c -o "course/674/c7469554-0dd7-482b-b64b-9c282caa99c0.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/c7469554-0dd7-482b-b64b-9c282caa99c0.mp3 +2025-04-13 08:33:06,925 - logging_config - INFO - Download Command: aria2c -o "course/674/e0b36698-cbfe-42ab-8ca4-593185d4896c.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/e0b36698-cbfe-42ab-8ca4-593185d4896c.mp3 +2025-04-13 08:33:07,010 - logging_config - INFO - Download Command: aria2c -o "course/674/6f8cb93c-2138-405b-bab3-aa9176450d89.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/6f8cb93c-2138-405b-bab3-aa9176450d89.mp3 +2025-04-13 08:33:07,203 - logging_config - INFO - Download Command: aria2c -o "course/674/cba83ec1-7367-4e17-beee-6287a18f1d4d.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/cba83ec1-7367-4e17-beee-6287a18f1d4d.mp3 +2025-04-13 08:33:07,263 - logging_config - INFO - Download Command: aria2c -o "course/674/834a34ab-3f5e-49c9-b801-28597feb9027.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/834a34ab-3f5e-49c9-b801-28597feb9027.mp3 +2025-04-13 08:33:07,404 - logging_config - INFO - Download Command: aria2c -o "course/674/72b63142-3aa4-41e0-8c2d-2c0ee08ea682.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/72b63142-3aa4-41e0-8c2d-2c0ee08ea682.mp3 +2025-04-13 08:33:07,441 - logging_config - INFO - Download Command: aria2c -o "course/674/0ab32043-9f1c-4cb4-8a07-8d9521a2ad16.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/0ab32043-9f1c-4cb4-8a07-8d9521a2ad16.mp3 +2025-04-13 08:33:07,446 - logging_config - INFO - Download Command: aria2c -o "course/674/9009c174-512a-4d32-ab00-bc232f7b17d7.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/9009c174-512a-4d32-ab00-bc232f7b17d7.mp3 +2025-04-13 08:33:07,539 - logging_config - INFO - Download Command: aria2c -o "course/674/jpg/85a85727-82bb-47d8-8f59-194afffbea8d.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/85a85727-82bb-47d8-8f59-194afffbea8d.webp +2025-04-13 08:33:07,551 - logging_config - INFO - Download Command: aria2c -o "course/674/a8e11a08-f0d1-418d-990a-70d6bdfd23b5.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/a8e11a08-f0d1-418d-990a-70d6bdfd23b5.mp3 +2025-04-13 08:33:07,922 - logging_config - INFO - Download Command: aria2c -o "course/675/jpg/d28ec4b2-731c-45f1-903c-2445e5a5f0d3.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/d28ec4b2-731c-45f1-903c-2445e5a5f0d3.webp +2025-04-13 08:33:07,958 - logging_config - INFO - Download Command: aria2c -o "course/675/b27e4685-e046-4db7-af8f-491d6db59259.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/b27e4685-e046-4db7-af8f-491d6db59259.mp3 +2025-04-13 08:33:07,987 - logging_config - INFO - Download Command: aria2c -o "course/675/d9df4ee6-6feb-49e1-998a-b41b3a97dd78.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/d9df4ee6-6feb-49e1-998a-b41b3a97dd78.mp3 +2025-04-13 08:33:07,989 - logging_config - INFO - Download Command: aria2c -o "course/675/410e9cef-9a67-4303-882d-724d2a9d36be.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/410e9cef-9a67-4303-882d-724d2a9d36be.mp3 +2025-04-13 08:33:08,044 - logging_config - INFO - Download Command: aria2c -o "course/675/03949276-46f8-4f9c-a548-4cbc70e95055.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/03949276-46f8-4f9c-a548-4cbc70e95055.mp3 +2025-04-13 08:33:08,111 - logging_config - INFO - Download Command: aria2c -o "course/675/0e7dd164-6966-4476-a2a8-95842063e5e1.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/0e7dd164-6966-4476-a2a8-95842063e5e1.mp3 +2025-04-13 08:33:08,147 - logging_config - INFO - Download Command: aria2c -o "course/675/31e4c32c-7eaf-4eb1-b983-782674b315bb.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/31e4c32c-7eaf-4eb1-b983-782674b315bb.mp3 +2025-04-13 08:33:08,197 - logging_config - INFO - Download Command: aria2c -o "course/675/9f9edc1d-f1ba-45d3-9177-b9b33141551a.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/9f9edc1d-f1ba-45d3-9177-b9b33141551a.mp3 +2025-04-13 08:33:08,213 - logging_config - INFO - Download Command: aria2c -o "course/675/1704f1e2-4d2d-4456-9fd3-1c7f24dc644e.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/1704f1e2-4d2d-4456-9fd3-1c7f24dc644e.mp3 +2025-04-13 08:33:08,227 - logging_config - INFO - Download Command: aria2c -o "course/675/807bac7a-8116-4b2c-b07b-b2a2f83a5e53.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/807bac7a-8116-4b2c-b07b-b2a2f83a5e53.mp3 +2025-04-13 08:33:08,357 - logging_config - INFO - Download Command: aria2c -o "course/675/ee7fd833-86f9-4411-ba54-581fa32164da.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/ee7fd833-86f9-4411-ba54-581fa32164da.mp3 +2025-04-13 08:33:08,369 - logging_config - INFO - Download Command: aria2c -o "course/675/5eabafe7-c805-4639-9b14-bb6a942ec7a1.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/5eabafe7-c805-4639-9b14-bb6a942ec7a1.mp3 +2025-04-13 08:33:08,458 - logging_config - INFO - Download Command: aria2c -o "course/675/ff86cf86-4509-438a-9de3-154cea9889cd.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/ff86cf86-4509-438a-9de3-154cea9889cd.mp3 +2025-04-13 08:33:08,470 - logging_config - INFO - Download Command: aria2c -o "course/675/f61ee407-3915-4917-be2e-1802033cbdd0.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/f61ee407-3915-4917-be2e-1802033cbdd0.mp3 +2025-04-13 08:33:08,474 - logging_config - INFO - Download Command: aria2c -o "course/675/bd52ccd5-dd76-4095-b936-737bad058862.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/bd52ccd5-dd76-4095-b936-737bad058862.mp3 +2025-04-13 08:33:08,568 - logging_config - INFO - Download Command: aria2c -o "course/675/1446b810-d08c-4879-8349-66a570aab962.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/1446b810-d08c-4879-8349-66a570aab962.mp3 +2025-04-13 08:33:08,693 - logging_config - INFO - The maximum course ID is 675 +2025-04-13 08:33:08,693 - logging_config - INFO - {670: '【投资30讲】1.16 蛋壳投资在这个时代里为什么这么靠谱?', 671: '【定投故事第166期】我是如何治好自己二十年的精神内耗的?', 672: '20250331 相约七年后直播', 673: '【定投故事第167期】富足人生社群,让我的人生方向越来越清晰', 674: '【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路', 675: '2025.04.09.心理按摩还是要做的!'} +2025-04-13 08:33:08,693 - logging_config - INFO - Processing course ID: 670 +2025-04-13 08:33:08,693 - logging_config - INFO - Course 670 JSON file already exists, using local file. +2025-04-13 08:33:08,697 - logging_config - INFO - Reading JSON file: course/670/json/【投资30讲】1.16 蛋壳投资在这个时代里为什么这么靠谱?.json +2025-04-13 08:33:08,697 - logging_config - INFO - Writing Markdown file: course/670/【投资30讲】1.16 蛋壳投资在这个时代里为什么这么靠谱?.md +2025-04-13 08:33:08,697 - logging_config - INFO - Course 670 JSON file already exists, using local file. +2025-04-13 08:33:08,697 - logging_config - INFO - Reading JSON file: course/670/json/【投资30讲】1.16 蛋壳投资在这个时代里为什么这么靠谱?.json +2025-04-13 08:33:08,697 - logging_config - INFO - Writing Markdown file: course/670/【投资30讲】1.16 蛋壳投资在这个时代里为什么这么靠谱?_logseq.md +2025-04-13 08:33:08,698 - logging_config - INFO - Processing course ID: 671 +2025-04-13 08:33:08,698 - logging_config - INFO - Course 671 JSON file already exists, using local file. +2025-04-13 08:33:08,698 - logging_config - INFO - Reading JSON file: course/671/json/【定投故事第166期】我是如何治好自己二十年的精神内耗的?.json +2025-04-13 08:33:08,699 - logging_config - INFO - Writing Markdown file: course/671/【定投故事第166期】我是如何治好自己二十年的精神内耗的?.md +2025-04-13 08:33:08,700 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/a8243f58-5623-4769-bc56-66c4d9471b82.mp3 +2025-04-13 08:33:08,700 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/b095e7b8-adf4-42fd-bc87-0e689eb7b7cb.mp3 +2025-04-13 08:33:08,700 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/96a62d4d-b0b2-4778-bd4b-2a4e6d50130a.mp3 +2025-04-13 08:33:08,700 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/1137ba89-ceba-4d98-9f64-35097398ab09.mp3 +2025-04-13 08:33:08,700 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/1a69ac76-0dfd-4050-924f-02e115c265b8.mp3 +2025-04-13 08:33:09,150 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:09,150 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/73c70423-6089-4b44-a402-01942f9da3e4.mp3 +2025-04-13 08:33:09,152 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:09,152 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/864709c3-38a1-47e5-90bc-a2566c5a5011.mp3 +2025-04-13 08:33:09,154 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:09,154 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:09,155 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/4ec2bb3d-13be-461f-ac98-8e5126d43612.mp3 +2025-04-13 08:33:09,155 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/0cdf6ae2-a4a7-4a07-a9bc-f065ad3f78fe.mp3 +2025-04-13 08:33:09,161 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:09,162 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/2e2b20b4-8658-4c63-a4b2-da15917e9d7e.mp3 +2025-04-13 08:33:09,381 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:09,381 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/516e5086-6094-4f3e-acee-ade1e1d3af44.mp3 +2025-04-13 08:33:09,459 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:09,460 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/1f509648-5a78-4960-b62d-f7e4bc5f9b86.mp3 +2025-04-13 08:33:09,508 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:09,508 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/21d71121-eeed-4a51-a34d-9231d2aad55f.mp3 +2025-04-13 08:33:09,641 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:09,641 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/4c09afdc-42a1-4bf3-8a50-dd50458b24ac.mp3 +2025-04-13 08:33:09,659 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:09,659 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/9749ba72-3317-45e7-afd1-29ca4e6636da.mp3 +2025-04-13 08:33:09,665 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:09,666 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/32d4ea6d-7bbd-4adf-bdd0-9c0cc508ebd9.mp3 +2025-04-13 08:33:09,679 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:09,679 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/80ec288c-4a5a-418c-873a-f9c5f2432203.mp3 +2025-04-13 08:33:09,808 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:09,809 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/25c1397b-97c8-4fb7-ba4e-24735f2f8b77.mp3 +2025-04-13 08:33:09,894 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:09,894 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/b99fc092-55e5-4a9f-96ae-04c2e18e459d.mp3 +2025-04-13 08:33:09,957 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:09,957 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/0eba36e0-7ed3-420d-be33-42f07691443d.mp3 +2025-04-13 08:33:09,966 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:09,966 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/4f94be91-14f8-4ffb-92be-102be9349e75.mp3 +2025-04-13 08:33:10,028 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:10,028 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/07dddab7-5700-4501-ae66-82dca4a58a3e.mp3 +2025-04-13 08:33:10,167 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:10,167 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/ae0e7ddc-ae5c-4669-98b2-9b409ab9a37f.mp3 +2025-04-13 08:33:10,210 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:10,210 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/5a8344a2-0ed0-41c9-9461-f08e130b23d6.mp3 +2025-04-13 08:33:10,241 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:10,241 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/50eb71a8-af97-4786-9f29-ce62a6311855.mp3 +2025-04-13 08:33:10,284 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:10,284 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/bf6c8eae-17a2-4ad8-8e32-716743438850.mp3 +2025-04-13 08:33:10,312 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:10,312 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/3cb35a33-1dbe-4951-a3d1-9d2574a4802e.mp3 +2025-04-13 08:33:10,524 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:10,524 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/42c67ddc-7544-4774-8f92-5f6270c9905c.mp3 +2025-04-13 08:33:10,525 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:10,526 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/3baa0ea6-db5d-49ad-ab63-bc241d882713.mp3 +2025-04-13 08:33:10,609 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:10,610 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/9fee680e-0bfd-445a-b6ff-aa1b6156c52d.mp3 +2025-04-13 08:33:10,667 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:10,667 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/02e0a7e1-1291-4ea7-b32f-52641bda1d3f.mp3 +2025-04-13 08:33:10,695 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:10,695 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/38eda222-9c27-418a-a946-b7a3d4c92549.mp3 +2025-04-13 08:33:10,861 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:10,861 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/3eb66499-72c9-49c2-86e4-a7daf16c29ce.mp3 +2025-04-13 08:33:10,950 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:10,950 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/5d96cb2e-158e-4e46-b07a-e12487712c30.mp3 +2025-04-13 08:33:10,970 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:10,971 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/64647a46-c6c8-43b6-affb-c750c5c3a9ac.mp3 +2025-04-13 08:33:11,087 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:11,087 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/14b01486-9a63-4e04-bf32-4b038713d1d0.mp3 +2025-04-13 08:33:11,153 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:11,153 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/31cb719d-f186-49e9-8eaf-75c37d062251.mp3 +2025-04-13 08:33:11,154 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:11,154 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/4d5b9bbc-1de4-4c85-a190-31e71dfd1190.mp3 +2025-04-13 08:33:11,211 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:11,211 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/3e549f6a-b521-4d1a-99f1-19e15e274206.mp3 +2025-04-13 08:33:11,570 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:11,570 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/ce9c8df2-3661-494d-bffb-1921d19a59e6.mp3 +2025-04-13 08:33:11,571 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:11,572 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/e9ec9385-c687-40cb-aa9d-00905ae82c3b.mp3 +2025-04-13 08:33:11,584 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:11,584 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/c7b2e82c-0b9d-49d6-bb5a-8e0810fc6fba.mp3 +2025-04-13 08:33:11,764 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:11,765 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/8c7a8b5a-1655-4ad2-88fb-9a27f4ccdf4b.mp3 +2025-04-13 08:33:11,836 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:11,836 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/b79a6edf-79dc-4611-8125-3d65020ea794.mp3 +2025-04-13 08:33:11,881 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:11,881 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/1b466f26-9764-4915-9f00-b34c5298d88d.mp3 +2025-04-13 08:33:11,974 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:11,975 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/292dc45e-a378-4fc0-844c-a94962f7f2d8.mp3 +2025-04-13 08:33:12,004 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:12,004 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/345c91a9-014e-40de-a00b-fdfd8a07c469.mp3 +2025-04-13 08:33:12,100 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:12,100 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/0f720a86-74d9-4eee-8af9-af03ddc62a9e.mp3 +2025-04-13 08:33:12,130 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:12,131 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/68193e3b-122b-4b69-836c-77933b9983d6.mp3 +2025-04-13 08:33:12,161 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:12,161 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/4d376953-71a9-4cd5-b4d4-642b31571784.mp3 +2025-04-13 08:33:12,307 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:12,307 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/8365ff24-4ac5-4ecb-a914-845daa73d7a1.mp3 +2025-04-13 08:33:12,424 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:12,424 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/09a4ecdb-33c3-40ed-b400-697f219a0379.mp3 +2025-04-13 08:33:12,509 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:12,509 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/cbbacd0c-7584-4e99-b5ca-624cf0d79900.mp3 +2025-04-13 08:33:12,625 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:12,626 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/841b7582-a33b-49d4-89d4-3c7d67c76229.mp3 +2025-04-13 08:33:12,676 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:12,676 - logging_config - INFO - Downloading audio file: https://bandu-resources.songy.info/7000104757/28e88bad-a7df-4cca-8065-b8676ea64a2f.mp3 +2025-04-13 08:33:12,710 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:13,093 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:13,093 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:13,125 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-13 08:33:13,128 - logging_config - ERROR - 转换音频到文本时出错:[Errno 61] Connection refused +2025-04-15 08:13:10,008 - logging_config - INFO - The maximum course ID is 677 +2025-04-15 08:13:10,009 - logging_config - INFO - Processing course ID: 674 +2025-04-15 08:13:10,009 - logging_config - INFO - Course 674 JSON file already exists, using local file. +2025-04-15 08:13:10,010 - logging_config - INFO - Processing course ID: 675 +2025-04-15 08:13:10,010 - logging_config - INFO - Course 675 JSON file already exists, using local file. +2025-04-15 08:13:10,010 - logging_config - INFO - Processing course ID: 676 +2025-04-15 08:13:10,267 - logging_config - INFO - Processing course ID: 677 +2025-04-15 08:13:10,564 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,564 - logging_config - INFO - File course/674/png/mmexport1743856033622.png already exists, skipping download. +2025-04-15 08:13:10,565 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,565 - logging_config - INFO - File course/674/jpg/e087f32e-3270-4149-92a1-811798829cf5.jpg already exists, skipping download. +2025-04-15 08:13:10,565 - logging_config - INFO - File course/674/jpg/4c759dec-3f5e-4571-84c4-1f1ce659cd25.jpg already exists, skipping download. +2025-04-15 08:13:10,565 - logging_config - INFO - File course/674/jpg/b0a77dbc-e34b-463d-b579-feba29ea005e.jpg already exists, skipping download. +2025-04-15 08:13:10,565 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,565 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,565 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,565 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,565 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,565 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,565 - logging_config - INFO - File course/674/jpg/14b7ec4f-a91f-4903-8c60-6d91d0980b82.jpg already exists, skipping download. +2025-04-15 08:13:10,565 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,565 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,566 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,566 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,566 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,566 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,566 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,566 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,566 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,566 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,566 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,566 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,566 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,566 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,567 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,567 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,567 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,567 - logging_config - INFO - File course/674/jpg/e1926a5a-2809-4f28-9ac1-f3c1c71f15e4.jpg already exists, skipping download. +2025-04-15 08:13:10,567 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,567 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,567 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,567 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,567 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,567 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,567 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,568 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,568 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,568 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,568 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,568 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,568 - logging_config - INFO - File course/674/jpg/85a85727-82bb-47d8-8f59-194afffbea8d.jpg already exists, skipping download. +2025-04-15 08:13:10,568 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:13:10,569 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:13:10,569 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:13:10,569 - logging_config - INFO - File course/675/jpg/d28ec4b2-731c-45f1-903c-2445e5a5f0d3.jpg already exists, skipping download. +2025-04-15 08:13:10,569 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:13:10,569 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:13:10,569 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:13:10,569 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:13:10,569 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:13:10,569 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:13:10,569 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:13:10,570 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:13:10,570 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:13:10,570 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:13:10,570 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:13:10,570 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:13:10,570 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:14:20,069 - logging_config - INFO - Download Command: aria2c -o "course/676/mp4/20250413142836-第36期茶话会-视频-1.mp4" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/3d0fd598-ac1b-47b4-acdc-2426cea9037d.mp4 +2025-04-15 08:14:51,979 - root - INFO - 成功将 course/676/mp4/20250413142836-第36期茶话会-视频-1.mp4 转换为 course/676/mp4/20250413142836-第36期茶话会-视频-1.mp3 +2025-04-15 08:14:57,773 - root - INFO - 成功将 course/676/mp4/20250413142836-第36期茶话会-视频-1.mp4 转换为 course/676/mp4/20250413142836-第36期茶话会-视频-1.wav +2025-04-15 08:14:57,774 - root - INFO - Starting processing 20250413142836-第36期茶话会-视频-1.wav +2025-04-15 08:16:34,085 - logging_config - INFO - Download Command: aria2c -o "course/677/jpg/cbbe5081-4935-425b-9534-09411c34d1c7.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/cbbe5081-4935-425b-9534-09411c34d1c7.webp +2025-04-15 08:16:34,114 - logging_config - INFO - Download Command: aria2c -o "course/677/5b57a17f-9414-4be2-a6b4-1adbac155a56.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/5b57a17f-9414-4be2-a6b4-1adbac155a56.mp3 +2025-04-15 08:16:34,174 - logging_config - INFO - Download Command: aria2c -o "course/677/3387069e-dc7c-4934-96c0-861d8f035df2.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/3387069e-dc7c-4934-96c0-861d8f035df2.mp3 +2025-04-15 08:16:34,279 - logging_config - INFO - Download Command: aria2c -o "course/677/5616e223-de76-4f92-9762-1738665aeb36.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/5616e223-de76-4f92-9762-1738665aeb36.mp3 +2025-04-15 08:16:34,315 - logging_config - INFO - Download Command: aria2c -o "course/677/e86a750e-ac7b-4471-b944-ce164970a248.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/e86a750e-ac7b-4471-b944-ce164970a248.mp3 +2025-04-15 08:16:34,337 - logging_config - INFO - Download Command: aria2c -o "course/677/fb69517a-1fbd-404f-9d09-ff6f1eaa3e03.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/fb69517a-1fbd-404f-9d09-ff6f1eaa3e03.mp3 +2025-04-15 08:16:34,447 - logging_config - INFO - Download Command: aria2c -o "course/677/ad3762fd-18c8-450e-9747-6e4afd84add7.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/ad3762fd-18c8-450e-9747-6e4afd84add7.mp3 +2025-04-15 08:16:34,495 - logging_config - INFO - Download Command: aria2c -o "course/677/jpg/30310ebe-43db-4268-b457-d4c0ca862a5f.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/30310ebe-43db-4268-b457-d4c0ca862a5f.webp +2025-04-15 08:16:34,495 - logging_config - INFO - Download Command: aria2c -o "course/677/df136285-9628-48c6-98de-de53784bdb3c.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/df136285-9628-48c6-98de-de53784bdb3c.mp3 +2025-04-15 08:16:34,536 - logging_config - INFO - Download Command: aria2c -o "course/677/9dab4a31-6492-4179-8489-90f5cd137f7c.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/9dab4a31-6492-4179-8489-90f5cd137f7c.mp3 +2025-04-15 08:16:34,572 - logging_config - INFO - Download Command: aria2c -o "course/677/eb04dc70-4d31-4488-ad90-6ff9f21c899b.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/eb04dc70-4d31-4488-ad90-6ff9f21c899b.mp3 +2025-04-15 08:16:34,673 - logging_config - INFO - Download Command: aria2c -o "course/677/b64c9caf-aa80-4e16-ae65-54e0627c8ae5.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/b64c9caf-aa80-4e16-ae65-54e0627c8ae5.mp3 +2025-04-15 08:16:34,694 - logging_config - INFO - Download Command: aria2c -o "course/677/jpg/41fdf2b6-8172-4874-9ed9-ba79f94522f3.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/41fdf2b6-8172-4874-9ed9-ba79f94522f3.webp +2025-04-15 08:16:34,733 - logging_config - INFO - Download Command: aria2c -o "course/677/a1ee973c-9445-496c-a754-e053814d20e2.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/a1ee973c-9445-496c-a754-e053814d20e2.mp3 +2025-04-15 08:16:34,746 - logging_config - INFO - Download Command: aria2c -o "course/677/jpg/86449822-c4bb-468b-9d6d-f45fa05dc508.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/86449822-c4bb-468b-9d6d-f45fa05dc508.webp +2025-04-15 08:16:34,759 - logging_config - INFO - Download Command: aria2c -o "course/677/9c568612-5063-42df-b2e2-e987f262ba26.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/9c568612-5063-42df-b2e2-e987f262ba26.mp3 +2025-04-15 08:16:34,839 - logging_config - INFO - Download Command: aria2c -o "course/677/jpg/c6cb4983-5bbe-491c-9047-e74511886a2d.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/c6cb4983-5bbe-491c-9047-e74511886a2d.webp +2025-04-15 08:16:34,860 - logging_config - INFO - Download Command: aria2c -o "course/677/e98be94b-b757-4761-966a-137f4e401f59.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/e98be94b-b757-4761-966a-137f4e401f59.mp3 +2025-04-15 08:16:34,899 - logging_config - INFO - Download Command: aria2c -o "course/677/a86770f0-a978-4123-b2dd-e44e54ff1996.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/a86770f0-a978-4123-b2dd-e44e54ff1996.mp3 +2025-04-15 08:16:34,920 - logging_config - INFO - Download Command: aria2c -o "course/677/jpg/46f82a1e-79f4-4572-af18-56c5e70c3970.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/46f82a1e-79f4-4572-af18-56c5e70c3970.webp +2025-04-15 08:16:35,129 - logging_config - INFO - Download Command: aria2c -o "course/677/2b946f80-862d-4adb-9a67-2352dd1b7ce0.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/2b946f80-862d-4adb-9a67-2352dd1b7ce0.mp3 +2025-04-15 08:16:35,129 - logging_config - INFO - Download Command: aria2c -o "course/677/8abb2ca6-f477-4174-968a-f76f730ce272.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/8abb2ca6-f477-4174-968a-f76f730ce272.mp3 +2025-04-15 08:16:35,129 - logging_config - INFO - Download Command: aria2c -o "course/677/17a608a1-022a-4c51-af94-ea720a8db7cc.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/17a608a1-022a-4c51-af94-ea720a8db7cc.mp3 +2025-04-15 08:16:35,257 - logging_config - INFO - Download Command: aria2c -o "course/677/4ff85034-b4f9-43bf-bc4d-afc2b3c44e0b.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/4ff85034-b4f9-43bf-bc4d-afc2b3c44e0b.mp3 +2025-04-15 08:16:35,257 - logging_config - INFO - Download Command: aria2c -o "course/677/900ccf9c-3902-49f8-a7a7-d3c57c4ffc53.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/900ccf9c-3902-49f8-a7a7-d3c57c4ffc53.mp3 +2025-04-15 08:16:35,305 - logging_config - INFO - Download Command: aria2c -o "course/677/f745066e-61a4-47a8-a3f1-358183fb1ad7.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/f745066e-61a4-47a8-a3f1-358183fb1ad7.mp3 +2025-04-15 08:16:35,308 - logging_config - INFO - Download Command: aria2c -o "course/677/433a39ed-ae38-4189-909c-deb6fc781d6f.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/433a39ed-ae38-4189-909c-deb6fc781d6f.mp3 +2025-04-15 08:16:35,347 - logging_config - INFO - Download Command: aria2c -o "course/677/bc01ceb8-7a26-4940-97cb-9c05ff050946.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/bc01ceb8-7a26-4940-97cb-9c05ff050946.mp3 +2025-04-15 08:16:35,481 - logging_config - INFO - Download Command: aria2c -o "course/677/bfd1b9d2-a5a3-485e-a4f3-6d361323c19b.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/bfd1b9d2-a5a3-485e-a4f3-6d361323c19b.mp3 +2025-04-15 08:16:35,521 - logging_config - INFO - Download Command: aria2c -o "course/677/ff71bd8f-04d0-4539-8a87-982dcf0d59d8.mp3" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/ff71bd8f-04d0-4539-8a87-982dcf0d59d8.mp3 +2025-04-15 08:16:35,596 - logging_config - INFO - Download Command: aria2c -o "course/677/jpg/6e2067f3-7b33-4a01-89e4-5a9b9003101c.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/6e2067f3-7b33-4a01-89e4-5a9b9003101c.webp +2025-04-15 08:16:35,641 - logging_config - INFO - Download Command: aria2c -o "course/677/jpg/b248e4ee-5b58-44fd-975b-e7c28ffde70d.jpg" -x 16 -s 16 https://bandu-resources.songy.info/7000104757/b248e4ee-5b58-44fd-975b-e7c28ffde70d.webp +2025-04-15 08:41:08,659 - logging_config - INFO - The maximum course ID is 677 +2025-04-15 08:41:08,661 - logging_config - INFO - Processing course ID: 674 +2025-04-15 08:41:08,662 - logging_config - INFO - Course 674 JSON file already exists, using local file. +2025-04-15 08:41:08,663 - logging_config - INFO - Processing course ID: 675 +2025-04-15 08:41:08,664 - logging_config - INFO - Course 675 JSON file already exists, using local file. +2025-04-15 08:41:08,664 - logging_config - INFO - Processing course ID: 676 +2025-04-15 08:41:08,664 - logging_config - INFO - Course 676 JSON file already exists, using local file. +2025-04-15 08:41:08,665 - logging_config - INFO - Processing course ID: 677 +2025-04-15 08:41:08,665 - logging_config - INFO - Course 677 JSON file already exists, using local file. +2025-04-15 08:41:08,667 - logging_config - INFO - File course/674/png/mmexport1743856033622.png already exists, skipping download. +2025-04-15 08:41:08,668 - logging_config - INFO - File course/674/jpg/4c759dec-3f5e-4571-84c4-1f1ce659cd25.jpg already exists, skipping download. +2025-04-15 08:41:08,668 - logging_config - INFO - File course/674/jpg/e087f32e-3270-4149-92a1-811798829cf5.jpg already exists, skipping download. +2025-04-15 08:41:08,668 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,668 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,668 - logging_config - INFO - File course/674/jpg/b0a77dbc-e34b-463d-b579-feba29ea005e.jpg already exists, skipping download. +2025-04-15 08:41:08,668 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,668 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,668 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,668 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,668 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,668 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,668 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,668 - logging_config - INFO - File course/674/jpg/14b7ec4f-a91f-4903-8c60-6d91d0980b82.jpg already exists, skipping download. +2025-04-15 08:41:08,669 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,669 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,669 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,669 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,669 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,669 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,669 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,669 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,669 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,669 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,669 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,669 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,670 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,670 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,670 - logging_config - INFO - File course/674/jpg/e1926a5a-2809-4f28-9ac1-f3c1c71f15e4.jpg already exists, skipping download. +2025-04-15 08:41:08,670 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,670 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,670 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,670 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,670 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,670 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,670 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,670 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,670 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,670 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,671 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,671 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,671 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,671 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,671 - logging_config - INFO - File course/674/jpg/85a85727-82bb-47d8-8f59-194afffbea8d.jpg already exists, skipping download. +2025-04-15 08:41:08,671 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:41:08,672 - logging_config - INFO - File course/675/jpg/d28ec4b2-731c-45f1-903c-2445e5a5f0d3.jpg already exists, skipping download. +2025-04-15 08:41:08,672 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:41:08,672 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:41:08,672 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:41:08,672 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:41:08,672 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:41:08,672 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:41:08,672 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:41:08,672 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:41:08,672 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:41:08,672 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:41:08,673 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:41:08,673 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:41:08,673 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:41:08,673 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:41:08,673 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:41:08,674 - logging_config - INFO - File course/676/mp4/20250413142836-第36期茶话会-视频-1.mp4 already exists, skipping download. +2025-04-15 08:52:46,338 - logging_config - INFO - The maximum course ID is 677 +2025-04-15 08:52:46,342 - logging_config - INFO - Processing course ID: 674 +2025-04-15 08:52:46,343 - logging_config - INFO - Course 674 JSON file already exists, using local file. +2025-04-15 08:52:46,346 - logging_config - INFO - Processing course ID: 675 +2025-04-15 08:52:46,347 - logging_config - INFO - Course 675 JSON file already exists, using local file. +2025-04-15 08:52:46,348 - logging_config - INFO - Processing course ID: 676 +2025-04-15 08:52:46,348 - logging_config - INFO - Course 676 JSON file already exists, using local file. +2025-04-15 08:52:46,348 - logging_config - INFO - Processing course ID: 677 +2025-04-15 08:52:46,348 - logging_config - INFO - Course 677 JSON file already exists, using local file. +2025-04-15 08:52:46,351 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,351 - logging_config - INFO - File course/674/jpg/4c759dec-3f5e-4571-84c4-1f1ce659cd25.jpg already exists, skipping download. +2025-04-15 08:52:46,351 - logging_config - INFO - File course/674/png/mmexport1743856033622.png already exists, skipping download. +2025-04-15 08:52:46,351 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,352 - logging_config - INFO - File course/674/jpg/e087f32e-3270-4149-92a1-811798829cf5.jpg already exists, skipping download. +2025-04-15 08:52:46,352 - logging_config - INFO - File course/674/jpg/b0a77dbc-e34b-463d-b579-feba29ea005e.jpg already exists, skipping download. +2025-04-15 08:52:46,352 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,352 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,352 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,352 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,352 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,352 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,352 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,353 - logging_config - INFO - File course/674/jpg/14b7ec4f-a91f-4903-8c60-6d91d0980b82.jpg already exists, skipping download. +2025-04-15 08:52:46,353 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,353 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,353 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,353 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,353 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,353 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,354 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,354 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,354 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,354 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,354 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,354 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,354 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,354 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,355 - logging_config - INFO - File course/674/jpg/e1926a5a-2809-4f28-9ac1-f3c1c71f15e4.jpg already exists, skipping download. +2025-04-15 08:52:46,355 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,355 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,355 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,355 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,356 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,356 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,356 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,356 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,356 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,356 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,356 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,356 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,357 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,357 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,357 - logging_config - INFO - File course/674/jpg/85a85727-82bb-47d8-8f59-194afffbea8d.jpg already exists, skipping download. +2025-04-15 08:52:46,357 - logging_config - INFO - File course/674/【定投故事第168期】从固守型人格到进取型人格,我的成长蜕变之路.mp3 already exists, skipping download. +2025-04-15 08:52:46,358 - logging_config - INFO - File course/675/jpg/d28ec4b2-731c-45f1-903c-2445e5a5f0d3.jpg already exists, skipping download. +2025-04-15 08:52:46,358 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:52:46,358 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:52:46,358 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:52:46,358 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:52:46,358 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:52:46,358 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:52:46,358 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:52:46,359 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:52:46,359 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:52:46,359 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:52:46,359 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:52:46,359 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:52:46,359 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:52:46,359 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:52:46,359 - logging_config - INFO - File course/675/2025.04.09.心理按摩还是要做的!.mp3 already exists, skipping download. +2025-04-15 08:52:46,360 - logging_config - INFO - File course/676/mp4/20250413142836-第36期茶话会-视频-1.mp4 already exists, skipping download. diff --git a/course.py b/course.py index c129b28..71dda7d 100755 --- a/course.py +++ b/course.py @@ -14,7 +14,8 @@ from fileconvert import mp4_to_mp3, mp4_to_wav from headers import headers from logging_config import setup_logging -from video_voice_process import process_audio_file +# from video_voice_process import process_audio_file +from sense_voice_process import process_audio_file logger = setup_logging() diff --git a/courses.db b/courses.db index 59b2c6a..26654f9 100755 Binary files a/courses.db and b/courses.db differ diff --git a/markdown_generator.py b/markdown_generator.py index af2a8b3..e3406c5 100644 --- a/markdown_generator.py +++ b/markdown_generator.py @@ -11,6 +11,7 @@ from gradio_client import Client, handle_file import json from logging_config import setup_logging +from sense_voice_process import short_audio_process # 读取配置文件 config = configparser.ConfigParser() @@ -76,13 +77,14 @@ def download_file(url, local_path): # 调用api将语音转换为文本 def voice2txt(voice_path): - client = Client("http://192.168.31.3:7860/") - text = client.predict( - input_wav=handle_file(voice_path), - language="zh", - api_name="/model_inference" - ) - logger.info(text) + # client = Client("http://192.168.31.3:7860/") + # text = client.predict( + # input_wav=handle_file(voice_path), + # language="zh", + # api_name="/model_inference" + # ) + # logger.info(text) + text = short_audio_process(voice_path) return text diff --git a/model.py b/model.py new file mode 100644 index 0000000..7191d2b --- /dev/null +++ b/model.py @@ -0,0 +1,929 @@ +import time +import torch +from torch import nn +import torch.nn.functional as F +from typing import Iterable, Optional + +from funasr.register import tables +from funasr.models.ctc.ctc import CTC +from funasr.utils.datadir_writer import DatadirWriter +from funasr.models.paraformer.search import Hypothesis +from funasr.train_utils.device_funcs import force_gatherable +from funasr.losses.label_smoothing_loss import LabelSmoothingLoss +from funasr.metrics.compute_acc import compute_accuracy, th_accuracy +from funasr.utils.load_utils import load_audio_text_image_video, extract_fbank +from utils.ctc_alignment import ctc_forced_align + + +class SinusoidalPositionEncoder(torch.nn.Module): + """ """ + + def __int__(self, d_model=80, dropout_rate=0.1): + pass + + def encode( + self, positions: torch.Tensor = None, depth: int = None, dtype: torch.dtype = torch.float32 + ): + batch_size = positions.size(0) + positions = positions.type(dtype) + device = positions.device + log_timescale_increment = torch.log(torch.tensor([10000], dtype=dtype, device=device)) / ( + depth / 2 - 1 + ) + inv_timescales = torch.exp( + torch.arange(depth / 2, device=device).type(dtype) * (-log_timescale_increment) + ) + inv_timescales = torch.reshape(inv_timescales, [batch_size, -1]) + scaled_time = torch.reshape(positions, [1, -1, 1]) * torch.reshape( + inv_timescales, [1, 1, -1] + ) + encoding = torch.cat([torch.sin(scaled_time), torch.cos(scaled_time)], dim=2) + return encoding.type(dtype) + + def forward(self, x): + batch_size, timesteps, input_dim = x.size() + positions = torch.arange(1, timesteps + 1, device=x.device)[None, :] + position_encoding = self.encode(positions, input_dim, x.dtype).to(x.device) + + return x + position_encoding + + +class PositionwiseFeedForward(torch.nn.Module): + """Positionwise feed forward layer. + + Args: + idim (int): Input dimenstion. + hidden_units (int): The number of hidden units. + dropout_rate (float): Dropout rate. + + """ + + def __init__(self, idim, hidden_units, dropout_rate, activation=torch.nn.ReLU()): + """Construct an PositionwiseFeedForward object.""" + super(PositionwiseFeedForward, self).__init__() + self.w_1 = torch.nn.Linear(idim, hidden_units) + self.w_2 = torch.nn.Linear(hidden_units, idim) + self.dropout = torch.nn.Dropout(dropout_rate) + self.activation = activation + + def forward(self, x): + """Forward function.""" + return self.w_2(self.dropout(self.activation(self.w_1(x)))) + + +class MultiHeadedAttentionSANM(nn.Module): + """Multi-Head Attention layer. + + Args: + n_head (int): The number of heads. + n_feat (int): The number of features. + dropout_rate (float): Dropout rate. + + """ + + def __init__( + self, + n_head, + in_feat, + n_feat, + dropout_rate, + kernel_size, + sanm_shfit=0, + lora_list=None, + lora_rank=8, + lora_alpha=16, + lora_dropout=0.1, + ): + """Construct an MultiHeadedAttention object.""" + super().__init__() + assert n_feat % n_head == 0 + # We assume d_v always equals d_k + self.d_k = n_feat // n_head + self.h = n_head + # self.linear_q = nn.Linear(n_feat, n_feat) + # self.linear_k = nn.Linear(n_feat, n_feat) + # self.linear_v = nn.Linear(n_feat, n_feat) + + self.linear_out = nn.Linear(n_feat, n_feat) + self.linear_q_k_v = nn.Linear(in_feat, n_feat * 3) + self.attn = None + self.dropout = nn.Dropout(p=dropout_rate) + + self.fsmn_block = nn.Conv1d( + n_feat, n_feat, kernel_size, stride=1, padding=0, groups=n_feat, bias=False + ) + # padding + left_padding = (kernel_size - 1) // 2 + if sanm_shfit > 0: + left_padding = left_padding + sanm_shfit + right_padding = kernel_size - 1 - left_padding + self.pad_fn = nn.ConstantPad1d((left_padding, right_padding), 0.0) + + def forward_fsmn(self, inputs, mask, mask_shfit_chunk=None): + b, t, d = inputs.size() + if mask is not None: + mask = torch.reshape(mask, (b, -1, 1)) + if mask_shfit_chunk is not None: + mask = mask * mask_shfit_chunk + inputs = inputs * mask + + x = inputs.transpose(1, 2) + x = self.pad_fn(x) + x = self.fsmn_block(x) + x = x.transpose(1, 2) + x += inputs + x = self.dropout(x) + if mask is not None: + x = x * mask + return x + + def forward_qkv(self, x): + """Transform query, key and value. + + Args: + query (torch.Tensor): Query tensor (#batch, time1, size). + key (torch.Tensor): Key tensor (#batch, time2, size). + value (torch.Tensor): Value tensor (#batch, time2, size). + + Returns: + torch.Tensor: Transformed query tensor (#batch, n_head, time1, d_k). + torch.Tensor: Transformed key tensor (#batch, n_head, time2, d_k). + torch.Tensor: Transformed value tensor (#batch, n_head, time2, d_k). + + """ + b, t, d = x.size() + q_k_v = self.linear_q_k_v(x) + q, k, v = torch.split(q_k_v, int(self.h * self.d_k), dim=-1) + q_h = torch.reshape(q, (b, t, self.h, self.d_k)).transpose( + 1, 2 + ) # (batch, head, time1, d_k) + k_h = torch.reshape(k, (b, t, self.h, self.d_k)).transpose( + 1, 2 + ) # (batch, head, time2, d_k) + v_h = torch.reshape(v, (b, t, self.h, self.d_k)).transpose( + 1, 2 + ) # (batch, head, time2, d_k) + + return q_h, k_h, v_h, v + + def forward_attention(self, value, scores, mask, mask_att_chunk_encoder=None): + """Compute attention context vector. + + Args: + value (torch.Tensor): Transformed value (#batch, n_head, time2, d_k). + scores (torch.Tensor): Attention score (#batch, n_head, time1, time2). + mask (torch.Tensor): Mask (#batch, 1, time2) or (#batch, time1, time2). + + Returns: + torch.Tensor: Transformed value (#batch, time1, d_model) + weighted by the attention score (#batch, time1, time2). + + """ + n_batch = value.size(0) + if mask is not None: + if mask_att_chunk_encoder is not None: + mask = mask * mask_att_chunk_encoder + + mask = mask.unsqueeze(1).eq(0) # (batch, 1, *, time2) + + min_value = -float( + "inf" + ) # float(numpy.finfo(torch.tensor(0, dtype=scores.dtype).numpy().dtype).min) + scores = scores.masked_fill(mask, min_value) + attn = torch.softmax(scores, dim=-1).masked_fill( + mask, 0.0 + ) # (batch, head, time1, time2) + else: + attn = torch.softmax(scores, dim=-1) # (batch, head, time1, time2) + + p_attn = self.dropout(attn) + x = torch.matmul(p_attn, value) # (batch, head, time1, d_k) + x = ( + x.transpose(1, 2).contiguous().view(n_batch, -1, self.h * self.d_k) + ) # (batch, time1, d_model) + + return self.linear_out(x) # (batch, time1, d_model) + + def forward(self, x, mask, mask_shfit_chunk=None, mask_att_chunk_encoder=None): + """Compute scaled dot product attention. + + Args: + query (torch.Tensor): Query tensor (#batch, time1, size). + key (torch.Tensor): Key tensor (#batch, time2, size). + value (torch.Tensor): Value tensor (#batch, time2, size). + mask (torch.Tensor): Mask tensor (#batch, 1, time2) or + (#batch, time1, time2). + + Returns: + torch.Tensor: Output tensor (#batch, time1, d_model). + + """ + q_h, k_h, v_h, v = self.forward_qkv(x) + fsmn_memory = self.forward_fsmn(v, mask, mask_shfit_chunk) + q_h = q_h * self.d_k ** (-0.5) + scores = torch.matmul(q_h, k_h.transpose(-2, -1)) + att_outs = self.forward_attention(v_h, scores, mask, mask_att_chunk_encoder) + return att_outs + fsmn_memory + + def forward_chunk(self, x, cache=None, chunk_size=None, look_back=0): + """Compute scaled dot product attention. + + Args: + query (torch.Tensor): Query tensor (#batch, time1, size). + key (torch.Tensor): Key tensor (#batch, time2, size). + value (torch.Tensor): Value tensor (#batch, time2, size). + mask (torch.Tensor): Mask tensor (#batch, 1, time2) or + (#batch, time1, time2). + + Returns: + torch.Tensor: Output tensor (#batch, time1, d_model). + + """ + q_h, k_h, v_h, v = self.forward_qkv(x) + if chunk_size is not None and look_back > 0 or look_back == -1: + if cache is not None: + k_h_stride = k_h[:, :, : -(chunk_size[2]), :] + v_h_stride = v_h[:, :, : -(chunk_size[2]), :] + k_h = torch.cat((cache["k"], k_h), dim=2) + v_h = torch.cat((cache["v"], v_h), dim=2) + + cache["k"] = torch.cat((cache["k"], k_h_stride), dim=2) + cache["v"] = torch.cat((cache["v"], v_h_stride), dim=2) + if look_back != -1: + cache["k"] = cache["k"][:, :, -(look_back * chunk_size[1]):, :] + cache["v"] = cache["v"][:, :, -(look_back * chunk_size[1]):, :] + else: + cache_tmp = { + "k": k_h[:, :, : -(chunk_size[2]), :], + "v": v_h[:, :, : -(chunk_size[2]), :], + } + cache = cache_tmp + fsmn_memory = self.forward_fsmn(v, None) + q_h = q_h * self.d_k ** (-0.5) + scores = torch.matmul(q_h, k_h.transpose(-2, -1)) + att_outs = self.forward_attention(v_h, scores, None) + return att_outs + fsmn_memory, cache + + +class LayerNorm(nn.LayerNorm): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def forward(self, input): + output = F.layer_norm( + input.float(), + self.normalized_shape, + self.weight.float() if self.weight is not None else None, + self.bias.float() if self.bias is not None else None, + self.eps, + ) + return output.type_as(input) + + +def sequence_mask(lengths, maxlen=None, dtype=torch.float32, device=None): + if maxlen is None: + maxlen = lengths.max() + row_vector = torch.arange(0, maxlen, 1).to(lengths.device) + matrix = torch.unsqueeze(lengths, dim=-1) + mask = row_vector < matrix + mask = mask.detach() + + return mask.type(dtype).to(device) if device is not None else mask.type(dtype) + + +class EncoderLayerSANM(nn.Module): + def __init__( + self, + in_size, + size, + self_attn, + feed_forward, + dropout_rate, + normalize_before=True, + concat_after=False, + stochastic_depth_rate=0.0, + ): + """Construct an EncoderLayer object.""" + super(EncoderLayerSANM, self).__init__() + self.self_attn = self_attn + self.feed_forward = feed_forward + self.norm1 = LayerNorm(in_size) + self.norm2 = LayerNorm(size) + self.dropout = nn.Dropout(dropout_rate) + self.in_size = in_size + self.size = size + self.normalize_before = normalize_before + self.concat_after = concat_after + if self.concat_after: + self.concat_linear = nn.Linear(size + size, size) + self.stochastic_depth_rate = stochastic_depth_rate + self.dropout_rate = dropout_rate + + def forward(self, x, mask, cache=None, mask_shfit_chunk=None, mask_att_chunk_encoder=None): + """Compute encoded features. + + Args: + x_input (torch.Tensor): Input tensor (#batch, time, size). + mask (torch.Tensor): Mask tensor for the input (#batch, time). + cache (torch.Tensor): Cache tensor of the input (#batch, time - 1, size). + + Returns: + torch.Tensor: Output tensor (#batch, time, size). + torch.Tensor: Mask tensor (#batch, time). + + """ + skip_layer = False + # with stochastic depth, residual connection `x + f(x)` becomes + # `x <- x + 1 / (1 - p) * f(x)` at training time. + stoch_layer_coeff = 1.0 + if self.training and self.stochastic_depth_rate > 0: + skip_layer = torch.rand(1).item() < self.stochastic_depth_rate + stoch_layer_coeff = 1.0 / (1 - self.stochastic_depth_rate) + + if skip_layer: + if cache is not None: + x = torch.cat([cache, x], dim=1) + return x, mask + + residual = x + if self.normalize_before: + x = self.norm1(x) + + if self.concat_after: + x_concat = torch.cat( + ( + x, + self.self_attn( + x, + mask, + mask_shfit_chunk=mask_shfit_chunk, + mask_att_chunk_encoder=mask_att_chunk_encoder, + ), + ), + dim=-1, + ) + if self.in_size == self.size: + x = residual + stoch_layer_coeff * self.concat_linear(x_concat) + else: + x = stoch_layer_coeff * self.concat_linear(x_concat) + else: + if self.in_size == self.size: + x = residual + stoch_layer_coeff * self.dropout( + self.self_attn( + x, + mask, + mask_shfit_chunk=mask_shfit_chunk, + mask_att_chunk_encoder=mask_att_chunk_encoder, + ) + ) + else: + x = stoch_layer_coeff * self.dropout( + self.self_attn( + x, + mask, + mask_shfit_chunk=mask_shfit_chunk, + mask_att_chunk_encoder=mask_att_chunk_encoder, + ) + ) + if not self.normalize_before: + x = self.norm1(x) + + residual = x + if self.normalize_before: + x = self.norm2(x) + x = residual + stoch_layer_coeff * self.dropout(self.feed_forward(x)) + if not self.normalize_before: + x = self.norm2(x) + + return x, mask, cache, mask_shfit_chunk, mask_att_chunk_encoder + + def forward_chunk(self, x, cache=None, chunk_size=None, look_back=0): + """Compute encoded features. + + Args: + x_input (torch.Tensor): Input tensor (#batch, time, size). + mask (torch.Tensor): Mask tensor for the input (#batch, time). + cache (torch.Tensor): Cache tensor of the input (#batch, time - 1, size). + + Returns: + torch.Tensor: Output tensor (#batch, time, size). + torch.Tensor: Mask tensor (#batch, time). + + """ + + residual = x + if self.normalize_before: + x = self.norm1(x) + + if self.in_size == self.size: + attn, cache = self.self_attn.forward_chunk(x, cache, chunk_size, look_back) + x = residual + attn + else: + x, cache = self.self_attn.forward_chunk(x, cache, chunk_size, look_back) + + if not self.normalize_before: + x = self.norm1(x) + + residual = x + if self.normalize_before: + x = self.norm2(x) + x = residual + self.feed_forward(x) + if not self.normalize_before: + x = self.norm2(x) + + return x, cache + + +@tables.register("encoder_classes", "SenseVoiceEncoderSmall") +class SenseVoiceEncoderSmall(nn.Module): + """ + Author: Speech Lab of DAMO Academy, Alibaba Group + SCAMA: Streaming chunk-aware multihead attention for online end-to-end speech recognition + https://arxiv.org/abs/2006.01713 + """ + + def __init__( + self, + input_size: int, + output_size: int = 256, + attention_heads: int = 4, + linear_units: int = 2048, + num_blocks: int = 6, + tp_blocks: int = 0, + dropout_rate: float = 0.1, + positional_dropout_rate: float = 0.1, + attention_dropout_rate: float = 0.0, + stochastic_depth_rate: float = 0.0, + input_layer: Optional[str] = "conv2d", + pos_enc_class=SinusoidalPositionEncoder, + normalize_before: bool = True, + concat_after: bool = False, + positionwise_layer_type: str = "linear", + positionwise_conv_kernel_size: int = 1, + padding_idx: int = -1, + kernel_size: int = 11, + sanm_shfit: int = 0, + selfattention_layer_type: str = "sanm", + **kwargs, + ): + super().__init__() + self._output_size = output_size + + self.embed = SinusoidalPositionEncoder() + + self.normalize_before = normalize_before + + positionwise_layer = PositionwiseFeedForward + positionwise_layer_args = ( + output_size, + linear_units, + dropout_rate, + ) + + encoder_selfattn_layer = MultiHeadedAttentionSANM + encoder_selfattn_layer_args0 = ( + attention_heads, + input_size, + output_size, + attention_dropout_rate, + kernel_size, + sanm_shfit, + ) + encoder_selfattn_layer_args = ( + attention_heads, + output_size, + output_size, + attention_dropout_rate, + kernel_size, + sanm_shfit, + ) + + self.encoders0 = nn.ModuleList( + [ + EncoderLayerSANM( + input_size, + output_size, + encoder_selfattn_layer(*encoder_selfattn_layer_args0), + positionwise_layer(*positionwise_layer_args), + dropout_rate, + ) + for i in range(1) + ] + ) + self.encoders = nn.ModuleList( + [ + EncoderLayerSANM( + output_size, + output_size, + encoder_selfattn_layer(*encoder_selfattn_layer_args), + positionwise_layer(*positionwise_layer_args), + dropout_rate, + ) + for i in range(num_blocks - 1) + ] + ) + + self.tp_encoders = nn.ModuleList( + [ + EncoderLayerSANM( + output_size, + output_size, + encoder_selfattn_layer(*encoder_selfattn_layer_args), + positionwise_layer(*positionwise_layer_args), + dropout_rate, + ) + for i in range(tp_blocks) + ] + ) + + self.after_norm = LayerNorm(output_size) + + self.tp_norm = LayerNorm(output_size) + + def output_size(self) -> int: + return self._output_size + + def forward( + self, + xs_pad: torch.Tensor, + ilens: torch.Tensor, + ): + """Embed positions in tensor.""" + masks = sequence_mask(ilens, device=ilens.device)[:, None, :] + + xs_pad *= self.output_size() ** 0.5 + + xs_pad = self.embed(xs_pad) + + # forward encoder1 + for layer_idx, encoder_layer in enumerate(self.encoders0): + encoder_outs = encoder_layer(xs_pad, masks) + xs_pad, masks = encoder_outs[0], encoder_outs[1] + + for layer_idx, encoder_layer in enumerate(self.encoders): + encoder_outs = encoder_layer(xs_pad, masks) + xs_pad, masks = encoder_outs[0], encoder_outs[1] + + xs_pad = self.after_norm(xs_pad) + + # forward encoder2 + olens = masks.squeeze(1).sum(1).int() + + for layer_idx, encoder_layer in enumerate(self.tp_encoders): + encoder_outs = encoder_layer(xs_pad, masks) + xs_pad, masks = encoder_outs[0], encoder_outs[1] + + xs_pad = self.tp_norm(xs_pad) + return xs_pad, olens + + +@tables.register("model_classes", "SenseVoiceSmall") +class SenseVoiceSmall(nn.Module): + """CTC-attention hybrid Encoder-Decoder model""" + + def __init__( + self, + specaug: str = None, + specaug_conf: dict = None, + normalize: str = None, + normalize_conf: dict = None, + encoder: str = None, + encoder_conf: dict = None, + ctc_conf: dict = None, + input_size: int = 80, + vocab_size: int = -1, + ignore_id: int = -1, + blank_id: int = 0, + sos: int = 1, + eos: int = 2, + length_normalized_loss: bool = False, + **kwargs, + ): + + super().__init__() + + if specaug is not None: + specaug_class = tables.specaug_classes.get(specaug) + specaug = specaug_class(**specaug_conf) + if normalize is not None: + normalize_class = tables.normalize_classes.get(normalize) + normalize = normalize_class(**normalize_conf) + encoder_class = tables.encoder_classes.get(encoder) + encoder = encoder_class(input_size=input_size, **encoder_conf) + encoder_output_size = encoder.output_size() + + if ctc_conf is None: + ctc_conf = {} + ctc = CTC(odim=vocab_size, encoder_output_size=encoder_output_size, **ctc_conf) + + self.blank_id = blank_id + self.sos = sos if sos is not None else vocab_size - 1 + self.eos = eos if eos is not None else vocab_size - 1 + self.vocab_size = vocab_size + self.ignore_id = ignore_id + self.specaug = specaug + self.normalize = normalize + self.encoder = encoder + self.error_calculator = None + + self.ctc = ctc + + self.length_normalized_loss = length_normalized_loss + self.encoder_output_size = encoder_output_size + + self.lid_dict = {"auto": 0, "zh": 3, "en": 4, "yue": 7, "ja": 11, "ko": 12, "nospeech": 13} + self.lid_int_dict = {24884: 3, 24885: 4, 24888: 7, 24892: 11, 24896: 12, 24992: 13} + self.textnorm_dict = {"withitn": 14, "woitn": 15} + self.textnorm_int_dict = {25016: 14, 25017: 15} + self.embed = torch.nn.Embedding(7 + len(self.lid_dict) + len(self.textnorm_dict), input_size) + self.emo_dict = {"unk": 25009, "happy": 25001, "sad": 25002, "angry": 25003, "neutral": 25004} + + self.criterion_att = LabelSmoothingLoss( + size=self.vocab_size, + padding_idx=self.ignore_id, + smoothing=kwargs.get("lsm_weight", 0.0), + normalize_length=self.length_normalized_loss, + ) + + @staticmethod + def from_pretrained(model: str = None, **kwargs): + from funasr import AutoModel + model, kwargs = AutoModel.build_model(model=model, trust_remote_code=True, **kwargs) + + return model, kwargs + + def forward( + self, + speech: torch.Tensor, + speech_lengths: torch.Tensor, + text: torch.Tensor, + text_lengths: torch.Tensor, + **kwargs, + ): + """Encoder + Decoder + Calc loss + Args: + speech: (Batch, Length, ...) + speech_lengths: (Batch, ) + text: (Batch, Length) + text_lengths: (Batch,) + """ + # import pdb; + # pdb.set_trace() + if len(text_lengths.size()) > 1: + text_lengths = text_lengths[:, 0] + if len(speech_lengths.size()) > 1: + speech_lengths = speech_lengths[:, 0] + + batch_size = speech.shape[0] + + # 1. Encoder + encoder_out, encoder_out_lens = self.encode(speech, speech_lengths, text) + + loss_ctc, cer_ctc = None, None + loss_rich, acc_rich = None, None + stats = dict() + + loss_ctc, cer_ctc = self._calc_ctc_loss( + encoder_out[:, 4:, :], encoder_out_lens - 4, text[:, 4:], text_lengths - 4 + ) + + loss_rich, acc_rich = self._calc_rich_ce_loss( + encoder_out[:, :4, :], text[:, :4] + ) + + loss = loss_ctc + loss_rich + # Collect total loss stats + stats["loss_ctc"] = torch.clone(loss_ctc.detach()) if loss_ctc is not None else None + stats["loss_rich"] = torch.clone(loss_rich.detach()) if loss_rich is not None else None + stats["loss"] = torch.clone(loss.detach()) if loss is not None else None + stats["acc_rich"] = acc_rich + + # force_gatherable: to-device and to-tensor if scalar for DataParallel + if self.length_normalized_loss: + batch_size = int((text_lengths + 1).sum()) + loss, stats, weight = force_gatherable((loss, stats, batch_size), loss.device) + return loss, stats, weight + + def encode( + self, + speech: torch.Tensor, + speech_lengths: torch.Tensor, + text: torch.Tensor, + **kwargs, + ): + """Frontend + Encoder. Note that this method is used by asr_inference.py + Args: + speech: (Batch, Length, ...) + speech_lengths: (Batch, ) + ind: int + """ + + # Data augmentation + if self.specaug is not None and self.training: + speech, speech_lengths = self.specaug(speech, speech_lengths) + + # Normalization for feature: e.g. Global-CMVN, Utterance-CMVN + if self.normalize is not None: + speech, speech_lengths = self.normalize(speech, speech_lengths) + + lids = torch.LongTensor( + [[self.lid_int_dict[int(lid)] if torch.rand(1) > 0.2 and int(lid) in self.lid_int_dict else 0] for lid in + text[:, 0]]).to(speech.device) + language_query = self.embed(lids) + + styles = torch.LongTensor([[self.textnorm_int_dict[int(style)]] for style in text[:, 3]]).to(speech.device) + style_query = self.embed(styles) + speech = torch.cat((style_query, speech), dim=1) + speech_lengths += 1 + + event_emo_query = self.embed(torch.LongTensor([[1, 2]]).to(speech.device)).repeat(speech.size(0), 1, 1) + input_query = torch.cat((language_query, event_emo_query), dim=1) + speech = torch.cat((input_query, speech), dim=1) + speech_lengths += 3 + + encoder_out, encoder_out_lens = self.encoder(speech, speech_lengths) + + return encoder_out, encoder_out_lens + + def _calc_ctc_loss( + self, + encoder_out: torch.Tensor, + encoder_out_lens: torch.Tensor, + ys_pad: torch.Tensor, + ys_pad_lens: torch.Tensor, + ): + # Calc CTC loss + loss_ctc = self.ctc(encoder_out, encoder_out_lens, ys_pad, ys_pad_lens) + + # Calc CER using CTC + cer_ctc = None + if not self.training and self.error_calculator is not None: + ys_hat = self.ctc.argmax(encoder_out).data + cer_ctc = self.error_calculator(ys_hat.cpu(), ys_pad.cpu(), is_ctc=True) + return loss_ctc, cer_ctc + + def _calc_rich_ce_loss( + self, + encoder_out: torch.Tensor, + ys_pad: torch.Tensor, + ): + decoder_out = self.ctc.ctc_lo(encoder_out) + # 2. Compute attention loss + loss_rich = self.criterion_att(decoder_out, ys_pad.contiguous()) + acc_rich = th_accuracy( + decoder_out.view(-1, self.vocab_size), + ys_pad.contiguous(), + ignore_label=self.ignore_id, + ) + + return loss_rich, acc_rich + + def inference( + self, + data_in, + data_lengths=None, + key: list = ["wav_file_tmp_name"], + tokenizer=None, + frontend=None, + **kwargs, + ): + + meta_data = {} + if ( + isinstance(data_in, torch.Tensor) and kwargs.get("data_type", "sound") == "fbank" + ): # fbank + speech, speech_lengths = data_in, data_lengths + if len(speech.shape) < 3: + speech = speech[None, :, :] + if speech_lengths is None: + speech_lengths = speech.shape[1] + else: + # extract fbank feats + time1 = time.perf_counter() + audio_sample_list = load_audio_text_image_video( + data_in, + fs=frontend.fs, + audio_fs=kwargs.get("fs", 16000), + data_type=kwargs.get("data_type", "sound"), + tokenizer=tokenizer, + ) + time2 = time.perf_counter() + meta_data["load_data"] = f"{time2 - time1:0.3f}" + speech, speech_lengths = extract_fbank( + audio_sample_list, data_type=kwargs.get("data_type", "sound"), frontend=frontend + ) + time3 = time.perf_counter() + meta_data["extract_feat"] = f"{time3 - time2:0.3f}" + meta_data["batch_data_time"] = ( + speech_lengths.sum().item() * frontend.frame_shift * frontend.lfr_n / 1000 + ) + + speech = speech.to(device=kwargs["device"]) + speech_lengths = speech_lengths.to(device=kwargs["device"]) + + language = kwargs.get("language", "auto") + language_query = self.embed( + torch.LongTensor( + [[self.lid_dict[language] if language in self.lid_dict else 0]] + ).to(speech.device) + ).repeat(speech.size(0), 1, 1) + + use_itn = kwargs.get("use_itn", False) + output_timestamp = kwargs.get("output_timestamp", False) + + textnorm = kwargs.get("text_norm", None) + if textnorm is None: + textnorm = "withitn" if use_itn else "woitn" + textnorm_query = self.embed( + torch.LongTensor([[self.textnorm_dict[textnorm]]]).to(speech.device) + ).repeat(speech.size(0), 1, 1) + speech = torch.cat((textnorm_query, speech), dim=1) + speech_lengths += 1 + + event_emo_query = self.embed(torch.LongTensor([[1, 2]]).to(speech.device)).repeat( + speech.size(0), 1, 1 + ) + input_query = torch.cat((language_query, event_emo_query), dim=1) + speech = torch.cat((input_query, speech), dim=1) + speech_lengths += 3 + + # Encoder + encoder_out, encoder_out_lens = self.encoder(speech, speech_lengths) + if isinstance(encoder_out, tuple): + encoder_out = encoder_out[0] + + # c. Passed the encoder result and the beam search + ctc_logits = self.ctc.log_softmax(encoder_out) + if kwargs.get("ban_emo_unk", False): + ctc_logits[:, :, self.emo_dict["unk"]] = -float("inf") + + results = [] + b, n, d = encoder_out.size() + if isinstance(key[0], (list, tuple)): + key = key[0] + if len(key) < b: + key = key * b + for i in range(b): + x = ctc_logits[i, : encoder_out_lens[i].item(), :] + yseq = x.argmax(dim=-1) + yseq = torch.unique_consecutive(yseq, dim=-1) + + ibest_writer = None + if kwargs.get("output_dir") is not None: + if not hasattr(self, "writer"): + self.writer = DatadirWriter(kwargs.get("output_dir")) + ibest_writer = self.writer[f"1best_recog"] + + mask = yseq != self.blank_id + token_int = yseq[mask].tolist() + + # Change integer-ids to tokens + text = tokenizer.decode(token_int) + if ibest_writer is not None: + ibest_writer["text"][key[i]] = text + + if output_timestamp: + from itertools import groupby + timestamp = [] + tokens = tokenizer.text2tokens(text)[4:] + + logits_speech = self.ctc.softmax(encoder_out)[i, 4:encoder_out_lens[i].item(), :] + + pred = logits_speech.argmax(-1).cpu() + logits_speech[pred == self.blank_id, self.blank_id] = 0 + + align = ctc_forced_align( + logits_speech.unsqueeze(0).float(), + torch.Tensor(token_int[4:]).unsqueeze(0).long().to(logits_speech.device), + (encoder_out_lens - 4).long(), + torch.tensor(len(token_int) - 4).unsqueeze(0).long().to(logits_speech.device), + ignore_id=self.ignore_id, + ) + + pred = groupby(align[0, :encoder_out_lens[0]]) + _start = 0 + token_id = 0 + ts_max = encoder_out_lens[i] - 4 + for pred_token, pred_frame in pred: + _end = _start + len(list(pred_frame)) + if pred_token != 0: + ts_left = max((_start * 60 - 30) / 1000, 0) + ts_right = min((_end * 60 - 30) / 1000, (ts_max * 60 - 30) / 1000) + timestamp.append([tokens[token_id], ts_left, ts_right]) + token_id += 1 + _start = _end + + result_i = {"key": key[i], "text": text, "timestamp": timestamp} + results.append(result_i) + else: + result_i = {"key": key[i], "text": text} + results.append(result_i) + return results, meta_data + + def export(self, **kwargs): + from export_meta import export_rebuild_model + + if "max_seq_len" not in kwargs: + kwargs["max_seq_len"] = 512 + models = export_rebuild_model(model=self, **kwargs) + return models \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 0dfbdd3..db76842 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,18 @@ version = "0.1.0" description = "Add your description here" requires-python = ">=3.12" dependencies = [ - "psycopg2-binary==2.9.10", - "pydub==0.25.1", + "fastapi>=0.111.1", + "funasr>=1.1.3", + "gradio", + "gradio-client~=1.8.0", + "huggingface", + "huggingface-hub", + "modelscope", + "moviepy>=2.1.2", + "numpy<=1.26.4", + "psycopg2-binary~=2.9.10", + "pydub~=0.25.1", "requests~=2.32.3", + "torch<=2.3", + "torchaudio", ] diff --git a/requirements.txt b/requirements.txt index 33d5171..ed04d0f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,13 @@ requests~=2.32.3 pydub~=0.25.1 -gradio_client~=1.7.2 \ No newline at end of file +gradio_client~=1.8.0 +psycopg2-binary~=2.9.10 +torch<=2.3 +torchaudio +modelscope +huggingface +huggingface_hub +funasr>=1.1.3 +numpy<=1.26.4 +gradio +fastapi>=0.111.1 \ No newline at end of file diff --git a/sense_voice_process.py b/sense_voice_process.py new file mode 100644 index 0000000..35000ff --- /dev/null +++ b/sense_voice_process.py @@ -0,0 +1,148 @@ +import os +import shutil +from concurrent.futures.thread import ThreadPoolExecutor +import logging +from funasr import AutoModel +from funasr.utils.postprocess_utils import rich_transcription_postprocess +from mpmath import convert + + +def configure_logging(): + logger = logging.getLogger() + logger.setLevel(logging.INFO) + + # 文件日志处理器 + file_handler = logging.FileHandler('audio_transcription.log') + file_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') + file_handler.setFormatter(file_formatter) + logger.addHandler(file_handler) + + # 控制台日志处理器 + console_handler = logging.StreamHandler() + console_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') + console_handler.setFormatter(console_formatter) + logger.addHandler(console_handler) + + +configure_logging() + +use_remote_api = False +process_workers = 5 if use_remote_api else 1 + +conerted = False + +model_dir = "iic/SenseVoiceSmall" + +model = AutoModel( + model=model_dir, + trust_remote_code=True, + remote_code="./model.py", + vad_model="fsmn-vad", + vad_kwargs={"max_single_segment_time": 30000}, + device="cuda:0", +) + +import os +from pydub import AudioSegment + + +def mp3_to_wav(mp3_path): + """ + 将 MP3 文件转换为 WAV 格式,保存到同一目录下,返回 WAV 文件路径。 + + 参数: + mp3_path (str): 原始 MP3 文件的路径。 + + 返回: + str: 转换后的 WAV 文件路径。 + """ + # 检查文件是否存在 + if not os.path.isfile(mp3_path): + raise FileNotFoundError(f"文件未找到: {mp3_path}") + + # 获取文件所在目录和文件名(不含扩展名) + folder = os.path.dirname(mp3_path) + filename_wo_ext = os.path.splitext(os.path.basename(mp3_path))[0] + + # 构造 WAV 文件路径 + wav_path = os.path.join(folder, f"{filename_wo_ext}.wav") + + # 读取 MP3 并导出为 WAV + sound = AudioSegment.from_mp3(mp3_path) + sound.export(wav_path, format="wav") + + return wav_path + +def short_audio_process(audio_file_path): + print("logging file name:", audio_file_path) + if audio_file_path.endswith(".mp3"): + wav_path = mp3_to_wav(audio_file_path) + conerted = True + else: + wav_path = audio_file_path + res = model.generate( + input=wav_path, + cache={}, + language="auto", # "zh", "en", "yue", "ja", "ko", "nospeech" + use_itn=True, + batch_size_s=60, + merge_vad=True, # + merge_length_s=15, + ) + text = rich_transcription_postprocess(res[0]["text"]) + if conerted: + os.remove(wav_path) + return text + + +def process_audio_file(audio_file_path): + file_name_with_extension = os.path.basename(audio_file_path) + file_name_without_extension = os.path.splitext(file_name_with_extension)[0] + logging.info(f"Starting processing {file_name_with_extension}") + # 获取 WAV 文件所在的目录 + wav_dir = os.path.dirname(audio_file_path) + # 获取 MP4 文件的文件名(不包含扩展名) + wav_filename = os.path.splitext(os.path.basename(audio_file_path))[0] + # 生成对应的 WAV 文件路径 + md_file = os.path.join(wav_dir, f"{wav_filename}.md") + + # en + res = model.generate( + input=audio_file_path, + cache={}, + language="auto", # "zh", "en", "yue", "ja", "ko", "nospeech" + use_itn=True, + batch_size_s=60, + merge_vad=True, # + merge_length_s=15, + ) + text = rich_transcription_postprocess(res[0]["text"]) + print(text) + # 按照音频的顺序写入Markdown文件 + markdown_content = "" + markdown_content = text + + # with file_write_lock: # 确保文件写入操作的线程安全 + # md_file_path = os.path.join('media', file_name_without_extension + '.md') + with open(md_file, "w", encoding="utf-8") as f: + f.write(markdown_content) + + +def main(): + # all_files = os.listdir('media') + # audio_files = [file for file in all_files if file.endswith('.wav')] + audio_files = [] + for root, dirs, files in os.walk('media'): + for file in files: + if file.endswith('.wav'): + audio_files.append(os.path.join(root, file)) + print(audio_files) + + with ThreadPoolExecutor(max_workers=process_workers) as executor: + for audio_file in audio_files: + audio_file_path = os.path.join(audio_file) + executor.submit(process_audio_file, audio_file_path) + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/transcribe_media.py b/transcribe_media.py new file mode 100644 index 0000000..d587a4f --- /dev/null +++ b/transcribe_media.py @@ -0,0 +1,68 @@ +import os +from moviepy.video.io.VideoFileClip import VideoFileClip +from pydub import AudioSegment +from funasr import AutoModel +from funasr.utils.postprocess_utils import rich_transcription_postprocess + + +def extract_or_convert_audio(file_path, output_audio_path="processed_audio.wav"): + ext = os.path.splitext(file_path)[1].lower() + + if ext in [".mp4", ".mov", ".avi", ".mkv"]: + print("🎬 Extracting audio from video...") + video = VideoFileClip(file_path) + video.audio.write_audiofile(output_audio_path) + elif ext in [".mp3", ".wav", ".flac", ".m4a", ".aac"]: + print("🎧 Converting audio format...") + sound = AudioSegment.from_file(file_path) + sound.export(output_audio_path, format="wav") + else: + raise ValueError("Unsupported file type.") + + return output_audio_path + + +def transcribe_audio_funasr(audio_path, device="cuda:0"): + print("🧠 Loading FunASR model...") + model = AutoModel( + model="iic/SenseVoiceSmall", + trust_remote_code=True, + remote_code="./model.py", # Make sure this file is accessible + vad_model="fsmn-vad", + vad_kwargs={"max_single_segment_time": 30000}, + device=device + ) + + print("📤 Transcribing with FunASR...") + res = model.generate( + input=audio_path, + cache={}, + language="auto", + use_itn=True, + batch_size_s=60, + merge_vad=True, + merge_length_s=15, + ) + + text = rich_transcription_postprocess(res[0]["text"]) + return text + + +def main(file_path): + try: + audio_file = extract_or_convert_audio(file_path) + transcript = transcribe_audio_funasr(audio_file) + print("\n📜 Transcript:") + print(transcript) + + # ✅ Save transcript to disk + output_path = os.path.splitext(file_path)[0] + "_transcript.txt" + with open(output_path, "w", encoding="utf-8") as f: + f.write(transcript) + + print(f"✅ Transcript saved to: {output_path}") + finally: + if os.path.exists("processed_audio.wav"): + os.remove("processed_audio.wav") + +main("./course/676/mp4/20250413142836-第36期茶话会-视频-1.mp4") diff --git a/utils/__init__.py b/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/utils/ctc_alignment.py b/utils/ctc_alignment.py new file mode 100644 index 0000000..f10fcf2 --- /dev/null +++ b/utils/ctc_alignment.py @@ -0,0 +1,76 @@ +import torch + +def ctc_forced_align( + log_probs: torch.Tensor, + targets: torch.Tensor, + input_lengths: torch.Tensor, + target_lengths: torch.Tensor, + blank: int = 0, + ignore_id: int = -1, +) -> torch.Tensor: + """Align a CTC label sequence to an emission. + + Args: + log_probs (Tensor): log probability of CTC emission output. + Tensor of shape `(B, T, C)`. where `B` is the batch size, `T` is the input length, + `C` is the number of characters in alphabet including blank. + targets (Tensor): Target sequence. Tensor of shape `(B, L)`, + where `L` is the target length. + input_lengths (Tensor): + Lengths of the inputs (max value must each be <= `T`). 1-D Tensor of shape `(B,)`. + target_lengths (Tensor): + Lengths of the targets. 1-D Tensor of shape `(B,)`. + blank_id (int, optional): The index of blank symbol in CTC emission. (Default: 0) + ignore_id (int, optional): The index of ignore symbol in CTC emission. (Default: -1) + """ + targets[targets == ignore_id] = blank + + batch_size, input_time_size, _ = log_probs.size() + bsz_indices = torch.arange(batch_size, device=input_lengths.device) + + _t_a_r_g_e_t_s_ = torch.cat( + ( + torch.stack((torch.full_like(targets, blank), targets), dim=-1).flatten(start_dim=1), + torch.full_like(targets[:, :1], blank), + ), + dim=-1, + ) + diff_labels = torch.cat( + ( + torch.as_tensor([[False, False]], device=targets.device).expand(batch_size, -1), + _t_a_r_g_e_t_s_[:, 2:] != _t_a_r_g_e_t_s_[:, :-2], + ), + dim=1, + ) + + neg_inf = torch.tensor(float("-inf"), device=log_probs.device, dtype=log_probs.dtype) + padding_num = 2 + padded_t = padding_num + _t_a_r_g_e_t_s_.size(-1) + best_score = torch.full((batch_size, padded_t), neg_inf, device=log_probs.device, dtype=log_probs.dtype) + best_score[:, padding_num + 0] = log_probs[:, 0, blank] + best_score[:, padding_num + 1] = log_probs[bsz_indices, 0, _t_a_r_g_e_t_s_[:, 1]] + + backpointers = torch.zeros((batch_size, input_time_size, padded_t), device=log_probs.device, dtype=targets.dtype) + + for t in range(1, input_time_size): + prev = torch.stack( + (best_score[:, 2:], best_score[:, 1:-1], torch.where(diff_labels, best_score[:, :-2], neg_inf)) + ) + prev_max_value, prev_max_idx = prev.max(dim=0) + best_score[:, padding_num:] = log_probs[:, t].gather(-1, _t_a_r_g_e_t_s_) + prev_max_value + backpointers[:, t, padding_num:] = prev_max_idx + + l1l2 = best_score.gather( + -1, torch.stack((padding_num + target_lengths * 2 - 1, padding_num + target_lengths * 2), dim=-1) + ) + + path = torch.zeros((batch_size, input_time_size), device=best_score.device, dtype=torch.long) + path[bsz_indices, input_lengths - 1] = padding_num + target_lengths * 2 - 1 + l1l2.argmax(dim=-1) + + for t in range(input_time_size - 1, 0, -1): + target_indices = path[:, t] + prev_max_idx = backpointers[bsz_indices, t, target_indices] + path[:, t - 1] += target_indices - prev_max_idx + + alignments = _t_a_r_g_e_t_s_.gather(dim=-1, index=(path - padding_num).clamp(min=0)) + return alignments diff --git a/utils/export_utils.py b/utils/export_utils.py new file mode 100644 index 0000000..f070218 --- /dev/null +++ b/utils/export_utils.py @@ -0,0 +1,73 @@ +import os +import torch + + +def export( + model, quantize: bool = False, opset_version: int = 14, type="onnx", **kwargs +): + model_scripts = model.export(**kwargs) + export_dir = kwargs.get("output_dir", os.path.dirname(kwargs.get("init_param"))) + os.makedirs(export_dir, exist_ok=True) + + if not isinstance(model_scripts, (list, tuple)): + model_scripts = (model_scripts,) + for m in model_scripts: + m.eval() + if type == "onnx": + _onnx( + m, + quantize=quantize, + opset_version=opset_version, + export_dir=export_dir, + **kwargs, + ) + print("output dir: {}".format(export_dir)) + + return export_dir + + +def _onnx( + model, + quantize: bool = False, + opset_version: int = 14, + export_dir: str = None, + **kwargs, +): + + dummy_input = model.export_dummy_inputs() + + verbose = kwargs.get("verbose", False) + + export_name = model.export_name() + model_path = os.path.join(export_dir, export_name) + torch.onnx.export( + model, + dummy_input, + model_path, + verbose=verbose, + opset_version=opset_version, + input_names=model.export_input_names(), + output_names=model.export_output_names(), + dynamic_axes=model.export_dynamic_axes(), + ) + + if quantize: + from onnxruntime.quantization import QuantType, quantize_dynamic + import onnx + + quant_model_path = model_path.replace(".onnx", "_quant.onnx") + if not os.path.exists(quant_model_path): + onnx_model = onnx.load(model_path) + nodes = [n.name for n in onnx_model.graph.node] + nodes_to_exclude = [ + m for m in nodes if "output" in m or "bias_encoder" in m or "bias_decoder" in m + ] + quantize_dynamic( + model_input=model_path, + model_output=quant_model_path, + op_types_to_quantize=["MatMul"], + per_channel=True, + reduce_range=False, + weight_type=QuantType.QUInt8, + nodes_to_exclude=nodes_to_exclude, + ) diff --git a/utils/frontend.py b/utils/frontend.py new file mode 100644 index 0000000..7b38f8b --- /dev/null +++ b/utils/frontend.py @@ -0,0 +1,433 @@ +# -*- encoding: utf-8 -*- +from pathlib import Path +from typing import Any, Dict, Iterable, List, NamedTuple, Set, Tuple, Union +import copy + +import numpy as np +import kaldi_native_fbank as knf + +root_dir = Path(__file__).resolve().parent + +logger_initialized = {} + + +class WavFrontend: + """Conventional frontend structure for ASR.""" + + def __init__( + self, + cmvn_file: str = None, + fs: int = 16000, + window: str = "hamming", + n_mels: int = 80, + frame_length: int = 25, + frame_shift: int = 10, + lfr_m: int = 1, + lfr_n: int = 1, + dither: float = 1.0, + **kwargs, + ) -> None: + + opts = knf.FbankOptions() + opts.frame_opts.samp_freq = fs + opts.frame_opts.dither = dither + opts.frame_opts.window_type = window + opts.frame_opts.frame_shift_ms = float(frame_shift) + opts.frame_opts.frame_length_ms = float(frame_length) + opts.mel_opts.num_bins = n_mels + opts.energy_floor = 0 + opts.frame_opts.snip_edges = True + opts.mel_opts.debug_mel = False + self.opts = opts + + self.lfr_m = lfr_m + self.lfr_n = lfr_n + self.cmvn_file = cmvn_file + + if self.cmvn_file: + self.cmvn = self.load_cmvn() + self.fbank_fn = None + self.fbank_beg_idx = 0 + self.reset_status() + + def fbank(self, waveform: np.ndarray) -> Tuple[np.ndarray, np.ndarray]: + waveform = waveform * (1 << 15) + self.fbank_fn = knf.OnlineFbank(self.opts) + self.fbank_fn.accept_waveform(self.opts.frame_opts.samp_freq, waveform.tolist()) + frames = self.fbank_fn.num_frames_ready + mat = np.empty([frames, self.opts.mel_opts.num_bins]) + for i in range(frames): + mat[i, :] = self.fbank_fn.get_frame(i) + feat = mat.astype(np.float32) + feat_len = np.array(mat.shape[0]).astype(np.int32) + return feat, feat_len + + def fbank_online(self, waveform: np.ndarray) -> Tuple[np.ndarray, np.ndarray]: + waveform = waveform * (1 << 15) + # self.fbank_fn = knf.OnlineFbank(self.opts) + self.fbank_fn.accept_waveform(self.opts.frame_opts.samp_freq, waveform.tolist()) + frames = self.fbank_fn.num_frames_ready + mat = np.empty([frames, self.opts.mel_opts.num_bins]) + for i in range(self.fbank_beg_idx, frames): + mat[i, :] = self.fbank_fn.get_frame(i) + # self.fbank_beg_idx += (frames-self.fbank_beg_idx) + feat = mat.astype(np.float32) + feat_len = np.array(mat.shape[0]).astype(np.int32) + return feat, feat_len + + def reset_status(self): + self.fbank_fn = knf.OnlineFbank(self.opts) + self.fbank_beg_idx = 0 + + def lfr_cmvn(self, feat: np.ndarray) -> Tuple[np.ndarray, np.ndarray]: + if self.lfr_m != 1 or self.lfr_n != 1: + feat = self.apply_lfr(feat, self.lfr_m, self.lfr_n) + + if self.cmvn_file: + feat = self.apply_cmvn(feat) + + feat_len = np.array(feat.shape[0]).astype(np.int32) + return feat, feat_len + + @staticmethod + def apply_lfr(inputs: np.ndarray, lfr_m: int, lfr_n: int) -> np.ndarray: + LFR_inputs = [] + + T = inputs.shape[0] + T_lfr = int(np.ceil(T / lfr_n)) + left_padding = np.tile(inputs[0], ((lfr_m - 1) // 2, 1)) + inputs = np.vstack((left_padding, inputs)) + T = T + (lfr_m - 1) // 2 + for i in range(T_lfr): + if lfr_m <= T - i * lfr_n: + LFR_inputs.append((inputs[i * lfr_n : i * lfr_n + lfr_m]).reshape(1, -1)) + else: + # process last LFR frame + num_padding = lfr_m - (T - i * lfr_n) + frame = inputs[i * lfr_n :].reshape(-1) + for _ in range(num_padding): + frame = np.hstack((frame, inputs[-1])) + + LFR_inputs.append(frame) + LFR_outputs = np.vstack(LFR_inputs).astype(np.float32) + return LFR_outputs + + def apply_cmvn(self, inputs: np.ndarray) -> np.ndarray: + """ + Apply CMVN with mvn data + """ + frame, dim = inputs.shape + means = np.tile(self.cmvn[0:1, :dim], (frame, 1)) + vars = np.tile(self.cmvn[1:2, :dim], (frame, 1)) + inputs = (inputs + means) * vars + return inputs + + def load_cmvn( + self, + ) -> np.ndarray: + with open(self.cmvn_file, "r", encoding="utf-8") as f: + lines = f.readlines() + + means_list = [] + vars_list = [] + for i in range(len(lines)): + line_item = lines[i].split() + if line_item[0] == "": + line_item = lines[i + 1].split() + if line_item[0] == "": + add_shift_line = line_item[3 : (len(line_item) - 1)] + means_list = list(add_shift_line) + continue + elif line_item[0] == "": + line_item = lines[i + 1].split() + if line_item[0] == "": + rescale_line = line_item[3 : (len(line_item) - 1)] + vars_list = list(rescale_line) + continue + + means = np.array(means_list).astype(np.float64) + vars = np.array(vars_list).astype(np.float64) + cmvn = np.array([means, vars]) + return cmvn + + +class WavFrontendOnline(WavFrontend): + def __init__(self, **kwargs): + super().__init__(**kwargs) + # self.fbank_fn = knf.OnlineFbank(self.opts) + # add variables + self.frame_sample_length = int( + self.opts.frame_opts.frame_length_ms * self.opts.frame_opts.samp_freq / 1000 + ) + self.frame_shift_sample_length = int( + self.opts.frame_opts.frame_shift_ms * self.opts.frame_opts.samp_freq / 1000 + ) + self.waveform = None + self.reserve_waveforms = None + self.input_cache = None + self.lfr_splice_cache = [] + + @staticmethod + # inputs has catted the cache + def apply_lfr( + inputs: np.ndarray, lfr_m: int, lfr_n: int, is_final: bool = False + ) -> Tuple[np.ndarray, np.ndarray, int]: + """ + Apply lfr with data + """ + + LFR_inputs = [] + T = inputs.shape[0] # include the right context + T_lfr = int( + np.ceil((T - (lfr_m - 1) // 2) / lfr_n) + ) # minus the right context: (lfr_m - 1) // 2 + splice_idx = T_lfr + for i in range(T_lfr): + if lfr_m <= T - i * lfr_n: + LFR_inputs.append((inputs[i * lfr_n : i * lfr_n + lfr_m]).reshape(1, -1)) + else: # process last LFR frame + if is_final: + num_padding = lfr_m - (T - i * lfr_n) + frame = (inputs[i * lfr_n :]).reshape(-1) + for _ in range(num_padding): + frame = np.hstack((frame, inputs[-1])) + LFR_inputs.append(frame) + else: + # update splice_idx and break the circle + splice_idx = i + break + splice_idx = min(T - 1, splice_idx * lfr_n) + lfr_splice_cache = inputs[splice_idx:, :] + LFR_outputs = np.vstack(LFR_inputs) + return LFR_outputs.astype(np.float32), lfr_splice_cache, splice_idx + + @staticmethod + def compute_frame_num( + sample_length: int, frame_sample_length: int, frame_shift_sample_length: int + ) -> int: + frame_num = int((sample_length - frame_sample_length) / frame_shift_sample_length + 1) + return frame_num if frame_num >= 1 and sample_length >= frame_sample_length else 0 + + def fbank( + self, input: np.ndarray, input_lengths: np.ndarray + ) -> Tuple[np.ndarray, np.ndarray, np.ndarray]: + self.fbank_fn = knf.OnlineFbank(self.opts) + batch_size = input.shape[0] + if self.input_cache is None: + self.input_cache = np.empty((batch_size, 0), dtype=np.float32) + input = np.concatenate((self.input_cache, input), axis=1) + frame_num = self.compute_frame_num( + input.shape[-1], self.frame_sample_length, self.frame_shift_sample_length + ) + # update self.in_cache + self.input_cache = input[ + :, -(input.shape[-1] - frame_num * self.frame_shift_sample_length) : + ] + waveforms = np.empty(0, dtype=np.float32) + feats_pad = np.empty(0, dtype=np.float32) + feats_lens = np.empty(0, dtype=np.int32) + if frame_num: + waveforms = [] + feats = [] + feats_lens = [] + for i in range(batch_size): + waveform = input[i] + waveforms.append( + waveform[ + : ( + (frame_num - 1) * self.frame_shift_sample_length + + self.frame_sample_length + ) + ] + ) + waveform = waveform * (1 << 15) + + self.fbank_fn.accept_waveform(self.opts.frame_opts.samp_freq, waveform.tolist()) + frames = self.fbank_fn.num_frames_ready + mat = np.empty([frames, self.opts.mel_opts.num_bins]) + for i in range(frames): + mat[i, :] = self.fbank_fn.get_frame(i) + feat = mat.astype(np.float32) + feat_len = np.array(mat.shape[0]).astype(np.int32) + feats.append(feat) + feats_lens.append(feat_len) + + waveforms = np.stack(waveforms) + feats_lens = np.array(feats_lens) + feats_pad = np.array(feats) + self.fbanks = feats_pad + self.fbanks_lens = copy.deepcopy(feats_lens) + return waveforms, feats_pad, feats_lens + + def get_fbank(self) -> Tuple[np.ndarray, np.ndarray]: + return self.fbanks, self.fbanks_lens + + def lfr_cmvn( + self, input: np.ndarray, input_lengths: np.ndarray, is_final: bool = False + ) -> Tuple[np.ndarray, np.ndarray, List[int]]: + batch_size = input.shape[0] + feats = [] + feats_lens = [] + lfr_splice_frame_idxs = [] + for i in range(batch_size): + mat = input[i, : input_lengths[i], :] + lfr_splice_frame_idx = -1 + if self.lfr_m != 1 or self.lfr_n != 1: + # update self.lfr_splice_cache in self.apply_lfr + mat, self.lfr_splice_cache[i], lfr_splice_frame_idx = self.apply_lfr( + mat, self.lfr_m, self.lfr_n, is_final + ) + if self.cmvn_file is not None: + mat = self.apply_cmvn(mat) + feat_length = mat.shape[0] + feats.append(mat) + feats_lens.append(feat_length) + lfr_splice_frame_idxs.append(lfr_splice_frame_idx) + + feats_lens = np.array(feats_lens) + feats_pad = np.array(feats) + return feats_pad, feats_lens, lfr_splice_frame_idxs + + def extract_fbank( + self, input: np.ndarray, input_lengths: np.ndarray, is_final: bool = False + ) -> Tuple[np.ndarray, np.ndarray]: + batch_size = input.shape[0] + assert ( + batch_size == 1 + ), "we support to extract feature online only when the batch size is equal to 1 now" + waveforms, feats, feats_lengths = self.fbank(input, input_lengths) # input shape: B T D + if feats.shape[0]: + self.waveforms = ( + waveforms + if self.reserve_waveforms is None + else np.concatenate((self.reserve_waveforms, waveforms), axis=1) + ) + if not self.lfr_splice_cache: + for i in range(batch_size): + self.lfr_splice_cache.append( + np.expand_dims(feats[i][0, :], axis=0).repeat((self.lfr_m - 1) // 2, axis=0) + ) + + if feats_lengths[0] + self.lfr_splice_cache[0].shape[0] >= self.lfr_m: + lfr_splice_cache_np = np.stack(self.lfr_splice_cache) # B T D + feats = np.concatenate((lfr_splice_cache_np, feats), axis=1) + feats_lengths += lfr_splice_cache_np[0].shape[0] + frame_from_waveforms = int( + (self.waveforms.shape[1] - self.frame_sample_length) + / self.frame_shift_sample_length + + 1 + ) + minus_frame = (self.lfr_m - 1) // 2 if self.reserve_waveforms is None else 0 + feats, feats_lengths, lfr_splice_frame_idxs = self.lfr_cmvn( + feats, feats_lengths, is_final + ) + if self.lfr_m == 1: + self.reserve_waveforms = None + else: + reserve_frame_idx = lfr_splice_frame_idxs[0] - minus_frame + # print('reserve_frame_idx: ' + str(reserve_frame_idx)) + # print('frame_frame: ' + str(frame_from_waveforms)) + self.reserve_waveforms = self.waveforms[ + :, + reserve_frame_idx + * self.frame_shift_sample_length : frame_from_waveforms + * self.frame_shift_sample_length, + ] + sample_length = ( + frame_from_waveforms - 1 + ) * self.frame_shift_sample_length + self.frame_sample_length + self.waveforms = self.waveforms[:, :sample_length] + else: + # update self.reserve_waveforms and self.lfr_splice_cache + self.reserve_waveforms = self.waveforms[ + :, : -(self.frame_sample_length - self.frame_shift_sample_length) + ] + for i in range(batch_size): + self.lfr_splice_cache[i] = np.concatenate( + (self.lfr_splice_cache[i], feats[i]), axis=0 + ) + return np.empty(0, dtype=np.float32), feats_lengths + else: + if is_final: + self.waveforms = ( + waveforms if self.reserve_waveforms is None else self.reserve_waveforms + ) + feats = np.stack(self.lfr_splice_cache) + feats_lengths = np.zeros(batch_size, dtype=np.int32) + feats.shape[1] + feats, feats_lengths, _ = self.lfr_cmvn(feats, feats_lengths, is_final) + if is_final: + self.cache_reset() + return feats, feats_lengths + + def get_waveforms(self): + return self.waveforms + + def cache_reset(self): + self.fbank_fn = knf.OnlineFbank(self.opts) + self.reserve_waveforms = None + self.input_cache = None + self.lfr_splice_cache = [] + + +def load_bytes(input): + middle_data = np.frombuffer(input, dtype=np.int16) + middle_data = np.asarray(middle_data) + if middle_data.dtype.kind not in "iu": + raise TypeError("'middle_data' must be an array of integers") + dtype = np.dtype("float32") + if dtype.kind != "f": + raise TypeError("'dtype' must be a floating point type") + + i = np.iinfo(middle_data.dtype) + abs_max = 2 ** (i.bits - 1) + offset = i.min + abs_max + array = np.frombuffer((middle_data.astype(dtype) - offset) / abs_max, dtype=np.float32) + return array + + +class SinusoidalPositionEncoderOnline: + """Streaming Positional encoding.""" + + def encode(self, positions: np.ndarray = None, depth: int = None, dtype: np.dtype = np.float32): + batch_size = positions.shape[0] + positions = positions.astype(dtype) + log_timescale_increment = np.log(np.array([10000], dtype=dtype)) / (depth / 2 - 1) + inv_timescales = np.exp(np.arange(depth / 2).astype(dtype) * (-log_timescale_increment)) + inv_timescales = np.reshape(inv_timescales, [batch_size, -1]) + scaled_time = np.reshape(positions, [1, -1, 1]) * np.reshape(inv_timescales, [1, 1, -1]) + encoding = np.concatenate((np.sin(scaled_time), np.cos(scaled_time)), axis=2) + return encoding.astype(dtype) + + def forward(self, x, start_idx=0): + batch_size, timesteps, input_dim = x.shape + positions = np.arange(1, timesteps + 1 + start_idx)[None, :] + position_encoding = self.encode(positions, input_dim, x.dtype) + + return x + position_encoding[:, start_idx : start_idx + timesteps] + + +def test(): + path = "/nfs/zhifu.gzf/export/damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/example/asr_example.wav" + import librosa + + cmvn_file = "/nfs/zhifu.gzf/export/damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/am.mvn" + config_file = "/nfs/zhifu.gzf/export/damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/config.yaml" + from funasr.runtime.python.onnxruntime.rapid_paraformer.utils.utils import read_yaml + + config = read_yaml(config_file) + waveform, _ = librosa.load(path, sr=None) + frontend = WavFrontend( + cmvn_file=cmvn_file, + **config["frontend_conf"], + ) + speech, _ = frontend.fbank_online(waveform) # 1d, (sample,), numpy + feat, feat_len = frontend.lfr_cmvn( + speech + ) # 2d, (frame, 450), np.float32 -> torch, torch.from_numpy(), dtype, (1, frame, 450) + + frontend.reset_status() # clear cache + return feat, feat_len + + +if __name__ == "__main__": + test() diff --git a/utils/infer_utils.py b/utils/infer_utils.py new file mode 100644 index 0000000..c39d433 --- /dev/null +++ b/utils/infer_utils.py @@ -0,0 +1,395 @@ +# -*- encoding: utf-8 -*- + +import functools +import logging +from pathlib import Path +from typing import Any, Dict, Iterable, List, NamedTuple, Set, Tuple, Union + +import re +import numpy as np +import yaml + +try: + from onnxruntime import ( + GraphOptimizationLevel, + InferenceSession, + SessionOptions, + get_available_providers, + get_device, + ) +except: + print("please pip3 install onnxruntime") +import jieba +import warnings + +root_dir = Path(__file__).resolve().parent + +logger_initialized = {} + + +def pad_list(xs, pad_value, max_len=None): + n_batch = len(xs) + if max_len is None: + max_len = max(x.size(0) for x in xs) + # pad = xs[0].new(n_batch, max_len, *xs[0].size()[1:]).fill_(pad_value) + # numpy format + pad = (np.zeros((n_batch, max_len)) + pad_value).astype(np.int32) + for i in range(n_batch): + pad[i, : xs[i].shape[0]] = xs[i] + + return pad + + +""" +def make_pad_mask(lengths, xs=None, length_dim=-1, maxlen=None): + if length_dim == 0: + raise ValueError("length_dim cannot be 0: {}".format(length_dim)) + + if not isinstance(lengths, list): + lengths = lengths.tolist() + bs = int(len(lengths)) + if maxlen is None: + if xs is None: + maxlen = int(max(lengths)) + else: + maxlen = xs.size(length_dim) + else: + assert xs is None + assert maxlen >= int(max(lengths)) + + seq_range = torch.arange(0, maxlen, dtype=torch.int64) + seq_range_expand = seq_range.unsqueeze(0).expand(bs, maxlen) + seq_length_expand = seq_range_expand.new(lengths).unsqueeze(-1) + mask = seq_range_expand >= seq_length_expand + + if xs is not None: + assert xs.size(0) == bs, (xs.size(0), bs) + + if length_dim < 0: + length_dim = xs.dim() + length_dim + # ind = (:, None, ..., None, :, , None, ..., None) + ind = tuple( + slice(None) if i in (0, length_dim) else None for i in range(xs.dim()) + ) + mask = mask[ind].expand_as(xs).to(xs.device) + return mask +""" + + +class TokenIDConverter: + def __init__( + self, + token_list: Union[List, str], + ): + + self.token_list = token_list + self.unk_symbol = token_list[-1] + self.token2id = {v: i for i, v in enumerate(self.token_list)} + self.unk_id = self.token2id[self.unk_symbol] + + def get_num_vocabulary_size(self) -> int: + return len(self.token_list) + + def ids2tokens(self, integers: Union[np.ndarray, Iterable[int]]) -> List[str]: + if isinstance(integers, np.ndarray) and integers.ndim != 1: + raise TokenIDConverterError(f"Must be 1 dim ndarray, but got {integers.ndim}") + return [self.token_list[i] for i in integers] + + def tokens2ids(self, tokens: Iterable[str]) -> List[int]: + + return [self.token2id.get(i, self.unk_id) for i in tokens] + + +class CharTokenizer: + def __init__( + self, + symbol_value: Union[Path, str, Iterable[str]] = None, + space_symbol: str = "", + remove_non_linguistic_symbols: bool = False, + ): + + self.space_symbol = space_symbol + self.non_linguistic_symbols = self.load_symbols(symbol_value) + self.remove_non_linguistic_symbols = remove_non_linguistic_symbols + + @staticmethod + def load_symbols(value: Union[Path, str, Iterable[str]] = None) -> Set: + if value is None: + return set() + + if isinstance(value, Iterable[str]): + return set(value) + + file_path = Path(value) + if not file_path.exists(): + logging.warning("%s doesn't exist.", file_path) + return set() + + with file_path.open("r", encoding="utf-8") as f: + return set(line.rstrip() for line in f) + + def text2tokens(self, line: Union[str, list]) -> List[str]: + tokens = [] + while len(line) != 0: + for w in self.non_linguistic_symbols: + if line.startswith(w): + if not self.remove_non_linguistic_symbols: + tokens.append(line[: len(w)]) + line = line[len(w) :] + break + else: + t = line[0] + if t == " ": + t = "" + tokens.append(t) + line = line[1:] + return tokens + + def tokens2text(self, tokens: Iterable[str]) -> str: + tokens = [t if t != self.space_symbol else " " for t in tokens] + return "".join(tokens) + + def __repr__(self): + return ( + f"{self.__class__.__name__}(" + f'space_symbol="{self.space_symbol}"' + f'non_linguistic_symbols="{self.non_linguistic_symbols}"' + f")" + ) + + +class Hypothesis(NamedTuple): + """Hypothesis data type.""" + + yseq: np.ndarray + score: Union[float, np.ndarray] = 0 + scores: Dict[str, Union[float, np.ndarray]] = dict() + states: Dict[str, Any] = dict() + + def asdict(self) -> dict: + """Convert data to JSON-friendly dict.""" + return self._replace( + yseq=self.yseq.tolist(), + score=float(self.score), + scores={k: float(v) for k, v in self.scores.items()}, + )._asdict() + + +class TokenIDConverterError(Exception): + pass + + +class ONNXRuntimeError(Exception): + pass + + +class OrtInferSession: + def __init__(self, model_file, device_id=-1, intra_op_num_threads=4): + device_id = str(device_id) + sess_opt = SessionOptions() + sess_opt.intra_op_num_threads = intra_op_num_threads + sess_opt.log_severity_level = 4 + sess_opt.enable_cpu_mem_arena = False + sess_opt.graph_optimization_level = GraphOptimizationLevel.ORT_ENABLE_ALL + + cuda_ep = "CUDAExecutionProvider" + cuda_provider_options = { + "device_id": device_id, + "arena_extend_strategy": "kNextPowerOfTwo", + "cudnn_conv_algo_search": "EXHAUSTIVE", + "do_copy_in_default_stream": "true", + } + cpu_ep = "CPUExecutionProvider" + cpu_provider_options = { + "arena_extend_strategy": "kSameAsRequested", + } + + EP_list = [] + if device_id != "-1" and get_device() == "GPU" and cuda_ep in get_available_providers(): + EP_list = [(cuda_ep, cuda_provider_options)] + EP_list.append((cpu_ep, cpu_provider_options)) + + self._verify_model(model_file) + self.session = InferenceSession(model_file, sess_options=sess_opt, providers=EP_list) + + if device_id != "-1" and cuda_ep not in self.session.get_providers(): + warnings.warn( + f"{cuda_ep} is not avaiable for current env, the inference part is automatically shifted to be executed under {cpu_ep}.\n" + "Please ensure the installed onnxruntime-gpu version matches your cuda and cudnn version, " + "you can check their relations from the offical web site: " + "https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html", + RuntimeWarning, + ) + + def __call__(self, input_content: List[Union[np.ndarray, np.ndarray]]) -> np.ndarray: + input_dict = dict(zip(self.get_input_names(), input_content)) + try: + return self.session.run(self.get_output_names(), input_dict) + except Exception as e: + raise ONNXRuntimeError("ONNXRuntime inferece failed.") from e + + def get_input_names( + self, + ): + return [v.name for v in self.session.get_inputs()] + + def get_output_names( + self, + ): + return [v.name for v in self.session.get_outputs()] + + def get_character_list(self, key: str = "character"): + return self.meta_dict[key].splitlines() + + def have_key(self, key: str = "character") -> bool: + self.meta_dict = self.session.get_modelmeta().custom_metadata_map + if key in self.meta_dict.keys(): + return True + return False + + @staticmethod + def _verify_model(model_path): + model_path = Path(model_path) + if not model_path.exists(): + raise FileNotFoundError(f"{model_path} does not exists.") + if not model_path.is_file(): + raise FileExistsError(f"{model_path} is not a file.") + + +def split_to_mini_sentence(words: list, word_limit: int = 20): + assert word_limit > 1 + if len(words) <= word_limit: + return [words] + sentences = [] + length = len(words) + sentence_len = length // word_limit + for i in range(sentence_len): + sentences.append(words[i * word_limit : (i + 1) * word_limit]) + if length % word_limit > 0: + sentences.append(words[sentence_len * word_limit :]) + return sentences + + +def code_mix_split_words(text: str): + words = [] + segs = text.split() + for seg in segs: + # There is no space in seg. + current_word = "" + for c in seg: + if len(c.encode()) == 1: + # This is an ASCII char. + current_word += c + else: + # This is a Chinese char. + if len(current_word) > 0: + words.append(current_word) + current_word = "" + words.append(c) + if len(current_word) > 0: + words.append(current_word) + return words + + +def isEnglish(text: str): + if re.search("^[a-zA-Z']+$", text): + return True + else: + return False + + +def join_chinese_and_english(input_list): + line = "" + for token in input_list: + if isEnglish(token): + line = line + " " + token + else: + line = line + token + + line = line.strip() + return line + + +def code_mix_split_words_jieba(seg_dict_file: str): + jieba.load_userdict(seg_dict_file) + + def _fn(text: str): + input_list = text.split() + token_list_all = [] + langauge_list = [] + token_list_tmp = [] + language_flag = None + for token in input_list: + if isEnglish(token) and language_flag == "Chinese": + token_list_all.append(token_list_tmp) + langauge_list.append("Chinese") + token_list_tmp = [] + elif not isEnglish(token) and language_flag == "English": + token_list_all.append(token_list_tmp) + langauge_list.append("English") + token_list_tmp = [] + + token_list_tmp.append(token) + + if isEnglish(token): + language_flag = "English" + else: + language_flag = "Chinese" + + if token_list_tmp: + token_list_all.append(token_list_tmp) + langauge_list.append(language_flag) + + result_list = [] + for token_list_tmp, language_flag in zip(token_list_all, langauge_list): + if language_flag == "English": + result_list.extend(token_list_tmp) + else: + seg_list = jieba.cut(join_chinese_and_english(token_list_tmp), HMM=False) + result_list.extend(seg_list) + + return result_list + + return _fn + + +def read_yaml(yaml_path: Union[str, Path]) -> Dict: + if not Path(yaml_path).exists(): + raise FileExistsError(f"The {yaml_path} does not exist.") + + with open(str(yaml_path), "rb") as f: + data = yaml.load(f, Loader=yaml.Loader) + return data + + +@functools.lru_cache() +def get_logger(name="funasr_onnx"): + """Initialize and get a logger by name. + If the logger has not been initialized, this method will initialize the + logger by adding one or two handlers, otherwise the initialized logger will + be directly returned. During initialization, a StreamHandler will always be + added. + Args: + name (str): Logger name. + Returns: + logging.Logger: The expected logger. + """ + logger = logging.getLogger(name) + if name in logger_initialized: + return logger + + for logger_name in logger_initialized: + if name.startswith(logger_name): + return logger + + formatter = logging.Formatter( + "[%(asctime)s] %(name)s %(levelname)s: %(message)s", datefmt="%Y/%m/%d %H:%M:%S" + ) + + sh = logging.StreamHandler() + sh.setFormatter(formatter) + logger.addHandler(sh) + logger_initialized[name] = True + logger.propagate = False + logging.basicConfig(level=logging.ERROR) + return logger diff --git a/utils/model_bin.py b/utils/model_bin.py new file mode 100644 index 0000000..b843632 --- /dev/null +++ b/utils/model_bin.py @@ -0,0 +1,145 @@ +#!/usr/bin/env python3 +# -*- encoding: utf-8 -*- +# Copyright FunASR (https://github.com/FunAudioLLM/SenseVoice). All Rights Reserved. +# MIT License (https://opensource.org/licenses/MIT) + +import os.path +from pathlib import Path +from typing import List, Union, Tuple +import torch +import librosa +import numpy as np + +from utils.infer_utils import ( + CharTokenizer, + Hypothesis, + ONNXRuntimeError, + OrtInferSession, + TokenIDConverter, + get_logger, + read_yaml, +) +from utils.frontend import WavFrontend +from utils.infer_utils import pad_list + +logging = get_logger() + + +class SenseVoiceSmallONNX: + """ + Author: Speech Lab of DAMO Academy, Alibaba Group + Paraformer: Fast and Accurate Parallel Transformer for Non-autoregressive End-to-End Speech Recognition + https://arxiv.org/abs/2206.08317 + """ + + def __init__( + self, + model_dir: Union[str, Path] = None, + batch_size: int = 1, + device_id: Union[str, int] = "-1", + plot_timestamp_to: str = "", + quantize: bool = False, + intra_op_num_threads: int = 4, + cache_dir: str = None, + **kwargs, + ): + if quantize: + model_file = os.path.join(model_dir, "model_quant.onnx") + else: + model_file = os.path.join(model_dir, "model.onnx") + + config_file = os.path.join(model_dir, "config.yaml") + cmvn_file = os.path.join(model_dir, "am.mvn") + config = read_yaml(config_file) + # token_list = os.path.join(model_dir, "tokens.json") + # with open(token_list, "r", encoding="utf-8") as f: + # token_list = json.load(f) + + # self.converter = TokenIDConverter(token_list) + self.tokenizer = CharTokenizer() + config["frontend_conf"]['cmvn_file'] = cmvn_file + self.frontend = WavFrontend(**config["frontend_conf"]) + self.ort_infer = OrtInferSession( + model_file, device_id, intra_op_num_threads=intra_op_num_threads + ) + self.batch_size = batch_size + self.blank_id = 0 + + def __call__(self, + wav_content: Union[str, np.ndarray, List[str]], + language: List, + textnorm: List, + tokenizer=None, + **kwargs) -> List: + waveform_list = self.load_data(wav_content, self.frontend.opts.frame_opts.samp_freq) + waveform_nums = len(waveform_list) + asr_res = [] + for beg_idx in range(0, waveform_nums, self.batch_size): + end_idx = min(waveform_nums, beg_idx + self.batch_size) + feats, feats_len = self.extract_feat(waveform_list[beg_idx:end_idx]) + ctc_logits, encoder_out_lens = self.infer(feats, + feats_len, + np.array(language, dtype=np.int32), + np.array(textnorm, dtype=np.int32) + ) + # back to torch.Tensor + ctc_logits = torch.from_numpy(ctc_logits).float() + # support batch_size=1 only currently + x = ctc_logits[0, : encoder_out_lens[0].item(), :] + yseq = x.argmax(dim=-1) + yseq = torch.unique_consecutive(yseq, dim=-1) + + mask = yseq != self.blank_id + token_int = yseq[mask].tolist() + + if tokenizer is not None: + asr_res.append(tokenizer.tokens2text(token_int)) + else: + asr_res.append(token_int) + return asr_res + + def load_data(self, wav_content: Union[str, np.ndarray, List[str]], fs: int = None) -> List: + def load_wav(path: str) -> np.ndarray: + waveform, _ = librosa.load(path, sr=fs) + return waveform + + if isinstance(wav_content, np.ndarray): + return [wav_content] + + if isinstance(wav_content, str): + return [load_wav(wav_content)] + + if isinstance(wav_content, list): + return [load_wav(path) for path in wav_content] + + raise TypeError(f"The type of {wav_content} is not in [str, np.ndarray, list]") + + def extract_feat(self, waveform_list: List[np.ndarray]) -> Tuple[np.ndarray, np.ndarray]: + feats, feats_len = [], [] + for waveform in waveform_list: + speech, _ = self.frontend.fbank(waveform) + feat, feat_len = self.frontend.lfr_cmvn(speech) + feats.append(feat) + feats_len.append(feat_len) + + feats = self.pad_feats(feats, np.max(feats_len)) + feats_len = np.array(feats_len).astype(np.int32) + return feats, feats_len + + @staticmethod + def pad_feats(feats: List[np.ndarray], max_feat_len: int) -> np.ndarray: + def pad_feat(feat: np.ndarray, cur_len: int) -> np.ndarray: + pad_width = ((0, max_feat_len - cur_len), (0, 0)) + return np.pad(feat, pad_width, "constant", constant_values=0) + + feat_res = [pad_feat(feat, feat.shape[0]) for feat in feats] + feats = np.array(feat_res).astype(np.float32) + return feats + + def infer(self, + feats: np.ndarray, + feats_len: np.ndarray, + language: np.ndarray, + textnorm: np.ndarray,) -> Tuple[np.ndarray, np.ndarray]: + outputs = self.ort_infer([feats, feats_len, language, textnorm]) + return outputs diff --git a/uv.lock b/uv.lock index 711f244..fe28507 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,119 @@ version = 1 +revision = 1 requires-python = ">=3.12" +resolution-markers = [ + "python_full_version >= '3.13'", + "python_full_version < '3.13'", +] + +[[package]] +name = "aiofiles" +version = "24.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/03/a88171e277e8caa88a4c77808c20ebb04ba74cc4681bf1e9416c862de237/aiofiles-24.1.0.tar.gz", hash = "sha256:22a075c9e5a3810f0c2e48f3008c94d68c65d763b9b03857924c99e57355166c", size = 30247 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/45/30bb92d442636f570cb5651bc661f52b610e2eec3f891a5dc3a4c3667db0/aiofiles-24.1.0-py3-none-any.whl", hash = "sha256:b4ec55f4195e3eb5d7abd1bf7e061763e864dd4954231fb8539a0ef8bb8260e5", size = 15896 }, +] + +[[package]] +name = "aliyun-python-sdk-core" +version = "2.16.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, + { name = "jmespath" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3e/09/da9f58eb38b4fdb97ba6523274fbf445ef6a06be64b433693da8307b4bec/aliyun-python-sdk-core-2.16.0.tar.gz", hash = "sha256:651caad597eb39d4fad6cf85133dffe92837d53bdf62db9d8f37dab6508bb8f9", size = 449555 } + +[[package]] +name = "aliyun-python-sdk-kms" +version = "2.16.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aliyun-python-sdk-core" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a8/2c/9877d0e6b18ecf246df671ac65a5d1d9fecbf85bdcb5d43efbde0d4662eb/aliyun-python-sdk-kms-2.16.5.tar.gz", hash = "sha256:f328a8a19d83ecbb965ffce0ec1e9930755216d104638cd95ecd362753b813b3", size = 12018 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/5c/0132193d7da2c735669a1ed103b142fd63c9455984d48c5a88a1a516efaa/aliyun_python_sdk_kms-2.16.5-py2.py3-none-any.whl", hash = "sha256:24b6cdc4fd161d2942619479c8d050c63ea9cd22b044fe33b60bbb60153786f0", size = 99495 }, +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 }, +] + +[[package]] +name = "antlr4-python3-runtime" +version = "4.9.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz", hash = "sha256:f224469b4168294902bb1efa80a8bf7855f24c99aef99cbefc1bcd3cce77881b", size = 117034 } + +[[package]] +name = "anyio" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "sniffio" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/95/7d/4c1bd541d4dffa1b52bd83fb8527089e097a106fc90b467a7313b105f840/anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028", size = 190949 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c", size = 100916 }, +] + +[[package]] +name = "audioop-lts" +version = "0.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/dd/3b/69ff8a885e4c1c42014c2765275c4bd91fe7bc9847e9d8543dbcbb09f820/audioop_lts-0.2.1.tar.gz", hash = "sha256:e81268da0baa880431b68b1308ab7257eb33f356e57a5f9b1f915dfb13dd1387", size = 30204 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/91/a219253cc6e92db2ebeaf5cf8197f71d995df6f6b16091d1f3ce62cb169d/audioop_lts-0.2.1-cp313-abi3-macosx_10_13_universal2.whl", hash = "sha256:fd1345ae99e17e6910f47ce7d52673c6a1a70820d78b67de1b7abb3af29c426a", size = 46252 }, + { url = "https://files.pythonhosted.org/packages/ec/f6/3cb21e0accd9e112d27cee3b1477cd04dafe88675c54ad8b0d56226c1e0b/audioop_lts-0.2.1-cp313-abi3-macosx_10_13_x86_64.whl", hash = "sha256:e175350da05d2087e12cea8e72a70a1a8b14a17e92ed2022952a4419689ede5e", size = 27183 }, + { url = "https://files.pythonhosted.org/packages/ea/7e/f94c8a6a8b2571694375b4cf94d3e5e0f529e8e6ba280fad4d8c70621f27/audioop_lts-0.2.1-cp313-abi3-macosx_11_0_arm64.whl", hash = "sha256:4a8dd6a81770f6ecf019c4b6d659e000dc26571b273953cef7cd1d5ce2ff3ae6", size = 26726 }, + { url = "https://files.pythonhosted.org/packages/ef/f8/a0e8e7a033b03fae2b16bc5aa48100b461c4f3a8a38af56d5ad579924a3a/audioop_lts-0.2.1-cp313-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1cd3c0b6f2ca25c7d2b1c3adeecbe23e65689839ba73331ebc7d893fcda7ffe", size = 80718 }, + { url = "https://files.pythonhosted.org/packages/8f/ea/a98ebd4ed631c93b8b8f2368862cd8084d75c77a697248c24437c36a6f7e/audioop_lts-0.2.1-cp313-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ff3f97b3372c97782e9c6d3d7fdbe83bce8f70de719605bd7ee1839cd1ab360a", size = 88326 }, + { url = "https://files.pythonhosted.org/packages/33/79/e97a9f9daac0982aa92db1199339bd393594d9a4196ad95ae088635a105f/audioop_lts-0.2.1-cp313-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a351af79edefc2a1bd2234bfd8b339935f389209943043913a919df4b0f13300", size = 80539 }, + { url = "https://files.pythonhosted.org/packages/b2/d3/1051d80e6f2d6f4773f90c07e73743a1e19fcd31af58ff4e8ef0375d3a80/audioop_lts-0.2.1-cp313-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2aeb6f96f7f6da80354330470b9134d81b4cf544cdd1c549f2f45fe964d28059", size = 78577 }, + { url = "https://files.pythonhosted.org/packages/7a/1d/54f4c58bae8dc8c64a75071c7e98e105ddaca35449376fcb0180f6e3c9df/audioop_lts-0.2.1-cp313-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c589f06407e8340e81962575fcffbba1e92671879a221186c3d4662de9fe804e", size = 82074 }, + { url = "https://files.pythonhosted.org/packages/36/89/2e78daa7cebbea57e72c0e1927413be4db675548a537cfba6a19040d52fa/audioop_lts-0.2.1-cp313-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fbae5d6925d7c26e712f0beda5ed69ebb40e14212c185d129b8dfbfcc335eb48", size = 84210 }, + { url = "https://files.pythonhosted.org/packages/a5/57/3ff8a74df2ec2fa6d2ae06ac86e4a27d6412dbb7d0e0d41024222744c7e0/audioop_lts-0.2.1-cp313-abi3-musllinux_1_2_i686.whl", hash = "sha256:d2d5434717f33117f29b5691fbdf142d36573d751716249a288fbb96ba26a281", size = 85664 }, + { url = "https://files.pythonhosted.org/packages/16/01/21cc4e5878f6edbc8e54be4c108d7cb9cb6202313cfe98e4ece6064580dd/audioop_lts-0.2.1-cp313-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:f626a01c0a186b08f7ff61431c01c055961ee28769591efa8800beadd27a2959", size = 93255 }, + { url = "https://files.pythonhosted.org/packages/3e/28/7f7418c362a899ac3b0bf13b1fde2d4ffccfdeb6a859abd26f2d142a1d58/audioop_lts-0.2.1-cp313-abi3-musllinux_1_2_s390x.whl", hash = "sha256:05da64e73837f88ee5c6217d732d2584cf638003ac72df124740460531e95e47", size = 87760 }, + { url = "https://files.pythonhosted.org/packages/6d/d8/577a8be87dc7dd2ba568895045cee7d32e81d85a7e44a29000fe02c4d9d4/audioop_lts-0.2.1-cp313-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:56b7a0a4dba8e353436f31a932f3045d108a67b5943b30f85a5563f4d8488d77", size = 84992 }, + { url = "https://files.pythonhosted.org/packages/ef/9a/4699b0c4fcf89936d2bfb5425f55f1a8b86dff4237cfcc104946c9cd9858/audioop_lts-0.2.1-cp313-abi3-win32.whl", hash = "sha256:6e899eb8874dc2413b11926b5fb3857ec0ab55222840e38016a6ba2ea9b7d5e3", size = 26059 }, + { url = "https://files.pythonhosted.org/packages/3a/1c/1f88e9c5dd4785a547ce5fd1eb83fff832c00cc0e15c04c1119b02582d06/audioop_lts-0.2.1-cp313-abi3-win_amd64.whl", hash = "sha256:64562c5c771fb0a8b6262829b9b4f37a7b886c01b4d3ecdbae1d629717db08b4", size = 30412 }, + { url = "https://files.pythonhosted.org/packages/c4/e9/c123fd29d89a6402ad261516f848437472ccc602abb59bba522af45e281b/audioop_lts-0.2.1-cp313-abi3-win_arm64.whl", hash = "sha256:c45317debeb64002e980077642afbd977773a25fa3dfd7ed0c84dccfc1fafcb0", size = 23578 }, + { url = "https://files.pythonhosted.org/packages/7a/99/bb664a99561fd4266687e5cb8965e6ec31ba4ff7002c3fce3dc5ef2709db/audioop_lts-0.2.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:3827e3fce6fee4d69d96a3d00cd2ab07f3c0d844cb1e44e26f719b34a5b15455", size = 46827 }, + { url = "https://files.pythonhosted.org/packages/c4/e3/f664171e867e0768ab982715e744430cf323f1282eb2e11ebfb6ee4c4551/audioop_lts-0.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:161249db9343b3c9780ca92c0be0d1ccbfecdbccac6844f3d0d44b9c4a00a17f", size = 27479 }, + { url = "https://files.pythonhosted.org/packages/a6/0d/2a79231ff54eb20e83b47e7610462ad6a2bea4e113fae5aa91c6547e7764/audioop_lts-0.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5b7b4ff9de7a44e0ad2618afdc2ac920b91f4a6d3509520ee65339d4acde5abf", size = 27056 }, + { url = "https://files.pythonhosted.org/packages/86/46/342471398283bb0634f5a6df947806a423ba74b2e29e250c7ec0e3720e4f/audioop_lts-0.2.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72e37f416adb43b0ced93419de0122b42753ee74e87070777b53c5d2241e7fab", size = 87802 }, + { url = "https://files.pythonhosted.org/packages/56/44/7a85b08d4ed55517634ff19ddfbd0af05bf8bfd39a204e4445cd0e6f0cc9/audioop_lts-0.2.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:534ce808e6bab6adb65548723c8cbe189a3379245db89b9d555c4210b4aaa9b6", size = 95016 }, + { url = "https://files.pythonhosted.org/packages/a8/2a/45edbca97ea9ee9e6bbbdb8d25613a36e16a4d1e14ae01557392f15cc8d3/audioop_lts-0.2.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2de9b6fb8b1cf9f03990b299a9112bfdf8b86b6987003ca9e8a6c4f56d39543", size = 87394 }, + { url = "https://files.pythonhosted.org/packages/14/ae/832bcbbef2c510629593bf46739374174606e25ac7d106b08d396b74c964/audioop_lts-0.2.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f24865991b5ed4b038add5edbf424639d1358144f4e2a3e7a84bc6ba23e35074", size = 84874 }, + { url = "https://files.pythonhosted.org/packages/26/1c/8023c3490798ed2f90dfe58ec3b26d7520a243ae9c0fc751ed3c9d8dbb69/audioop_lts-0.2.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bdb3b7912ccd57ea53197943f1bbc67262dcf29802c4a6df79ec1c715d45a78", size = 88698 }, + { url = "https://files.pythonhosted.org/packages/2c/db/5379d953d4918278b1f04a5a64b2c112bd7aae8f81021009da0dcb77173c/audioop_lts-0.2.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:120678b208cca1158f0a12d667af592e067f7a50df9adc4dc8f6ad8d065a93fb", size = 90401 }, + { url = "https://files.pythonhosted.org/packages/99/6e/3c45d316705ab1aec2e69543a5b5e458d0d112a93d08994347fafef03d50/audioop_lts-0.2.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:54cd4520fc830b23c7d223693ed3e1b4d464997dd3abc7c15dce9a1f9bd76ab2", size = 91864 }, + { url = "https://files.pythonhosted.org/packages/08/58/6a371d8fed4f34debdb532c0b00942a84ebf3e7ad368e5edc26931d0e251/audioop_lts-0.2.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:d6bd20c7a10abcb0fb3d8aaa7508c0bf3d40dfad7515c572014da4b979d3310a", size = 98796 }, + { url = "https://files.pythonhosted.org/packages/ee/77/d637aa35497e0034ff846fd3330d1db26bc6fd9dd79c406e1341188b06a2/audioop_lts-0.2.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:f0ed1ad9bd862539ea875fb339ecb18fcc4148f8d9908f4502df28f94d23491a", size = 94116 }, + { url = "https://files.pythonhosted.org/packages/1a/60/7afc2abf46bbcf525a6ebc0305d85ab08dc2d1e2da72c48dbb35eee5b62c/audioop_lts-0.2.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e1af3ff32b8c38a7d900382646e91f2fc515fd19dea37e9392275a5cbfdbff63", size = 91520 }, + { url = "https://files.pythonhosted.org/packages/65/6d/42d40da100be1afb661fd77c2b1c0dfab08af1540df57533621aea3db52a/audioop_lts-0.2.1-cp313-cp313t-win32.whl", hash = "sha256:f51bb55122a89f7a0817d7ac2319744b4640b5b446c4c3efcea5764ea99ae509", size = 26482 }, + { url = "https://files.pythonhosted.org/packages/01/09/f08494dca79f65212f5b273aecc5a2f96691bf3307cac29acfcf84300c01/audioop_lts-0.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:f0f2f336aa2aee2bce0b0dcc32bbba9178995454c7b979cf6ce086a8801e14c7", size = 30780 }, + { url = "https://files.pythonhosted.org/packages/5d/35/be73b6015511aa0173ec595fc579133b797ad532996f2998fd6b8d1bbe6b/audioop_lts-0.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:78bfb3703388c780edf900be66e07de5a3d4105ca8e8720c5c4d67927e0b15d0", size = 23918 }, +] + +[[package]] +name = "audioread" +version = "3.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/db/d2/87016ca9f083acadffb2d8da59bfa3253e4da7eeb9f71fb8e7708dc97ecd/audioread-3.0.1.tar.gz", hash = "sha256:ac5460a5498c48bdf2e8e767402583a4dcd13f4414d286f42ce4379e8b35066d", size = 116513 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/8d/30aa32745af16af0a9a650115fbe81bde7c610ed5c21b381fca0196f3a7f/audioread-3.0.1-py3-none-any.whl", hash = "sha256:4cdce70b8adc0da0a3c9e0d85fb10b3ace30fbdf8d1670fd443929b61d117c33", size = 23492 }, +] [[package]] name = "certifi" @@ -10,6 +124,39 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393 }, ] +[[package]] +name = "cffi" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178 }, + { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840 }, + { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803 }, + { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850 }, + { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729 }, + { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256 }, + { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424 }, + { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568 }, + { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736 }, + { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448 }, + { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976 }, + { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 }, + { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 }, + { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 }, + { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 }, + { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 }, + { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 }, + { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 }, + { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 }, + { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 }, + { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 }, + { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 }, +] + [[package]] name = "charset-normalizer" version = "3.4.1" @@ -45,6 +192,311 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767 }, ] +[[package]] +name = "click" +version = "8.1.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188 }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, +] + +[[package]] +name = "crcmod" +version = "1.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6b/b0/e595ce2a2527e169c3bcd6c33d2473c1918e0b7f6826a043ca1245dd4e5b/crcmod-1.7.tar.gz", hash = "sha256:dc7051a0db5f2bd48665a990d3ec1cc305a466a77358ca4492826f41f283601e", size = 89670 } + +[[package]] +name = "cryptography" +version = "44.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cd/25/4ce80c78963834b8a9fd1cc1266be5ed8d1840785c0f2e1b73b8d128d505/cryptography-44.0.2.tar.gz", hash = "sha256:c63454aa261a0cf0c5b4718349629793e9e634993538db841165b3df74f37ec0", size = 710807 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/92/ef/83e632cfa801b221570c5f58c0369db6fa6cef7d9ff859feab1aae1a8a0f/cryptography-44.0.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:efcfe97d1b3c79e486554efddeb8f6f53a4cdd4cf6086642784fa31fc384e1d7", size = 6676361 }, + { url = "https://files.pythonhosted.org/packages/30/ec/7ea7c1e4c8fc8329506b46c6c4a52e2f20318425d48e0fe597977c71dbce/cryptography-44.0.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29ecec49f3ba3f3849362854b7253a9f59799e3763b0c9d0826259a88efa02f1", size = 3952350 }, + { url = "https://files.pythonhosted.org/packages/27/61/72e3afdb3c5ac510330feba4fc1faa0fe62e070592d6ad00c40bb69165e5/cryptography-44.0.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc821e161ae88bfe8088d11bb39caf2916562e0a2dc7b6d56714a48b784ef0bb", size = 4166572 }, + { url = "https://files.pythonhosted.org/packages/26/e4/ba680f0b35ed4a07d87f9e98f3ebccb05091f3bf6b5a478b943253b3bbd5/cryptography-44.0.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3c00b6b757b32ce0f62c574b78b939afab9eecaf597c4d624caca4f9e71e7843", size = 3958124 }, + { url = "https://files.pythonhosted.org/packages/9c/e8/44ae3e68c8b6d1cbc59040288056df2ad7f7f03bbcaca6b503c737ab8e73/cryptography-44.0.2-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7bdcd82189759aba3816d1f729ce42ffded1ac304c151d0a8e89b9996ab863d5", size = 3678122 }, + { url = "https://files.pythonhosted.org/packages/27/7b/664ea5e0d1eab511a10e480baf1c5d3e681c7d91718f60e149cec09edf01/cryptography-44.0.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:4973da6ca3db4405c54cd0b26d328be54c7747e89e284fcff166132eb7bccc9c", size = 4191831 }, + { url = "https://files.pythonhosted.org/packages/2a/07/79554a9c40eb11345e1861f46f845fa71c9e25bf66d132e123d9feb8e7f9/cryptography-44.0.2-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:4e389622b6927d8133f314949a9812972711a111d577a5d1f4bee5e58736b80a", size = 3960583 }, + { url = "https://files.pythonhosted.org/packages/bb/6d/858e356a49a4f0b591bd6789d821427de18432212e137290b6d8a817e9bf/cryptography-44.0.2-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:f514ef4cd14bb6fb484b4a60203e912cfcb64f2ab139e88c2274511514bf7308", size = 4191753 }, + { url = "https://files.pythonhosted.org/packages/b2/80/62df41ba4916067fa6b125aa8c14d7e9181773f0d5d0bd4dcef580d8b7c6/cryptography-44.0.2-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1bc312dfb7a6e5d66082c87c34c8a62176e684b6fe3d90fcfe1568de675e6688", size = 4079550 }, + { url = "https://files.pythonhosted.org/packages/f3/cd/2558cc08f7b1bb40683f99ff4327f8dcfc7de3affc669e9065e14824511b/cryptography-44.0.2-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3b721b8b4d948b218c88cb8c45a01793483821e709afe5f622861fc6182b20a7", size = 4298367 }, + { url = "https://files.pythonhosted.org/packages/71/59/94ccc74788945bc3bd4cf355d19867e8057ff5fdbcac781b1ff95b700fb1/cryptography-44.0.2-cp37-abi3-win32.whl", hash = "sha256:51e4de3af4ec3899d6d178a8c005226491c27c4ba84101bfb59c901e10ca9f79", size = 2772843 }, + { url = "https://files.pythonhosted.org/packages/ca/2c/0d0bbaf61ba05acb32f0841853cfa33ebb7a9ab3d9ed8bb004bd39f2da6a/cryptography-44.0.2-cp37-abi3-win_amd64.whl", hash = "sha256:c505d61b6176aaf982c5717ce04e87da5abc9a36a5b39ac03905c4aafe8de7aa", size = 3209057 }, + { url = "https://files.pythonhosted.org/packages/9e/be/7a26142e6d0f7683d8a382dd963745e65db895a79a280a30525ec92be890/cryptography-44.0.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:8e0ddd63e6bf1161800592c71ac794d3fb8001f2caebe0966e77c5234fa9efc3", size = 6677789 }, + { url = "https://files.pythonhosted.org/packages/06/88/638865be7198a84a7713950b1db7343391c6066a20e614f8fa286eb178ed/cryptography-44.0.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81276f0ea79a208d961c433a947029e1a15948966658cf6710bbabb60fcc2639", size = 3951919 }, + { url = "https://files.pythonhosted.org/packages/d7/fc/99fe639bcdf58561dfad1faa8a7369d1dc13f20acd78371bb97a01613585/cryptography-44.0.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a1e657c0f4ea2a23304ee3f964db058c9e9e635cc7019c4aa21c330755ef6fd", size = 4167812 }, + { url = "https://files.pythonhosted.org/packages/53/7b/aafe60210ec93d5d7f552592a28192e51d3c6b6be449e7fd0a91399b5d07/cryptography-44.0.2-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6210c05941994290f3f7f175a4a57dbbb2afd9273657614c506d5976db061181", size = 3958571 }, + { url = "https://files.pythonhosted.org/packages/16/32/051f7ce79ad5a6ef5e26a92b37f172ee2d6e1cce09931646eef8de1e9827/cryptography-44.0.2-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d1c3572526997b36f245a96a2b1713bf79ce99b271bbcf084beb6b9b075f29ea", size = 3679832 }, + { url = "https://files.pythonhosted.org/packages/78/2b/999b2a1e1ba2206f2d3bca267d68f350beb2b048a41ea827e08ce7260098/cryptography-44.0.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:b042d2a275c8cee83a4b7ae30c45a15e6a4baa65a179a0ec2d78ebb90e4f6699", size = 4193719 }, + { url = "https://files.pythonhosted.org/packages/72/97/430e56e39a1356e8e8f10f723211a0e256e11895ef1a135f30d7d40f2540/cryptography-44.0.2-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:d03806036b4f89e3b13b6218fefea8d5312e450935b1a2d55f0524e2ed7c59d9", size = 3960852 }, + { url = "https://files.pythonhosted.org/packages/89/33/c1cf182c152e1d262cac56850939530c05ca6c8d149aa0dcee490b417e99/cryptography-44.0.2-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:c7362add18b416b69d58c910caa217f980c5ef39b23a38a0880dfd87bdf8cd23", size = 4193906 }, + { url = "https://files.pythonhosted.org/packages/e1/99/87cf26d4f125380dc674233971069bc28d19b07f7755b29861570e513650/cryptography-44.0.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:8cadc6e3b5a1f144a039ea08a0bdb03a2a92e19c46be3285123d32029f40a922", size = 4081572 }, + { url = "https://files.pythonhosted.org/packages/b3/9f/6a3e0391957cc0c5f84aef9fbdd763035f2b52e998a53f99345e3ac69312/cryptography-44.0.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6f101b1f780f7fc613d040ca4bdf835c6ef3b00e9bd7125a4255ec574c7916e4", size = 4298631 }, + { url = "https://files.pythonhosted.org/packages/e2/a5/5bc097adb4b6d22a24dea53c51f37e480aaec3465285c253098642696423/cryptography-44.0.2-cp39-abi3-win32.whl", hash = "sha256:3dc62975e31617badc19a906481deacdeb80b4bb454394b4098e3f2525a488c5", size = 2773792 }, + { url = "https://files.pythonhosted.org/packages/33/cf/1f7649b8b9a3543e042d3f348e398a061923ac05b507f3f4d95f11938aa9/cryptography-44.0.2-cp39-abi3-win_amd64.whl", hash = "sha256:5f6f90b72d8ccadb9c6e311c775c8305381db88374c65fa1a68250aa8a9cb3a6", size = 3210957 }, +] + +[[package]] +name = "decorator" +version = "5.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190 }, +] + +[[package]] +name = "editdistance" +version = "0.8.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d5/18/9f4f975ca87a390832b1c22478f3702fcdf739f83211e24d054b7551270d/editdistance-0.8.1.tar.gz", hash = "sha256:d1cdf80a5d5014b0c9126a69a42ce55a457b457f6986ff69ca98e4fe4d2d8fed", size = 50006 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/4c/7f195588949b4e72436dc7fc902632381f96e586af829685b56daebb38b8/editdistance-0.8.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b04af61b3fcdd287a07c15b6ae3b02af01c5e3e9c3aca76b8c1d13bd266b6f57", size = 106723 }, + { url = "https://files.pythonhosted.org/packages/8d/82/31dc1640d830cd7d36865098329f34e4dad3b77f31cfb9404b347e700196/editdistance-0.8.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:18fc8b6eaae01bfd9cf999af726c1e8dcf667d120e81aa7dbd515bea7427f62f", size = 80998 }, + { url = "https://files.pythonhosted.org/packages/ea/2a/6b823e71cef694d6f070a1d82be2842706fa193541aab8856a8f42044cd0/editdistance-0.8.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6a87839450a5987028738d061ffa5ef6a68bac2ddc68c9147a8aae9806629c7f", size = 79248 }, + { url = "https://files.pythonhosted.org/packages/e1/31/bfb8e590f922089dc3471ed7828a6da2fc9453eba38c332efa9ee8749fd7/editdistance-0.8.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24b5f9c9673c823d91b5973d0af8b39f883f414a55ade2b9d097138acd10f31e", size = 415262 }, + { url = "https://files.pythonhosted.org/packages/a9/c7/57423942b2f847cdbbb46494568d00cd8a45500904ea026f0aad6ca01bc7/editdistance-0.8.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c59248eabfad603f0fba47b0c263d5dc728fb01c2b6b50fb6ca187cec547fdb3", size = 418905 }, + { url = "https://files.pythonhosted.org/packages/1b/05/dfa4cdcce063596cbf0d7a32c46cd0f4fa70980311b7da64d35f33ad02a0/editdistance-0.8.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84e239d88ff52821cf64023fabd06a1d9a07654f364b64bf1284577fd3a79d0e", size = 412511 }, + { url = "https://files.pythonhosted.org/packages/0e/14/39608ff724a9523f187c4e28926d78bc68f2798f74777ac6757981108345/editdistance-0.8.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:2f7f71698f83e8c83839ac0d876a0f4ef996c86c5460aebd26d85568d4afd0db", size = 917293 }, + { url = "https://files.pythonhosted.org/packages/df/92/4a1c61d72da40dedfd0ff950fdc71ae83f478330c58a8bccfd776518bd67/editdistance-0.8.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:04e229d6f4ce0c12abc9f4cd4023a5b5fa9620226e0207b119c3c2778b036250", size = 975580 }, + { url = "https://files.pythonhosted.org/packages/47/3d/9877566e724c8a37f2228a84ec5cbf66dbfd0673515baf68a0fe07caff40/editdistance-0.8.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e16721636da6d6b68a2c09eaced35a94f4a4a704ec09f45756d4fd5e128ed18d", size = 929121 }, + { url = "https://files.pythonhosted.org/packages/d2/f5/8c50757d198b8ca30ddb91e8b8f0247a8dca04ff2ec30755245f0ab1ff0c/editdistance-0.8.1-cp312-cp312-win32.whl", hash = "sha256:87533cf2ebc3777088d991947274cd7e1014b9c861a8aa65257bcdc0ee492526", size = 81039 }, + { url = "https://files.pythonhosted.org/packages/28/f0/65101e51dc7c850e7b7581a5d8fa8721a1d7479a0dca6c08386328e19882/editdistance-0.8.1-cp312-cp312-win_amd64.whl", hash = "sha256:09f01ed51746d90178af7dd7ea4ebb41497ef19f53c7f327e864421743dffb0a", size = 79853 }, +] + +[[package]] +name = "fastapi" +version = "0.115.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "starlette" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f4/55/ae499352d82338331ca1e28c7f4a63bfd09479b16395dce38cf50a39e2c2/fastapi-0.115.12.tar.gz", hash = "sha256:1e2c2a2646905f9e83d32f04a3f86aff4a286669c6c950ca95b5fd68c2602681", size = 295236 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/b3/b51f09c2ba432a576fe63758bddc81f78f0c6309d9e5c10d194313bf021e/fastapi-0.115.12-py3-none-any.whl", hash = "sha256:e94613d6c05e27be7ffebdd6ea5f388112e5e430c8f7d6494a9d1d88d43e814d", size = 95164 }, +] + +[[package]] +name = "ffmpy" +version = "0.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4d/66/5697a7421c418ccbfae87b7e6503b480070f7cb16c25c77201afc6246348/ffmpy-0.5.0.tar.gz", hash = "sha256:277e131f246d18e9dcfee9bb514c50749031c43582ce5ef82c57b51e3d3955c3", size = 5523 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/53/5d/65f40bd333463b3230b3a72d93873caaf49b0cbb5228598fafb75fcc5357/ffmpy-0.5.0-py3-none-any.whl", hash = "sha256:df3799cf5816daa56d4959a023630ee53c6768b66009dae6d131519ba4b80233", size = 6008 }, +] + +[[package]] +name = "filelock" +version = "3.18.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/10/c23352565a6544bdc5353e0b15fc1c563352101f30e24bf500207a54df9a/filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", size = 18075 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215 }, +] + +[[package]] +name = "fsspec" +version = "2025.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/45/d8/8425e6ba5fcec61a1d16e41b1b71d2bf9344f1fe48012c2b48b9620feae5/fsspec-2025.3.2.tar.gz", hash = "sha256:e52c77ef398680bbd6a98c0e628fbc469491282981209907bbc8aea76a04fdc6", size = 299281 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/4b/e0cfc1a6f17e990f3e64b7d941ddc4acdc7b19d6edd51abf495f32b1a9e4/fsspec-2025.3.2-py3-none-any.whl", hash = "sha256:2daf8dc3d1dfa65b6aa37748d112773a7a08416f6c70d96b264c96476ecaf711", size = 194435 }, +] + +[[package]] +name = "funasr" +version = "1.2.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "editdistance" }, + { name = "hydra-core" }, + { name = "jaconv" }, + { name = "jamo" }, + { name = "jieba" }, + { name = "kaldiio" }, + { name = "librosa" }, + { name = "modelscope" }, + { name = "oss2" }, + { name = "pytorch-wpe" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "scipy" }, + { name = "sentencepiece" }, + { name = "soundfile" }, + { name = "tensorboardx" }, + { name = "torch-complex" }, + { name = "tqdm" }, + { name = "umap-learn" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4d/76/7b550401bd91a50dd6988615f28e701d69aa96f91ff538e7b6555baf31ed/funasr-1.2.6.tar.gz", hash = "sha256:702995804b87c6c8d591702f660ad64a50c09127de5e1b28556faa9bd9db8588", size = 553274 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1c/8c/af5817acd4ad5c9b97aafb7c5214cdd84a6c71eaac7c733d18e8449c3f47/funasr-1.2.6-py3-none-any.whl", hash = "sha256:74f339fa92d252e17616758bc94666908d02356281690e1e242110ac6676800c", size = 701567 }, +] + +[[package]] +name = "gradio" +version = "5.25.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiofiles" }, + { name = "anyio" }, + { name = "audioop-lts", marker = "python_full_version >= '3.13'" }, + { name = "fastapi" }, + { name = "ffmpy" }, + { name = "gradio-client" }, + { name = "groovy" }, + { name = "httpx" }, + { name = "huggingface-hub" }, + { name = "jinja2" }, + { name = "markupsafe" }, + { name = "numpy" }, + { name = "orjson" }, + { name = "packaging" }, + { name = "pandas" }, + { name = "pillow" }, + { name = "pydantic" }, + { name = "pydub" }, + { name = "python-multipart" }, + { name = "pyyaml" }, + { name = "ruff", marker = "sys_platform != 'emscripten'" }, + { name = "safehttpx" }, + { name = "semantic-version" }, + { name = "starlette", marker = "sys_platform != 'emscripten'" }, + { name = "tomlkit" }, + { name = "typer", marker = "sys_platform != 'emscripten'" }, + { name = "typing-extensions" }, + { name = "urllib3", marker = "sys_platform == 'emscripten'" }, + { name = "uvicorn", marker = "sys_platform != 'emscripten'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/09/1a/068a1e1c513718c6a08f04b6dbe350c655f8c7a8d78e969b94e480ec9b18/gradio-5.25.1.tar.gz", hash = "sha256:c611cec8e6dd61e7e72b5b88de20369c368cbc3da7db47dadd4d373e3e45df48", size = 56361025 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/c7/75c21dacb2e09fe5fd7c571dfd14a83dd2ffaf69cb3e2f5347d264a217ef/gradio-5.25.1-py3-none-any.whl", hash = "sha256:af437516362252168a64c41a8f41d39818ace8bb0bee9786e20475dea4302bd4", size = 46936479 }, +] + +[[package]] +name = "gradio-client" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fsspec" }, + { name = "httpx" }, + { name = "huggingface-hub" }, + { name = "packaging" }, + { name = "typing-extensions" }, + { name = "websockets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/87/78/22a3cc136772979fefa6e3b3afb4352e6b2f5b43e699bbd4a32e6f588bf0/gradio_client-1.8.0.tar.gz", hash = "sha256:a58c520c73fa7ff8bef54e41b19df2cd9071fd9d0cc00475eb397842baed19c8", size = 320305 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/c8/0df7f92c8f1bdf5c244c29de8cd7e33a5931768ddba245526a770bfa18a2/gradio_client-1.8.0-py3-none-any.whl", hash = "sha256:27a3ab5278a44d57d1d05a86de67cec5f7370e540600d11816744a620addb967", size = 322165 }, +] + +[[package]] +name = "groovy" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/36/bbdede67400277bef33d3ec0e6a31750da972c469f75966b4930c753218f/groovy-0.1.2.tar.gz", hash = "sha256:25c1dc09b3f9d7e292458aa762c6beb96ea037071bf5e917fc81fb78d2231083", size = 17325 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/28/27/3d6dcadc8a3214d8522c1e7f6a19554e33659be44546d44a2f7572ac7d2a/groovy-0.1.2-py3-none-any.whl", hash = "sha256:7f7975bab18c729a257a8b1ae9dcd70b7cafb1720481beae47719af57c35fa64", size = 14090 }, +] + +[[package]] +name = "h11" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f5/38/3af3d3633a34a3316095b39c8e8fb4853a28a536e55d347bd8d8e9a14b03/h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", size = 100418 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761", size = 58259 }, +] + +[[package]] +name = "httpcore" +version = "1.0.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/45/ad3e1b4d448f22c0cff4f5692f5ed0666658578e358b8d58a19846048059/httpcore-1.0.8.tar.gz", hash = "sha256:86e94505ed24ea06514883fd44d2bc02d90e77e7979c8eb71b90f41d364a1bad", size = 85385 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/8d/f052b1e336bb2c1fc7ed1aaed898aa570c0b61a09707b108979d9fc6e308/httpcore-1.0.8-py3-none-any.whl", hash = "sha256:5254cf149bcb5f75e9d1b2b9f729ea4a4b883d1ad7379fc632b727cec23674be", size = 78732 }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 }, +] + +[[package]] +name = "huggingface" +version = "0.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9d/a4/168b574a23c1841fab5b24ecac98a88ea626ea3c746c481f79eb360c81f2/huggingface-0.0.1.tar.gz", hash = "sha256:0a2f228fd956801d68b7c6a8bef478dfa60c4b7d7eba572ea7de39ecf87e505a", size = 2320 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/8c/e61fbc39c0a37140e1d4941c4af29e2d53bacf9f4559e3de24d8f4e484f0/huggingface-0.0.1-py3-none-any.whl", hash = "sha256:98a3409537557cd2fd768997ef94cab08529f86c5e106e6d54bbabdd5ee03910", size = 2455 }, +] + +[[package]] +name = "huggingface-hub" +version = "0.30.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "fsspec" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "tqdm" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/22/8eb91736b1dcb83d879bd49050a09df29a57cc5cd9f38e48a4b1c45ee890/huggingface_hub-0.30.2.tar.gz", hash = "sha256:9a7897c5b6fd9dad3168a794a8998d6378210f5b9688d0dfc180b1a228dc2466", size = 400868 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/27/1fb384a841e9661faad1c31cbfa62864f59632e876df5d795234da51c395/huggingface_hub-0.30.2-py3-none-any.whl", hash = "sha256:68ff05969927058cfa41df4f2155d4bb48f5f54f719dd0390103eefa9b191e28", size = 481433 }, +] + +[[package]] +name = "hydra-core" +version = "1.3.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "antlr4-python3-runtime" }, + { name = "omegaconf" }, + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6d/8e/07e42bc434a847154083b315779b0a81d567154504624e181caf2c71cd98/hydra-core-1.3.2.tar.gz", hash = "sha256:8a878ed67216997c3e9d88a8e72e7b4767e81af37afb4ea3334b269a4390a824", size = 3263494 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl", hash = "sha256:fa0238a9e31df3373b35b0bfb672c34cc92718d21f81311d8996a16de1141d8b", size = 154547 }, +] + [[package]] name = "idna" version = "3.10" @@ -54,6 +506,643 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, ] +[[package]] +name = "imageio" +version = "2.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "pillow" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0c/47/57e897fb7094afb2d26e8b2e4af9a45c7cf1a405acdeeca001fdf2c98501/imageio-2.37.0.tar.gz", hash = "sha256:71b57b3669666272c818497aebba2b4c5f20d5b37c81720e5e1a56d59c492996", size = 389963 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/bd/b394387b598ed84d8d0fa90611a90bee0adc2021820ad5729f7ced74a8e2/imageio-2.37.0-py3-none-any.whl", hash = "sha256:11efa15b87bc7871b61590326b2d635439acc321cf7f8ce996f812543ce10eed", size = 315796 }, +] + +[[package]] +name = "imageio-ffmpeg" +version = "0.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/44/bd/c3343c721f2a1b0c9fc71c1aebf1966a3b7f08c2eea8ed5437a2865611d6/imageio_ffmpeg-0.6.0.tar.gz", hash = "sha256:e2556bed8e005564a9f925bb7afa4002d82770d6b08825078b7697ab88ba1755", size = 25210 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/58/87ef68ac83f4c7690961bce288fd8e382bc5f1513860fc7f90a9c1c1c6bf/imageio_ffmpeg-0.6.0-py3-none-macosx_10_9_intel.macosx_10_9_x86_64.whl", hash = "sha256:9d2baaf867088508d4a3458e61eeb30e945c4ad8016025545f66c4b5aaef0a61", size = 24932969 }, + { url = "https://files.pythonhosted.org/packages/40/5c/f3d8a657d362cc93b81aab8feda487317da5b5d31c0e1fdfd5e986e55d17/imageio_ffmpeg-0.6.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b1ae3173414b5fc5f538a726c4e48ea97edc0d2cdc11f103afee655c463fa742", size = 21113891 }, + { url = "https://files.pythonhosted.org/packages/33/e7/1925bfbc563c39c1d2e82501d8372734a5c725e53ac3b31b4c2d081e895b/imageio_ffmpeg-0.6.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:1d47bebd83d2c5fc770720d211855f208af8a596c82d17730aa51e815cdee6dc", size = 25632706 }, + { url = "https://files.pythonhosted.org/packages/a0/2d/43c8522a2038e9d0e7dbdf3a61195ecc31ca576fb1527a528c877e87d973/imageio_ffmpeg-0.6.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:c7e46fcec401dd990405049d2e2f475e2b397779df2519b544b8aab515195282", size = 29498237 }, + { url = "https://files.pythonhosted.org/packages/a0/13/59da54728351883c3c1d9fca1710ab8eee82c7beba585df8f25ca925f08f/imageio_ffmpeg-0.6.0-py3-none-win32.whl", hash = "sha256:196faa79366b4a82f95c0f4053191d2013f4714a715780f0ad2a68ff37483cc2", size = 19652251 }, + { url = "https://files.pythonhosted.org/packages/2c/c6/fa760e12a2483469e2bf5058c5faff664acf66cadb4df2ad6205b016a73d/imageio_ffmpeg-0.6.0-py3-none-win_amd64.whl", hash = "sha256:02fa47c83703c37df6bfe4896aab339013f62bf02c5ebf2dce6da56af04ffc0a", size = 31246824 }, +] + +[[package]] +name = "intel-openmp" +version = "2021.4.0" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/18/527f247d673ff84c38e0b353b6901539b99e83066cd505be42ad341ab16d/intel_openmp-2021.4.0-py2.py3-none-win32.whl", hash = "sha256:6e863d8fd3d7e8ef389d52cf97a50fe2afe1a19247e8c0d168ce021546f96fc9", size = 1860605 }, + { url = "https://files.pythonhosted.org/packages/6f/21/b590c0cc3888b24f2ac9898c41d852d7454a1695fbad34bee85dba6dc408/intel_openmp-2021.4.0-py2.py3-none-win_amd64.whl", hash = "sha256:eef4c8bcc8acefd7f5cd3b9384dbf73d59e2c99fc56545712ded913f43c4a94f", size = 3516906 }, +] + +[[package]] +name = "jaconv" +version = "0.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d2/e1/670cefc7f00b0e1890e114a37a98ea425f7e06131342aeb9636856ac663c/jaconv-0.4.0.tar.gz", hash = "sha256:32da74b247f276e09a52d6b35c153df2387965cb85a6f034cc8af21d446f8161", size = 17402 } + +[[package]] +name = "jamo" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b1/a2/bda770579809726e929ca6356743f9f50f64a2cbaee578fa9d4824afb00e/jamo-0.4.1.tar.gz", hash = "sha256:ea65cf9d35338d0e0af48d75ff426d8a369b0ebde6f07051c3ac37256f56d025", size = 7386 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ac/cc/49812faae67f9a24be6ddaf58a2cf7e8c3cbfcf5b762d9414f7103d2ea2c/jamo-0.4.1-py3-none-any.whl", hash = "sha256:d4b94fd23324c606ed2fbc4037c603e2c3a7ae9390c05d3473aea1ccb6b1c3fb", size = 9543 }, +] + +[[package]] +name = "jieba" +version = "0.42.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c6/cb/18eeb235f833b726522d7ebed54f2278ce28ba9438e3135ab0278d9792a2/jieba-0.42.1.tar.gz", hash = "sha256:055ca12f62674fafed09427f176506079bc135638a14e23e25be909131928db2", size = 19214172 } + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, +] + +[[package]] +name = "jmespath" +version = "0.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3c/56/3f325b1eef9791759784aa5046a8f6a1aff8f7c898a2e34506771d3b99d8/jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9", size = 21607 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/cb/5f001272b6faeb23c1c9e0acc04d48eaaf5c862c17709d20e3469c6e0139/jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f", size = 24489 }, +] + +[[package]] +name = "joblib" +version = "1.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/64/33/60135848598c076ce4b231e1b1895170f45fbcaeaa2c9d5e38b04db70c35/joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e", size = 2116621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/29/df4b9b42f2be0b623cbd5e2140cafcaa2bef0759a00b7b70104dcfe2fb51/joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6", size = 301817 }, +] + +[[package]] +name = "kaldiio" +version = "2.18.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8d/85/92435e8e62eb3d43eded9f24643fc2a6dbce031cebceed11528147c7873f/kaldiio-2.18.1.tar.gz", hash = "sha256:0283d197fac6ac683f7a9e6af8d18aad9dbd2c4a997f22e45294f2ac1ee3c432", size = 35570 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ae/e3/6c3b42233225f398f7a72988b524f654ae818cca0d441db847a2761203e9/kaldiio-2.18.1-py3-none-any.whl", hash = "sha256:397a4cd18977acaae7acabfba6807ee0a6978c620064381a266eac15b3c1a0a0", size = 29330 }, +] + +[[package]] +name = "lazy-loader" +version = "0.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6f/6b/c875b30a1ba490860c93da4cabf479e03f584eba06fe5963f6f6644653d8/lazy_loader-0.4.tar.gz", hash = "sha256:47c75182589b91a4e1a85a136c074285a5ad4d9f39c63e0d7fb76391c4574cd1", size = 15431 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/60/d497a310bde3f01cb805196ac61b7ad6dc5dcf8dce66634dc34364b20b4f/lazy_loader-0.4-py3-none-any.whl", hash = "sha256:342aa8e14d543a154047afb4ba8ef17f5563baad3fc610d7b15b213b0f119efc", size = 12097 }, +] + +[[package]] +name = "librosa" +version = "0.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "audioread" }, + { name = "decorator" }, + { name = "joblib" }, + { name = "lazy-loader" }, + { name = "msgpack" }, + { name = "numba" }, + { name = "numpy" }, + { name = "pooch" }, + { name = "scikit-learn" }, + { name = "scipy" }, + { name = "soundfile" }, + { name = "soxr" }, + { name = "standard-aifc", marker = "python_full_version >= '3.13'" }, + { name = "standard-sunau", marker = "python_full_version >= '3.13'" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/64/36/360b5aafa0238e29758729e9486c6ed92a6f37fa403b7875e06c115cdf4a/librosa-0.11.0.tar.gz", hash = "sha256:f5ed951ca189b375bbe2e33b2abd7e040ceeee302b9bbaeeffdfddb8d0ace908", size = 327001 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/ba/c63c5786dfee4c3417094c4b00966e61e4a63efecee22cb7b4c0387dda83/librosa-0.11.0-py3-none-any.whl", hash = "sha256:0b6415c4fd68bff4c29288abe67c6d80b587e0e1e2cfb0aad23e4559504a7fa1", size = 260749 }, +] + +[[package]] +name = "llvmlite" +version = "0.44.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/89/6a/95a3d3610d5c75293d5dbbb2a76480d5d4eeba641557b69fe90af6c5b84e/llvmlite-0.44.0.tar.gz", hash = "sha256:07667d66a5d150abed9157ab6c0b9393c9356f229784a4385c02f99e94fc94d4", size = 171880 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/86/e3c3195b92e6e492458f16d233e58a1a812aa2bfbef9bdd0fbafcec85c60/llvmlite-0.44.0-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:1d671a56acf725bf1b531d5ef76b86660a5ab8ef19bb6a46064a705c6ca80aad", size = 28132297 }, + { url = "https://files.pythonhosted.org/packages/d6/53/373b6b8be67b9221d12b24125fd0ec56b1078b660eeae266ec388a6ac9a0/llvmlite-0.44.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5f79a728e0435493611c9f405168682bb75ffd1fbe6fc360733b850c80a026db", size = 26201105 }, + { url = "https://files.pythonhosted.org/packages/cb/da/8341fd3056419441286c8e26bf436923021005ece0bff5f41906476ae514/llvmlite-0.44.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0143a5ef336da14deaa8ec26c5449ad5b6a2b564df82fcef4be040b9cacfea9", size = 42361901 }, + { url = "https://files.pythonhosted.org/packages/53/ad/d79349dc07b8a395a99153d7ce8b01d6fcdc9f8231355a5df55ded649b61/llvmlite-0.44.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d752f89e31b66db6f8da06df8b39f9b91e78c5feea1bf9e8c1fba1d1c24c065d", size = 41184247 }, + { url = "https://files.pythonhosted.org/packages/e2/3b/a9a17366af80127bd09decbe2a54d8974b6d8b274b39bf47fbaedeec6307/llvmlite-0.44.0-cp312-cp312-win_amd64.whl", hash = "sha256:eae7e2d4ca8f88f89d315b48c6b741dcb925d6a1042da694aa16ab3dd4cbd3a1", size = 30332380 }, + { url = "https://files.pythonhosted.org/packages/89/24/4c0ca705a717514c2092b18476e7a12c74d34d875e05e4d742618ebbf449/llvmlite-0.44.0-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:319bddd44e5f71ae2689859b7203080716448a3cd1128fb144fe5c055219d516", size = 28132306 }, + { url = "https://files.pythonhosted.org/packages/01/cf/1dd5a60ba6aee7122ab9243fd614abcf22f36b0437cbbe1ccf1e3391461c/llvmlite-0.44.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9c58867118bad04a0bb22a2e0068c693719658105e40009ffe95c7000fcde88e", size = 26201090 }, + { url = "https://files.pythonhosted.org/packages/d2/1b/656f5a357de7135a3777bd735cc7c9b8f23b4d37465505bd0eaf4be9befe/llvmlite-0.44.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46224058b13c96af1365290bdfebe9a6264ae62fb79b2b55693deed11657a8bf", size = 42361904 }, + { url = "https://files.pythonhosted.org/packages/d8/e1/12c5f20cb9168fb3464a34310411d5ad86e4163c8ff2d14a2b57e5cc6bac/llvmlite-0.44.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa0097052c32bf721a4efc03bd109d335dfa57d9bffb3d4c24cc680711b8b4fc", size = 41184245 }, + { url = "https://files.pythonhosted.org/packages/d0/81/e66fc86539293282fd9cb7c9417438e897f369e79ffb62e1ae5e5154d4dd/llvmlite-0.44.0-cp313-cp313-win_amd64.whl", hash = "sha256:2fb7c4f2fb86cbae6dca3db9ab203eeea0e22d73b99bc2341cdf9de93612e930", size = 30331193 }, +] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528 }, +] + +[[package]] +name = "markupsafe" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348 }, + { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149 }, + { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118 }, + { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993 }, + { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178 }, + { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319 }, + { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352 }, + { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097 }, + { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601 }, + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 }, +] + +[[package]] +name = "mkl" +version = "2021.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "intel-openmp" }, + { name = "tbb" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/c6/892fe3bc91e811b78e4f85653864f2d92541d5e5c306b0cb3c2311e9ca64/mkl-2021.4.0-py2.py3-none-win32.whl", hash = "sha256:439c640b269a5668134e3dcbcea4350459c4a8bc46469669b2d67e07e3d330e8", size = 129048357 }, + { url = "https://files.pythonhosted.org/packages/fe/1c/5f6dbf18e8b73e0a5472466f0ea8d48ce9efae39bd2ff38cebf8dce61259/mkl-2021.4.0-py2.py3-none-win_amd64.whl", hash = "sha256:ceef3cafce4c009dd25f65d7ad0d833a0fbadc3d8903991ec92351fe5de1e718", size = 228499609 }, +] + +[[package]] +name = "modelscope" +version = "1.25.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, + { name = "tqdm" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/4b/1c11ca8bea237b49ad55889fd2387c012ce5d1fc574d4280cd593c32f41b/modelscope-1.25.0.tar.gz", hash = "sha256:b9a5ef2e68f17a63c8ea688104d82de1fc8b506c37ded1aeedfcf3eb6028b60a", size = 4388940 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/8f/b051fc200ba09584f4d53c35da68e4e3d08a0a8688dab60d6fe726e290c8/modelscope-1.25.0-py3-none-any.whl", hash = "sha256:30f0b8c94502ca44c911a9ce5ff388b3de4276c5b5cba2f850bc370dbf8cac57", size = 5854156 }, +] + +[[package]] +name = "moviepy" +version = "2.1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "decorator" }, + { name = "imageio" }, + { name = "imageio-ffmpeg" }, + { name = "numpy" }, + { name = "pillow" }, + { name = "proglog" }, + { name = "python-dotenv" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/34/fd/4afd90d35ea00dd82e67b7dcbbb2994eae97a2d24a0704c3f01505da4a1c/moviepy-2.1.2.tar.gz", hash = "sha256:22c57a7472f607eaad9fe80791df67c05082e1060fb74817c4eaac68e138ee77", size = 58425716 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/61/ee/ef46fdfbdc7e1316da60142ffc1867e6e12a22341636dce62856bb325272/moviepy-2.1.2-py3-none-any.whl", hash = "sha256:6cdc0d739110c8f347a224d72bd59eebaec010720d01eff290d37111bf545a73", size = 126708 }, +] + +[[package]] +name = "mpmath" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198 }, +] + +[[package]] +name = "msgpack" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cb/d0/7555686ae7ff5731205df1012ede15dd9d927f6227ea151e901c7406af4f/msgpack-1.1.0.tar.gz", hash = "sha256:dd432ccc2c72b914e4cb77afce64aab761c1137cc698be3984eee260bcb2896e", size = 167260 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/d6/716b7ca1dbde63290d2973d22bbef1b5032ca634c3ff4384a958ec3f093a/msgpack-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d46cf9e3705ea9485687aa4001a76e44748b609d260af21c4ceea7f2212a501d", size = 152421 }, + { url = "https://files.pythonhosted.org/packages/70/da/5312b067f6773429cec2f8f08b021c06af416bba340c912c2ec778539ed6/msgpack-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5dbad74103df937e1325cc4bfeaf57713be0b4f15e1c2da43ccdd836393e2ea2", size = 85277 }, + { url = "https://files.pythonhosted.org/packages/28/51/da7f3ae4462e8bb98af0d5bdf2707f1b8c65a0d4f496e46b6afb06cbc286/msgpack-1.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58dfc47f8b102da61e8949708b3eafc3504509a5728f8b4ddef84bd9e16ad420", size = 82222 }, + { url = "https://files.pythonhosted.org/packages/33/af/dc95c4b2a49cff17ce47611ca9ba218198806cad7796c0b01d1e332c86bb/msgpack-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4676e5be1b472909b2ee6356ff425ebedf5142427842aa06b4dfd5117d1ca8a2", size = 392971 }, + { url = "https://files.pythonhosted.org/packages/f1/54/65af8de681fa8255402c80eda2a501ba467921d5a7a028c9c22a2c2eedb5/msgpack-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17fb65dd0bec285907f68b15734a993ad3fc94332b5bb21b0435846228de1f39", size = 401403 }, + { url = "https://files.pythonhosted.org/packages/97/8c/e333690777bd33919ab7024269dc3c41c76ef5137b211d776fbb404bfead/msgpack-1.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a51abd48c6d8ac89e0cfd4fe177c61481aca2d5e7ba42044fd218cfd8ea9899f", size = 385356 }, + { url = "https://files.pythonhosted.org/packages/57/52/406795ba478dc1c890559dd4e89280fa86506608a28ccf3a72fbf45df9f5/msgpack-1.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2137773500afa5494a61b1208619e3871f75f27b03bcfca7b3a7023284140247", size = 383028 }, + { url = "https://files.pythonhosted.org/packages/e7/69/053b6549bf90a3acadcd8232eae03e2fefc87f066a5b9fbb37e2e608859f/msgpack-1.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:398b713459fea610861c8a7b62a6fec1882759f308ae0795b5413ff6a160cf3c", size = 391100 }, + { url = "https://files.pythonhosted.org/packages/23/f0/d4101d4da054f04274995ddc4086c2715d9b93111eb9ed49686c0f7ccc8a/msgpack-1.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:06f5fd2f6bb2a7914922d935d3b8bb4a7fff3a9a91cfce6d06c13bc42bec975b", size = 394254 }, + { url = "https://files.pythonhosted.org/packages/1c/12/cf07458f35d0d775ff3a2dc5559fa2e1fcd06c46f1ef510e594ebefdca01/msgpack-1.1.0-cp312-cp312-win32.whl", hash = "sha256:ad33e8400e4ec17ba782f7b9cf868977d867ed784a1f5f2ab46e7ba53b6e1e1b", size = 69085 }, + { url = "https://files.pythonhosted.org/packages/73/80/2708a4641f7d553a63bc934a3eb7214806b5b39d200133ca7f7afb0a53e8/msgpack-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:115a7af8ee9e8cddc10f87636767857e7e3717b7a2e97379dc2054712693e90f", size = 75347 }, + { url = "https://files.pythonhosted.org/packages/c8/b0/380f5f639543a4ac413e969109978feb1f3c66e931068f91ab6ab0f8be00/msgpack-1.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:071603e2f0771c45ad9bc65719291c568d4edf120b44eb36324dcb02a13bfddf", size = 151142 }, + { url = "https://files.pythonhosted.org/packages/c8/ee/be57e9702400a6cb2606883d55b05784fada898dfc7fd12608ab1fdb054e/msgpack-1.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0f92a83b84e7c0749e3f12821949d79485971f087604178026085f60ce109330", size = 84523 }, + { url = "https://files.pythonhosted.org/packages/7e/3a/2919f63acca3c119565449681ad08a2f84b2171ddfcff1dba6959db2cceb/msgpack-1.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a1964df7b81285d00a84da4e70cb1383f2e665e0f1f2a7027e683956d04b734", size = 81556 }, + { url = "https://files.pythonhosted.org/packages/7c/43/a11113d9e5c1498c145a8925768ea2d5fce7cbab15c99cda655aa09947ed/msgpack-1.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59caf6a4ed0d164055ccff8fe31eddc0ebc07cf7326a2aaa0dbf7a4001cd823e", size = 392105 }, + { url = "https://files.pythonhosted.org/packages/2d/7b/2c1d74ca6c94f70a1add74a8393a0138172207dc5de6fc6269483519d048/msgpack-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0907e1a7119b337971a689153665764adc34e89175f9a34793307d9def08e6ca", size = 399979 }, + { url = "https://files.pythonhosted.org/packages/82/8c/cf64ae518c7b8efc763ca1f1348a96f0e37150061e777a8ea5430b413a74/msgpack-1.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65553c9b6da8166e819a6aa90ad15288599b340f91d18f60b2061f402b9a4915", size = 383816 }, + { url = "https://files.pythonhosted.org/packages/69/86/a847ef7a0f5ef3fa94ae20f52a4cacf596a4e4a010197fbcc27744eb9a83/msgpack-1.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7a946a8992941fea80ed4beae6bff74ffd7ee129a90b4dd5cf9c476a30e9708d", size = 380973 }, + { url = "https://files.pythonhosted.org/packages/aa/90/c74cf6e1126faa93185d3b830ee97246ecc4fe12cf9d2d31318ee4246994/msgpack-1.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4b51405e36e075193bc051315dbf29168d6141ae2500ba8cd80a522964e31434", size = 387435 }, + { url = "https://files.pythonhosted.org/packages/7a/40/631c238f1f338eb09f4acb0f34ab5862c4e9d7eda11c1b685471a4c5ea37/msgpack-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4c01941fd2ff87c2a934ee6055bda4ed353a7846b8d4f341c428109e9fcde8c", size = 399082 }, + { url = "https://files.pythonhosted.org/packages/e9/1b/fa8a952be252a1555ed39f97c06778e3aeb9123aa4cccc0fd2acd0b4e315/msgpack-1.1.0-cp313-cp313-win32.whl", hash = "sha256:7c9a35ce2c2573bada929e0b7b3576de647b0defbd25f5139dcdaba0ae35a4cc", size = 69037 }, + { url = "https://files.pythonhosted.org/packages/b6/bc/8bd826dd03e022153bfa1766dcdec4976d6c818865ed54223d71f07862b3/msgpack-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:bce7d9e614a04d0883af0b3d4d501171fbfca038f12c77fa838d9f198147a23f", size = 75140 }, +] + +[[package]] +name = "networkx" +version = "3.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263 }, +] + +[[package]] +name = "numba" +version = "0.61.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "llvmlite" }, + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/a0/e21f57604304aa03ebb8e098429222722ad99176a4f979d34af1d1ee80da/numba-0.61.2.tar.gz", hash = "sha256:8750ee147940a6637b80ecf7f95062185ad8726c8c28a2295b8ec1160a196f7d", size = 2820615 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b4/a0/c6b7b9c615cfa3b98c4c63f4316e3f6b3bbe2387740277006551784218cd/numba-0.61.2-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:34fba9406078bac7ab052efbf0d13939426c753ad72946baaa5bf9ae0ebb8dd2", size = 2776626 }, + { url = "https://files.pythonhosted.org/packages/92/4a/fe4e3c2ecad72d88f5f8cd04e7f7cff49e718398a2fac02d2947480a00ca/numba-0.61.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4ddce10009bc097b080fc96876d14c051cc0c7679e99de3e0af59014dab7dfe8", size = 2779287 }, + { url = "https://files.pythonhosted.org/packages/9a/2d/e518df036feab381c23a624dac47f8445ac55686ec7f11083655eb707da3/numba-0.61.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5b1bb509d01f23d70325d3a5a0e237cbc9544dd50e50588bc581ba860c213546", size = 3885928 }, + { url = "https://files.pythonhosted.org/packages/10/0f/23cced68ead67b75d77cfcca3df4991d1855c897ee0ff3fe25a56ed82108/numba-0.61.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:48a53a3de8f8793526cbe330f2a39fe9a6638efcbf11bd63f3d2f9757ae345cd", size = 3577115 }, + { url = "https://files.pythonhosted.org/packages/68/1d/ddb3e704c5a8fb90142bf9dc195c27db02a08a99f037395503bfbc1d14b3/numba-0.61.2-cp312-cp312-win_amd64.whl", hash = "sha256:97cf4f12c728cf77c9c1d7c23707e4d8fb4632b46275f8f3397de33e5877af18", size = 2831929 }, + { url = "https://files.pythonhosted.org/packages/0b/f3/0fe4c1b1f2569e8a18ad90c159298d862f96c3964392a20d74fc628aee44/numba-0.61.2-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:3a10a8fc9afac40b1eac55717cece1b8b1ac0b946f5065c89e00bde646b5b154", size = 2771785 }, + { url = "https://files.pythonhosted.org/packages/e9/71/91b277d712e46bd5059f8a5866862ed1116091a7cb03bd2704ba8ebe015f/numba-0.61.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7d3bcada3c9afba3bed413fba45845f2fb9cd0d2b27dd58a1be90257e293d140", size = 2773289 }, + { url = "https://files.pythonhosted.org/packages/0d/e0/5ea04e7ad2c39288c0f0f9e8d47638ad70f28e275d092733b5817cf243c9/numba-0.61.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bdbca73ad81fa196bd53dc12e3aaf1564ae036e0c125f237c7644fe64a4928ab", size = 3893918 }, + { url = "https://files.pythonhosted.org/packages/17/58/064f4dcb7d7e9412f16ecf80ed753f92297e39f399c905389688cf950b81/numba-0.61.2-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:5f154aaea625fb32cfbe3b80c5456d514d416fcdf79733dd69c0df3a11348e9e", size = 3584056 }, + { url = "https://files.pythonhosted.org/packages/af/a4/6d3a0f2d3989e62a18749e1e9913d5fa4910bbb3e3311a035baea6caf26d/numba-0.61.2-cp313-cp313-win_amd64.whl", hash = "sha256:59321215e2e0ac5fa928a8020ab00b8e57cda8a97384963ac0dfa4d4e6aa54e7", size = 2831846 }, +] + +[[package]] +name = "numpy" +version = "1.26.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/65/6e/09db70a523a96d25e115e71cc56a6f9031e7b8cd166c1ac8438307c14058/numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010", size = 15786129 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/12/8f2020a8e8b8383ac0177dc9570aad031a3beb12e38847f7129bacd96228/numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218", size = 20335901 }, + { url = "https://files.pythonhosted.org/packages/75/5b/ca6c8bd14007e5ca171c7c03102d17b4f4e0ceb53957e8c44343a9546dcc/numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b", size = 13685868 }, + { url = "https://files.pythonhosted.org/packages/79/f8/97f10e6755e2a7d027ca783f63044d5b1bc1ae7acb12afe6a9b4286eac17/numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b", size = 13925109 }, + { url = "https://files.pythonhosted.org/packages/0f/50/de23fde84e45f5c4fda2488c759b69990fd4512387a8632860f3ac9cd225/numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed", size = 17950613 }, + { url = "https://files.pythonhosted.org/packages/4c/0c/9c603826b6465e82591e05ca230dfc13376da512b25ccd0894709b054ed0/numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a", size = 13572172 }, + { url = "https://files.pythonhosted.org/packages/76/8c/2ba3902e1a0fc1c74962ea9bb33a534bb05984ad7ff9515bf8d07527cadd/numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0", size = 17786643 }, + { url = "https://files.pythonhosted.org/packages/28/4a/46d9e65106879492374999e76eb85f87b15328e06bd1550668f79f7b18c6/numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110", size = 5677803 }, + { url = "https://files.pythonhosted.org/packages/16/2e/86f24451c2d530c88daf997cb8d6ac622c1d40d19f5a031ed68a4b73a374/numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818", size = 15517754 }, +] + +[[package]] +name = "nvidia-cublas-cu12" +version = "12.1.3.1" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/37/6d/121efd7382d5b0284239f4ab1fc1590d86d34ed4a4a2fdb13b30ca8e5740/nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl", hash = "sha256:ee53ccca76a6fc08fb9701aa95b6ceb242cdaab118c3bb152af4e579af792728", size = 410594774 }, +] + +[[package]] +name = "nvidia-cuda-cupti-cu12" +version = "12.1.105" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/00/6b218edd739ecfc60524e585ba8e6b00554dd908de2c9c66c1af3e44e18d/nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:e54fde3983165c624cb79254ae9818a456eb6e87a7fd4d56a2352c24ee542d7e", size = 14109015 }, +] + +[[package]] +name = "nvidia-cuda-nvrtc-cu12" +version = "12.1.105" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/9f/c64c03f49d6fbc56196664d05dba14e3a561038a81a638eeb47f4d4cfd48/nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:339b385f50c309763ca65456ec75e17bbefcbbf2893f462cb8b90584cd27a1c2", size = 23671734 }, +] + +[[package]] +name = "nvidia-cuda-runtime-cu12" +version = "12.1.105" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/d5/c68b1d2cdfcc59e72e8a5949a37ddb22ae6cade80cd4a57a84d4c8b55472/nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:6e258468ddf5796e25f1dc591a31029fa317d97a0a94ed93468fc86301d61e40", size = 823596 }, +] + +[[package]] +name = "nvidia-cudnn-cu12" +version = "8.9.2.26" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas-cu12" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/74/a2e2be7fb83aaedec84f391f082cf765dfb635e7caa9b49065f73e4835d8/nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl", hash = "sha256:5ccb288774fdfb07a7e7025ffec286971c06d8d7b4fb162525334616d7629ff9", size = 731725872 }, +] + +[[package]] +name = "nvidia-cufft-cu12" +version = "11.0.2.54" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/94/eb540db023ce1d162e7bea9f8f5aa781d57c65aed513c33ee9a5123ead4d/nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl", hash = "sha256:794e3948a1aa71fd817c3775866943936774d1c14e7628c74f6f7417224cdf56", size = 121635161 }, +] + +[[package]] +name = "nvidia-curand-cu12" +version = "10.3.2.106" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/31/4890b1c9abc496303412947fc7dcea3d14861720642b49e8ceed89636705/nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl", hash = "sha256:9d264c5036dde4e64f1de8c50ae753237c12e0b1348738169cd0f8a536c0e1e0", size = 56467784 }, +] + +[[package]] +name = "nvidia-cusolver-cu12" +version = "11.4.5.107" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas-cu12" }, + { name = "nvidia-cusparse-cu12" }, + { name = "nvidia-nvjitlink-cu12" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/1d/8de1e5c67099015c834315e333911273a8c6aaba78923dd1d1e25fc5f217/nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl", hash = "sha256:8a7ec542f0412294b15072fa7dab71d31334014a69f953004ea7a118206fe0dd", size = 124161928 }, +] + +[[package]] +name = "nvidia-cusparse-cu12" +version = "12.1.0.106" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-nvjitlink-cu12" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/65/5b/cfaeebf25cd9fdec14338ccb16f6b2c4c7fa9163aefcf057d86b9cc248bb/nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl", hash = "sha256:f3b50f42cf363f86ab21f720998517a659a48131e8d538dc02f8768237bd884c", size = 195958278 }, +] + +[[package]] +name = "nvidia-nccl-cu12" +version = "2.20.5" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/2a/0a131f572aa09f741c30ccd45a8e56316e8be8dfc7bc19bf0ab7cfef7b19/nvidia_nccl_cu12-2.20.5-py3-none-manylinux2014_x86_64.whl", hash = "sha256:057f6bf9685f75215d0c53bf3ac4a10b3e6578351de307abad9e18a99182af56", size = 176249402 }, +] + +[[package]] +name = "nvidia-nvjitlink-cu12" +version = "12.4.127" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/ff/847841bacfbefc97a00036e0fce5a0f086b640756dc38caea5e1bb002655/nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:06b3b9b25bf3f8af351d664978ca26a16d2c5127dbd53c0497e28d1fb9611d57", size = 21066810 }, +] + +[[package]] +name = "nvidia-nvtx-cu12" +version = "12.1.105" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/d3/8057f0587683ed2fcd4dbfbdfdfa807b9160b809976099d36b8f60d08f03/nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:dc21cf308ca5691e7c04d962e213f8a4aa9bbfa23d95412f452254c2caeb09e5", size = 99138 }, +] + +[[package]] +name = "omegaconf" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "antlr4-python3-runtime" }, + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/09/48/6388f1bb9da707110532cb70ec4d2822858ddfb44f1cdf1233c20a80ea4b/omegaconf-2.3.0.tar.gz", hash = "sha256:d5d4b6d29955cc50ad50c46dc269bcd92c6e00f5f90d23ab5fee7bfca4ba4cc7", size = 3298120 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.whl", hash = "sha256:7b4df175cdb08ba400f45cae3bdcae7ba8365db4d165fc65fd04b050ab63b46b", size = 79500 }, +] + +[[package]] +name = "orjson" +version = "3.10.16" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/98/c7/03913cc4332174071950acf5b0735463e3f63760c80585ef369270c2b372/orjson-3.10.16.tar.gz", hash = "sha256:d2aaa5c495e11d17b9b93205f5fa196737ee3202f000aaebf028dc9a73750f10", size = 5410415 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/15/67ce9d4c959c83f112542222ea3b9209c1d424231d71d74c4890ea0acd2b/orjson-3.10.16-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6d3444abbfa71ba21bb042caa4b062535b122248259fdb9deea567969140abca", size = 249325 }, + { url = "https://files.pythonhosted.org/packages/da/2c/1426b06f30a1b9ada74b6f512c1ddf9d2760f53f61cdb59efeb9ad342133/orjson-3.10.16-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:30245c08d818fdcaa48b7d5b81499b8cae09acabb216fe61ca619876b128e184", size = 133621 }, + { url = "https://files.pythonhosted.org/packages/9e/88/18d26130954bc73bee3be10f95371ea1dfb8679e0e2c46b0f6d8c6289402/orjson-3.10.16-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0ba1d0baa71bf7579a4ccdcf503e6f3098ef9542106a0eca82395898c8a500a", size = 138270 }, + { url = "https://files.pythonhosted.org/packages/4f/f9/6d8b64fcd58fae072e80ee7981be8ba0d7c26ace954e5cd1d027fc80518f/orjson-3.10.16-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb0beefa5ef3af8845f3a69ff2a4aa62529b5acec1cfe5f8a6b4141033fd46ef", size = 132346 }, + { url = "https://files.pythonhosted.org/packages/16/3f/2513fd5bc786f40cd12af569c23cae6381aeddbefeed2a98f0a666eb5d0d/orjson-3.10.16-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6daa0e1c9bf2e030e93c98394de94506f2a4d12e1e9dadd7c53d5e44d0f9628e", size = 136845 }, + { url = "https://files.pythonhosted.org/packages/6d/42/b0e7b36720f5ab722b48e8ccf06514d4f769358dd73c51abd8728ef58d0b/orjson-3.10.16-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9da9019afb21e02410ef600e56666652b73eb3e4d213a0ec919ff391a7dd52aa", size = 138078 }, + { url = "https://files.pythonhosted.org/packages/a3/a8/d220afb8a439604be74fc755dbc740bded5ed14745ca536b304ed32eb18a/orjson-3.10.16-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:daeb3a1ee17b69981d3aae30c3b4e786b0f8c9e6c71f2b48f1aef934f63f38f4", size = 142712 }, + { url = "https://files.pythonhosted.org/packages/8c/88/7e41e9883c00f84f92fe357a8371edae816d9d7ef39c67b5106960c20389/orjson-3.10.16-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80fed80eaf0e20a31942ae5d0728849862446512769692474be5e6b73123a23b", size = 133136 }, + { url = "https://files.pythonhosted.org/packages/e9/ca/61116095307ad0be828ea26093febaf59e38596d84a9c8d765c3c5e4934f/orjson-3.10.16-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73390ed838f03764540a7bdc4071fe0123914c2cc02fb6abf35182d5fd1b7a42", size = 135258 }, + { url = "https://files.pythonhosted.org/packages/dc/1b/09493cf7d801505f094c9295f79c98c1e0af2ac01c7ed8d25b30fcb19ada/orjson-3.10.16-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:a22bba012a0c94ec02a7768953020ab0d3e2b884760f859176343a36c01adf87", size = 412326 }, + { url = "https://files.pythonhosted.org/packages/ea/02/125d7bbd7f7a500190ddc8ae5d2d3c39d87ed3ed28f5b37cfe76962c678d/orjson-3.10.16-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5385bbfdbc90ff5b2635b7e6bebf259652db00a92b5e3c45b616df75b9058e88", size = 152800 }, + { url = "https://files.pythonhosted.org/packages/f9/09/7658a9e3e793d5b3b00598023e0fb6935d0e7bbb8ff72311c5415a8ce677/orjson-3.10.16-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:02c6279016346e774dd92625d46c6c40db687b8a0d685aadb91e26e46cc33e1e", size = 137516 }, + { url = "https://files.pythonhosted.org/packages/29/87/32b7a4831e909d347278101a48d4cf9f3f25901b2295e7709df1651f65a1/orjson-3.10.16-cp312-cp312-win32.whl", hash = "sha256:7ca55097a11426db80f79378e873a8c51f4dde9ffc22de44850f9696b7eb0e8c", size = 141759 }, + { url = "https://files.pythonhosted.org/packages/35/ce/81a27e7b439b807bd393585271364cdddf50dc281fc57c4feef7ccb186a6/orjson-3.10.16-cp312-cp312-win_amd64.whl", hash = "sha256:86d127efdd3f9bf5f04809b70faca1e6836556ea3cc46e662b44dab3fe71f3d6", size = 133944 }, + { url = "https://files.pythonhosted.org/packages/87/b9/ff6aa28b8c86af9526160905593a2fe8d004ac7a5e592ee0b0ff71017511/orjson-3.10.16-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:148a97f7de811ba14bc6dbc4a433e0341ffd2cc285065199fb5f6a98013744bd", size = 249289 }, + { url = "https://files.pythonhosted.org/packages/6c/81/6d92a586149b52684ab8fd70f3623c91d0e6a692f30fd8c728916ab2263c/orjson-3.10.16-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:1d960c1bf0e734ea36d0adc880076de3846aaec45ffad29b78c7f1b7962516b8", size = 133640 }, + { url = "https://files.pythonhosted.org/packages/c2/88/b72443f4793d2e16039ab85d0026677932b15ab968595fb7149750d74134/orjson-3.10.16-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a318cd184d1269f68634464b12871386808dc8b7c27de8565234d25975a7a137", size = 138286 }, + { url = "https://files.pythonhosted.org/packages/c3/3c/72a22d4b28c076c4016d5a52bd644a8e4d849d3bb0373d9e377f9e3b2250/orjson-3.10.16-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df23f8df3ef9223d1d6748bea63fca55aae7da30a875700809c500a05975522b", size = 132307 }, + { url = "https://files.pythonhosted.org/packages/8a/a2/f1259561bdb6ad7061ff1b95dab082fe32758c4bc143ba8d3d70831f0a06/orjson-3.10.16-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b94dda8dd6d1378f1037d7f3f6b21db769ef911c4567cbaa962bb6dc5021cf90", size = 136739 }, + { url = "https://files.pythonhosted.org/packages/3d/af/c7583c4b34f33d8b8b90cfaab010ff18dd64e7074cc1e117a5f1eff20dcf/orjson-3.10.16-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f12970a26666a8775346003fd94347d03ccb98ab8aa063036818381acf5f523e", size = 138076 }, + { url = "https://files.pythonhosted.org/packages/d7/59/d7fc7fbdd3d4a64c2eae4fc7341a5aa39cf9549bd5e2d7f6d3c07f8b715b/orjson-3.10.16-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15a1431a245d856bd56e4d29ea0023eb4d2c8f71efe914beb3dee8ab3f0cd7fb", size = 142643 }, + { url = "https://files.pythonhosted.org/packages/92/0e/3bd8f2197d27601f16b4464ae948826da2bcf128af31230a9dbbad7ceb57/orjson-3.10.16-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c83655cfc247f399a222567d146524674a7b217af7ef8289c0ff53cfe8db09f0", size = 133168 }, + { url = "https://files.pythonhosted.org/packages/af/a8/351fd87b664b02f899f9144d2c3dc848b33ac04a5df05234cbfb9e2a7540/orjson-3.10.16-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fa59ae64cb6ddde8f09bdbf7baf933c4cd05734ad84dcf4e43b887eb24e37652", size = 135271 }, + { url = "https://files.pythonhosted.org/packages/ba/b0/a6d42a7d412d867c60c0337d95123517dd5a9370deea705ea1be0f89389e/orjson-3.10.16-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ca5426e5aacc2e9507d341bc169d8af9c3cbe88f4cd4c1cf2f87e8564730eb56", size = 412444 }, + { url = "https://files.pythonhosted.org/packages/79/ec/7572cd4e20863f60996f3f10bc0a6da64a6fd9c35954189a914cec0b7377/orjson-3.10.16-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6fd5da4edf98a400946cd3a195680de56f1e7575109b9acb9493331047157430", size = 152737 }, + { url = "https://files.pythonhosted.org/packages/a9/19/ceb9e8fed5403b2e76a8ac15f581b9d25780a3be3c9b3aa54b7777a210d5/orjson-3.10.16-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:980ecc7a53e567169282a5e0ff078393bac78320d44238da4e246d71a4e0e8f5", size = 137482 }, + { url = "https://files.pythonhosted.org/packages/1b/78/a78bb810f3786579dbbbd94768284cbe8f2fd65167cd7020260679665c17/orjson-3.10.16-cp313-cp313-win32.whl", hash = "sha256:28f79944dd006ac540a6465ebd5f8f45dfdf0948ff998eac7a908275b4c1add6", size = 141714 }, + { url = "https://files.pythonhosted.org/packages/81/9c/b66ce9245ff319df2c3278acd351a3f6145ef34b4a2d7f4b0f739368370f/orjson-3.10.16-cp313-cp313-win_amd64.whl", hash = "sha256:fe0a145e96d51971407cb8ba947e63ead2aa915db59d6631a355f5f2150b56b7", size = 133954 }, +] + +[[package]] +name = "oss2" +version = "2.19.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aliyun-python-sdk-core" }, + { name = "aliyun-python-sdk-kms" }, + { name = "crcmod" }, + { name = "pycryptodome" }, + { name = "requests" }, + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/b5/f2cb1950dda46ac2284d6c950489fdacd0e743c2d79a347924d3cc44b86f/oss2-2.19.1.tar.gz", hash = "sha256:a8ab9ee7eb99e88a7e1382edc6ea641d219d585a7e074e3776e9dec9473e59c1", size = 298845 } + +[[package]] +name = "packaging" +version = "24.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 }, +] + +[[package]] +name = "pandas" +version = "2.2.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", size = 4399213 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/a3/fb2734118db0af37ea7433f57f722c0a56687e14b14690edff0cdb4b7e58/pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9", size = 12529893 }, + { url = "https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4", size = 11363475 }, + { url = "https://files.pythonhosted.org/packages/c6/2a/4bba3f03f7d07207481fed47f5b35f556c7441acddc368ec43d6643c5777/pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3", size = 15188645 }, + { url = "https://files.pythonhosted.org/packages/38/f8/d8fddee9ed0d0c0f4a2132c1dfcf0e3e53265055da8df952a53e7eaf178c/pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319", size = 12739445 }, + { url = "https://files.pythonhosted.org/packages/20/e8/45a05d9c39d2cea61ab175dbe6a2de1d05b679e8de2011da4ee190d7e748/pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8", size = 16359235 }, + { url = "https://files.pythonhosted.org/packages/1d/99/617d07a6a5e429ff90c90da64d428516605a1ec7d7bea494235e1c3882de/pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a", size = 14056756 }, + { url = "https://files.pythonhosted.org/packages/29/d4/1244ab8edf173a10fd601f7e13b9566c1b525c4f365d6bee918e68381889/pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13", size = 11504248 }, + { url = "https://files.pythonhosted.org/packages/64/22/3b8f4e0ed70644e85cfdcd57454686b9057c6c38d2f74fe4b8bc2527214a/pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", size = 12477643 }, + { url = "https://files.pythonhosted.org/packages/e4/93/b3f5d1838500e22c8d793625da672f3eec046b1a99257666c94446969282/pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", size = 11281573 }, + { url = "https://files.pythonhosted.org/packages/f5/94/6c79b07f0e5aab1dcfa35a75f4817f5c4f677931d4234afcd75f0e6a66ca/pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", size = 15196085 }, + { url = "https://files.pythonhosted.org/packages/e8/31/aa8da88ca0eadbabd0a639788a6da13bb2ff6edbbb9f29aa786450a30a91/pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", size = 12711809 }, + { url = "https://files.pythonhosted.org/packages/ee/7c/c6dbdb0cb2a4344cacfb8de1c5808ca885b2e4dcfde8008266608f9372af/pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", size = 16356316 }, + { url = "https://files.pythonhosted.org/packages/57/b7/8b757e7d92023b832869fa8881a992696a0bfe2e26f72c9ae9f255988d42/pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", size = 14022055 }, + { url = "https://files.pythonhosted.org/packages/3b/bc/4b18e2b8c002572c5a441a64826252ce5da2aa738855747247a971988043/pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", size = 11481175 }, + { url = "https://files.pythonhosted.org/packages/76/a3/a5d88146815e972d40d19247b2c162e88213ef51c7c25993942c39dbf41d/pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", size = 12615650 }, + { url = "https://files.pythonhosted.org/packages/9c/8c/f0fd18f6140ddafc0c24122c8a964e48294acc579d47def376fef12bcb4a/pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", size = 11290177 }, + { url = "https://files.pythonhosted.org/packages/ed/f9/e995754eab9c0f14c6777401f7eece0943840b7a9fc932221c19d1abee9f/pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", size = 14651526 }, + { url = "https://files.pythonhosted.org/packages/25/b0/98d6ae2e1abac4f35230aa756005e8654649d305df9a28b16b9ae4353bff/pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", size = 11871013 }, + { url = "https://files.pythonhosted.org/packages/cc/57/0f72a10f9db6a4628744c8e8f0df4e6e21de01212c7c981d31e50ffc8328/pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", size = 15711620 }, + { url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436 }, +] + +[[package]] +name = "pillow" +version = "10.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/74/ad3d526f3bf7b6d3f408b73fde271ec69dfac8b81341a318ce825f2b3812/pillow-10.4.0.tar.gz", hash = "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06", size = 46555059 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/cb/0353013dc30c02a8be34eb91d25e4e4cf594b59e5a55ea1128fde1e5f8ea/pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94", size = 3509350 }, + { url = "https://files.pythonhosted.org/packages/e7/cf/5c558a0f247e0bf9cec92bff9b46ae6474dd736f6d906315e60e4075f737/pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597", size = 3374980 }, + { url = "https://files.pythonhosted.org/packages/84/48/6e394b86369a4eb68b8a1382c78dc092245af517385c086c5094e3b34428/pillow-10.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80", size = 4343799 }, + { url = "https://files.pythonhosted.org/packages/3b/f3/a8c6c11fa84b59b9df0cd5694492da8c039a24cd159f0f6918690105c3be/pillow-10.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca", size = 4459973 }, + { url = "https://files.pythonhosted.org/packages/7d/1b/c14b4197b80150fb64453585247e6fb2e1d93761fa0fa9cf63b102fde822/pillow-10.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef", size = 4370054 }, + { url = "https://files.pythonhosted.org/packages/55/77/40daddf677897a923d5d33329acd52a2144d54a9644f2a5422c028c6bf2d/pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a", size = 4539484 }, + { url = "https://files.pythonhosted.org/packages/40/54/90de3e4256b1207300fb2b1d7168dd912a2fb4b2401e439ba23c2b2cabde/pillow-10.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b", size = 4477375 }, + { url = "https://files.pythonhosted.org/packages/13/24/1bfba52f44193860918ff7c93d03d95e3f8748ca1de3ceaf11157a14cf16/pillow-10.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9", size = 4608773 }, + { url = "https://files.pythonhosted.org/packages/55/04/5e6de6e6120451ec0c24516c41dbaf80cce1b6451f96561235ef2429da2e/pillow-10.4.0-cp312-cp312-win32.whl", hash = "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42", size = 2235690 }, + { url = "https://files.pythonhosted.org/packages/74/0a/d4ce3c44bca8635bd29a2eab5aa181b654a734a29b263ca8efe013beea98/pillow-10.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a", size = 2554951 }, + { url = "https://files.pythonhosted.org/packages/b5/ca/184349ee40f2e92439be9b3502ae6cfc43ac4b50bc4fc6b3de7957563894/pillow-10.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9", size = 2243427 }, + { url = "https://files.pythonhosted.org/packages/c3/00/706cebe7c2c12a6318aabe5d354836f54adff7156fd9e1bd6c89f4ba0e98/pillow-10.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3", size = 3525685 }, + { url = "https://files.pythonhosted.org/packages/cf/76/f658cbfa49405e5ecbfb9ba42d07074ad9792031267e782d409fd8fe7c69/pillow-10.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb", size = 3374883 }, + { url = "https://files.pythonhosted.org/packages/46/2b/99c28c4379a85e65378211971c0b430d9c7234b1ec4d59b2668f6299e011/pillow-10.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70", size = 4339837 }, + { url = "https://files.pythonhosted.org/packages/f1/74/b1ec314f624c0c43711fdf0d8076f82d9d802afd58f1d62c2a86878e8615/pillow-10.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be", size = 4455562 }, + { url = "https://files.pythonhosted.org/packages/4a/2a/4b04157cb7b9c74372fa867096a1607e6fedad93a44deeff553ccd307868/pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0", size = 4366761 }, + { url = "https://files.pythonhosted.org/packages/ac/7b/8f1d815c1a6a268fe90481232c98dd0e5fa8c75e341a75f060037bd5ceae/pillow-10.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc", size = 4536767 }, + { url = "https://files.pythonhosted.org/packages/e5/77/05fa64d1f45d12c22c314e7b97398ffb28ef2813a485465017b7978b3ce7/pillow-10.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a", size = 4477989 }, + { url = "https://files.pythonhosted.org/packages/12/63/b0397cfc2caae05c3fb2f4ed1b4fc4fc878f0243510a7a6034ca59726494/pillow-10.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309", size = 4610255 }, + { url = "https://files.pythonhosted.org/packages/7b/f9/cfaa5082ca9bc4a6de66ffe1c12c2d90bf09c309a5f52b27759a596900e7/pillow-10.4.0-cp313-cp313-win32.whl", hash = "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060", size = 2235603 }, + { url = "https://files.pythonhosted.org/packages/01/6a/30ff0eef6e0c0e71e55ded56a38d4859bf9d3634a94a88743897b5f96936/pillow-10.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea", size = 2554972 }, + { url = "https://files.pythonhosted.org/packages/48/2c/2e0a52890f269435eee38b21c8218e102c621fe8d8df8b9dd06fabf879ba/pillow-10.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d", size = 2243375 }, +] + +[[package]] +name = "platformdirs" +version = "4.3.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b6/2d/7d512a3913d60623e7eb945c6d1b4f0bddf1d0b7ada5225274c87e5b53d1/platformdirs-4.3.7.tar.gz", hash = "sha256:eb437d586b6a0986388f0d6f74aa0cde27b48d0e3d66843640bfb6bdcdb6e351", size = 21291 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/45/59578566b3275b8fd9157885918fcd0c4d74162928a5310926887b856a51/platformdirs-4.3.7-py3-none-any.whl", hash = "sha256:a03875334331946f13c549dbd8f4bac7a13a50a895a0eb1e8c6a8ace80d40a94", size = 18499 }, +] + +[[package]] +name = "pooch" +version = "1.8.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, + { name = "platformdirs" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c6/77/b3d3e00c696c16cf99af81ef7b1f5fe73bd2a307abca41bd7605429fe6e5/pooch-1.8.2.tar.gz", hash = "sha256:76561f0de68a01da4df6af38e9955c4c9d1a5c90da73f7e40276a5728ec83d10", size = 59353 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/87/77cc11c7a9ea9fd05503def69e3d18605852cd0d4b0d3b8f15bbeb3ef1d1/pooch-1.8.2-py3-none-any.whl", hash = "sha256:3529a57096f7198778a5ceefd5ac3ef0e4d06a6ddaf9fc2d609b806f25302c47", size = 64574 }, +] + +[[package]] +name = "proglog" +version = "0.1.11" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/db/3c/ac54757f074c9bb583cd9c5747b43e222ee79ac34a3e713fec37122a0fad/proglog-0.1.11.tar.gz", hash = "sha256:ce35a0f9d1153e69d0063cdae6e6f2d8708fa0a588fc4e089501b77005e72884", size = 9596 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/7a/dcb10ad171dbffb6dd2122672f69e5b34e9859d9bcc6e7119c3cb2986ca2/proglog-0.1.11-py3-none-any.whl", hash = "sha256:1729b829e1e609a3f340d6659fbde401cace9e2feab65647ceaf52ecfccf362d", size = 7772 }, +] + +[[package]] +name = "protobuf" +version = "6.30.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c8/8c/cf2ac658216eebe49eaedf1e06bc06cbf6a143469236294a1171a51357c3/protobuf-6.30.2.tar.gz", hash = "sha256:35c859ae076d8c56054c25b59e5e59638d86545ed6e2b6efac6be0b6ea3ba048", size = 429315 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/85/cd53abe6a6cbf2e0029243d6ae5fb4335da2996f6c177bb2ce685068e43d/protobuf-6.30.2-cp310-abi3-win32.whl", hash = "sha256:b12ef7df7b9329886e66404bef5e9ce6a26b54069d7f7436a0853ccdeb91c103", size = 419148 }, + { url = "https://files.pythonhosted.org/packages/97/e9/7b9f1b259d509aef2b833c29a1f3c39185e2bf21c9c1be1cd11c22cb2149/protobuf-6.30.2-cp310-abi3-win_amd64.whl", hash = "sha256:7653c99774f73fe6b9301b87da52af0e69783a2e371e8b599b3e9cb4da4b12b9", size = 431003 }, + { url = "https://files.pythonhosted.org/packages/8e/66/7f3b121f59097c93267e7f497f10e52ced7161b38295137a12a266b6c149/protobuf-6.30.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:0eb523c550a66a09a0c20f86dd554afbf4d32b02af34ae53d93268c1f73bc65b", size = 417579 }, + { url = "https://files.pythonhosted.org/packages/d0/89/bbb1bff09600e662ad5b384420ad92de61cab2ed0f12ace1fd081fd4c295/protobuf-6.30.2-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:50f32cc9fd9cb09c783ebc275611b4f19dfdfb68d1ee55d2f0c7fa040df96815", size = 317319 }, + { url = "https://files.pythonhosted.org/packages/28/50/1925de813499546bc8ab3ae857e3ec84efe7d2f19b34529d0c7c3d02d11d/protobuf-6.30.2-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:4f6c687ae8efae6cf6093389a596548214467778146b7245e886f35e1485315d", size = 316212 }, + { url = "https://files.pythonhosted.org/packages/e5/a1/93c2acf4ade3c5b557d02d500b06798f4ed2c176fa03e3c34973ca92df7f/protobuf-6.30.2-py3-none-any.whl", hash = "sha256:ae86b030e69a98e08c77beab574cbcb9fff6d031d57209f574a5aea1445f4b51", size = 167062 }, +] + [[package]] name = "psycopg2-binary" version = "2.9.10" @@ -85,6 +1174,90 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/08/50/d13ea0a054189ae1bc21af1d85b6f8bb9bbc5572991055d70ad9006fe2d6/psycopg2_binary-2.9.10-cp313-cp313-win_amd64.whl", hash = "sha256:27422aa5f11fbcd9b18da48373eb67081243662f9b46e6fd07c3eb46e4535142", size = 2569224 }, ] +[[package]] +name = "pycparser" +version = "2.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 }, +] + +[[package]] +name = "pycryptodome" +version = "3.22.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/44/e6/099310419df5ada522ff34ffc2f1a48a11b37fc6a76f51a6854c182dbd3e/pycryptodome-3.22.0.tar.gz", hash = "sha256:fd7ab568b3ad7b77c908d7c3f7e167ec5a8f035c64ff74f10d47a4edd043d723", size = 4917300 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1f/65/a05831c3e4bcd1bf6c2a034e399f74b3d6f30bb4e37e36b9c310c09dc8c0/pycryptodome-3.22.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:009e1c80eea42401a5bd5983c4bab8d516aef22e014a4705622e24e6d9d703c6", size = 2490637 }, + { url = "https://files.pythonhosted.org/packages/5c/76/ff3c2e7a60d17c080c4c6120ebaf60f38717cd387e77f84da4dcf7f64ff0/pycryptodome-3.22.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3b76fa80daeff9519d7e9f6d9e40708f2fce36b9295a847f00624a08293f4f00", size = 1635372 }, + { url = "https://files.pythonhosted.org/packages/cc/7f/cc5d6da0dbc36acd978d80a72b228e33aadaec9c4f91c93221166d8bdc05/pycryptodome-3.22.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a31fa5914b255ab62aac9265654292ce0404f6b66540a065f538466474baedbc", size = 2177456 }, + { url = "https://files.pythonhosted.org/packages/92/65/35f5063e68790602d892ad36e35ac723147232a9084d1999630045c34593/pycryptodome-3.22.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0092fd476701eeeb04df5cc509d8b739fa381583cda6a46ff0a60639b7cd70d", size = 2263744 }, + { url = "https://files.pythonhosted.org/packages/cc/67/46acdd35b1081c3dbc72dc466b1b95b80d2f64cad3520f994a9b6c5c7d00/pycryptodome-3.22.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18d5b0ddc7cf69231736d778bd3ae2b3efb681ae33b64b0c92fb4626bb48bb89", size = 2303356 }, + { url = "https://files.pythonhosted.org/packages/3d/f9/a4f8a83384626098e3f55664519bec113002b9ef751887086ae63a53135a/pycryptodome-3.22.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:f6cf6aa36fcf463e622d2165a5ad9963b2762bebae2f632d719dfb8544903cf5", size = 2176714 }, + { url = "https://files.pythonhosted.org/packages/88/65/e5f8c3a885f70a6e05c84844cd5542120576f4369158946e8cfc623a464d/pycryptodome-3.22.0-cp37-abi3-musllinux_1_2_i686.whl", hash = "sha256:aec7b40a7ea5af7c40f8837adf20a137d5e11a6eb202cde7e588a48fb2d871a8", size = 2337329 }, + { url = "https://files.pythonhosted.org/packages/b8/2a/25e0be2b509c28375c7f75c7e8d8d060773f2cce4856a1654276e3202339/pycryptodome-3.22.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d21c1eda2f42211f18a25db4eaf8056c94a8563cd39da3683f89fe0d881fb772", size = 2262255 }, + { url = "https://files.pythonhosted.org/packages/41/58/60917bc4bbd91712e53ce04daf237a74a0ad731383a01288130672994328/pycryptodome-3.22.0-cp37-abi3-win32.whl", hash = "sha256:f02baa9f5e35934c6e8dcec91fcde96612bdefef6e442813b8ea34e82c84bbfb", size = 1763403 }, + { url = "https://files.pythonhosted.org/packages/55/f4/244c621afcf7867e23f63cfd7a9630f14cfe946c9be7e566af6c3915bcde/pycryptodome-3.22.0-cp37-abi3-win_amd64.whl", hash = "sha256:d086aed307e96d40c23c42418cbbca22ecc0ab4a8a0e24f87932eeab26c08627", size = 1794568 }, +] + +[[package]] +name = "pydantic" +version = "2.11.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/10/2e/ca897f093ee6c5f3b0bee123ee4465c50e75431c3d5b6a3b44a47134e891/pydantic-2.11.3.tar.gz", hash = "sha256:7471657138c16adad9322fe3070c0116dd6c3ad8d649300e3cbdfe91f4db4ec3", size = 785513 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/1d/407b29780a289868ed696d1616f4aad49d6388e5a77f567dcd2629dcd7b8/pydantic-2.11.3-py3-none-any.whl", hash = "sha256:a082753436a07f9ba1289c6ffa01cd93db3548776088aa917cc43b63f68fa60f", size = 443591 }, +] + +[[package]] +name = "pydantic-core" +version = "2.33.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/17/19/ed6a078a5287aea7922de6841ef4c06157931622c89c2a47940837b5eecd/pydantic_core-2.33.1.tar.gz", hash = "sha256:bcc9c6fdb0ced789245b02b7d6603e17d1563064ddcfc36f046b61c0c05dd9df", size = 434395 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/ce/3cb22b07c29938f97ff5f5bb27521f95e2ebec399b882392deb68d6c440e/pydantic_core-2.33.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:1293d7febb995e9d3ec3ea09caf1a26214eec45b0f29f6074abb004723fc1de8", size = 2026640 }, + { url = "https://files.pythonhosted.org/packages/19/78/f381d643b12378fee782a72126ec5d793081ef03791c28a0fd542a5bee64/pydantic_core-2.33.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:99b56acd433386c8f20be5c4000786d1e7ca0523c8eefc995d14d79c7a081498", size = 1852649 }, + { url = "https://files.pythonhosted.org/packages/9d/2b/98a37b80b15aac9eb2c6cfc6dbd35e5058a352891c5cce3a8472d77665a6/pydantic_core-2.33.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35a5ec3fa8c2fe6c53e1b2ccc2454398f95d5393ab398478f53e1afbbeb4d939", size = 1892472 }, + { url = "https://files.pythonhosted.org/packages/4e/d4/3c59514e0f55a161004792b9ff3039da52448f43f5834f905abef9db6e4a/pydantic_core-2.33.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b172f7b9d2f3abc0efd12e3386f7e48b576ef309544ac3a63e5e9cdd2e24585d", size = 1977509 }, + { url = "https://files.pythonhosted.org/packages/a9/b6/c2c7946ef70576f79a25db59a576bce088bdc5952d1b93c9789b091df716/pydantic_core-2.33.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9097b9f17f91eea659b9ec58148c0747ec354a42f7389b9d50701610d86f812e", size = 2128702 }, + { url = "https://files.pythonhosted.org/packages/88/fe/65a880f81e3f2a974312b61f82a03d85528f89a010ce21ad92f109d94deb/pydantic_core-2.33.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc77ec5b7e2118b152b0d886c7514a4653bcb58c6b1d760134a9fab915f777b3", size = 2679428 }, + { url = "https://files.pythonhosted.org/packages/6f/ff/4459e4146afd0462fb483bb98aa2436d69c484737feaceba1341615fb0ac/pydantic_core-2.33.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3d15245b08fa4a84cefc6c9222e6f37c98111c8679fbd94aa145f9a0ae23d", size = 2008753 }, + { url = "https://files.pythonhosted.org/packages/7c/76/1c42e384e8d78452ededac8b583fe2550c84abfef83a0552e0e7478ccbc3/pydantic_core-2.33.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ef99779001d7ac2e2461d8ab55d3373fe7315caefdbecd8ced75304ae5a6fc6b", size = 2114849 }, + { url = "https://files.pythonhosted.org/packages/00/72/7d0cf05095c15f7ffe0eb78914b166d591c0eed72f294da68378da205101/pydantic_core-2.33.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:fc6bf8869e193855e8d91d91f6bf59699a5cdfaa47a404e278e776dd7f168b39", size = 2069541 }, + { url = "https://files.pythonhosted.org/packages/b3/69/94a514066bb7d8be499aa764926937409d2389c09be0b5107a970286ef81/pydantic_core-2.33.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:b1caa0bc2741b043db7823843e1bde8aaa58a55a58fda06083b0569f8b45693a", size = 2239225 }, + { url = "https://files.pythonhosted.org/packages/84/b0/e390071eadb44b41f4f54c3cef64d8bf5f9612c92686c9299eaa09e267e2/pydantic_core-2.33.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ec259f62538e8bf364903a7d0d0239447059f9434b284f5536e8402b7dd198db", size = 2248373 }, + { url = "https://files.pythonhosted.org/packages/d6/b2/288b3579ffc07e92af66e2f1a11be3b056fe1214aab314748461f21a31c3/pydantic_core-2.33.1-cp312-cp312-win32.whl", hash = "sha256:e14f369c98a7c15772b9da98987f58e2b509a93235582838bd0d1d8c08b68fda", size = 1907034 }, + { url = "https://files.pythonhosted.org/packages/02/28/58442ad1c22b5b6742b992ba9518420235adced665513868f99a1c2638a5/pydantic_core-2.33.1-cp312-cp312-win_amd64.whl", hash = "sha256:1c607801d85e2e123357b3893f82c97a42856192997b95b4d8325deb1cd0c5f4", size = 1956848 }, + { url = "https://files.pythonhosted.org/packages/a1/eb/f54809b51c7e2a1d9f439f158b8dd94359321abcc98767e16fc48ae5a77e/pydantic_core-2.33.1-cp312-cp312-win_arm64.whl", hash = "sha256:8d13f0276806ee722e70a1c93da19748594f19ac4299c7e41237fc791d1861ea", size = 1903986 }, + { url = "https://files.pythonhosted.org/packages/7a/24/eed3466a4308d79155f1cdd5c7432c80ddcc4530ba8623b79d5ced021641/pydantic_core-2.33.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:70af6a21237b53d1fe7b9325b20e65cbf2f0a848cf77bed492b029139701e66a", size = 2033551 }, + { url = "https://files.pythonhosted.org/packages/ab/14/df54b1a0bc9b6ded9b758b73139d2c11b4e8eb43e8ab9c5847c0a2913ada/pydantic_core-2.33.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:282b3fe1bbbe5ae35224a0dbd05aed9ccabccd241e8e6b60370484234b456266", size = 1852785 }, + { url = "https://files.pythonhosted.org/packages/fa/96/e275f15ff3d34bb04b0125d9bc8848bf69f25d784d92a63676112451bfb9/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b315e596282bbb5822d0c7ee9d255595bd7506d1cb20c2911a4da0b970187d3", size = 1897758 }, + { url = "https://files.pythonhosted.org/packages/b7/d8/96bc536e975b69e3a924b507d2a19aedbf50b24e08c80fb00e35f9baaed8/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1dfae24cf9921875ca0ca6a8ecb4bb2f13c855794ed0d468d6abbec6e6dcd44a", size = 1986109 }, + { url = "https://files.pythonhosted.org/packages/90/72/ab58e43ce7e900b88cb571ed057b2fcd0e95b708a2e0bed475b10130393e/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6dd8ecfde08d8bfadaea669e83c63939af76f4cf5538a72597016edfa3fad516", size = 2129159 }, + { url = "https://files.pythonhosted.org/packages/dc/3f/52d85781406886c6870ac995ec0ba7ccc028b530b0798c9080531b409fdb/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2f593494876eae852dc98c43c6f260f45abdbfeec9e4324e31a481d948214764", size = 2680222 }, + { url = "https://files.pythonhosted.org/packages/f4/56/6e2ef42f363a0eec0fd92f74a91e0ac48cd2e49b695aac1509ad81eee86a/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:948b73114f47fd7016088e5186d13faf5e1b2fe83f5e320e371f035557fd264d", size = 2006980 }, + { url = "https://files.pythonhosted.org/packages/4c/c0/604536c4379cc78359f9ee0aa319f4aedf6b652ec2854953f5a14fc38c5a/pydantic_core-2.33.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e11f3864eb516af21b01e25fac915a82e9ddad3bb0fb9e95a246067398b435a4", size = 2120840 }, + { url = "https://files.pythonhosted.org/packages/1f/46/9eb764814f508f0edfb291a0f75d10854d78113fa13900ce13729aaec3ae/pydantic_core-2.33.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:549150be302428b56fdad0c23c2741dcdb5572413776826c965619a25d9c6bde", size = 2072518 }, + { url = "https://files.pythonhosted.org/packages/42/e3/fb6b2a732b82d1666fa6bf53e3627867ea3131c5f39f98ce92141e3e3dc1/pydantic_core-2.33.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:495bc156026efafd9ef2d82372bd38afce78ddd82bf28ef5276c469e57c0c83e", size = 2248025 }, + { url = "https://files.pythonhosted.org/packages/5c/9d/fbe8fe9d1aa4dac88723f10a921bc7418bd3378a567cb5e21193a3c48b43/pydantic_core-2.33.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ec79de2a8680b1a67a07490bddf9636d5c2fab609ba8c57597e855fa5fa4dacd", size = 2254991 }, + { url = "https://files.pythonhosted.org/packages/aa/99/07e2237b8a66438d9b26482332cda99a9acccb58d284af7bc7c946a42fd3/pydantic_core-2.33.1-cp313-cp313-win32.whl", hash = "sha256:ee12a7be1742f81b8a65b36c6921022301d466b82d80315d215c4c691724986f", size = 1915262 }, + { url = "https://files.pythonhosted.org/packages/8a/f4/e457a7849beeed1e5defbcf5051c6f7b3c91a0624dd31543a64fc9adcf52/pydantic_core-2.33.1-cp313-cp313-win_amd64.whl", hash = "sha256:ede9b407e39949d2afc46385ce6bd6e11588660c26f80576c11c958e6647bc40", size = 1956626 }, + { url = "https://files.pythonhosted.org/packages/20/d0/e8d567a7cff7b04e017ae164d98011f1e1894269fe8e90ea187a3cbfb562/pydantic_core-2.33.1-cp313-cp313-win_arm64.whl", hash = "sha256:aa687a23d4b7871a00e03ca96a09cad0f28f443690d300500603bd0adba4b523", size = 1909590 }, + { url = "https://files.pythonhosted.org/packages/ef/fd/24ea4302d7a527d672c5be06e17df16aabfb4e9fdc6e0b345c21580f3d2a/pydantic_core-2.33.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:401d7b76e1000d0dd5538e6381d28febdcacb097c8d340dde7d7fc6e13e9f95d", size = 1812963 }, + { url = "https://files.pythonhosted.org/packages/5f/95/4fbc2ecdeb5c1c53f1175a32d870250194eb2fdf6291b795ab08c8646d5d/pydantic_core-2.33.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7aeb055a42d734c0255c9e489ac67e75397d59c6fbe60d155851e9782f276a9c", size = 1986896 }, + { url = "https://files.pythonhosted.org/packages/71/ae/fe31e7f4a62431222d8f65a3bd02e3fa7e6026d154a00818e6d30520ea77/pydantic_core-2.33.1-cp313-cp313t-win_amd64.whl", hash = "sha256:338ea9b73e6e109f15ab439e62cb3b78aa752c7fd9536794112e14bee02c8d18", size = 1931810 }, +] + [[package]] name = "pydub" version = "0.25.1" @@ -94,6 +1267,108 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a6/53/d78dc063216e62fc55f6b2eebb447f6a4b0a59f55c8406376f76bf959b08/pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6", size = 32327 }, ] +[[package]] +name = "pygments" +version = "2.19.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 }, +] + +[[package]] +name = "pynndescent" +version = "0.5.13" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "joblib" }, + { name = "llvmlite" }, + { name = "numba" }, + { name = "scikit-learn" }, + { name = "scipy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7e/58/560a4db5eb3794d922fe55804b10326534ded3d971e1933c1eef91193f5e/pynndescent-0.5.13.tar.gz", hash = "sha256:d74254c0ee0a1eeec84597d5fe89fedcf778593eeabe32c2f97412934a9800fb", size = 2975955 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/53/d23a97e0a2c690d40b165d1062e2c4ccc796be458a1ce59f6ba030434663/pynndescent-0.5.13-py3-none-any.whl", hash = "sha256:69aabb8f394bc631b6ac475a1c7f3994c54adf3f51cd63b2730fefba5771b949", size = 56850 }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, +] + +[[package]] +name = "python-dotenv" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/88/2c/7bb1416c5620485aa793f2de31d3df393d3686aa8a8506d11e10e13c5baf/python_dotenv-1.1.0.tar.gz", hash = "sha256:41f90bc6f5f177fb41f53e87666db362025010eb28f60a01c9143bfa33a2b2d5", size = 39920 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/18/98a99ad95133c6a6e2005fe89faedf294a748bd5dc803008059409ac9b1e/python_dotenv-1.1.0-py3-none-any.whl", hash = "sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d", size = 20256 }, +] + +[[package]] +name = "python-multipart" +version = "0.0.20" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/87/f44d7c9f274c7ee665a29b885ec97089ec5dc034c7f3fafa03da9e39a09e/python_multipart-0.0.20.tar.gz", hash = "sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13", size = 37158 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/58/38b5afbc1a800eeea951b9285d3912613f2603bdf897a4ab0f4bd7f405fc/python_multipart-0.0.20-py3-none-any.whl", hash = "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104", size = 24546 }, +] + +[[package]] +name = "pytorch-wpe" +version = "0.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/db/39/8d94737fd6fab4028687575099566a125100f3ba8c638f861506747d7b7c/pytorch_wpe-0.0.1.tar.gz", hash = "sha256:fc7e706b5411800c4483fe94db7dcd82ecf6c57bc013af529ab4fb675c9cc29c", size = 4457 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/de/c47967a11bfe68cb28d2f19e55c7027993c3721eba79813db65d245e4ced/pytorch_wpe-0.0.1-py3-none-any.whl", hash = "sha256:fa0dc9f818fba81b36c1a51a53331cf6ed975f29b33f23e07b0deb4bee82eaad", size = 8080 }, +] + +[[package]] +name = "pytz" +version = "2025.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225 }, +] + +[[package]] +name = "pyyaml" +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873 }, + { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302 }, + { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154 }, + { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223 }, + { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542 }, + { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164 }, + { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 }, + { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 }, + { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 }, + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, +] + [[package]] name = "requests" version = "2.32.3" @@ -109,28 +1384,528 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 }, ] +[[package]] +name = "rich" +version = "14.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/53/830aa4c3066a8ab0ae9a9955976fb770fe9c6102117c8ec4ab3ea62d89e8/rich-14.0.0.tar.gz", hash = "sha256:82f1bc23a6a21ebca4ae0c45af9bdbc492ed20231dcb63f297d6d1021a9d5725", size = 224078 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/9b/63f4c7ebc259242c89b3acafdb37b41d1185c07ff0011164674e9076b491/rich-14.0.0-py3-none-any.whl", hash = "sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0", size = 243229 }, +] + +[[package]] +name = "ruff" +version = "0.11.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/45/71/5759b2a6b2279bb77fe15b1435b89473631c2cd6374d45ccdb6b785810be/ruff-0.11.5.tar.gz", hash = "sha256:cae2e2439cb88853e421901ec040a758960b576126dab520fa08e9de431d1bef", size = 3976488 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/db/6efda6381778eec7f35875b5cbefd194904832a1153d68d36d6b269d81a8/ruff-0.11.5-py3-none-linux_armv6l.whl", hash = "sha256:2561294e108eb648e50f210671cc56aee590fb6167b594144401532138c66c7b", size = 10103150 }, + { url = "https://files.pythonhosted.org/packages/44/f2/06cd9006077a8db61956768bc200a8e52515bf33a8f9b671ee527bb10d77/ruff-0.11.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ac12884b9e005c12d0bd121f56ccf8033e1614f736f766c118ad60780882a077", size = 10898637 }, + { url = "https://files.pythonhosted.org/packages/18/f5/af390a013c56022fe6f72b95c86eb7b2585c89cc25d63882d3bfe411ecf1/ruff-0.11.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:4bfd80a6ec559a5eeb96c33f832418bf0fb96752de0539905cf7b0cc1d31d779", size = 10236012 }, + { url = "https://files.pythonhosted.org/packages/b8/ca/b9bf954cfed165e1a0c24b86305d5c8ea75def256707f2448439ac5e0d8b/ruff-0.11.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0947c0a1afa75dcb5db4b34b070ec2bccee869d40e6cc8ab25aca11a7d527794", size = 10415338 }, + { url = "https://files.pythonhosted.org/packages/d9/4d/2522dde4e790f1b59885283f8786ab0046958dfd39959c81acc75d347467/ruff-0.11.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ad871ff74b5ec9caa66cb725b85d4ef89b53f8170f47c3406e32ef040400b038", size = 9965277 }, + { url = "https://files.pythonhosted.org/packages/e5/7a/749f56f150eef71ce2f626a2f6988446c620af2f9ba2a7804295ca450397/ruff-0.11.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e6cf918390cfe46d240732d4d72fa6e18e528ca1f60e318a10835cf2fa3dc19f", size = 11541614 }, + { url = "https://files.pythonhosted.org/packages/89/b2/7d9b8435222485b6aac627d9c29793ba89be40b5de11584ca604b829e960/ruff-0.11.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:56145ee1478582f61c08f21076dc59153310d606ad663acc00ea3ab5b2125f82", size = 12198873 }, + { url = "https://files.pythonhosted.org/packages/00/e0/a1a69ef5ffb5c5f9c31554b27e030a9c468fc6f57055886d27d316dfbabd/ruff-0.11.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e5f66f8f1e8c9fc594cbd66fbc5f246a8d91f916cb9667e80208663ec3728304", size = 11670190 }, + { url = "https://files.pythonhosted.org/packages/05/61/c1c16df6e92975072c07f8b20dad35cd858e8462b8865bc856fe5d6ccb63/ruff-0.11.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80b4df4d335a80315ab9afc81ed1cff62be112bd165e162b5eed8ac55bfc8470", size = 13902301 }, + { url = "https://files.pythonhosted.org/packages/79/89/0af10c8af4363304fd8cb833bd407a2850c760b71edf742c18d5a87bb3ad/ruff-0.11.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3068befab73620b8a0cc2431bd46b3cd619bc17d6f7695a3e1bb166b652c382a", size = 11350132 }, + { url = "https://files.pythonhosted.org/packages/b9/e1/ecb4c687cbf15164dd00e38cf62cbab238cad05dd8b6b0fc68b0c2785e15/ruff-0.11.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:f5da2e710a9641828e09aa98b92c9ebbc60518fdf3921241326ca3e8f8e55b8b", size = 10312937 }, + { url = "https://files.pythonhosted.org/packages/cf/4f/0e53fe5e500b65934500949361e3cd290c5ba60f0324ed59d15f46479c06/ruff-0.11.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:ef39f19cb8ec98cbc762344921e216f3857a06c47412030374fffd413fb8fd3a", size = 9936683 }, + { url = "https://files.pythonhosted.org/packages/04/a8/8183c4da6d35794ae7f76f96261ef5960853cd3f899c2671961f97a27d8e/ruff-0.11.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:b2a7cedf47244f431fd11aa5a7e2806dda2e0c365873bda7834e8f7d785ae159", size = 10950217 }, + { url = "https://files.pythonhosted.org/packages/26/88/9b85a5a8af21e46a0639b107fcf9bfc31da4f1d263f2fc7fbe7199b47f0a/ruff-0.11.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:81be52e7519f3d1a0beadcf8e974715b2dfc808ae8ec729ecfc79bddf8dbb783", size = 11404521 }, + { url = "https://files.pythonhosted.org/packages/fc/52/047f35d3b20fd1ae9ccfe28791ef0f3ca0ef0b3e6c1a58badd97d450131b/ruff-0.11.5-py3-none-win32.whl", hash = "sha256:e268da7b40f56e3eca571508a7e567e794f9bfcc0f412c4b607931d3af9c4afe", size = 10320697 }, + { url = "https://files.pythonhosted.org/packages/b9/fe/00c78010e3332a6e92762424cf4c1919065707e962232797d0b57fd8267e/ruff-0.11.5-py3-none-win_amd64.whl", hash = "sha256:6c6dc38af3cfe2863213ea25b6dc616d679205732dc0fb673356c2d69608f800", size = 11378665 }, + { url = "https://files.pythonhosted.org/packages/43/7c/c83fe5cbb70ff017612ff36654edfebec4b1ef79b558b8e5fd933bab836b/ruff-0.11.5-py3-none-win_arm64.whl", hash = "sha256:67e241b4314f4eacf14a601d586026a962f4002a475aa702c69980a38087aa4e", size = 10460287 }, +] + +[[package]] +name = "safehttpx" +version = "0.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "httpx" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/67/4c/19db75e6405692b2a96af8f06d1258f8aa7290bdc35ac966f03e207f6d7f/safehttpx-0.1.6.tar.gz", hash = "sha256:b356bfc82cee3a24c395b94a2dbeabbed60aff1aa5fa3b5fe97c4f2456ebce42", size = 9987 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4d/c0/1108ad9f01567f66b3154063605b350b69c3c9366732e09e45f9fd0d1deb/safehttpx-0.1.6-py3-none-any.whl", hash = "sha256:407cff0b410b071623087c63dd2080c3b44dc076888d8c5823c00d1e58cb381c", size = 8692 }, +] + +[[package]] +name = "scikit-learn" +version = "1.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "joblib" }, + { name = "numpy" }, + { name = "scipy" }, + { name = "threadpoolctl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9e/a5/4ae3b3a0755f7b35a280ac90b28817d1f380318973cff14075ab41ef50d9/scikit_learn-1.6.1.tar.gz", hash = "sha256:b4fc2525eca2c69a59260f583c56a7557c6ccdf8deafdba6e060f94c1c59738e", size = 7068312 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0a/18/c797c9b8c10380d05616db3bfb48e2a3358c767affd0857d56c2eb501caa/scikit_learn-1.6.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:926f207c804104677af4857b2c609940b743d04c4c35ce0ddc8ff4f053cddc1b", size = 12104516 }, + { url = "https://files.pythonhosted.org/packages/c4/b7/2e35f8e289ab70108f8cbb2e7a2208f0575dc704749721286519dcf35f6f/scikit_learn-1.6.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2c2cae262064e6a9b77eee1c8e768fc46aa0b8338c6a8297b9b6759720ec0ff2", size = 11167837 }, + { url = "https://files.pythonhosted.org/packages/a4/f6/ff7beaeb644bcad72bcfd5a03ff36d32ee4e53a8b29a639f11bcb65d06cd/scikit_learn-1.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1061b7c028a8663fb9a1a1baf9317b64a257fcb036dae5c8752b2abef31d136f", size = 12253728 }, + { url = "https://files.pythonhosted.org/packages/29/7a/8bce8968883e9465de20be15542f4c7e221952441727c4dad24d534c6d99/scikit_learn-1.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e69fab4ebfc9c9b580a7a80111b43d214ab06250f8a7ef590a4edf72464dd86", size = 13147700 }, + { url = "https://files.pythonhosted.org/packages/62/27/585859e72e117fe861c2079bcba35591a84f801e21bc1ab85bce6ce60305/scikit_learn-1.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:70b1d7e85b1c96383f872a519b3375f92f14731e279a7b4c6cfd650cf5dffc52", size = 11110613 }, + { url = "https://files.pythonhosted.org/packages/2e/59/8eb1872ca87009bdcdb7f3cdc679ad557b992c12f4b61f9250659e592c63/scikit_learn-1.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2ffa1e9e25b3d93990e74a4be2c2fc61ee5af85811562f1288d5d055880c4322", size = 12010001 }, + { url = "https://files.pythonhosted.org/packages/9d/05/f2fc4effc5b32e525408524c982c468c29d22f828834f0625c5ef3d601be/scikit_learn-1.6.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:dc5cf3d68c5a20ad6d571584c0750ec641cc46aeef1c1507be51300e6003a7e1", size = 11096360 }, + { url = "https://files.pythonhosted.org/packages/c8/e4/4195d52cf4f113573fb8ebc44ed5a81bd511a92c0228889125fac2f4c3d1/scikit_learn-1.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c06beb2e839ecc641366000ca84f3cf6fa9faa1777e29cf0c04be6e4d096a348", size = 12209004 }, + { url = "https://files.pythonhosted.org/packages/94/be/47e16cdd1e7fcf97d95b3cb08bde1abb13e627861af427a3651fcb80b517/scikit_learn-1.6.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8ca8cb270fee8f1f76fa9bfd5c3507d60c6438bbee5687f81042e2bb98e5a97", size = 13171776 }, + { url = "https://files.pythonhosted.org/packages/34/b0/ca92b90859070a1487827dbc672f998da95ce83edce1270fc23f96f1f61a/scikit_learn-1.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:7a1c43c8ec9fde528d664d947dc4c0789be4077a3647f232869f41d9bf50e0fb", size = 11071865 }, + { url = "https://files.pythonhosted.org/packages/12/ae/993b0fb24a356e71e9a894e42b8a9eec528d4c70217353a1cd7a48bc25d4/scikit_learn-1.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a17c1dea1d56dcda2fac315712f3651a1fea86565b64b48fa1bc090249cbf236", size = 11955804 }, + { url = "https://files.pythonhosted.org/packages/d6/54/32fa2ee591af44507eac86406fa6bba968d1eb22831494470d0a2e4a1eb1/scikit_learn-1.6.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6a7aa5f9908f0f28f4edaa6963c0a6183f1911e63a69aa03782f0d924c830a35", size = 11100530 }, + { url = "https://files.pythonhosted.org/packages/3f/58/55856da1adec655bdce77b502e94a267bf40a8c0b89f8622837f89503b5a/scikit_learn-1.6.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0650e730afb87402baa88afbf31c07b84c98272622aaba002559b614600ca691", size = 12433852 }, + { url = "https://files.pythonhosted.org/packages/ff/4f/c83853af13901a574f8f13b645467285a48940f185b690936bb700a50863/scikit_learn-1.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:3f59fe08dc03ea158605170eb52b22a105f238a5d512c4470ddeca71feae8e5f", size = 11337256 }, +] + +[[package]] +name = "scipy" +version = "1.15.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b7/b9/31ba9cd990e626574baf93fbc1ac61cf9ed54faafd04c479117517661637/scipy-1.15.2.tar.gz", hash = "sha256:cd58a314d92838f7e6f755c8a2167ead4f27e1fd5c1251fd54289569ef3495ec", size = 59417316 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/5d/3c78815cbab499610f26b5bae6aed33e227225a9fa5290008a733a64f6fc/scipy-1.15.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c4697a10da8f8765bb7c83e24a470da5797e37041edfd77fd95ba3811a47c4fd", size = 38756184 }, + { url = "https://files.pythonhosted.org/packages/37/20/3d04eb066b471b6e171827548b9ddb3c21c6bbea72a4d84fc5989933910b/scipy-1.15.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:869269b767d5ee7ea6991ed7e22b3ca1f22de73ab9a49c44bad338b725603301", size = 30163558 }, + { url = "https://files.pythonhosted.org/packages/a4/98/e5c964526c929ef1f795d4c343b2ff98634ad2051bd2bbadfef9e772e413/scipy-1.15.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:bad78d580270a4d32470563ea86c6590b465cb98f83d760ff5b0990cb5518a93", size = 22437211 }, + { url = "https://files.pythonhosted.org/packages/1d/cd/1dc7371e29195ecbf5222f9afeedb210e0a75057d8afbd942aa6cf8c8eca/scipy-1.15.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:b09ae80010f52efddb15551025f9016c910296cf70adbf03ce2a8704f3a5ad20", size = 25232260 }, + { url = "https://files.pythonhosted.org/packages/f0/24/1a181a9e5050090e0b5138c5f496fee33293c342b788d02586bc410c6477/scipy-1.15.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a6fd6eac1ce74a9f77a7fc724080d507c5812d61e72bd5e4c489b042455865e", size = 35198095 }, + { url = "https://files.pythonhosted.org/packages/c0/53/eaada1a414c026673eb983f8b4a55fe5eb172725d33d62c1b21f63ff6ca4/scipy-1.15.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b871df1fe1a3ba85d90e22742b93584f8d2b8e6124f8372ab15c71b73e428b8", size = 37297371 }, + { url = "https://files.pythonhosted.org/packages/e9/06/0449b744892ed22b7e7b9a1994a866e64895363572677a316a9042af1fe5/scipy-1.15.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:03205d57a28e18dfd39f0377d5002725bf1f19a46f444108c29bdb246b6c8a11", size = 36872390 }, + { url = "https://files.pythonhosted.org/packages/6a/6f/a8ac3cfd9505ec695c1bc35edc034d13afbd2fc1882a7c6b473e280397bb/scipy-1.15.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:601881dfb761311045b03114c5fe718a12634e5608c3b403737ae463c9885d53", size = 39700276 }, + { url = "https://files.pythonhosted.org/packages/f5/6f/e6e5aff77ea2a48dd96808bb51d7450875af154ee7cbe72188afb0b37929/scipy-1.15.2-cp312-cp312-win_amd64.whl", hash = "sha256:e7c68b6a43259ba0aab737237876e5c2c549a031ddb7abc28c7b47f22e202ded", size = 40942317 }, + { url = "https://files.pythonhosted.org/packages/53/40/09319f6e0f276ea2754196185f95cd191cb852288440ce035d5c3a931ea2/scipy-1.15.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01edfac9f0798ad6b46d9c4c9ca0e0ad23dbf0b1eb70e96adb9fa7f525eff0bf", size = 38717587 }, + { url = "https://files.pythonhosted.org/packages/fe/c3/2854f40ecd19585d65afaef601e5e1f8dbf6758b2f95b5ea93d38655a2c6/scipy-1.15.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:08b57a9336b8e79b305a143c3655cc5bdbe6d5ece3378578888d2afbb51c4e37", size = 30100266 }, + { url = "https://files.pythonhosted.org/packages/dd/b1/f9fe6e3c828cb5930b5fe74cb479de5f3d66d682fa8adb77249acaf545b8/scipy-1.15.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:54c462098484e7466362a9f1672d20888f724911a74c22ae35b61f9c5919183d", size = 22373768 }, + { url = "https://files.pythonhosted.org/packages/15/9d/a60db8c795700414c3f681908a2b911e031e024d93214f2d23c6dae174ab/scipy-1.15.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:cf72ff559a53a6a6d77bd8eefd12a17995ffa44ad86c77a5df96f533d4e6c6bb", size = 25154719 }, + { url = "https://files.pythonhosted.org/packages/37/3b/9bda92a85cd93f19f9ed90ade84aa1e51657e29988317fabdd44544f1dd4/scipy-1.15.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9de9d1416b3d9e7df9923ab23cd2fe714244af10b763975bea9e4f2e81cebd27", size = 35163195 }, + { url = "https://files.pythonhosted.org/packages/03/5a/fc34bf1aa14dc7c0e701691fa8685f3faec80e57d816615e3625f28feb43/scipy-1.15.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb530e4794fc8ea76a4a21ccb67dea33e5e0e60f07fc38a49e821e1eae3b71a0", size = 37255404 }, + { url = "https://files.pythonhosted.org/packages/4a/71/472eac45440cee134c8a180dbe4c01b3ec247e0338b7c759e6cd71f199a7/scipy-1.15.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5ea7ed46d437fc52350b028b1d44e002646e28f3e8ddc714011aaf87330f2f32", size = 36860011 }, + { url = "https://files.pythonhosted.org/packages/01/b3/21f890f4f42daf20e4d3aaa18182dddb9192771cd47445aaae2e318f6738/scipy-1.15.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:11e7ad32cf184b74380f43d3c0a706f49358b904fa7d5345f16ddf993609184d", size = 39657406 }, + { url = "https://files.pythonhosted.org/packages/0d/76/77cf2ac1f2a9cc00c073d49e1e16244e389dd88e2490c91d84e1e3e4d126/scipy-1.15.2-cp313-cp313-win_amd64.whl", hash = "sha256:a5080a79dfb9b78b768cebf3c9dcbc7b665c5875793569f48bf0e2b1d7f68f6f", size = 40961243 }, + { url = "https://files.pythonhosted.org/packages/4c/4b/a57f8ddcf48e129e6054fa9899a2a86d1fc6b07a0e15c7eebff7ca94533f/scipy-1.15.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:447ce30cee6a9d5d1379087c9e474628dab3db4a67484be1b7dc3196bfb2fac9", size = 38870286 }, + { url = "https://files.pythonhosted.org/packages/0c/43/c304d69a56c91ad5f188c0714f6a97b9c1fed93128c691148621274a3a68/scipy-1.15.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:c90ebe8aaa4397eaefa8455a8182b164a6cc1d59ad53f79943f266d99f68687f", size = 30141634 }, + { url = "https://files.pythonhosted.org/packages/44/1a/6c21b45d2548eb73be9b9bff421aaaa7e85e22c1f9b3bc44b23485dfce0a/scipy-1.15.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:def751dd08243934c884a3221156d63e15234a3155cf25978b0a668409d45eb6", size = 22415179 }, + { url = "https://files.pythonhosted.org/packages/74/4b/aefac4bba80ef815b64f55da06f62f92be5d03b467f2ce3668071799429a/scipy-1.15.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:302093e7dfb120e55515936cb55618ee0b895f8bcaf18ff81eca086c17bd80af", size = 25126412 }, + { url = "https://files.pythonhosted.org/packages/b1/53/1cbb148e6e8f1660aacd9f0a9dfa2b05e9ff1cb54b4386fe868477972ac2/scipy-1.15.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cd5b77413e1855351cdde594eca99c1f4a588c2d63711388b6a1f1c01f62274", size = 34952867 }, + { url = "https://files.pythonhosted.org/packages/2c/23/e0eb7f31a9c13cf2dca083828b97992dd22f8184c6ce4fec5deec0c81fcf/scipy-1.15.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d0194c37037707b2afa7a2f2a924cf7bac3dc292d51b6a925e5fcb89bc5c776", size = 36890009 }, + { url = "https://files.pythonhosted.org/packages/03/f3/e699e19cabe96bbac5189c04aaa970718f0105cff03d458dc5e2b6bd1e8c/scipy-1.15.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:bae43364d600fdc3ac327db99659dcb79e6e7ecd279a75fe1266669d9a652828", size = 36545159 }, + { url = "https://files.pythonhosted.org/packages/af/f5/ab3838e56fe5cc22383d6fcf2336e48c8fe33e944b9037fbf6cbdf5a11f8/scipy-1.15.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f031846580d9acccd0044efd1a90e6f4df3a6e12b4b6bd694a7bc03a89892b28", size = 39136566 }, + { url = "https://files.pythonhosted.org/packages/0a/c8/b3f566db71461cabd4b2d5b39bcc24a7e1c119535c8361f81426be39bb47/scipy-1.15.2-cp313-cp313t-win_amd64.whl", hash = "sha256:fe8a9eb875d430d81755472c5ba75e84acc980e4a8f6204d402849234d3017db", size = 40477705 }, +] + +[[package]] +name = "semantic-version" +version = "2.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/31/f2289ce78b9b473d582568c234e104d2a342fd658cc288a7553d83bb8595/semantic_version-2.10.0.tar.gz", hash = "sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c", size = 52289 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/23/8146aad7d88f4fcb3a6218f41a60f6c2d4e3a72de72da1825dc7c8f7877c/semantic_version-2.10.0-py2.py3-none-any.whl", hash = "sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177", size = 15552 }, +] + +[[package]] +name = "sentencepiece" +version = "0.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/d2/b9c7ca067c26d8ff085d252c89b5f69609ca93fb85a00ede95f4857865d4/sentencepiece-0.2.0.tar.gz", hash = "sha256:a52c19171daaf2e697dc6cbe67684e0fa341b1248966f6aebb541de654d15843", size = 2632106 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/5a/141b227ed54293360a9ffbb7bf8252b4e5efc0400cdeac5809340e5d2b21/sentencepiece-0.2.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ea5f536e32ea8ec96086ee00d7a4a131ce583a1b18d130711707c10e69601cb2", size = 2409370 }, + { url = "https://files.pythonhosted.org/packages/2e/08/a4c135ad6fc2ce26798d14ab72790d66e813efc9589fd30a5316a88ca8d5/sentencepiece-0.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d0cb51f53b6aae3c36bafe41e86167c71af8370a039f542c43b0cce5ef24a68c", size = 1239288 }, + { url = "https://files.pythonhosted.org/packages/49/0a/2fe387f825ac5aad5a0bfe221904882106cac58e1b693ba7818785a882b6/sentencepiece-0.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3212121805afc58d8b00ab4e7dd1f8f76c203ddb9dc94aa4079618a31cf5da0f", size = 1181597 }, + { url = "https://files.pythonhosted.org/packages/cc/38/e4698ee2293fe4835dc033c49796a39b3eebd8752098f6bd0aa53a14af1f/sentencepiece-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a3149e3066c2a75e0d68a43eb632d7ae728c7925b517f4c05c40f6f7280ce08", size = 1259220 }, + { url = "https://files.pythonhosted.org/packages/12/24/fd7ef967c9dad2f6e6e5386d0cadaf65cda8b7be6e3861a9ab3121035139/sentencepiece-0.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:632f3594d3e7ac8b367bca204cb3fd05a01d5b21455acd097ea4c0e30e2f63d7", size = 1355962 }, + { url = "https://files.pythonhosted.org/packages/4f/d2/18246f43ca730bb81918f87b7e886531eda32d835811ad9f4657c54eee35/sentencepiece-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f295105c6bdbb05bd5e1b0cafbd78ff95036f5d3641e7949455a3f4e5e7c3109", size = 1301706 }, + { url = "https://files.pythonhosted.org/packages/8a/47/ca237b562f420044ab56ddb4c278672f7e8c866e183730a20e413b38a989/sentencepiece-0.2.0-cp312-cp312-win32.whl", hash = "sha256:fb89f811e5efd18bab141afc3fea3de141c3f69f3fe9e898f710ae7fe3aab251", size = 936941 }, + { url = "https://files.pythonhosted.org/packages/c6/97/d159c32642306ee2b70732077632895438867b3b6df282354bd550cf2a67/sentencepiece-0.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:7a673a72aab81fef5ebe755c6e0cc60087d1f3a4700835d40537183c1703a45f", size = 991994 }, +] + +[[package]] +name = "shellingham" +version = "1.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755 }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235 }, +] + [[package]] name = "songyi" version = "0.1.0" source = { virtual = "." } dependencies = [ + { name = "fastapi" }, + { name = "funasr" }, + { name = "gradio" }, + { name = "gradio-client" }, + { name = "huggingface" }, + { name = "huggingface-hub" }, + { name = "modelscope" }, + { name = "moviepy" }, + { name = "numpy" }, { name = "psycopg2-binary" }, { name = "pydub" }, { name = "requests" }, + { name = "torch" }, + { name = "torchaudio" }, ] [package.metadata] requires-dist = [ - { name = "psycopg2-binary", specifier = "==2.9.10" }, - { name = "pydub", specifier = "==0.25.1" }, + { name = "fastapi", specifier = ">=0.111.1" }, + { name = "funasr", specifier = ">=1.1.3" }, + { name = "gradio" }, + { name = "gradio-client", specifier = "~=1.8.0" }, + { name = "huggingface" }, + { name = "huggingface-hub" }, + { name = "modelscope" }, + { name = "moviepy", specifier = ">=2.1.2" }, + { name = "numpy", specifier = "<=1.26.4" }, + { name = "psycopg2-binary", specifier = "~=2.9.10" }, + { name = "pydub", specifier = "~=0.25.1" }, { name = "requests", specifier = "~=2.32.3" }, + { name = "torch", specifier = "<=2.3" }, + { name = "torchaudio" }, +] + +[[package]] +name = "soundfile" +version = "0.13.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e1/41/9b873a8c055582859b239be17902a85339bec6a30ad162f98c9b0288a2cc/soundfile-0.13.1.tar.gz", hash = "sha256:b2c68dab1e30297317080a5b43df57e302584c49e2942defdde0acccc53f0e5b", size = 46156 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/28/e2a36573ccbcf3d57c00626a21fe51989380636e821b341d36ccca0c1c3a/soundfile-0.13.1-py2.py3-none-any.whl", hash = "sha256:a23c717560da2cf4c7b5ae1142514e0fd82d6bbd9dfc93a50423447142f2c445", size = 25751 }, + { url = "https://files.pythonhosted.org/packages/ea/ab/73e97a5b3cc46bba7ff8650a1504348fa1863a6f9d57d7001c6b67c5f20e/soundfile-0.13.1-py2.py3-none-macosx_10_9_x86_64.whl", hash = "sha256:82dc664d19831933fe59adad199bf3945ad06d84bc111a5b4c0d3089a5b9ec33", size = 1142250 }, + { url = "https://files.pythonhosted.org/packages/a0/e5/58fd1a8d7b26fc113af244f966ee3aecf03cb9293cb935daaddc1e455e18/soundfile-0.13.1-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:743f12c12c4054921e15736c6be09ac26b3b3d603aef6fd69f9dde68748f2593", size = 1101406 }, + { url = "https://files.pythonhosted.org/packages/58/ae/c0e4a53d77cf6e9a04179535766b3321b0b9ced5f70522e4caf9329f0046/soundfile-0.13.1-py2.py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:9c9e855f5a4d06ce4213f31918653ab7de0c5a8d8107cd2427e44b42df547deb", size = 1235729 }, + { url = "https://files.pythonhosted.org/packages/57/5e/70bdd9579b35003a489fc850b5047beeda26328053ebadc1fb60f320f7db/soundfile-0.13.1-py2.py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:03267c4e493315294834a0870f31dbb3b28a95561b80b134f0bd3cf2d5f0e618", size = 1313646 }, + { url = "https://files.pythonhosted.org/packages/fe/df/8c11dc4dfceda14e3003bb81a0d0edcaaf0796dd7b4f826ea3e532146bba/soundfile-0.13.1-py2.py3-none-win32.whl", hash = "sha256:c734564fab7c5ddf8e9be5bf70bab68042cd17e9c214c06e365e20d64f9a69d5", size = 899881 }, + { url = "https://files.pythonhosted.org/packages/14/e9/6b761de83277f2f02ded7e7ea6f07828ec78e4b229b80e4ca55dd205b9dc/soundfile-0.13.1-py2.py3-none-win_amd64.whl", hash = "sha256:1e70a05a0626524a69e9f0f4dd2ec174b4e9567f4d8b6c11d38b5c289be36ee9", size = 1019162 }, +] + +[[package]] +name = "soxr" +version = "0.5.0.post1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/02/c0/4429bf9b3be10e749149e286aa5c53775399ec62891c6b970456c6dca325/soxr-0.5.0.post1.tar.gz", hash = "sha256:7092b9f3e8a416044e1fa138c8172520757179763b85dc53aa9504f4813cff73", size = 170853 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/e3/d422d279e51e6932e7b64f1170a4f61a7ee768e0f84c9233a5b62cd2c832/soxr-0.5.0.post1-cp312-abi3-macosx_10_14_x86_64.whl", hash = "sha256:fef509466c9c25f65eae0ce1e4b9ac9705d22c6038c914160ddaf459589c6e31", size = 199993 }, + { url = "https://files.pythonhosted.org/packages/20/f1/88adaca3c52e03bcb66b63d295df2e2d35bf355d19598c6ce84b20be7fca/soxr-0.5.0.post1-cp312-abi3-macosx_11_0_arm64.whl", hash = "sha256:4704ba6b13a3f1e41d12acf192878384c1c31f71ce606829c64abdf64a8d7d32", size = 156373 }, + { url = "https://files.pythonhosted.org/packages/b8/38/bad15a9e615215c8219652ca554b601663ac3b7ac82a284aca53ec2ff48c/soxr-0.5.0.post1-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd052a66471a7335b22a6208601a9d0df7b46b8d087dce4ff6e13eed6a33a2a1", size = 216564 }, + { url = "https://files.pythonhosted.org/packages/e1/1a/569ea0420a0c4801c2c8dd40d8d544989522f6014d51def689125f3f2935/soxr-0.5.0.post1-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3f16810dd649ab1f433991d2a9661e9e6a116c2b4101039b53b3c3e90a094fc", size = 248455 }, + { url = "https://files.pythonhosted.org/packages/bc/10/440f1ba3d4955e0dc740bbe4ce8968c254a3d644d013eb75eea729becdb8/soxr-0.5.0.post1-cp312-abi3-win_amd64.whl", hash = "sha256:b1be9fee90afb38546bdbd7bde714d1d9a8c5a45137f97478a83b65e7f3146f6", size = 164937 }, +] + +[[package]] +name = "standard-aifc" +version = "3.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "audioop-lts", marker = "python_full_version >= '3.13'" }, + { name = "standard-chunk", marker = "python_full_version >= '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c4/53/6050dc3dde1671eb3db592c13b55a8005e5040131f7509cef0215212cb84/standard_aifc-3.13.0.tar.gz", hash = "sha256:64e249c7cb4b3daf2fdba4e95721f811bde8bdfc43ad9f936589b7bb2fae2e43", size = 15240 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/52/5fbb203394cc852334d1575cc020f6bcec768d2265355984dfd361968f36/standard_aifc-3.13.0-py3-none-any.whl", hash = "sha256:f7ae09cc57de1224a0dd8e3eb8f73830be7c3d0bc485de4c1f82b4a7f645ac66", size = 10492 }, +] + +[[package]] +name = "standard-chunk" +version = "3.13.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/06/ce1bb165c1f111c7d23a1ad17204d67224baa69725bb6857a264db61beaf/standard_chunk-3.13.0.tar.gz", hash = "sha256:4ac345d37d7e686d2755e01836b8d98eda0d1a3ee90375e597ae43aaf064d654", size = 4672 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7a/90/a5c1084d87767d787a6caba615aa50dc587229646308d9420c960cb5e4c0/standard_chunk-3.13.0-py3-none-any.whl", hash = "sha256:17880a26c285189c644bd5bd8f8ed2bdb795d216e3293e6dbe55bbd848e2982c", size = 4944 }, +] + +[[package]] +name = "standard-sunau" +version = "3.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "audioop-lts", marker = "python_full_version >= '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/e3/ce8d38cb2d70e05ffeddc28bb09bad77cfef979eb0a299c9117f7ed4e6a9/standard_sunau-3.13.0.tar.gz", hash = "sha256:b319a1ac95a09a2378a8442f403c66f4fd4b36616d6df6ae82b8e536ee790908", size = 9368 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/ae/e3707f6c1bc6f7aa0df600ba8075bfb8a19252140cd595335be60e25f9ee/standard_sunau-3.13.0-py3-none-any.whl", hash = "sha256:53af624a9529c41062f4c2fd33837f297f3baa196b0cfceffea6555654602622", size = 7364 }, +] + +[[package]] +name = "starlette" +version = "0.46.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ce/20/08dfcd9c983f6a6f4a1000d934b9e6d626cff8d2eeb77a89a68eef20a2b7/starlette-0.46.2.tar.gz", hash = "sha256:7f7361f34eed179294600af672f565727419830b54b7b084efe44bb82d2fccd5", size = 2580846 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8b/0c/9d30a4ebeb6db2b25a841afbb80f6ef9a854fc3b41be131d249a977b4959/starlette-0.46.2-py3-none-any.whl", hash = "sha256:595633ce89f8ffa71a015caed34a5b2dc1c0cdb3f0f1fbd1e69339cf2abeec35", size = 72037 }, +] + +[[package]] +name = "sympy" +version = "1.13.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mpmath" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ca/99/5a5b6f19ff9f083671ddf7b9632028436167cd3d33e11015754e41b249a4/sympy-1.13.1.tar.gz", hash = "sha256:9cebf7e04ff162015ce31c9c6c9144daa34a93bd082f54fd8f12deca4f47515f", size = 7533040 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/fe/81695a1aa331a842b582453b605175f419fe8540355886031328089d840a/sympy-1.13.1-py3-none-any.whl", hash = "sha256:db36cdc64bf61b9b24578b6f7bab1ecdd2452cf008f34faa33776680c26d66f8", size = 6189177 }, +] + +[[package]] +name = "tbb" +version = "2021.13.1" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/8a/5062b00c378c051e26507e5eca8d3b5c91ed63f8a2139f6f0f422be84b02/tbb-2021.13.1-py3-none-win32.whl", hash = "sha256:00f5e5a70051650ddd0ab6247c0549521968339ec21002e475cd23b1cbf46d66", size = 248994 }, + { url = "https://files.pythonhosted.org/packages/9b/24/84ce997e8ae6296168a74d0d9c4dde572d90fb23fd7c0b219c30ff71e00e/tbb-2021.13.1-py3-none-win_amd64.whl", hash = "sha256:cbf024b2463fdab3ebe3fa6ff453026358e6b903839c80d647e08ad6d0796ee9", size = 286908 }, +] + +[[package]] +name = "tensorboardx" +version = "2.6.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "packaging" }, + { name = "protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/02/9b/c2b5aba53f5e27ffcf249fc38485836119638f97d20b978664b15f97c8a6/tensorboardX-2.6.2.2.tar.gz", hash = "sha256:c6476d7cd0d529b0b72f4acadb1269f9ed8b22f441e87a84f2a3b940bb87b666", size = 4778030 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/71/f3e7c9b2ab67e28c572ab4e9d5fa3499e0d252650f96d8a3a03e26677f53/tensorboardX-2.6.2.2-py2.py3-none-any.whl", hash = "sha256:160025acbf759ede23fd3526ae9d9bfbfd8b68eb16c38a010ebe326dc6395db8", size = 101700 }, +] + +[[package]] +name = "threadpoolctl" +version = "3.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638 }, +] + +[[package]] +name = "tomlkit" +version = "0.13.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b1/09/a439bec5888f00a54b8b9f05fa94d7f901d6735ef4e55dcec9bc37b5d8fa/tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79", size = 192885 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde", size = 37955 }, +] + +[[package]] +name = "torch" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "fsspec" }, + { name = "jinja2" }, + { name = "mkl", marker = "sys_platform == 'win32'" }, + { name = "networkx" }, + { name = "nvidia-cublas-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-cupti-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-nvrtc-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-runtime-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cudnn-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cufft-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-curand-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cusolver-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cusparse-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nccl-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nvtx-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "sympy" }, + { name = "typing-extensions" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/03/1abad10990c76bee3703857b1617563b241f87d297ee466dbad922b0c308/torch-2.3.0-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:b0de2bdc0486ea7b14fc47ff805172df44e421a7318b7c4d92ef589a75d27410", size = 779062531 }, + { url = "https://files.pythonhosted.org/packages/f1/9d/dfe273e19b7165148208bd182fac87488c5a0f7a3318d1646f5f37af872f/torch-2.3.0-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:a306c87a3eead1ed47457822c01dfbd459fe2920f2d38cbdf90de18f23f72542", size = 88437165 }, + { url = "https://files.pythonhosted.org/packages/37/04/a5cd83baccbf2d4329990ec06b8abf3a644e1559a7b1f764f42d2cb77d51/torch-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:f9b98bf1a3c8af2d4c41f0bf1433920900896c446d1ddc128290ff146d1eb4bd", size = 159749140 }, + { url = "https://files.pythonhosted.org/packages/55/51/4bdee83e6fa9cca8e3a6cdf81a2695ede9d3fd7148e4fd4188dff142d7b0/torch-2.3.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:dca986214267b34065a79000cee54232e62b41dff1ec2cab9abc3fc8b3dee0ad", size = 60968873 }, +] + +[[package]] +name = "torch-complex" +version = "0.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bf/2b/17cb15a383cf2135330371e034d13b9043dc6d8bd07c871b5aa3064fbed1/torch_complex-0.4.4.tar.gz", hash = "sha256:4153fd6b24a0bad689e6f193bfbd00f38283b1890d808bef684ddc6d1f63fd3f", size = 10025 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/c5/9b4d756a7ada951e9b17dcc636f98ed1073c737ae809b150ef408afb6298/torch_complex-0.4.4-py3-none-any.whl", hash = "sha256:6ab4ecd4f3a16e3adb70a7f7cd2e769a9dfd07d7a8e27d04ff9c621ebbe34b13", size = 9125 }, +] + +[[package]] +name = "torchaudio" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "torch" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/89/8f5382f614072e42bdd0e88ada0eef7b08c831b02c9138f91d3c325ee1c5/torchaudio-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:535144a2fbba95fbb3b883224ffcf44788e4cecbabbe49c4a1ae3e7a74f71485", size = 1808189 }, + { url = "https://files.pythonhosted.org/packages/40/d4/9eac54931e5b7b45eb80212f0aa5cb103826f9ef4a66079fbcfd10ee8e4e/torchaudio-2.3.0-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:fb3f52ed1d63b272c240d9bf051705312cb172212051b8a6a2f64d42e3cc1633", size = 3350086 }, + { url = "https://files.pythonhosted.org/packages/98/59/c153039427aaeaa398e790e776f43b3341f547782893416bf006e580ca65/torchaudio-2.3.0-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:668a8b694e5522cff28cd5e02d01aa1b75ce940aa9fb40480892bdc623b1735d", size = 1646769 }, + { url = "https://files.pythonhosted.org/packages/f7/06/34addade5c69063d89d67ff810fd6197c28f93d9cf089c51d198562827b8/torchaudio-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:6c1f538018b85d7766835d042e555de2f096f7a69bba6b16031bf42a914dd9e1", size = 2362699 }, +] + +[[package]] +name = "tqdm" +version = "4.67.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 }, +] + +[[package]] +name = "typer" +version = "0.15.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "rich" }, + { name = "shellingham" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8b/6f/3991f0f1c7fcb2df31aef28e0594d8d54b05393a0e4e34c65e475c2a5d41/typer-0.15.2.tar.gz", hash = "sha256:ab2fab47533a813c49fe1f16b1a370fd5819099c00b119e0633df65f22144ba5", size = 100711 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/fc/5b29fea8cee020515ca82cc68e3b8e1e34bb19a3535ad854cac9257b414c/typer-0.15.2-py3-none-any.whl", hash = "sha256:46a499c6107d645a9c13f7ee46c5d5096cae6f5fc57dd11eccbbb9ae3e44ddfc", size = 45061 }, +] + +[[package]] +name = "typing-extensions" +version = "4.13.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/37/23083fcd6e35492953e8d2aaaa68b860eb422b34627b13f2ce3eb6106061/typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef", size = 106967 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8b/54/b1ae86c0973cc6f0210b53d508ca3641fb6d0c56823f288d108bc7ab3cc8/typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c", size = 45806 }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/82/5c/e6082df02e215b846b4b8c0b887a64d7d08ffaba30605502639d44c06b82/typing_inspection-0.4.0.tar.gz", hash = "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122", size = 76222 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/08/aa4fdfb71f7de5176385bd9e90852eaf6b5d622735020ad600f2bab54385/typing_inspection-0.4.0-py3-none-any.whl", hash = "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f", size = 14125 }, +] + +[[package]] +name = "tzdata" +version = "2025.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839 }, +] + +[[package]] +name = "umap-learn" +version = "0.5.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numba" }, + { name = "numpy" }, + { name = "pynndescent" }, + { name = "scikit-learn" }, + { name = "scipy" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6f/d4/9ed627905f7993349671283b3c5bf2d9f543ef79229fa1c7e01324eb900c/umap-learn-0.5.7.tar.gz", hash = "sha256:b2a97973e4c6ffcebf241100a8de589a4c84126a832ab40f296c6d9fcc5eb19e", size = 92680 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/8f/671c0e1f2572ba625cbcc1faeba9435e00330c3d6962858711445cf1e817/umap_learn-0.5.7-py3-none-any.whl", hash = "sha256:6a7e0be2facfa365a5ed6588447102bdbef32a0ef449535c25c97ea7e680073c", size = 88815 }, ] [[package]] name = "urllib3" -version = "2.3.0" +version = "2.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/aa/63/e53da845320b757bf29ef6a9062f5c669fe997973f966045cb019c3f4b66/urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d", size = 307268 } +sdist = { url = "https://files.pythonhosted.org/packages/8a/78/16493d9c386d8e60e442a35feac5e00f0913c0f4b7c217c11e8ec2ff53e0/urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466", size = 390672 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", size = 128369 }, + { url = "https://files.pythonhosted.org/packages/6b/11/cc635220681e93a0183390e26485430ca2c7b5f9d33b15c74c2861cb8091/urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813", size = 128680 }, +] + +[[package]] +name = "uvicorn" +version = "0.34.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/86/37/dd92f1f9cedb5eaf74d9999044306e06abe65344ff197864175dbbd91871/uvicorn-0.34.1.tar.gz", hash = "sha256:af981725fc4b7ffc5cb3b0e9eda6258a90c4b52cb2a83ce567ae0a7ae1757afc", size = 76755 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/38/a5801450940a858c102a7ad9e6150146a25406a119851c993148d56ab041/uvicorn-0.34.1-py3-none-any.whl", hash = "sha256:984c3a8c7ca18ebaad15995ee7401179212c59521e67bfc390c07fa2b8d2e065", size = 62404 }, +] + +[[package]] +name = "websockets" +version = "15.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/6b/4545a0d843594f5d0771e86463606a3988b5a09ca5123136f8a76580dd63/websockets-15.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3", size = 175437 }, + { url = "https://files.pythonhosted.org/packages/f4/71/809a0f5f6a06522af902e0f2ea2757f71ead94610010cf570ab5c98e99ed/websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665", size = 173096 }, + { url = "https://files.pythonhosted.org/packages/3d/69/1a681dd6f02180916f116894181eab8b2e25b31e484c5d0eae637ec01f7c/websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2", size = 173332 }, + { url = "https://files.pythonhosted.org/packages/a6/02/0073b3952f5bce97eafbb35757f8d0d54812b6174ed8dd952aa08429bcc3/websockets-15.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215", size = 183152 }, + { url = "https://files.pythonhosted.org/packages/74/45/c205c8480eafd114b428284840da0b1be9ffd0e4f87338dc95dc6ff961a1/websockets-15.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5", size = 182096 }, + { url = "https://files.pythonhosted.org/packages/14/8f/aa61f528fba38578ec553c145857a181384c72b98156f858ca5c8e82d9d3/websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65", size = 182523 }, + { url = "https://files.pythonhosted.org/packages/ec/6d/0267396610add5bc0d0d3e77f546d4cd287200804fe02323797de77dbce9/websockets-15.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe", size = 182790 }, + { url = "https://files.pythonhosted.org/packages/02/05/c68c5adbf679cf610ae2f74a9b871ae84564462955d991178f95a1ddb7dd/websockets-15.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4", size = 182165 }, + { url = "https://files.pythonhosted.org/packages/29/93/bb672df7b2f5faac89761cb5fa34f5cec45a4026c383a4b5761c6cea5c16/websockets-15.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597", size = 182160 }, + { url = "https://files.pythonhosted.org/packages/ff/83/de1f7709376dc3ca9b7eeb4b9a07b4526b14876b6d372a4dc62312bebee0/websockets-15.0.1-cp312-cp312-win32.whl", hash = "sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9", size = 176395 }, + { url = "https://files.pythonhosted.org/packages/7d/71/abf2ebc3bbfa40f391ce1428c7168fb20582d0ff57019b69ea20fa698043/websockets-15.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7", size = 176841 }, + { url = "https://files.pythonhosted.org/packages/cb/9f/51f0cf64471a9d2b4d0fc6c534f323b664e7095640c34562f5182e5a7195/websockets-15.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931", size = 175440 }, + { url = "https://files.pythonhosted.org/packages/8a/05/aa116ec9943c718905997412c5989f7ed671bc0188ee2ba89520e8765d7b/websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675", size = 173098 }, + { url = "https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151", size = 173329 }, + { url = "https://files.pythonhosted.org/packages/31/1d/063b25dcc01faa8fada1469bdf769de3768b7044eac9d41f734fd7b6ad6d/websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22", size = 183111 }, + { url = "https://files.pythonhosted.org/packages/93/53/9a87ee494a51bf63e4ec9241c1ccc4f7c2f45fff85d5bde2ff74fcb68b9e/websockets-15.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f", size = 182054 }, + { url = "https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8", size = 182496 }, + { url = "https://files.pythonhosted.org/packages/98/41/e7038944ed0abf34c45aa4635ba28136f06052e08fc2168520bb8b25149f/websockets-15.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375", size = 182829 }, + { url = "https://files.pythonhosted.org/packages/e0/17/de15b6158680c7623c6ef0db361da965ab25d813ae54fcfeae2e5b9ef910/websockets-15.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d", size = 182217 }, + { url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195 }, + { url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393 }, + { url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837 }, + { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743 }, ] diff --git a/video_voice_process.py b/video_voice_process.py index 9d0df48..7111ad8 100644 --- a/video_voice_process.py +++ b/video_voice_process.py @@ -54,8 +54,6 @@ def process_audio_file(audio_file_path): wav_filename = os.path.splitext(os.path.basename(audio_file_path))[0] # 生成对应的 WAV 文件路径 md_file = os.path.join(wav_dir, f"{wav_filename}.md") - # 创建一个锁对象 - file_write_lock = threading.Lock() try: audio_file = AudioSegment.from_wav(audio_file_path)