termux-tts 1.4.3 → 1.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,98 +1,98 @@
1
- name: Release
2
-
3
- on:
4
- push:
5
- branches:
6
- - main
7
- - master
8
- tags:
9
- - 'v*'
10
- workflow_dispatch:
11
-
12
- permissions:
13
- contents: read
14
-
15
- jobs:
16
- publish-pypi:
17
- name: Publish to PyPI
18
- runs-on: ubuntu-latest
19
- steps:
20
- - name: Checkout repository
21
- uses: actions/checkout@v4
22
-
23
- - name: Check if PyPI project exists
24
- id: check-py
25
- run: |
26
- if [ -f "pyproject.toml" ] || [ -f "setup.py" ]; then
27
- echo "has_python=true" >> $GITHUB_OUTPUT
28
- else
29
- echo "has_python=false" >> $GITHUB_OUTPUT
30
- fi
31
-
32
- - name: Set up Python
33
- if: steps.check-py.outputs.has_python == 'true'
34
- uses: actions/setup-python@v5
35
- with:
36
- python-version: '3.11'
37
-
38
- - name: Install build dependencies
39
- if: steps.check-py.outputs.has_python == 'true'
40
- run: |
41
- python -m pip install --upgrade pip
42
- pip install build twine
43
-
44
- - name: Build distributions
45
- if: steps.check-py.outputs.has_python == 'true'
46
- run: python -m build
47
-
48
- - name: Verify distribution archives
49
- if: steps.check-py.outputs.has_python == 'true'
50
- run: twine check dist/*
51
-
52
- - name: Publish to PyPI
53
- if: steps.check-py.outputs.has_python == 'true'
54
- env:
55
- TWINE_USERNAME: __token__
56
- TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
57
- run: |
58
- twine upload --skip-existing dist/*
59
-
60
- publish-npm:
61
- name: Publish to NPM
62
- runs-on: ubuntu-latest
63
- steps:
64
- - name: Checkout repository
65
- uses: actions/checkout@v4
66
-
67
- - name: Set up Node.js
68
- uses: actions/setup-node@v4
69
- with:
70
- node-version: '20'
71
- registry-url: 'https://registry.npmjs.org'
72
-
73
- - name: Publish NPM package
74
- env:
75
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
76
- run: |
77
- if [ -f "package.json" ]; then
78
- PKG_NAME=$(node -p "require('./package.json').name")
79
- PKG_VER=$(node -p "require('./package.json').version")
80
- if [ "$(npm view ${PKG_NAME}@${PKG_VER} version 2>/dev/null)" = "${PKG_VER}" ]; then
81
- echo "Version ${PKG_VER} of ${PKG_NAME} is already published on NPM. Skipping."
82
- else
83
- echo "Publishing ${PKG_NAME}@${PKG_VER} to NPM..."
84
- npm publish --access public
85
- fi
86
- elif [ -f "npm/package.json" ]; then
87
- cd npm
88
- PKG_NAME=$(node -p "require('./package.json').name")
89
- PKG_VER=$(node -p "require('./package.json').version")
90
- if [ "$(npm view ${PKG_NAME}@${PKG_VER} version 2>/dev/null)" = "${PKG_VER}" ]; then
91
- echo "Version ${PKG_VER} of ${PKG_NAME} is already published on NPM. Skipping."
92
- else
93
- echo "Publishing ${PKG_NAME}@${PKG_VER} to NPM..."
94
- npm publish --access public
95
- fi
96
- else
97
- echo "No package.json found. Skipping NPM publish."
98
- fi
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ - master
8
+ tags:
9
+ - 'v*'
10
+ workflow_dispatch:
11
+
12
+ permissions:
13
+ contents: read
14
+
15
+ jobs:
16
+ publish-pypi:
17
+ name: Publish to PyPI
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - name: Checkout repository
21
+ uses: actions/checkout@v4
22
+
23
+ - name: Check if PyPI project exists
24
+ id: check-py
25
+ run: |
26
+ if [ -f "pyproject.toml" ] || [ -f "setup.py" ]; then
27
+ echo "has_python=true" >> $GITHUB_OUTPUT
28
+ else
29
+ echo "has_python=false" >> $GITHUB_OUTPUT
30
+ fi
31
+
32
+ - name: Set up Python
33
+ if: steps.check-py.outputs.has_python == 'true'
34
+ uses: actions/setup-python@v5
35
+ with:
36
+ python-version: '3.11'
37
+
38
+ - name: Install build dependencies
39
+ if: steps.check-py.outputs.has_python == 'true'
40
+ run: |
41
+ python -m pip install --upgrade pip
42
+ pip install build twine
43
+
44
+ - name: Build distributions
45
+ if: steps.check-py.outputs.has_python == 'true'
46
+ run: python -m build
47
+
48
+ - name: Verify distribution archives
49
+ if: steps.check-py.outputs.has_python == 'true'
50
+ run: twine check dist/*
51
+
52
+ - name: Publish to PyPI
53
+ if: steps.check-py.outputs.has_python == 'true'
54
+ env:
55
+ TWINE_USERNAME: __token__
56
+ TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
57
+ run: |
58
+ twine upload --skip-existing dist/*
59
+
60
+ publish-npm:
61
+ name: Publish to NPM
62
+ runs-on: ubuntu-latest
63
+ steps:
64
+ - name: Checkout repository
65
+ uses: actions/checkout@v4
66
+
67
+ - name: Set up Node.js
68
+ uses: actions/setup-node@v4
69
+ with:
70
+ node-version: '20'
71
+ registry-url: 'https://registry.npmjs.org'
72
+
73
+ - name: Publish NPM package
74
+ env:
75
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
76
+ run: |
77
+ if [ -f "package.json" ]; then
78
+ PKG_NAME=$(node -p "require('./package.json').name")
79
+ PKG_VER=$(node -p "require('./package.json').version")
80
+ if [ "$(npm view ${PKG_NAME}@${PKG_VER} version 2>/dev/null)" = "${PKG_VER}" ]; then
81
+ echo "Version ${PKG_VER} of ${PKG_NAME} is already published on NPM. Skipping."
82
+ else
83
+ echo "Publishing ${PKG_NAME}@${PKG_VER} to NPM..."
84
+ npm publish --access public
85
+ fi
86
+ elif [ -f "npm/package.json" ]; then
87
+ cd npm
88
+ PKG_NAME=$(node -p "require('./package.json').name")
89
+ PKG_VER=$(node -p "require('./package.json').version")
90
+ if [ "$(npm view ${PKG_NAME}@${PKG_VER} version 2>/dev/null)" = "${PKG_VER}" ]; then
91
+ echo "Version ${PKG_VER} of ${PKG_NAME} is already published on NPM. Skipping."
92
+ else
93
+ echo "Publishing ${PKG_NAME}@${PKG_VER} to NPM..."
94
+ npm publish --access public
95
+ fi
96
+ else
97
+ echo "No package.json found. Skipping NPM publish."
98
+ fi
package/CHANGELOG.md CHANGED
@@ -1,57 +1,69 @@
1
- # Changelog
2
-
3
- All notable changes to this project will be documented in this file.
4
-
5
- ## [1.4.3] - 2026-09-07
6
-
7
- ### Added
8
- - **Multi-Tier Dynamic Candidate Resolution**: Replaced single hardcoded `v1.0.0-vulkan` URL in `installer.py` with 4-tier candidate resolution (`TERMUX_TTS_RELEASE_TAG`, `v{__version__}`, `releases/latest/download`, `uno-km/ameva-runtime` SSOT fallback, and companion fallback).
9
- - **Dual-Path Installation**: Installs and links precompiled Vulkan binary `sherpa-ncnn-offline-tts` to both `~/.local/bin` and `$PREFIX/bin` for instant global PATH resolution.
10
- - **Dynamic SSOT User-Agent**: Injects dynamic package version into download requests.
11
-
12
- ---
13
-
14
- ## [1.4.2] - 2026-09-07
15
-
16
- ### Added
17
- - Complete 12-tier enterprise English documentation overhaul for PyPI and GitHub/NPM.
18
- - Detailed empirical mobile hardware benchmarks (Snapdragon 8 Elite / Adreno 830, Exynos 1380 / Mali-G68 MP5).
19
- - Full GPU interconnect architecture documentation with SPIR-V compute shader details.
20
- - Comprehensive CPU vs. GPU thermal dissipation and latency trade-off analysis.
21
- - 3-stage 24/7 unattended background execution guide (Termux wake-lock, battery optimization, ADB phantom process killer).
22
- - Expanded technical SEO metadata keywords (34 keywords).
23
-
24
- ---
25
-
26
- ## [1.4.1] - 2026-09-07
27
-
28
- ### Fixed
29
- - Fixed npm package.json bin path specification (removed './' prefix).
30
- - Integrated GitHub Actions automated CI/CD release workflow.
31
-
32
- ---
33
-
34
- ## [1.4.0] - 2026-09-07
35
-
36
- ### Added
37
- - Direct integration with `TtsAdapter` from `ameva_runtime.adapters` SSOT.
38
- - Dual-tier VITS Vulkan neural engine routing with strict Fail-Fast error semantics.
39
- - English localization for all diagnostics, logs, and exception messages.
40
-
41
- ---
42
-
43
- ## [1.1.5] - 2026-09-05
44
-
45
- ### Changed
46
- - Synchronized install.sh hardware diagnostics binding to ameva-runtime.
47
- - Modernized 12-stage hardware diagnostic bridge and documentation architecture diagrams.
48
-
49
- ---
50
-
51
- ## [1.1.4] - 2026-09-05
52
-
53
- ### Changed
54
- - Migrated hardware acceleration dependency to unified `ameva-runtime>=2.0.0` and `@ameva/runtime>=2.0.0`.
55
- - Synchronized Python and npm package versions to v1.1.4.
56
-
57
-
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ ## [1.4.4] - 2026-09-14
6
+
7
+ ### Added
8
+ - **Multilingual Neural Orchestrator**: Integrated `MultilingualNeuralEngine` capable of dynamic cross-language code-switching across 9 official languages (ko, en, ja, zh, hi, ru, es, fr, de).
9
+ - **Resident C-API Acceleration**: Implemented `SherpaResidentManager` and `SherpaCapiSession` for in-memory model caching via direct C-API bindings, achieving sub-0.18x RTF and eliminating subprocess invocation overhead.
10
+ - **Zero-Config CLI Ergonomics**: Promoted speech synthesis (`synth`) as the default top-level subcommand; allows direct positional text (`termux-tts "text" --play`); eliminated necessity of `-e multilingual` flag.
11
+ - **Universal Unicode Script Classifier**: Built `MultilingualTokenizer` covering Hangul, Latin, Devanagari (Hindi), Cyrillic (Russian), CJK, and Arabic scripts with 50ms smooth pause padding.
12
+ - **On-Demand Model Provisioning & Self-Healing**: Enhanced `termux-tts install` to provision English/Korean by default, with on-demand flags (`--models hi/ja/ru/zh/all`) and actionable English guidance with absolute paths for uninstalled models.
13
+ - **Defensive Path Resolution**: Hardened path parsing across `AudioBuffer.save()` and CLI entrypoints with automatic directory creation and `Path.expanduser()` resolution.
14
+
15
+ ---
16
+
17
+ ## [1.4.3] - 2026-09-07
18
+
19
+ ### Added
20
+ - **Multi-Tier Dynamic Candidate Resolution**: Replaced single hardcoded `v1.0.0-vulkan` URL in `installer.py` with 4-tier candidate resolution (`TERMUX_TTS_RELEASE_TAG`, `v{__version__}`, `releases/latest/download`, `uno-km/ameva-runtime` SSOT fallback, and companion fallback).
21
+ - **Dual-Path Installation**: Installs and links precompiled Vulkan binary `sherpa-ncnn-offline-tts` to both `~/.local/bin` and `$PREFIX/bin` for instant global PATH resolution.
22
+ - **Dynamic SSOT User-Agent**: Injects dynamic package version into download requests.
23
+
24
+ ---
25
+
26
+ ## [1.4.2] - 2026-09-07
27
+
28
+ ### Added
29
+ - Complete 12-tier enterprise English documentation overhaul for PyPI and GitHub/NPM.
30
+ - Detailed empirical mobile hardware benchmarks (Snapdragon 8 Elite / Adreno 830, Exynos 1380 / Mali-G68 MP5).
31
+ - Full GPU interconnect architecture documentation with SPIR-V compute shader details.
32
+ - Comprehensive CPU vs. GPU thermal dissipation and latency trade-off analysis.
33
+ - 3-stage 24/7 unattended background execution guide (Termux wake-lock, battery optimization, ADB phantom process killer).
34
+ - Expanded technical SEO metadata keywords (34 keywords).
35
+
36
+ ---
37
+
38
+ ## [1.4.1] - 2026-09-07
39
+
40
+ ### Fixed
41
+ - Fixed npm package.json bin path specification (removed './' prefix).
42
+ - Integrated GitHub Actions automated CI/CD release workflow.
43
+
44
+ ---
45
+
46
+ ## [1.4.0] - 2026-09-07
47
+
48
+ ### Added
49
+ - Direct integration with `TtsAdapter` from `ameva_runtime.adapters` SSOT.
50
+ - Dual-tier VITS Vulkan neural engine routing with strict Fail-Fast error semantics.
51
+ - English localization for all diagnostics, logs, and exception messages.
52
+
53
+ ---
54
+
55
+ ## [1.1.5] - 2026-09-05
56
+
57
+ ### Changed
58
+ - Synchronized install.sh hardware diagnostics binding to ameva-runtime.
59
+ - Modernized 12-stage hardware diagnostic bridge and documentation architecture diagrams.
60
+
61
+ ---
62
+
63
+ ## [1.1.4] - 2026-09-05
64
+
65
+ ### Changed
66
+ - Migrated hardware acceleration dependency to unified `ameva-runtime>=2.0.0` and `@ameva/runtime>=2.0.0`.
67
+ - Synchronized Python and npm package versions to v1.1.4.
68
+
69
+
package/LICENSE CHANGED
@@ -1,17 +1,17 @@
1
- Apache License
2
- Version 2.0, January 2004
3
- http://www.apache.org/licenses/
4
-
5
- Copyright 2026 UnoKim & AMEVA Open-Source Foundation
6
-
7
- Licensed under the Apache License, Version 2.0 (the "License");
8
- you may not use this file except in compliance with the License.
9
- You may obtain a copy of the License at
10
-
11
- http://www.apache.org/licenses/LICENSE-2.0
12
-
13
- Unless required by applicable law or agreed to in writing, software
14
- distributed under the License is distributed on an "AS IS" BASIS,
15
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- See the License for the specific language governing permissions and
17
- limitations under the License.
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ Copyright 2026 UnoKim & AMEVA Open-Source Foundation
6
+
7
+ Licensed under the Apache License, Version 2.0 (the "License");
8
+ you may not use this file except in compliance with the License.
9
+ You may obtain a copy of the License at
10
+
11
+ http://www.apache.org/licenses/LICENSE-2.0
12
+
13
+ Unless required by applicable law or agreed to in writing, software
14
+ distributed under the License is distributed on an "AS IS" BASIS,
15
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ See the License for the specific language governing permissions and
17
+ limitations under the License.