From 2fa9c1fcb6fa34dc534ea16060019f5ad71dee77 Mon Sep 17 00:00:00 2001 From: bdim404 Date: Tue, 7 Apr 2026 18:03:29 +0800 Subject: [PATCH] refactor: rename backend/frontend dirs and remove NovelWriter submodule MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Rename qwen3-tts-backend → canto-backend - Rename qwen3-tts-frontend → canto-frontend - Remove NovelWriter embedded repo Co-Authored-By: Claude Sonnet 4.6 --- .gitignore | 16 +- .../api/__init__.py => .gitmodules | 0 README.zh.md | 348 ---------------- .../.env.example | 0 .../.gitignore | 0 .../core => canto-backend/api}/__init__.py | 0 .../api/admin.py | 0 .../api/audiobook.py | 0 .../api/auth.py | 0 .../api/jobs.py | 0 .../api/tts.py | 0 .../api/users.py | 0 .../api/voice_designs.py | 0 .../config.py | 0 .../db => canto-backend/core}/__init__.py | 0 .../core/audiobook_service.py | 0 .../core/batch_processor.py | 0 .../core/cache_manager.py | 0 .../core/cleanup.py | 0 .../core/config.py | 0 .../core/database.py | 0 .../core/init_admin.py | 0 .../core/llm_service.py | 0 .../core/metrics.py | 0 .../core/model_manager.py | 0 .../core/progress_store.py | 0 .../core/security.py | 0 .../core/tts_service.py | 0 .../indextts => canto-backend/db}/__init__.py | 0 .../db/crud.py | 0 .../db/database.py | 0 .../db/migrate_add_local_permission.py | 0 .../db/models.py | 0 .../deploy/nginx.conf | 10 +- .../deploy/qwen-tts.service | 10 +- .../indextts}/__init__.py | 0 .../indextts/gpt}/__init__.py | 0 .../indextts/gpt/conformer}/__init__.py | 0 .../indextts/gpt/conformer/attention.py | 0 .../indextts/gpt/conformer/embedding.py | 0 .../indextts/gpt/conformer/subsampling.py | 0 .../indextts/gpt/conformer_encoder.py | 0 .../indextts/gpt/model_v2.py | 0 .../indextts/gpt/perceiver.py | 0 .../gpt/transformers_generation_utils.py | 0 .../indextts/gpt/transformers_gpt2.py | 0 .../gpt/transformers_modeling_utils.py | 0 .../indextts/infer_indextts2.py | 0 .../indextts/s2mel/dac/__init__.py | 0 .../indextts/s2mel/dac/__main__.py | 0 .../indextts/s2mel/dac/model/__init__.py | 0 .../indextts/s2mel/dac/model/base.py | 0 .../indextts/s2mel/dac/model/dac.py | 0 .../indextts/s2mel/dac/model/discriminator.py | 0 .../indextts/s2mel/dac/model/encodec.py | 0 .../indextts/s2mel/dac/nn/__init__.py | 0 .../indextts/s2mel/dac/nn/layers.py | 0 .../indextts/s2mel/dac/nn/loss.py | 0 .../indextts/s2mel/dac/nn/quantize.py | 0 .../indextts/s2mel/dac/utils/__init__.py | 0 .../indextts/s2mel/dac/utils/decode.py | 0 .../indextts/s2mel/dac/utils/encode.py | 0 .../indextts/s2mel/modules/audio.py | 0 .../s2mel/modules/bigvgan/activations.py | 0 .../alias_free_activation/cuda}/__init__.py | 0 .../cuda/activation1d.py | 0 .../cuda/anti_alias_activation.cpp | 0 .../cuda/anti_alias_activation_cuda.cu | 0 .../alias_free_activation/cuda/compat.h | 0 .../alias_free_activation/cuda/load.py | 0 .../alias_free_activation/cuda/type_shim.h | 0 .../alias_free_activation/torch/__init__.py | 0 .../alias_free_activation/torch/act.py | 0 .../alias_free_activation/torch/filter.py | 0 .../alias_free_activation/torch/resample.py | 0 .../indextts/s2mel/modules/bigvgan/bigvgan.py | 0 .../s2mel/modules/bigvgan/config.json | 0 .../indextts/s2mel/modules/bigvgan/env.py | 0 .../s2mel/modules/bigvgan/meldataset.py | 0 .../indextts/s2mel/modules/bigvgan/utils.py | 0 .../indextts/s2mel/modules/campplus/DTDNN.py | 0 .../indextts/s2mel/modules/campplus/layers.py | 0 .../indextts/s2mel/modules/commons.py | 0 .../s2mel/modules/diffusion_transformer.py | 0 .../indextts/s2mel/modules/encodec.py | 0 .../indextts/s2mel/modules/flow_matching.py | 0 .../s2mel/modules/gpt_fast/generate.py | 0 .../indextts/s2mel/modules/gpt_fast/model.py | 0 .../s2mel/modules/gpt_fast/quantize.py | 0 .../s2mel/modules/length_regulator.py | 0 .../indextts/s2mel/modules/wavenet.py | 0 .../indextts/utils}/__init__.py | 0 .../indextts/utils/arch_util.py | 0 .../indextts/utils/checkpoint.py | 0 .../indextts/utils/common.py | 0 .../indextts/utils/feature_extractors.py | 0 .../indextts/utils/front.py | 0 .../utils/maskgct/models/codec}/__init__.py | 0 .../models/codec/amphion_codec/codec.py | 0 .../codec/amphion_codec/quantize/__init__.py | 0 .../quantize/factorized_vector_quantize.py | 0 .../quantize/lookup_free_quantize.py | 0 .../amphion_codec/quantize/residual_vq.py | 0 .../amphion_codec/quantize/vector_quantize.py | 0 .../models/codec/amphion_codec/vocos.py | 0 .../maskgct/models/codec/codec_dataset.py | 0 .../maskgct/models/codec/codec_inference.py | 0 .../maskgct/models/codec/codec_sampler.py | 0 .../maskgct/models/codec/codec_trainer.py | 0 .../maskgct/models/codec/facodec}/__init__.py | 0 .../facodec/alias_free_torch/__init__.py | 0 .../codec/facodec/alias_free_torch/act.py | 0 .../codec/facodec/alias_free_torch/filter.py | 0 .../facodec/alias_free_torch/resample.py | 0 .../models/codec/facodec/facodec_dataset.py | 0 .../models/codec/facodec/facodec_inference.py | 0 .../models/codec/facodec/facodec_trainer.py | 0 .../codec/facodec/modules/JDC/__init__.py | 0 .../models/codec/facodec/modules/JDC/bst.t7 | Bin .../models/codec/facodec/modules/JDC/model.py | 0 .../codec/facodec/modules/attentions.py | 0 .../models/codec/facodec/modules/commons.py | 0 .../facodec/modules/gradient_reversal.py | 0 .../models/codec/facodec/modules/layers.py | 0 .../models/codec/facodec/modules/quantize.py | 0 .../codec/facodec/modules/style_encoder.py | 0 .../models/codec/facodec/modules/wavenet.py | 0 .../maskgct/models/codec/facodec/optimizer.py | 0 .../models/codec/kmeans/repcodec_model.py | 0 .../maskgct/models/codec/kmeans/vocos.py | 0 .../maskgct/models/codec/melvqgan/melspec.py | 0 .../maskgct/models/codec/ns3_codec/README.md | 0 .../models/codec/ns3_codec/__init__.py | 0 .../ns3_codec/alias_free_torch/__init__.py | 0 .../codec/ns3_codec/alias_free_torch/act.py | 0 .../ns3_codec/alias_free_torch/filter.py | 0 .../ns3_codec/alias_free_torch/resample.py | 0 .../maskgct/models/codec/ns3_codec/facodec.py | 0 .../codec/ns3_codec/gradient_reversal.py | 0 .../maskgct/models/codec/ns3_codec/melspec.py | 0 .../codec/ns3_codec/quantize/__init__.py | 0 .../models/codec/ns3_codec/quantize/fvq.py | 0 .../models/codec/ns3_codec/quantize/rvq.py | 0 .../models/codec/ns3_codec/transformer.py | 0 .../models/codec/speechtokenizer/model.py | 0 .../codec/speechtokenizer/modules/__init__.py | 0 .../codec/speechtokenizer/modules/conv.py | 0 .../codec/speechtokenizer/modules/lstm.py | 0 .../codec/speechtokenizer/modules/norm.py | 0 .../modules/quantization/__init__.py | 0 .../modules/quantization/ac.py | 0 .../modules/quantization/core_vq.py | 0 .../modules/quantization/distrib.py | 0 .../modules/quantization/vq.py | 0 .../codec/speechtokenizer/modules/seanet.py | 0 .../models/codec/vevo/vevo_repcodec.py | 0 .../tts/maskgct/ckpt/wav2vec2bert_stats.pt | Bin .../maskgct/models/tts/maskgct/llama_nar.py | 0 .../maskgct/models/tts/maskgct/maskgct_s2a.py | 0 .../indextts/utils/maskgct_utils.py | 0 .../indextts/utils/typical_sampling.py | 0 .../indextts/utils/webui_utils.py | 0 .../indextts/utils/xtransformers.py | 0 {qwen3-tts-backend => canto-backend}/main.py | 8 +- .../pytest.ini | 0 canto-backend/qwen3-tts.service | 15 + .../requirements.txt | 0 .../schemas}/__init__.py | 0 .../schemas/audiobook.py | 0 .../schemas/cache.py | 0 .../schemas/job.py | 0 .../schemas/tts.py | 0 .../schemas/user.py | 0 .../schemas/voice_design.py | 0 canto-backend/utils/__init__.py | 0 .../utils/audio.py | 0 .../utils/metrics.py | 0 .../utils/validation.py | 0 canto-frontend/.env.example | 2 + .../.gitignore | 0 .../components.json | 0 .../eslint.config.js | 0 .../fonts/noto-serif-jp-regular.woff2 | Bin .../fonts/noto-serif-kr-regular.woff2 | Bin .../fonts/noto-serif-latin-regular.woff2 | Bin .../fonts/noto-serif-sc-regular.woff2 | Bin .../fonts/noto-serif-tc-regular.woff2 | Bin .../index.html | 2 +- .../package-lock.json | 4 +- .../package.json | 2 +- .../postcss.config.js | 0 .../public/favicon.ico | Bin .../public/qwen.svg | 0 .../src/App.tsx | 0 .../src/assets/react.svg | 0 .../src/components/AudioPlayer.module.css | 0 .../src/components/AudioPlayer.tsx | 0 .../src/components/ChapterPlayer.module.css | 0 .../src/components/ChapterPlayer.tsx | 0 .../src/components/ErrorBoundary.tsx | 0 .../src/components/FileUploader.tsx | 0 .../src/components/FormSkeleton.tsx | 0 .../src/components/IconLabel.tsx | 0 .../src/components/JobDetailDialog.tsx | 0 .../src/components/LoadingScreen.tsx | 0 .../src/components/LoadingState.tsx | 0 .../src/components/Navbar.tsx | 0 .../src/components/ParamInput.tsx | 0 .../src/components/SuperAdminRoute.tsx | 0 .../src/components/ThemeToggle.tsx | 0 .../src/components/ui/alert-dialog.tsx | 0 .../src/components/ui/badge.tsx | 0 .../src/components/ui/button.tsx | 0 .../src/components/ui/card.tsx | 0 .../src/components/ui/checkbox.tsx | 0 .../src/components/ui/collapsible.tsx | 0 .../src/components/ui/dialog.tsx | 0 .../src/components/ui/dropdown-menu.tsx | 0 .../src/components/ui/form.tsx | 0 .../src/components/ui/input.tsx | 0 .../src/components/ui/label.tsx | 0 .../src/components/ui/progress.tsx | 0 .../src/components/ui/radio-group.tsx | 0 .../src/components/ui/scroll-area.tsx | 0 .../src/components/ui/select.tsx | 0 .../src/components/ui/separator.tsx | 0 .../src/components/ui/sheet.tsx | 0 .../src/components/ui/slider.tsx | 0 .../src/components/ui/switch.tsx | 0 .../src/components/ui/tabs.tsx | 0 .../src/components/ui/textarea.tsx | 0 .../src/components/ui/tooltip.tsx | 0 .../components/users/ChangePasswordDialog.tsx | 0 .../src/components/users/DeleteUserDialog.tsx | 0 .../src/components/users/UserDialog.tsx | 0 .../src/components/users/UserTable.tsx | 0 .../src/contexts/AuthContext.tsx | 0 .../src/contexts/ThemeContext.tsx | 0 .../src/contexts/UserPreferencesContext.tsx | 0 .../src/hooks/useAudioRecorder.ts | 0 .../src/hooks/useAudioValidation.ts | 0 .../src/index.css | 0 .../src/lib/api.ts | 0 .../src/lib/api/audiobook.ts | 0 .../src/lib/constants.ts | 0 .../src/lib/fontManager.ts | 0 .../src/lib/utils.ts | 0 .../src/locales/en-US/audiobook.json | 0 .../src/locales/en-US/auth.json | 0 .../src/locales/en-US/common.json | 0 .../src/locales/en-US/constants.json | 0 .../src/locales/en-US/errors.json | 0 .../src/locales/en-US/index.ts | 0 .../src/locales/en-US/job.json | 0 .../src/locales/en-US/nav.json | 0 .../src/locales/en-US/onboarding.json | 4 +- .../src/locales/en-US/settings.json | 0 .../src/locales/en-US/tts.json | 0 .../src/locales/en-US/user.json | 0 .../src/locales/en-US/voice.json | 0 .../src/locales/index.ts | 0 .../src/locales/ja-JP/audiobook.json | 0 .../src/locales/ja-JP/auth.json | 0 .../src/locales/ja-JP/common.json | 0 .../src/locales/ja-JP/constants.json | 0 .../src/locales/ja-JP/errors.json | 0 .../src/locales/ja-JP/index.ts | 0 .../src/locales/ja-JP/job.json | 0 .../src/locales/ja-JP/nav.json | 0 .../src/locales/ja-JP/onboarding.json | 4 +- .../src/locales/ja-JP/settings.json | 0 .../src/locales/ja-JP/tts.json | 0 .../src/locales/ja-JP/user.json | 0 .../src/locales/ja-JP/voice.json | 0 .../src/locales/ko-KR/audiobook.json | 0 .../src/locales/ko-KR/auth.json | 0 .../src/locales/ko-KR/common.json | 0 .../src/locales/ko-KR/constants.json | 0 .../src/locales/ko-KR/errors.json | 0 .../src/locales/ko-KR/index.ts | 0 .../src/locales/ko-KR/job.json | 0 .../src/locales/ko-KR/nav.json | 0 .../src/locales/ko-KR/onboarding.json | 4 +- .../src/locales/ko-KR/settings.json | 0 .../src/locales/ko-KR/tts.json | 0 .../src/locales/ko-KR/user.json | 0 .../src/locales/ko-KR/voice.json | 0 .../src/locales/zh-CN/audiobook.json | 0 .../src/locales/zh-CN/auth.json | 0 .../src/locales/zh-CN/common.json | 0 .../src/locales/zh-CN/constants.json | 0 .../src/locales/zh-CN/errors.json | 0 .../src/locales/zh-CN/index.ts | 0 .../src/locales/zh-CN/job.json | 0 .../src/locales/zh-CN/nav.json | 0 .../src/locales/zh-CN/onboarding.json | 4 +- .../src/locales/zh-CN/settings.json | 0 .../src/locales/zh-CN/tts.json | 0 .../src/locales/zh-CN/user.json | 0 .../src/locales/zh-CN/voice.json | 0 .../src/locales/zh-TW/audiobook.json | 0 .../src/locales/zh-TW/auth.json | 0 .../src/locales/zh-TW/common.json | 0 .../src/locales/zh-TW/constants.json | 0 .../src/locales/zh-TW/errors.json | 0 .../src/locales/zh-TW/index.ts | 0 .../src/locales/zh-TW/job.json | 0 .../src/locales/zh-TW/nav.json | 0 .../src/locales/zh-TW/onboarding.json | 4 +- .../src/locales/zh-TW/settings.json | 0 .../src/locales/zh-TW/tts.json | 0 .../src/locales/zh-TW/user.json | 0 .../src/locales/zh-TW/voice.json | 0 .../src/main.tsx | 0 .../src/pages/AdminStats.tsx | 0 .../src/pages/Audiobook.tsx | 0 .../src/pages/Login.tsx | 0 .../src/pages/Settings.tsx | 0 .../src/pages/UserManagement.tsx | 0 .../src/types/auth.ts | 0 .../src/types/job.ts | 0 .../src/types/tts.ts | 0 .../src/types/user.ts | 0 .../src/types/voice-design.ts | 0 .../src/types/waveform-player.d.ts | 0 .../tailwind.config.js | 0 .../tsconfig.app.json | 0 .../tsconfig.json | 0 .../tsconfig.node.json | 0 .../vite.config.ts | 0 dev.sh | 4 +- docker/.env.example | 2 - docker/backend/.dockerignore | 16 - docker/backend/Dockerfile | 22 - docker/backend/requirements.qwen_tts.txt | 6 - docker/docker-compose.gpu.yml | 9 - docker/docker-compose.yml | 24 -- docker/frontend/.dockerignore | 12 - docker/frontend/Dockerfile | 18 - docker/frontend/nginx.conf | 25 -- .../scripts/add_superuser_field.py | 23 -- qwen3-tts-backend/scripts/create_admin.py | 40 -- qwen3-tts-frontend/.env.example | 2 - test.py | 107 +++++ test.txt | 9 + test_grok4.py | 377 ++++++++++++++++++ 346 files changed, 548 insertions(+), 585 deletions(-) rename qwen3-tts-backend/api/__init__.py => .gitmodules (100%) delete mode 100644 README.zh.md rename {qwen3-tts-backend => canto-backend}/.env.example (100%) rename {qwen3-tts-backend => canto-backend}/.gitignore (100%) rename {qwen3-tts-backend/core => canto-backend/api}/__init__.py (100%) rename {qwen3-tts-backend => canto-backend}/api/admin.py (100%) rename {qwen3-tts-backend => canto-backend}/api/audiobook.py (100%) rename {qwen3-tts-backend => canto-backend}/api/auth.py (100%) rename {qwen3-tts-backend => canto-backend}/api/jobs.py (100%) rename {qwen3-tts-backend => canto-backend}/api/tts.py (100%) rename {qwen3-tts-backend => canto-backend}/api/users.py (100%) rename {qwen3-tts-backend => canto-backend}/api/voice_designs.py (100%) rename {qwen3-tts-backend => canto-backend}/config.py (100%) rename {qwen3-tts-backend/db => canto-backend/core}/__init__.py (100%) rename {qwen3-tts-backend => canto-backend}/core/audiobook_service.py (100%) rename {qwen3-tts-backend => canto-backend}/core/batch_processor.py (100%) rename {qwen3-tts-backend => canto-backend}/core/cache_manager.py (100%) rename {qwen3-tts-backend => canto-backend}/core/cleanup.py (100%) rename {qwen3-tts-backend => canto-backend}/core/config.py (100%) rename {qwen3-tts-backend => canto-backend}/core/database.py (100%) rename {qwen3-tts-backend => canto-backend}/core/init_admin.py (100%) rename {qwen3-tts-backend => canto-backend}/core/llm_service.py (100%) rename {qwen3-tts-backend => canto-backend}/core/metrics.py (100%) rename {qwen3-tts-backend => canto-backend}/core/model_manager.py (100%) rename {qwen3-tts-backend => canto-backend}/core/progress_store.py (100%) rename {qwen3-tts-backend => canto-backend}/core/security.py (100%) rename {qwen3-tts-backend => canto-backend}/core/tts_service.py (100%) rename {qwen3-tts-backend/indextts => canto-backend/db}/__init__.py (100%) rename {qwen3-tts-backend => canto-backend}/db/crud.py (100%) rename {qwen3-tts-backend => canto-backend}/db/database.py (100%) rename {qwen3-tts-backend => canto-backend}/db/migrate_add_local_permission.py (100%) rename {qwen3-tts-backend => canto-backend}/db/models.py (100%) rename {qwen3-tts-backend => canto-backend}/deploy/nginx.conf (87%) rename {qwen3-tts-backend => canto-backend}/deploy/qwen-tts.service (52%) rename {qwen3-tts-backend/indextts/gpt => canto-backend/indextts}/__init__.py (100%) rename {qwen3-tts-backend/indextts/gpt/conformer => canto-backend/indextts/gpt}/__init__.py (100%) rename {qwen3-tts-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda => canto-backend/indextts/gpt/conformer}/__init__.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/gpt/conformer/attention.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/gpt/conformer/embedding.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/gpt/conformer/subsampling.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/gpt/conformer_encoder.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/gpt/model_v2.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/gpt/perceiver.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/gpt/transformers_generation_utils.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/gpt/transformers_gpt2.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/gpt/transformers_modeling_utils.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/infer_indextts2.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/dac/__init__.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/dac/__main__.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/dac/model/__init__.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/dac/model/base.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/dac/model/dac.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/dac/model/discriminator.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/dac/model/encodec.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/dac/nn/__init__.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/dac/nn/layers.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/dac/nn/loss.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/dac/nn/quantize.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/dac/utils/__init__.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/dac/utils/decode.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/dac/utils/encode.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/audio.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/bigvgan/activations.py (100%) rename {qwen3-tts-backend/indextts/utils => canto-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda}/__init__.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/activation1d.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/anti_alias_activation.cpp (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/anti_alias_activation_cuda.cu (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/compat.h (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/load.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/type_shim.h (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/__init__.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/act.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/filter.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/resample.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/bigvgan/bigvgan.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/bigvgan/config.json (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/bigvgan/env.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/bigvgan/meldataset.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/bigvgan/utils.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/campplus/DTDNN.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/campplus/layers.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/commons.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/diffusion_transformer.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/encodec.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/flow_matching.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/gpt_fast/generate.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/gpt_fast/model.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/gpt_fast/quantize.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/length_regulator.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/s2mel/modules/wavenet.py (100%) rename {qwen3-tts-backend/indextts/utils/maskgct/models/codec => canto-backend/indextts/utils}/__init__.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/arch_util.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/checkpoint.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/common.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/feature_extractors.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/front.py (100%) rename {qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec => canto-backend/indextts/utils/maskgct/models/codec}/__init__.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/amphion_codec/codec.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/amphion_codec/quantize/__init__.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/amphion_codec/quantize/factorized_vector_quantize.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/amphion_codec/quantize/lookup_free_quantize.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/amphion_codec/quantize/residual_vq.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/amphion_codec/quantize/vector_quantize.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/amphion_codec/vocos.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/codec_dataset.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/codec_inference.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/codec_sampler.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/codec_trainer.py (100%) rename {qwen3-tts-backend/schemas => canto-backend/indextts/utils/maskgct/models/codec/facodec}/__init__.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/__init__.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/act.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/filter.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/resample.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/facodec/facodec_dataset.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/facodec/facodec_inference.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/facodec/facodec_trainer.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/facodec/modules/JDC/__init__.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/facodec/modules/JDC/bst.t7 (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/facodec/modules/JDC/model.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/facodec/modules/attentions.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/facodec/modules/commons.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/facodec/modules/gradient_reversal.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/facodec/modules/layers.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/facodec/modules/quantize.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/facodec/modules/style_encoder.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/facodec/modules/wavenet.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/facodec/optimizer.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/kmeans/repcodec_model.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/kmeans/vocos.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/melvqgan/melspec.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/ns3_codec/README.md (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/ns3_codec/__init__.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/__init__.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/act.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/filter.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/resample.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/ns3_codec/facodec.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/ns3_codec/gradient_reversal.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/ns3_codec/melspec.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/ns3_codec/quantize/__init__.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/ns3_codec/quantize/fvq.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/ns3_codec/quantize/rvq.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/ns3_codec/transformer.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/speechtokenizer/model.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/speechtokenizer/modules/__init__.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/speechtokenizer/modules/conv.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/speechtokenizer/modules/lstm.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/speechtokenizer/modules/norm.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/__init__.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/ac.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/core_vq.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/distrib.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/vq.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/speechtokenizer/modules/seanet.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/codec/vevo/vevo_repcodec.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/tts/maskgct/ckpt/wav2vec2bert_stats.pt (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/tts/maskgct/llama_nar.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct/models/tts/maskgct/maskgct_s2a.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/maskgct_utils.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/typical_sampling.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/webui_utils.py (100%) rename {qwen3-tts-backend => canto-backend}/indextts/utils/xtransformers.py (100%) rename {qwen3-tts-backend => canto-backend}/main.py (97%) rename {qwen3-tts-backend => canto-backend}/pytest.ini (100%) create mode 100644 canto-backend/qwen3-tts.service rename {qwen3-tts-backend => canto-backend}/requirements.txt (100%) rename {qwen3-tts-backend/utils => canto-backend/schemas}/__init__.py (100%) rename {qwen3-tts-backend => canto-backend}/schemas/audiobook.py (100%) rename {qwen3-tts-backend => canto-backend}/schemas/cache.py (100%) rename {qwen3-tts-backend => canto-backend}/schemas/job.py (100%) rename {qwen3-tts-backend => canto-backend}/schemas/tts.py (100%) rename {qwen3-tts-backend => canto-backend}/schemas/user.py (100%) rename {qwen3-tts-backend => canto-backend}/schemas/voice_design.py (100%) create mode 100644 canto-backend/utils/__init__.py rename {qwen3-tts-backend => canto-backend}/utils/audio.py (100%) rename {qwen3-tts-backend => canto-backend}/utils/metrics.py (100%) rename {qwen3-tts-backend => canto-backend}/utils/validation.py (100%) create mode 100644 canto-frontend/.env.example rename {qwen3-tts-frontend => canto-frontend}/.gitignore (100%) rename {qwen3-tts-frontend => canto-frontend}/components.json (100%) rename {qwen3-tts-frontend => canto-frontend}/eslint.config.js (100%) rename {qwen3-tts-frontend => canto-frontend}/fonts/noto-serif-jp-regular.woff2 (100%) rename {qwen3-tts-frontend => canto-frontend}/fonts/noto-serif-kr-regular.woff2 (100%) rename {qwen3-tts-frontend => canto-frontend}/fonts/noto-serif-latin-regular.woff2 (100%) rename {qwen3-tts-frontend => canto-frontend}/fonts/noto-serif-sc-regular.woff2 (100%) rename {qwen3-tts-frontend => canto-frontend}/fonts/noto-serif-tc-regular.woff2 (100%) rename {qwen3-tts-frontend => canto-frontend}/index.html (95%) rename {qwen3-tts-frontend => canto-frontend}/package-lock.json (99%) rename {qwen3-tts-frontend => canto-frontend}/package.json (98%) rename {qwen3-tts-frontend => canto-frontend}/postcss.config.js (100%) rename {qwen3-tts-frontend => canto-frontend}/public/favicon.ico (100%) rename {qwen3-tts-frontend => canto-frontend}/public/qwen.svg (100%) rename {qwen3-tts-frontend => canto-frontend}/src/App.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/assets/react.svg (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/AudioPlayer.module.css (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/AudioPlayer.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ChapterPlayer.module.css (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ChapterPlayer.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ErrorBoundary.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/FileUploader.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/FormSkeleton.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/IconLabel.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/JobDetailDialog.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/LoadingScreen.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/LoadingState.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/Navbar.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ParamInput.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/SuperAdminRoute.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ThemeToggle.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ui/alert-dialog.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ui/badge.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ui/button.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ui/card.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ui/checkbox.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ui/collapsible.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ui/dialog.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ui/dropdown-menu.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ui/form.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ui/input.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ui/label.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ui/progress.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ui/radio-group.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ui/scroll-area.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ui/select.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ui/separator.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ui/sheet.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ui/slider.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ui/switch.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ui/tabs.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ui/textarea.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/ui/tooltip.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/users/ChangePasswordDialog.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/users/DeleteUserDialog.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/users/UserDialog.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/components/users/UserTable.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/contexts/AuthContext.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/contexts/ThemeContext.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/contexts/UserPreferencesContext.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/hooks/useAudioRecorder.ts (100%) rename {qwen3-tts-frontend => canto-frontend}/src/hooks/useAudioValidation.ts (100%) rename {qwen3-tts-frontend => canto-frontend}/src/index.css (100%) rename {qwen3-tts-frontend => canto-frontend}/src/lib/api.ts (100%) rename {qwen3-tts-frontend => canto-frontend}/src/lib/api/audiobook.ts (100%) rename {qwen3-tts-frontend => canto-frontend}/src/lib/constants.ts (100%) rename {qwen3-tts-frontend => canto-frontend}/src/lib/fontManager.ts (100%) rename {qwen3-tts-frontend => canto-frontend}/src/lib/utils.ts (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/en-US/audiobook.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/en-US/auth.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/en-US/common.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/en-US/constants.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/en-US/errors.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/en-US/index.ts (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/en-US/job.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/en-US/nav.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/en-US/onboarding.json (81%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/en-US/settings.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/en-US/tts.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/en-US/user.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/en-US/voice.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/index.ts (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ja-JP/audiobook.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ja-JP/auth.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ja-JP/common.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ja-JP/constants.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ja-JP/errors.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ja-JP/index.ts (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ja-JP/job.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ja-JP/nav.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ja-JP/onboarding.json (83%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ja-JP/settings.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ja-JP/tts.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ja-JP/user.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ja-JP/voice.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ko-KR/audiobook.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ko-KR/auth.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ko-KR/common.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ko-KR/constants.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ko-KR/errors.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ko-KR/index.ts (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ko-KR/job.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ko-KR/nav.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ko-KR/onboarding.json (81%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ko-KR/settings.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ko-KR/tts.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ko-KR/user.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/ko-KR/voice.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-CN/audiobook.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-CN/auth.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-CN/common.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-CN/constants.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-CN/errors.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-CN/index.ts (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-CN/job.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-CN/nav.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-CN/onboarding.json (78%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-CN/settings.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-CN/tts.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-CN/user.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-CN/voice.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-TW/audiobook.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-TW/auth.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-TW/common.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-TW/constants.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-TW/errors.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-TW/index.ts (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-TW/job.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-TW/nav.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-TW/onboarding.json (78%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-TW/settings.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-TW/tts.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-TW/user.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/locales/zh-TW/voice.json (100%) rename {qwen3-tts-frontend => canto-frontend}/src/main.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/pages/AdminStats.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/pages/Audiobook.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/pages/Login.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/pages/Settings.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/pages/UserManagement.tsx (100%) rename {qwen3-tts-frontend => canto-frontend}/src/types/auth.ts (100%) rename {qwen3-tts-frontend => canto-frontend}/src/types/job.ts (100%) rename {qwen3-tts-frontend => canto-frontend}/src/types/tts.ts (100%) rename {qwen3-tts-frontend => canto-frontend}/src/types/user.ts (100%) rename {qwen3-tts-frontend => canto-frontend}/src/types/voice-design.ts (100%) rename {qwen3-tts-frontend => canto-frontend}/src/types/waveform-player.d.ts (100%) rename {qwen3-tts-frontend => canto-frontend}/tailwind.config.js (100%) rename {qwen3-tts-frontend => canto-frontend}/tsconfig.app.json (100%) rename {qwen3-tts-frontend => canto-frontend}/tsconfig.json (100%) rename {qwen3-tts-frontend => canto-frontend}/tsconfig.node.json (100%) rename {qwen3-tts-frontend => canto-frontend}/vite.config.ts (100%) delete mode 100644 docker/.env.example delete mode 100644 docker/backend/.dockerignore delete mode 100644 docker/backend/Dockerfile delete mode 100644 docker/backend/requirements.qwen_tts.txt delete mode 100644 docker/docker-compose.gpu.yml delete mode 100644 docker/docker-compose.yml delete mode 100644 docker/frontend/.dockerignore delete mode 100644 docker/frontend/Dockerfile delete mode 100644 docker/frontend/nginx.conf delete mode 100644 qwen3-tts-backend/scripts/add_superuser_field.py delete mode 100644 qwen3-tts-backend/scripts/create_admin.py delete mode 100644 qwen3-tts-frontend/.env.example create mode 100644 test.py create mode 100644 test.txt create mode 100644 test_grok4.py diff --git a/.gitignore b/.gitignore index 6c5319f..26bae61 100644 --- a/.gitignore +++ b/.gitignore @@ -26,16 +26,16 @@ checkpoints/ docker/models/ docker/data/ docker/.env -qwen3-tts-frontend/node_modules/ -qwen3-tts-frontend/dist/ -qwen3-tts-frontend/.env -qwen3-tts-frontend/.env.local +canto-frontend/node_modules/ +canto-frontend/dist/ +canto-frontend/.env +canto-frontend/.env.local CLAUDE.md 样本.mp3 aliyun.md /nginx.conf deploy.md -qwen3-tts-backend/scripts -qwen3-tts-backend/examples -qwen3-tts-backend/qwen3-tts.service -qwen3-tts-frontend/.env.production +canto-backend/scripts +canto-backend/examples +canto-backend/canto.service +canto-frontend/.env.production diff --git a/qwen3-tts-backend/api/__init__.py b/.gitmodules similarity index 100% rename from qwen3-tts-backend/api/__init__.py rename to .gitmodules diff --git a/README.zh.md b/README.zh.md deleted file mode 100644 index 3ac33dd..0000000 --- a/README.zh.md +++ /dev/null @@ -1,348 +0,0 @@ -# Qwen3-TTS WebUI - -> **⚠️ 注意:** 本项目由大量 AI 生成,目前处于不稳定状态。稳定版将在 [Releases](../../releases) 中发布。 - -**非官方** 基于 Qwen3-TTS 的文本转语音 Web 应用,支持自定义语音、语音设计和语音克隆,提供直观的 Web 界面。 - -> 这是一个非官方项目。如需查看官方 Qwen3-TTS 仓库,请访问 [QwenLM/Qwen3-TTS](https://github.com/QwenLM/Qwen3-TTS)。 - -[English Documentation](./README.md) - -## 功能特性 - -- 自定义语音:预定义说话人语音 -- 语音设计:自然语言描述创建语音 -- 语音克隆:上传音频克隆语音 -- **IndexTTS2**:高质量语音克隆,支持情感控制(高兴、愤怒、悲伤、恐惧、惊讶等),由 [IndexTTS2](https://github.com/iszhanjiawei/indexTTS2) 驱动 -- 有声书生成:上传 EPUB 文件,通过 LLM 自动提取角色并分配语音,生成多角色有声书;支持为每个角色单独启用 IndexTTS2 -- 双后端支持:支持本地模型和阿里云 TTS API 切换 -- 多语言支持:English、简体中文、繁體中文、日本語、한국어 -- JWT 认证、异步任务、语音缓存、暗黑模式 - -## 界面预览 - -### 桌面端 - 亮色模式 -![亮色模式](./images/lightmode-english.png) - -### 桌面端 - 暗黑模式 -![暗黑模式](./images/darkmode-chinese.png) - -### 移动端 - - - - - -
移动端亮色模式移动端设置
- -### 有声书生成 -![有声书概览](./images/audiobook-overview.png) - - - - - - -
有声书角色列表有声书章节列表
- -## 技术栈 - -**后端**: FastAPI + SQLAlchemy + PyTorch + JWT -- 使用 PyTorch 直接推理 Qwen3-TTS 模型 -- 异步任务处理与批量优化 -- 支持本地模型 + 阿里云 API 双后端 - -**前端**: React 19 + TypeScript + Vite + Tailwind + Shadcn/ui - -## Docker 部署 - -预构建镜像已发布至 Docker Hub:[bdim404/qwen3-tts-backend](https://hub.docker.com/r/bdim404/qwen3-tts-backend)、[bdim404/qwen3-tts-frontend](https://hub.docker.com/r/bdim404/qwen3-tts-frontend) - -**前置要求**:Docker、Docker Compose、NVIDIA GPU + [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html) - -```bash -git clone https://github.com/bdim404/Qwen3-TTS-WebUI.git -cd Qwen3-TTS-webUI - -# 下载模型到 docker/models/(参见下方"安装部署 > 下载模型") -mkdir -p docker/models docker/data - -# 配置 -cp docker/.env.example docker/.env -# 编辑 docker/.env,设置 SECRET_KEY - -cd docker - -# 拉取预构建镜像 -docker compose pull - -# 启动(仅 CPU) -docker compose up -d - -# 启动(GPU 加速) -docker compose -f docker-compose.yml -f docker-compose.gpu.yml up -d -``` - -访问 `http://localhost`,默认账号:`admin` / `admin123456` - -## 安装部署 - -### 环境要求 - -- Python 3.9+ 并支持 CUDA(用于本地模型推理) -- Node.js 18+(用于前端) -- Git - -### 1. 克隆仓库 - -```bash -git clone https://github.com/bdim404/Qwen3-TTS-WebUI.git -cd Qwen3-TTS-webUI -``` - -### 2. 下载模型 - -**重要**: 模型**不会**自动下载,需要手动下载。 - -详细信息请访问官方仓库:[Qwen3-TTS 模型](https://github.com/QwenLM/Qwen3-TTS) - -进入模型目录: -```bash -# Docker 部署 -mkdir -p docker/models && cd docker/models - -# 本地部署 -cd qwen3-tts-backend && mkdir -p Qwen && cd Qwen -``` - -**方式一:通过 ModelScope 下载(推荐中国大陆用户)** - -```bash -pip install -U modelscope - -modelscope download --model Qwen/Qwen3-TTS-Tokenizer-12Hz --local_dir ./Qwen3-TTS-Tokenizer-12Hz -modelscope download --model Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice --local_dir ./Qwen3-TTS-12Hz-1.7B-CustomVoice -modelscope download --model Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign --local_dir ./Qwen3-TTS-12Hz-1.7B-VoiceDesign -modelscope download --model Qwen/Qwen3-TTS-12Hz-1.7B-Base --local_dir ./Qwen3-TTS-12Hz-1.7B-Base -``` - -可选的 0.6B 模型(更小、更快): -```bash -modelscope download --model Qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice --local_dir ./Qwen3-TTS-12Hz-0.6B-CustomVoice -modelscope download --model Qwen/Qwen3-TTS-12Hz-0.6B-Base --local_dir ./Qwen3-TTS-12Hz-0.6B-Base -``` - -**方式二:通过 Hugging Face 下载** - -```bash -pip install -U "huggingface_hub[cli]" - -hf download Qwen/Qwen3-TTS-Tokenizer-12Hz --local-dir ./Qwen3-TTS-Tokenizer-12Hz -hf download Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice --local-dir ./Qwen3-TTS-12Hz-1.7B-CustomVoice -hf download Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign --local-dir ./Qwen3-TTS-12Hz-1.7B-VoiceDesign -hf download Qwen/Qwen3-TTS-12Hz-1.7B-Base --local-dir ./Qwen3-TTS-12Hz-1.7B-Base -``` - -可选的 0.6B 模型(更小、更快): -```bash -hf download Qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice --local-dir ./Qwen3-TTS-12Hz-0.6B-CustomVoice -hf download Qwen/Qwen3-TTS-12Hz-0.6B-Base --local-dir ./Qwen3-TTS-12Hz-0.6B-Base -``` - -**IndexTTS2 模型(可选,用于情感控制语音克隆)** - -IndexTTS2 是可选功能。如需使用,在同一 `Qwen/` 目录下运行: - -```bash -# 仅下载所需文件,无需下载完整仓库 -hf download IndexTeam/IndexTTS-2 \ - bpe.model config.yaml feat1.pt feat2.pt gpt.pth s2mel.pth wav2vec2bert_stats.pt \ - --local-dir ./IndexTTS2 -``` - -然后安装 indextts 包: -```bash -git clone https://github.com/iszhanjiawei/indexTTS2.git -cd indexTTS2 -pip install -e . --no-deps -cd .. -``` - -**最终目录结构:** - -Docker 部署(`docker/models/`): -``` -Qwen3-TTS-webUI/ -└── docker/ - └── models/ - ├── Qwen3-TTS-Tokenizer-12Hz/ - ├── Qwen3-TTS-12Hz-1.7B-CustomVoice/ - ├── Qwen3-TTS-12Hz-1.7B-VoiceDesign/ - └── Qwen3-TTS-12Hz-1.7B-Base/ -``` - -本地部署(`qwen3-tts-backend/Qwen/`): -``` -Qwen3-TTS-webUI/ -└── qwen3-tts-backend/ - └── Qwen/ - ├── Qwen3-TTS-Tokenizer-12Hz/ - ├── Qwen3-TTS-12Hz-1.7B-CustomVoice/ - ├── Qwen3-TTS-12Hz-1.7B-VoiceDesign/ - ├── Qwen3-TTS-12Hz-1.7B-Base/ - └── IndexTTS2/ ← 可选,用于 IndexTTS2 功能 - ├── bpe.model - ├── config.yaml - ├── feat1.pt - ├── feat2.pt - ├── gpt.pth - ├── s2mel.pth - └── wav2vec2bert_stats.pt -``` - -### 3. 后端配置 - -```bash -cd qwen3-tts-backend - -# 创建虚拟环境 -python -m venv venv -source venv/bin/activate # Windows: venv\Scripts\activate - -# 安装依赖 -pip install -r requirements.txt - -# 安装 Qwen3-TTS -pip install qwen-tts - -# 创建配置文件 -cp .env.example .env - -# 编辑配置文件 -# 本地模型:设置 MODEL_BASE_PATH=./Qwen -# 仅阿里云 API:设置 DEFAULT_BACKEND=aliyun -nano .env # 或使用其他编辑器 -``` - -**重要的后端配置** (`.env` 文件): -```env -MODEL_DEVICE=cuda:0 # 使用 GPU(或 cpu 使用 CPU) -MODEL_BASE_PATH=./Qwen # 已下载模型的路径 -DEFAULT_BACKEND=local # 使用本地模型用 'local',API 用 'aliyun' -DATABASE_URL=sqlite:///./qwen_tts.db -SECRET_KEY=your-secret-key-here # 请修改此项! -``` - -启动后端服务: -```bash -# 使用 uvicorn 直接启动 -uvicorn main:app --host 0.0.0.0 --port 8000 --reload - -# 或使用 conda(如果你喜欢) -conda run -n qwen3-tts uvicorn main:app --host 0.0.0.0 --port 8000 --reload -``` - -验证后端是否运行: -```bash -curl http://127.0.0.1:8000/health -``` - -### 4. 前端配置 - -```bash -cd qwen3-tts-frontend - -# 安装依赖 -npm install - -# 创建配置文件 -cp .env.example .env - -# 启动开发服务器 -npm run dev -``` - -### 5. 访问应用 - -在浏览器中打开:`http://localhost:5173` - -**默认账号**: -- 用户名:`admin` -- 密码:`admin123456` -- **重要**: 登录后请立即修改密码! - -### 生产环境部署 - -用于生产环境: - -```bash -# 后端:使用 gunicorn 或类似的 WSGI 服务器 -cd qwen3-tts-backend -gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 - -# 前端:构建静态文件 -cd qwen3-tts-frontend -npm run build -# 使用 nginx 或其他 Web 服务器提供 'dist' 文件夹 -``` - -## 配置 - -### 后端配置 - -后端 `.env` 关键配置: - -```env -SECRET_KEY=your-secret-key -MODEL_DEVICE=cuda:0 -MODEL_BASE_PATH=../Qwen -DATABASE_URL=sqlite:///./qwen_tts.db - -DEFAULT_BACKEND=local - -ALIYUN_REGION=beijing -ALIYUN_MODEL_FLASH=qwen3-tts-flash-realtime -ALIYUN_MODEL_VC=qwen3-tts-vc-realtime-2026-01-15 -ALIYUN_MODEL_VD=qwen3-tts-vd-realtime-2026-01-15 -``` - -**后端选项:** - -- `DEFAULT_BACKEND`: 默认 TTS 后端,可选值:`local` 或 `aliyun` -- **本地模式**: 使用本地 Qwen3-TTS 模型(需要配置 `MODEL_BASE_PATH`) -- **阿里云模式**: 使用阿里云 TTS API(需要用户在设置页面配置 API 密钥) - -**阿里云配置:** - -- 用户需要在 Web 界面的设置页面添加阿里云 API 密钥 -- API 密钥经过加密后安全存储在数据库中 -- 超级管理员可以控制是否为所有用户启用本地模型 -- 获取阿里云 API 密钥,请访问 [阿里云控制台](https://dashscope.console.aliyun.com/) - -## 使用说明 - -### 切换后端 - -1. 登录 Web 界面 -2. 进入设置页面 -3. 配置您偏好的后端: - - **本地模型**:选择"本地模型"(需要超级管理员启用本地模型) - - **阿里云 API**:选择"阿里云"并添加您的 API 密钥 -4. 选择的后端将默认用于所有 TTS 操作 -5. 也可以通过 API 的 `backend` 参数为单次请求指定不同的后端 - -### 管理阿里云 API 密钥 - -1. 在设置页面找到"阿里云 API 密钥"部分 -2. 输入您的阿里云 API 密钥 -3. 点击"更新密钥"保存并验证 -4. 系统会在保存前验证密钥的有效性 -5. 可随时使用删除按钮删除密钥 - -## 特别鸣谢 - -本项目基于阿里云 Qwen 团队开源的 [Qwen3-TTS](https://github.com/QwenLM/Qwen3-TTS) 官方仓库构建。特别感谢 Qwen 团队开源如此强大的文本转语音模型。 - -## 许可证 - -Apache-2.0 license diff --git a/qwen3-tts-backend/.env.example b/canto-backend/.env.example similarity index 100% rename from qwen3-tts-backend/.env.example rename to canto-backend/.env.example diff --git a/qwen3-tts-backend/.gitignore b/canto-backend/.gitignore similarity index 100% rename from qwen3-tts-backend/.gitignore rename to canto-backend/.gitignore diff --git a/qwen3-tts-backend/core/__init__.py b/canto-backend/api/__init__.py similarity index 100% rename from qwen3-tts-backend/core/__init__.py rename to canto-backend/api/__init__.py diff --git a/qwen3-tts-backend/api/admin.py b/canto-backend/api/admin.py similarity index 100% rename from qwen3-tts-backend/api/admin.py rename to canto-backend/api/admin.py diff --git a/qwen3-tts-backend/api/audiobook.py b/canto-backend/api/audiobook.py similarity index 100% rename from qwen3-tts-backend/api/audiobook.py rename to canto-backend/api/audiobook.py diff --git a/qwen3-tts-backend/api/auth.py b/canto-backend/api/auth.py similarity index 100% rename from qwen3-tts-backend/api/auth.py rename to canto-backend/api/auth.py diff --git a/qwen3-tts-backend/api/jobs.py b/canto-backend/api/jobs.py similarity index 100% rename from qwen3-tts-backend/api/jobs.py rename to canto-backend/api/jobs.py diff --git a/qwen3-tts-backend/api/tts.py b/canto-backend/api/tts.py similarity index 100% rename from qwen3-tts-backend/api/tts.py rename to canto-backend/api/tts.py diff --git a/qwen3-tts-backend/api/users.py b/canto-backend/api/users.py similarity index 100% rename from qwen3-tts-backend/api/users.py rename to canto-backend/api/users.py diff --git a/qwen3-tts-backend/api/voice_designs.py b/canto-backend/api/voice_designs.py similarity index 100% rename from qwen3-tts-backend/api/voice_designs.py rename to canto-backend/api/voice_designs.py diff --git a/qwen3-tts-backend/config.py b/canto-backend/config.py similarity index 100% rename from qwen3-tts-backend/config.py rename to canto-backend/config.py diff --git a/qwen3-tts-backend/db/__init__.py b/canto-backend/core/__init__.py similarity index 100% rename from qwen3-tts-backend/db/__init__.py rename to canto-backend/core/__init__.py diff --git a/qwen3-tts-backend/core/audiobook_service.py b/canto-backend/core/audiobook_service.py similarity index 100% rename from qwen3-tts-backend/core/audiobook_service.py rename to canto-backend/core/audiobook_service.py diff --git a/qwen3-tts-backend/core/batch_processor.py b/canto-backend/core/batch_processor.py similarity index 100% rename from qwen3-tts-backend/core/batch_processor.py rename to canto-backend/core/batch_processor.py diff --git a/qwen3-tts-backend/core/cache_manager.py b/canto-backend/core/cache_manager.py similarity index 100% rename from qwen3-tts-backend/core/cache_manager.py rename to canto-backend/core/cache_manager.py diff --git a/qwen3-tts-backend/core/cleanup.py b/canto-backend/core/cleanup.py similarity index 100% rename from qwen3-tts-backend/core/cleanup.py rename to canto-backend/core/cleanup.py diff --git a/qwen3-tts-backend/core/config.py b/canto-backend/core/config.py similarity index 100% rename from qwen3-tts-backend/core/config.py rename to canto-backend/core/config.py diff --git a/qwen3-tts-backend/core/database.py b/canto-backend/core/database.py similarity index 100% rename from qwen3-tts-backend/core/database.py rename to canto-backend/core/database.py diff --git a/qwen3-tts-backend/core/init_admin.py b/canto-backend/core/init_admin.py similarity index 100% rename from qwen3-tts-backend/core/init_admin.py rename to canto-backend/core/init_admin.py diff --git a/qwen3-tts-backend/core/llm_service.py b/canto-backend/core/llm_service.py similarity index 100% rename from qwen3-tts-backend/core/llm_service.py rename to canto-backend/core/llm_service.py diff --git a/qwen3-tts-backend/core/metrics.py b/canto-backend/core/metrics.py similarity index 100% rename from qwen3-tts-backend/core/metrics.py rename to canto-backend/core/metrics.py diff --git a/qwen3-tts-backend/core/model_manager.py b/canto-backend/core/model_manager.py similarity index 100% rename from qwen3-tts-backend/core/model_manager.py rename to canto-backend/core/model_manager.py diff --git a/qwen3-tts-backend/core/progress_store.py b/canto-backend/core/progress_store.py similarity index 100% rename from qwen3-tts-backend/core/progress_store.py rename to canto-backend/core/progress_store.py diff --git a/qwen3-tts-backend/core/security.py b/canto-backend/core/security.py similarity index 100% rename from qwen3-tts-backend/core/security.py rename to canto-backend/core/security.py diff --git a/qwen3-tts-backend/core/tts_service.py b/canto-backend/core/tts_service.py similarity index 100% rename from qwen3-tts-backend/core/tts_service.py rename to canto-backend/core/tts_service.py diff --git a/qwen3-tts-backend/indextts/__init__.py b/canto-backend/db/__init__.py similarity index 100% rename from qwen3-tts-backend/indextts/__init__.py rename to canto-backend/db/__init__.py diff --git a/qwen3-tts-backend/db/crud.py b/canto-backend/db/crud.py similarity index 100% rename from qwen3-tts-backend/db/crud.py rename to canto-backend/db/crud.py diff --git a/qwen3-tts-backend/db/database.py b/canto-backend/db/database.py similarity index 100% rename from qwen3-tts-backend/db/database.py rename to canto-backend/db/database.py diff --git a/qwen3-tts-backend/db/migrate_add_local_permission.py b/canto-backend/db/migrate_add_local_permission.py similarity index 100% rename from qwen3-tts-backend/db/migrate_add_local_permission.py rename to canto-backend/db/migrate_add_local_permission.py diff --git a/qwen3-tts-backend/db/models.py b/canto-backend/db/models.py similarity index 100% rename from qwen3-tts-backend/db/models.py rename to canto-backend/db/models.py diff --git a/qwen3-tts-backend/deploy/nginx.conf b/canto-backend/deploy/nginx.conf similarity index 87% rename from qwen3-tts-backend/deploy/nginx.conf rename to canto-backend/deploy/nginx.conf index 98fd570..dd9f728 100644 --- a/qwen3-tts-backend/deploy/nginx.conf +++ b/canto-backend/deploy/nginx.conf @@ -1,4 +1,4 @@ -upstream qwen_tts_backend { +upstream canto_backend { server 127.0.0.1:8000; } @@ -13,7 +13,7 @@ server { proxy_send_timeout 300s; location / { - proxy_pass http://qwen_tts_backend; + proxy_pass http://canto_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -34,20 +34,20 @@ server { } location /outputs/ { - alias /opt/qwen3-tts-backend/outputs/; + alias /opt/canto-backend/outputs/; autoindex off; add_header Cache-Control "public, max-age=3600"; add_header Content-Disposition "attachment"; } location /health { - proxy_pass http://qwen_tts_backend/health; + proxy_pass http://canto_backend/health; proxy_set_header Host $host; access_log off; } location /metrics { - proxy_pass http://qwen_tts_backend/metrics; + proxy_pass http://canto_backend/metrics; proxy_set_header Host $host; allow 127.0.0.1; deny all; diff --git a/qwen3-tts-backend/deploy/qwen-tts.service b/canto-backend/deploy/qwen-tts.service similarity index 52% rename from qwen3-tts-backend/deploy/qwen-tts.service rename to canto-backend/deploy/qwen-tts.service index 1996986..6ab8ed2 100644 --- a/qwen3-tts-backend/deploy/qwen-tts.service +++ b/canto-backend/deploy/qwen-tts.service @@ -1,15 +1,15 @@ [Unit] -Description=Qwen3-TTS Backend API Service +Description=Canto Backend API Service After=network.target [Service] Type=simple User=qwen-tts Group=qwen-tts -WorkingDirectory=/opt/qwen3-tts-backend -Environment="PATH=/opt/conda/envs/qwen3-tts/bin:/usr/local/bin:/usr/bin:/bin" -EnvironmentFile=/opt/qwen3-tts-backend/.env -ExecStart=/opt/conda/envs/qwen3-tts/bin/python main.py +WorkingDirectory=/opt/canto-backend +Environment="PATH=/opt/conda/envs/canto/bin:/usr/local/bin:/usr/bin:/bin" +EnvironmentFile=/opt/canto-backend/.env +ExecStart=/opt/conda/envs/canto/bin/python main.py Restart=on-failure RestartSec=10s StandardOutput=append:/var/log/qwen-tts/app.log diff --git a/qwen3-tts-backend/indextts/gpt/__init__.py b/canto-backend/indextts/__init__.py similarity index 100% rename from qwen3-tts-backend/indextts/gpt/__init__.py rename to canto-backend/indextts/__init__.py diff --git a/qwen3-tts-backend/indextts/gpt/conformer/__init__.py b/canto-backend/indextts/gpt/__init__.py similarity index 100% rename from qwen3-tts-backend/indextts/gpt/conformer/__init__.py rename to canto-backend/indextts/gpt/__init__.py diff --git a/qwen3-tts-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/__init__.py b/canto-backend/indextts/gpt/conformer/__init__.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/__init__.py rename to canto-backend/indextts/gpt/conformer/__init__.py diff --git a/qwen3-tts-backend/indextts/gpt/conformer/attention.py b/canto-backend/indextts/gpt/conformer/attention.py similarity index 100% rename from qwen3-tts-backend/indextts/gpt/conformer/attention.py rename to canto-backend/indextts/gpt/conformer/attention.py diff --git a/qwen3-tts-backend/indextts/gpt/conformer/embedding.py b/canto-backend/indextts/gpt/conformer/embedding.py similarity index 100% rename from qwen3-tts-backend/indextts/gpt/conformer/embedding.py rename to canto-backend/indextts/gpt/conformer/embedding.py diff --git a/qwen3-tts-backend/indextts/gpt/conformer/subsampling.py b/canto-backend/indextts/gpt/conformer/subsampling.py similarity index 100% rename from qwen3-tts-backend/indextts/gpt/conformer/subsampling.py rename to canto-backend/indextts/gpt/conformer/subsampling.py diff --git a/qwen3-tts-backend/indextts/gpt/conformer_encoder.py b/canto-backend/indextts/gpt/conformer_encoder.py similarity index 100% rename from qwen3-tts-backend/indextts/gpt/conformer_encoder.py rename to canto-backend/indextts/gpt/conformer_encoder.py diff --git a/qwen3-tts-backend/indextts/gpt/model_v2.py b/canto-backend/indextts/gpt/model_v2.py similarity index 100% rename from qwen3-tts-backend/indextts/gpt/model_v2.py rename to canto-backend/indextts/gpt/model_v2.py diff --git a/qwen3-tts-backend/indextts/gpt/perceiver.py b/canto-backend/indextts/gpt/perceiver.py similarity index 100% rename from qwen3-tts-backend/indextts/gpt/perceiver.py rename to canto-backend/indextts/gpt/perceiver.py diff --git a/qwen3-tts-backend/indextts/gpt/transformers_generation_utils.py b/canto-backend/indextts/gpt/transformers_generation_utils.py similarity index 100% rename from qwen3-tts-backend/indextts/gpt/transformers_generation_utils.py rename to canto-backend/indextts/gpt/transformers_generation_utils.py diff --git a/qwen3-tts-backend/indextts/gpt/transformers_gpt2.py b/canto-backend/indextts/gpt/transformers_gpt2.py similarity index 100% rename from qwen3-tts-backend/indextts/gpt/transformers_gpt2.py rename to canto-backend/indextts/gpt/transformers_gpt2.py diff --git a/qwen3-tts-backend/indextts/gpt/transformers_modeling_utils.py b/canto-backend/indextts/gpt/transformers_modeling_utils.py similarity index 100% rename from qwen3-tts-backend/indextts/gpt/transformers_modeling_utils.py rename to canto-backend/indextts/gpt/transformers_modeling_utils.py diff --git a/qwen3-tts-backend/indextts/infer_indextts2.py b/canto-backend/indextts/infer_indextts2.py similarity index 100% rename from qwen3-tts-backend/indextts/infer_indextts2.py rename to canto-backend/indextts/infer_indextts2.py diff --git a/qwen3-tts-backend/indextts/s2mel/dac/__init__.py b/canto-backend/indextts/s2mel/dac/__init__.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/dac/__init__.py rename to canto-backend/indextts/s2mel/dac/__init__.py diff --git a/qwen3-tts-backend/indextts/s2mel/dac/__main__.py b/canto-backend/indextts/s2mel/dac/__main__.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/dac/__main__.py rename to canto-backend/indextts/s2mel/dac/__main__.py diff --git a/qwen3-tts-backend/indextts/s2mel/dac/model/__init__.py b/canto-backend/indextts/s2mel/dac/model/__init__.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/dac/model/__init__.py rename to canto-backend/indextts/s2mel/dac/model/__init__.py diff --git a/qwen3-tts-backend/indextts/s2mel/dac/model/base.py b/canto-backend/indextts/s2mel/dac/model/base.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/dac/model/base.py rename to canto-backend/indextts/s2mel/dac/model/base.py diff --git a/qwen3-tts-backend/indextts/s2mel/dac/model/dac.py b/canto-backend/indextts/s2mel/dac/model/dac.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/dac/model/dac.py rename to canto-backend/indextts/s2mel/dac/model/dac.py diff --git a/qwen3-tts-backend/indextts/s2mel/dac/model/discriminator.py b/canto-backend/indextts/s2mel/dac/model/discriminator.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/dac/model/discriminator.py rename to canto-backend/indextts/s2mel/dac/model/discriminator.py diff --git a/qwen3-tts-backend/indextts/s2mel/dac/model/encodec.py b/canto-backend/indextts/s2mel/dac/model/encodec.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/dac/model/encodec.py rename to canto-backend/indextts/s2mel/dac/model/encodec.py diff --git a/qwen3-tts-backend/indextts/s2mel/dac/nn/__init__.py b/canto-backend/indextts/s2mel/dac/nn/__init__.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/dac/nn/__init__.py rename to canto-backend/indextts/s2mel/dac/nn/__init__.py diff --git a/qwen3-tts-backend/indextts/s2mel/dac/nn/layers.py b/canto-backend/indextts/s2mel/dac/nn/layers.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/dac/nn/layers.py rename to canto-backend/indextts/s2mel/dac/nn/layers.py diff --git a/qwen3-tts-backend/indextts/s2mel/dac/nn/loss.py b/canto-backend/indextts/s2mel/dac/nn/loss.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/dac/nn/loss.py rename to canto-backend/indextts/s2mel/dac/nn/loss.py diff --git a/qwen3-tts-backend/indextts/s2mel/dac/nn/quantize.py b/canto-backend/indextts/s2mel/dac/nn/quantize.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/dac/nn/quantize.py rename to canto-backend/indextts/s2mel/dac/nn/quantize.py diff --git a/qwen3-tts-backend/indextts/s2mel/dac/utils/__init__.py b/canto-backend/indextts/s2mel/dac/utils/__init__.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/dac/utils/__init__.py rename to canto-backend/indextts/s2mel/dac/utils/__init__.py diff --git a/qwen3-tts-backend/indextts/s2mel/dac/utils/decode.py b/canto-backend/indextts/s2mel/dac/utils/decode.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/dac/utils/decode.py rename to canto-backend/indextts/s2mel/dac/utils/decode.py diff --git a/qwen3-tts-backend/indextts/s2mel/dac/utils/encode.py b/canto-backend/indextts/s2mel/dac/utils/encode.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/dac/utils/encode.py rename to canto-backend/indextts/s2mel/dac/utils/encode.py diff --git a/qwen3-tts-backend/indextts/s2mel/modules/audio.py b/canto-backend/indextts/s2mel/modules/audio.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/audio.py rename to canto-backend/indextts/s2mel/modules/audio.py diff --git a/qwen3-tts-backend/indextts/s2mel/modules/bigvgan/activations.py b/canto-backend/indextts/s2mel/modules/bigvgan/activations.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/bigvgan/activations.py rename to canto-backend/indextts/s2mel/modules/bigvgan/activations.py diff --git a/qwen3-tts-backend/indextts/utils/__init__.py b/canto-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/__init__.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/__init__.py rename to canto-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/__init__.py diff --git a/qwen3-tts-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/activation1d.py b/canto-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/activation1d.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/activation1d.py rename to canto-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/activation1d.py diff --git a/qwen3-tts-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/anti_alias_activation.cpp b/canto-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/anti_alias_activation.cpp similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/anti_alias_activation.cpp rename to canto-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/anti_alias_activation.cpp diff --git a/qwen3-tts-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/anti_alias_activation_cuda.cu b/canto-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/anti_alias_activation_cuda.cu similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/anti_alias_activation_cuda.cu rename to canto-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/anti_alias_activation_cuda.cu diff --git a/qwen3-tts-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/compat.h b/canto-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/compat.h similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/compat.h rename to canto-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/compat.h diff --git a/qwen3-tts-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/load.py b/canto-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/load.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/load.py rename to canto-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/load.py diff --git a/qwen3-tts-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/type_shim.h b/canto-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/type_shim.h similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/type_shim.h rename to canto-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/type_shim.h diff --git a/qwen3-tts-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/__init__.py b/canto-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/__init__.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/__init__.py rename to canto-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/__init__.py diff --git a/qwen3-tts-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/act.py b/canto-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/act.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/act.py rename to canto-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/act.py diff --git a/qwen3-tts-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/filter.py b/canto-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/filter.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/filter.py rename to canto-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/filter.py diff --git a/qwen3-tts-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/resample.py b/canto-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/resample.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/resample.py rename to canto-backend/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/resample.py diff --git a/qwen3-tts-backend/indextts/s2mel/modules/bigvgan/bigvgan.py b/canto-backend/indextts/s2mel/modules/bigvgan/bigvgan.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/bigvgan/bigvgan.py rename to canto-backend/indextts/s2mel/modules/bigvgan/bigvgan.py diff --git a/qwen3-tts-backend/indextts/s2mel/modules/bigvgan/config.json b/canto-backend/indextts/s2mel/modules/bigvgan/config.json similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/bigvgan/config.json rename to canto-backend/indextts/s2mel/modules/bigvgan/config.json diff --git a/qwen3-tts-backend/indextts/s2mel/modules/bigvgan/env.py b/canto-backend/indextts/s2mel/modules/bigvgan/env.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/bigvgan/env.py rename to canto-backend/indextts/s2mel/modules/bigvgan/env.py diff --git a/qwen3-tts-backend/indextts/s2mel/modules/bigvgan/meldataset.py b/canto-backend/indextts/s2mel/modules/bigvgan/meldataset.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/bigvgan/meldataset.py rename to canto-backend/indextts/s2mel/modules/bigvgan/meldataset.py diff --git a/qwen3-tts-backend/indextts/s2mel/modules/bigvgan/utils.py b/canto-backend/indextts/s2mel/modules/bigvgan/utils.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/bigvgan/utils.py rename to canto-backend/indextts/s2mel/modules/bigvgan/utils.py diff --git a/qwen3-tts-backend/indextts/s2mel/modules/campplus/DTDNN.py b/canto-backend/indextts/s2mel/modules/campplus/DTDNN.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/campplus/DTDNN.py rename to canto-backend/indextts/s2mel/modules/campplus/DTDNN.py diff --git a/qwen3-tts-backend/indextts/s2mel/modules/campplus/layers.py b/canto-backend/indextts/s2mel/modules/campplus/layers.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/campplus/layers.py rename to canto-backend/indextts/s2mel/modules/campplus/layers.py diff --git a/qwen3-tts-backend/indextts/s2mel/modules/commons.py b/canto-backend/indextts/s2mel/modules/commons.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/commons.py rename to canto-backend/indextts/s2mel/modules/commons.py diff --git a/qwen3-tts-backend/indextts/s2mel/modules/diffusion_transformer.py b/canto-backend/indextts/s2mel/modules/diffusion_transformer.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/diffusion_transformer.py rename to canto-backend/indextts/s2mel/modules/diffusion_transformer.py diff --git a/qwen3-tts-backend/indextts/s2mel/modules/encodec.py b/canto-backend/indextts/s2mel/modules/encodec.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/encodec.py rename to canto-backend/indextts/s2mel/modules/encodec.py diff --git a/qwen3-tts-backend/indextts/s2mel/modules/flow_matching.py b/canto-backend/indextts/s2mel/modules/flow_matching.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/flow_matching.py rename to canto-backend/indextts/s2mel/modules/flow_matching.py diff --git a/qwen3-tts-backend/indextts/s2mel/modules/gpt_fast/generate.py b/canto-backend/indextts/s2mel/modules/gpt_fast/generate.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/gpt_fast/generate.py rename to canto-backend/indextts/s2mel/modules/gpt_fast/generate.py diff --git a/qwen3-tts-backend/indextts/s2mel/modules/gpt_fast/model.py b/canto-backend/indextts/s2mel/modules/gpt_fast/model.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/gpt_fast/model.py rename to canto-backend/indextts/s2mel/modules/gpt_fast/model.py diff --git a/qwen3-tts-backend/indextts/s2mel/modules/gpt_fast/quantize.py b/canto-backend/indextts/s2mel/modules/gpt_fast/quantize.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/gpt_fast/quantize.py rename to canto-backend/indextts/s2mel/modules/gpt_fast/quantize.py diff --git a/qwen3-tts-backend/indextts/s2mel/modules/length_regulator.py b/canto-backend/indextts/s2mel/modules/length_regulator.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/length_regulator.py rename to canto-backend/indextts/s2mel/modules/length_regulator.py diff --git a/qwen3-tts-backend/indextts/s2mel/modules/wavenet.py b/canto-backend/indextts/s2mel/modules/wavenet.py similarity index 100% rename from qwen3-tts-backend/indextts/s2mel/modules/wavenet.py rename to canto-backend/indextts/s2mel/modules/wavenet.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/__init__.py b/canto-backend/indextts/utils/__init__.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/__init__.py rename to canto-backend/indextts/utils/__init__.py diff --git a/qwen3-tts-backend/indextts/utils/arch_util.py b/canto-backend/indextts/utils/arch_util.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/arch_util.py rename to canto-backend/indextts/utils/arch_util.py diff --git a/qwen3-tts-backend/indextts/utils/checkpoint.py b/canto-backend/indextts/utils/checkpoint.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/checkpoint.py rename to canto-backend/indextts/utils/checkpoint.py diff --git a/qwen3-tts-backend/indextts/utils/common.py b/canto-backend/indextts/utils/common.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/common.py rename to canto-backend/indextts/utils/common.py diff --git a/qwen3-tts-backend/indextts/utils/feature_extractors.py b/canto-backend/indextts/utils/feature_extractors.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/feature_extractors.py rename to canto-backend/indextts/utils/feature_extractors.py diff --git a/qwen3-tts-backend/indextts/utils/front.py b/canto-backend/indextts/utils/front.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/front.py rename to canto-backend/indextts/utils/front.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/__init__.py b/canto-backend/indextts/utils/maskgct/models/codec/__init__.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/__init__.py rename to canto-backend/indextts/utils/maskgct/models/codec/__init__.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/amphion_codec/codec.py b/canto-backend/indextts/utils/maskgct/models/codec/amphion_codec/codec.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/amphion_codec/codec.py rename to canto-backend/indextts/utils/maskgct/models/codec/amphion_codec/codec.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/amphion_codec/quantize/__init__.py b/canto-backend/indextts/utils/maskgct/models/codec/amphion_codec/quantize/__init__.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/amphion_codec/quantize/__init__.py rename to canto-backend/indextts/utils/maskgct/models/codec/amphion_codec/quantize/__init__.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/amphion_codec/quantize/factorized_vector_quantize.py b/canto-backend/indextts/utils/maskgct/models/codec/amphion_codec/quantize/factorized_vector_quantize.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/amphion_codec/quantize/factorized_vector_quantize.py rename to canto-backend/indextts/utils/maskgct/models/codec/amphion_codec/quantize/factorized_vector_quantize.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/amphion_codec/quantize/lookup_free_quantize.py b/canto-backend/indextts/utils/maskgct/models/codec/amphion_codec/quantize/lookup_free_quantize.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/amphion_codec/quantize/lookup_free_quantize.py rename to canto-backend/indextts/utils/maskgct/models/codec/amphion_codec/quantize/lookup_free_quantize.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/amphion_codec/quantize/residual_vq.py b/canto-backend/indextts/utils/maskgct/models/codec/amphion_codec/quantize/residual_vq.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/amphion_codec/quantize/residual_vq.py rename to canto-backend/indextts/utils/maskgct/models/codec/amphion_codec/quantize/residual_vq.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/amphion_codec/quantize/vector_quantize.py b/canto-backend/indextts/utils/maskgct/models/codec/amphion_codec/quantize/vector_quantize.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/amphion_codec/quantize/vector_quantize.py rename to canto-backend/indextts/utils/maskgct/models/codec/amphion_codec/quantize/vector_quantize.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/amphion_codec/vocos.py b/canto-backend/indextts/utils/maskgct/models/codec/amphion_codec/vocos.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/amphion_codec/vocos.py rename to canto-backend/indextts/utils/maskgct/models/codec/amphion_codec/vocos.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/codec_dataset.py b/canto-backend/indextts/utils/maskgct/models/codec/codec_dataset.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/codec_dataset.py rename to canto-backend/indextts/utils/maskgct/models/codec/codec_dataset.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/codec_inference.py b/canto-backend/indextts/utils/maskgct/models/codec/codec_inference.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/codec_inference.py rename to canto-backend/indextts/utils/maskgct/models/codec/codec_inference.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/codec_sampler.py b/canto-backend/indextts/utils/maskgct/models/codec/codec_sampler.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/codec_sampler.py rename to canto-backend/indextts/utils/maskgct/models/codec/codec_sampler.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/codec_trainer.py b/canto-backend/indextts/utils/maskgct/models/codec/codec_trainer.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/codec_trainer.py rename to canto-backend/indextts/utils/maskgct/models/codec/codec_trainer.py diff --git a/qwen3-tts-backend/schemas/__init__.py b/canto-backend/indextts/utils/maskgct/models/codec/facodec/__init__.py similarity index 100% rename from qwen3-tts-backend/schemas/__init__.py rename to canto-backend/indextts/utils/maskgct/models/codec/facodec/__init__.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/__init__.py b/canto-backend/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/__init__.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/__init__.py rename to canto-backend/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/__init__.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/act.py b/canto-backend/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/act.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/act.py rename to canto-backend/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/act.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/filter.py b/canto-backend/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/filter.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/filter.py rename to canto-backend/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/filter.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/resample.py b/canto-backend/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/resample.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/resample.py rename to canto-backend/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/resample.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/facodec_dataset.py b/canto-backend/indextts/utils/maskgct/models/codec/facodec/facodec_dataset.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/facodec_dataset.py rename to canto-backend/indextts/utils/maskgct/models/codec/facodec/facodec_dataset.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/facodec_inference.py b/canto-backend/indextts/utils/maskgct/models/codec/facodec/facodec_inference.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/facodec_inference.py rename to canto-backend/indextts/utils/maskgct/models/codec/facodec/facodec_inference.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/facodec_trainer.py b/canto-backend/indextts/utils/maskgct/models/codec/facodec/facodec_trainer.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/facodec_trainer.py rename to canto-backend/indextts/utils/maskgct/models/codec/facodec/facodec_trainer.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/modules/JDC/__init__.py b/canto-backend/indextts/utils/maskgct/models/codec/facodec/modules/JDC/__init__.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/modules/JDC/__init__.py rename to canto-backend/indextts/utils/maskgct/models/codec/facodec/modules/JDC/__init__.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/modules/JDC/bst.t7 b/canto-backend/indextts/utils/maskgct/models/codec/facodec/modules/JDC/bst.t7 similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/modules/JDC/bst.t7 rename to canto-backend/indextts/utils/maskgct/models/codec/facodec/modules/JDC/bst.t7 diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/modules/JDC/model.py b/canto-backend/indextts/utils/maskgct/models/codec/facodec/modules/JDC/model.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/modules/JDC/model.py rename to canto-backend/indextts/utils/maskgct/models/codec/facodec/modules/JDC/model.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/modules/attentions.py b/canto-backend/indextts/utils/maskgct/models/codec/facodec/modules/attentions.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/modules/attentions.py rename to canto-backend/indextts/utils/maskgct/models/codec/facodec/modules/attentions.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/modules/commons.py b/canto-backend/indextts/utils/maskgct/models/codec/facodec/modules/commons.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/modules/commons.py rename to canto-backend/indextts/utils/maskgct/models/codec/facodec/modules/commons.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/modules/gradient_reversal.py b/canto-backend/indextts/utils/maskgct/models/codec/facodec/modules/gradient_reversal.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/modules/gradient_reversal.py rename to canto-backend/indextts/utils/maskgct/models/codec/facodec/modules/gradient_reversal.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/modules/layers.py b/canto-backend/indextts/utils/maskgct/models/codec/facodec/modules/layers.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/modules/layers.py rename to canto-backend/indextts/utils/maskgct/models/codec/facodec/modules/layers.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/modules/quantize.py b/canto-backend/indextts/utils/maskgct/models/codec/facodec/modules/quantize.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/modules/quantize.py rename to canto-backend/indextts/utils/maskgct/models/codec/facodec/modules/quantize.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/modules/style_encoder.py b/canto-backend/indextts/utils/maskgct/models/codec/facodec/modules/style_encoder.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/modules/style_encoder.py rename to canto-backend/indextts/utils/maskgct/models/codec/facodec/modules/style_encoder.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/modules/wavenet.py b/canto-backend/indextts/utils/maskgct/models/codec/facodec/modules/wavenet.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/modules/wavenet.py rename to canto-backend/indextts/utils/maskgct/models/codec/facodec/modules/wavenet.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/optimizer.py b/canto-backend/indextts/utils/maskgct/models/codec/facodec/optimizer.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/facodec/optimizer.py rename to canto-backend/indextts/utils/maskgct/models/codec/facodec/optimizer.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/kmeans/repcodec_model.py b/canto-backend/indextts/utils/maskgct/models/codec/kmeans/repcodec_model.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/kmeans/repcodec_model.py rename to canto-backend/indextts/utils/maskgct/models/codec/kmeans/repcodec_model.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/kmeans/vocos.py b/canto-backend/indextts/utils/maskgct/models/codec/kmeans/vocos.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/kmeans/vocos.py rename to canto-backend/indextts/utils/maskgct/models/codec/kmeans/vocos.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/melvqgan/melspec.py b/canto-backend/indextts/utils/maskgct/models/codec/melvqgan/melspec.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/melvqgan/melspec.py rename to canto-backend/indextts/utils/maskgct/models/codec/melvqgan/melspec.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/README.md b/canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/README.md similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/README.md rename to canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/README.md diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/__init__.py b/canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/__init__.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/__init__.py rename to canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/__init__.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/__init__.py b/canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/__init__.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/__init__.py rename to canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/__init__.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/act.py b/canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/act.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/act.py rename to canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/act.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/filter.py b/canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/filter.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/filter.py rename to canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/filter.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/resample.py b/canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/resample.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/resample.py rename to canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/resample.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/facodec.py b/canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/facodec.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/facodec.py rename to canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/facodec.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/gradient_reversal.py b/canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/gradient_reversal.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/gradient_reversal.py rename to canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/gradient_reversal.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/melspec.py b/canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/melspec.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/melspec.py rename to canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/melspec.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/quantize/__init__.py b/canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/quantize/__init__.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/quantize/__init__.py rename to canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/quantize/__init__.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/quantize/fvq.py b/canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/quantize/fvq.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/quantize/fvq.py rename to canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/quantize/fvq.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/quantize/rvq.py b/canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/quantize/rvq.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/quantize/rvq.py rename to canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/quantize/rvq.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/transformer.py b/canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/transformer.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/ns3_codec/transformer.py rename to canto-backend/indextts/utils/maskgct/models/codec/ns3_codec/transformer.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/speechtokenizer/model.py b/canto-backend/indextts/utils/maskgct/models/codec/speechtokenizer/model.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/speechtokenizer/model.py rename to canto-backend/indextts/utils/maskgct/models/codec/speechtokenizer/model.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/__init__.py b/canto-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/__init__.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/__init__.py rename to canto-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/__init__.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/conv.py b/canto-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/conv.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/conv.py rename to canto-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/conv.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/lstm.py b/canto-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/lstm.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/lstm.py rename to canto-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/lstm.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/norm.py b/canto-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/norm.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/norm.py rename to canto-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/norm.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/__init__.py b/canto-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/__init__.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/__init__.py rename to canto-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/__init__.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/ac.py b/canto-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/ac.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/ac.py rename to canto-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/ac.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/core_vq.py b/canto-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/core_vq.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/core_vq.py rename to canto-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/core_vq.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/distrib.py b/canto-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/distrib.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/distrib.py rename to canto-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/distrib.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/vq.py b/canto-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/vq.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/vq.py rename to canto-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/vq.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/seanet.py b/canto-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/seanet.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/seanet.py rename to canto-backend/indextts/utils/maskgct/models/codec/speechtokenizer/modules/seanet.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/codec/vevo/vevo_repcodec.py b/canto-backend/indextts/utils/maskgct/models/codec/vevo/vevo_repcodec.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/codec/vevo/vevo_repcodec.py rename to canto-backend/indextts/utils/maskgct/models/codec/vevo/vevo_repcodec.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/tts/maskgct/ckpt/wav2vec2bert_stats.pt b/canto-backend/indextts/utils/maskgct/models/tts/maskgct/ckpt/wav2vec2bert_stats.pt similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/tts/maskgct/ckpt/wav2vec2bert_stats.pt rename to canto-backend/indextts/utils/maskgct/models/tts/maskgct/ckpt/wav2vec2bert_stats.pt diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/tts/maskgct/llama_nar.py b/canto-backend/indextts/utils/maskgct/models/tts/maskgct/llama_nar.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/tts/maskgct/llama_nar.py rename to canto-backend/indextts/utils/maskgct/models/tts/maskgct/llama_nar.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct/models/tts/maskgct/maskgct_s2a.py b/canto-backend/indextts/utils/maskgct/models/tts/maskgct/maskgct_s2a.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct/models/tts/maskgct/maskgct_s2a.py rename to canto-backend/indextts/utils/maskgct/models/tts/maskgct/maskgct_s2a.py diff --git a/qwen3-tts-backend/indextts/utils/maskgct_utils.py b/canto-backend/indextts/utils/maskgct_utils.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/maskgct_utils.py rename to canto-backend/indextts/utils/maskgct_utils.py diff --git a/qwen3-tts-backend/indextts/utils/typical_sampling.py b/canto-backend/indextts/utils/typical_sampling.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/typical_sampling.py rename to canto-backend/indextts/utils/typical_sampling.py diff --git a/qwen3-tts-backend/indextts/utils/webui_utils.py b/canto-backend/indextts/utils/webui_utils.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/webui_utils.py rename to canto-backend/indextts/utils/webui_utils.py diff --git a/qwen3-tts-backend/indextts/utils/xtransformers.py b/canto-backend/indextts/utils/xtransformers.py similarity index 100% rename from qwen3-tts-backend/indextts/utils/xtransformers.py rename to canto-backend/indextts/utils/xtransformers.py diff --git a/qwen3-tts-backend/main.py b/canto-backend/main.py similarity index 97% rename from qwen3-tts-backend/main.py rename to canto-backend/main.py index 8fc6826..2052a85 100644 --- a/qwen3-tts-backend/main.py +++ b/canto-backend/main.py @@ -51,7 +51,7 @@ limiter = Limiter(key_func=get_user_identifier) @asynccontextmanager async def lifespan(app: FastAPI): - logger.info("Starting Qwen3-TTS Backend Service...") + logger.info("Starting Canto Backend Service...") logger.info(f"Model base path: {settings.MODEL_BASE_PATH}") logger.info(f"Cache directory: {settings.CACHE_DIR}") logger.info(f"Output directory: {settings.OUTPUT_DIR}") @@ -116,7 +116,7 @@ async def lifespan(app: FastAPI): yield - logger.info("Shutting down Qwen3-TTS Backend Service...") + logger.info("Shutting down Canto Backend Service...") scheduler.shutdown() logger.info("Scheduler shutdown completed") @@ -129,8 +129,8 @@ async def lifespan(app: FastAPI): logger.error(f"Model cleanup failed: {e}") app = FastAPI( - title="Qwen3-TTS-WebUI Backend API", - description="Backend service for Qwen3-TTS-WebUI text-to-speech system", + title="Canto Backend API", + description="Backend service for Canto text-to-speech system", version="0.1.0", lifespan=lifespan ) diff --git a/qwen3-tts-backend/pytest.ini b/canto-backend/pytest.ini similarity index 100% rename from qwen3-tts-backend/pytest.ini rename to canto-backend/pytest.ini diff --git a/canto-backend/qwen3-tts.service b/canto-backend/qwen3-tts.service new file mode 100644 index 0000000..4b5e7e9 --- /dev/null +++ b/canto-backend/qwen3-tts.service @@ -0,0 +1,15 @@ +[Unit] +Description=Qwen3 TTS Backend Service +After=network.target + +[Service] +Type=simple +User=bdim +WorkingDirectory=/opt/qwen3-tts/qwen3-tts-backend +Environment="PATH=/home/bdim/miniconda3/envs/qwen3-tts-deploy/bin:/usr/local/bin:/usr/bin:/bin" +ExecStart=/home/bdim/miniconda3/envs/qwen3-tts-deploy/bin/uvicorn main:app --host 0.0.0.0 --port 8884 +Restart=always +RestartSec=10 + +[Install] +WantedBy=multi-user.target diff --git a/qwen3-tts-backend/requirements.txt b/canto-backend/requirements.txt similarity index 100% rename from qwen3-tts-backend/requirements.txt rename to canto-backend/requirements.txt diff --git a/qwen3-tts-backend/utils/__init__.py b/canto-backend/schemas/__init__.py similarity index 100% rename from qwen3-tts-backend/utils/__init__.py rename to canto-backend/schemas/__init__.py diff --git a/qwen3-tts-backend/schemas/audiobook.py b/canto-backend/schemas/audiobook.py similarity index 100% rename from qwen3-tts-backend/schemas/audiobook.py rename to canto-backend/schemas/audiobook.py diff --git a/qwen3-tts-backend/schemas/cache.py b/canto-backend/schemas/cache.py similarity index 100% rename from qwen3-tts-backend/schemas/cache.py rename to canto-backend/schemas/cache.py diff --git a/qwen3-tts-backend/schemas/job.py b/canto-backend/schemas/job.py similarity index 100% rename from qwen3-tts-backend/schemas/job.py rename to canto-backend/schemas/job.py diff --git a/qwen3-tts-backend/schemas/tts.py b/canto-backend/schemas/tts.py similarity index 100% rename from qwen3-tts-backend/schemas/tts.py rename to canto-backend/schemas/tts.py diff --git a/qwen3-tts-backend/schemas/user.py b/canto-backend/schemas/user.py similarity index 100% rename from qwen3-tts-backend/schemas/user.py rename to canto-backend/schemas/user.py diff --git a/qwen3-tts-backend/schemas/voice_design.py b/canto-backend/schemas/voice_design.py similarity index 100% rename from qwen3-tts-backend/schemas/voice_design.py rename to canto-backend/schemas/voice_design.py diff --git a/canto-backend/utils/__init__.py b/canto-backend/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/qwen3-tts-backend/utils/audio.py b/canto-backend/utils/audio.py similarity index 100% rename from qwen3-tts-backend/utils/audio.py rename to canto-backend/utils/audio.py diff --git a/qwen3-tts-backend/utils/metrics.py b/canto-backend/utils/metrics.py similarity index 100% rename from qwen3-tts-backend/utils/metrics.py rename to canto-backend/utils/metrics.py diff --git a/qwen3-tts-backend/utils/validation.py b/canto-backend/utils/validation.py similarity index 100% rename from qwen3-tts-backend/utils/validation.py rename to canto-backend/utils/validation.py diff --git a/canto-frontend/.env.example b/canto-frontend/.env.example new file mode 100644 index 0000000..d1b87fd --- /dev/null +++ b/canto-frontend/.env.example @@ -0,0 +1,2 @@ +VITE_API_URL=/api +VITE_APP_NAME=Canto diff --git a/qwen3-tts-frontend/.gitignore b/canto-frontend/.gitignore similarity index 100% rename from qwen3-tts-frontend/.gitignore rename to canto-frontend/.gitignore diff --git a/qwen3-tts-frontend/components.json b/canto-frontend/components.json similarity index 100% rename from qwen3-tts-frontend/components.json rename to canto-frontend/components.json diff --git a/qwen3-tts-frontend/eslint.config.js b/canto-frontend/eslint.config.js similarity index 100% rename from qwen3-tts-frontend/eslint.config.js rename to canto-frontend/eslint.config.js diff --git a/qwen3-tts-frontend/fonts/noto-serif-jp-regular.woff2 b/canto-frontend/fonts/noto-serif-jp-regular.woff2 similarity index 100% rename from qwen3-tts-frontend/fonts/noto-serif-jp-regular.woff2 rename to canto-frontend/fonts/noto-serif-jp-regular.woff2 diff --git a/qwen3-tts-frontend/fonts/noto-serif-kr-regular.woff2 b/canto-frontend/fonts/noto-serif-kr-regular.woff2 similarity index 100% rename from qwen3-tts-frontend/fonts/noto-serif-kr-regular.woff2 rename to canto-frontend/fonts/noto-serif-kr-regular.woff2 diff --git a/qwen3-tts-frontend/fonts/noto-serif-latin-regular.woff2 b/canto-frontend/fonts/noto-serif-latin-regular.woff2 similarity index 100% rename from qwen3-tts-frontend/fonts/noto-serif-latin-regular.woff2 rename to canto-frontend/fonts/noto-serif-latin-regular.woff2 diff --git a/qwen3-tts-frontend/fonts/noto-serif-sc-regular.woff2 b/canto-frontend/fonts/noto-serif-sc-regular.woff2 similarity index 100% rename from qwen3-tts-frontend/fonts/noto-serif-sc-regular.woff2 rename to canto-frontend/fonts/noto-serif-sc-regular.woff2 diff --git a/qwen3-tts-frontend/fonts/noto-serif-tc-regular.woff2 b/canto-frontend/fonts/noto-serif-tc-regular.woff2 similarity index 100% rename from qwen3-tts-frontend/fonts/noto-serif-tc-regular.woff2 rename to canto-frontend/fonts/noto-serif-tc-regular.woff2 diff --git a/qwen3-tts-frontend/index.html b/canto-frontend/index.html similarity index 95% rename from qwen3-tts-frontend/index.html rename to canto-frontend/index.html index d6345a9..dfddea3 100644 --- a/qwen3-tts-frontend/index.html +++ b/canto-frontend/index.html @@ -4,7 +4,7 @@ - Qwen3-TTS-WebUI + Canto