Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
cdb1a37
Add Chirp3 markup & style TTS options
TiTidom-RC May 16, 2026
d661e78
Only send prompt for Gemini TTS voices
TiTidom-RC May 16, 2026
d3f3dd5
Use text arg for Google Cloud TTS input
TiTidom-RC May 16, 2026
373f568
Use 'markup' for Chirp3 SynthesisInput
TiTidom-RC May 16, 2026
e85b146
Remove TTS style/markup support from tests
TiTidom-RC May 16, 2026
53eaf35
Add Gemini TTS options to config UI
TiTidom-RC May 16, 2026
cd4a923
Remove extra <hr> in configuration UI
TiTidom-RC May 16, 2026
9acb86b
Update Gemini TTS UI labels, layout and voices
TiTidom-RC May 16, 2026
c95223e
Add AI auth options and reorder config UI
TiTidom-RC May 16, 2026
4706d15
Add Gemini TTS support and test UI
TiTidom-RC May 16, 2026
070f40f
Log Gemini TTS settings at startup
TiTidom-RC May 16, 2026
b1f6aae
Gemini TTS: encapsulate PCM as WAV and use prompt
TiTidom-RC May 16, 2026
c343ff1
Specify mimeType for Google Home TTS
TiTidom-RC May 16, 2026
456aa0d
Allow .wav files in data/.htaccess
TiTidom-RC May 16, 2026
a13acf1
Add PHP audio proxy and use it in ttscastd
TiTidom-RC May 16, 2026
a4b9010
Harden audio proxy, adjust TTS URLs, bump genai
TiTidom-RC May 17, 2026
d9eda21
Use sample rate from Gemini TTS MIME type
TiTidom-RC May 17, 2026
7dbc38b
Add logging for native WAV and refine comments
TiTidom-RC May 17, 2026
91ba5bf
Parse channels and rate from Gemini TTS MIME
TiTidom-RC May 17, 2026
89a050b
Add Gemini TTS pricing tooltip to config
TiTidom-RC May 17, 2026
dcc104e
Add gCloud TTS pricing tooltip; tweak Gemini copy
TiTidom-RC May 17, 2026
a8f2c60
Adjust French spacing in tooltips
TiTidom-RC May 17, 2026
b3349c4
Add Gemini TTS style option and pass-through
TiTidom-RC May 17, 2026
7eeb0f0
Bump ttscast plugin version to 1.9.0
TiTidom-RC May 17, 2026
7b09d14
Log Gemini TTS style on startup
TiTidom-RC May 17, 2026
5abf586
Swap Gemini TTS default/style fields and adjust layout
TiTidom-RC May 17, 2026
ae52f2c
Fallback to config Gemini TTS style
TiTidom-RC May 17, 2026
70bba43
Don't mention date/day unless explicitly asked
TiTidom-RC May 17, 2026
6e570af
Add per-notification TTS engine override
TiTidom-RC May 17, 2026
bdc1e45
Normalize TTS log prefix to [DAEMON][TTS]
TiTidom-RC May 17, 2026
64cc8e4
Log error for unsupported TTS engine
TiTidom-RC May 17, 2026
e3cd4d5
Add 'engine' to ttscast option keys
TiTidom-RC May 17, 2026
ca95b1b
Merge pull request #246 from TiTidom-RC/dev
TiTidom-RC May 17, 2026
4289ec5
Auto update translation done by Mips2648/plugins-translations workflow
TiTidom-RC May 17, 2026
37863cf
Merge pull request #247 from TiTidom-RC/translations
TiTidom-RC May 17, 2026
a12fe02
Merge pull request #248 from TiTidom-RC/beta
TiTidom-RC May 17, 2026
0383de6
Support multiple audio formats & media proxy
TiTidom-RC May 17, 2026
b0f0ca7
Merge pull request #249 from TiTidom-RC/dev
TiTidom-RC May 17, 2026
d71897c
Auto update translation done by Mips2648/plugins-translations workflow
TiTidom-RC May 17, 2026
aeac2e3
Merge pull request #250 from TiTidom-RC/translations
TiTidom-RC May 17, 2026
da69e67
Merge pull request #251 from TiTidom-RC/beta
TiTidom-RC May 17, 2026
ccb1749
Bump plugin version and google-genai
TiTidom-RC May 19, 2026
d9a95d6
Add Gemini TTS streaming support
TiTidom-RC May 19, 2026
94c41ca
Add configurable L16 rate/channels; tighten TTS checks
TiTidom-RC May 19, 2026
a3341ea
Add Gemini TTS streaming test and timeouts
TiTidom-RC May 22, 2026
148c3a7
Reposition Gemini TTS voice style input
TiTidom-RC May 22, 2026
520ecff
Keep Gemini TTS client alive during stream
TiTidom-RC May 22, 2026
da04c13
Improve ttscast proxy validation, streaming & logs
TiTidom-RC May 22, 2026
fc2eed3
Add WAV header for open-ended TTS stream
TiTidom-RC May 22, 2026
3e991af
Use audio/wav MIME for GeminiTTS streams
TiTidom-RC May 22, 2026
b9f60c7
Flush headers early and lower pipe write latency
TiTidom-RC May 22, 2026
965e779
Support LINEAR16 WAV and configurable sample rate
TiTidom-RC May 22, 2026
7dd1b1e
Add timing logs for Gemini TTS streaming
TiTidom-RC May 22, 2026
b4efb47
Make pipe writes blocking after open
TiTidom-RC May 22, 2026
a5b99bd
Limit Gemini test streaming; add detailed timing logs
TiTidom-RC May 22, 2026
1fef796
Add Gemini TTS streaming option; remove global
TiTidom-RC May 22, 2026
7e8686e
Warn when streaming used with unsupported TTS engine
TiTidom-RC May 22, 2026
ef10eb6
Relocate streamingDefault to Gemini TTS block
TiTidom-RC May 22, 2026
d2769e5
Merge pull request #252 from TiTidom-RC/dev
TiTidom-RC May 22, 2026
f46b2a0
Auto update translation done by Mips2648/plugins-translations workflow
TiTidom-RC May 22, 2026
d967bbe
Merge pull request #253 from TiTidom-RC/translations
TiTidom-RC May 22, 2026
0897458
Merge pull request #254 from TiTidom-RC/beta
TiTidom-RC May 22, 2026
f3339b6
Log Gemini TTS streaming default at startup
TiTidom-RC May 22, 2026
7fff3d0
Merge pull request #255 from TiTidom-RC/dev
TiTidom-RC May 22, 2026
742f8fb
Add timing logs for Gemini streaming
TiTidom-RC May 22, 2026
410da3e
Merge pull request #256 from TiTidom-RC/dev
TiTidom-RC May 22, 2026
58c5a88
Promote TTS logs from debug to info
TiTidom-RC May 22, 2026
fd25e16
Merge pull request #257 from TiTidom-RC/dev
TiTidom-RC May 22, 2026
c77d8f5
Improve logging levels and messages
TiTidom-RC May 23, 2026
bbebf5a
Add PHP compat & Python CI; update editor ignores
TiTidom-RC May 23, 2026
416e2b1
Bump ttscast plugin version to 1.9.3
TiTidom-RC May 23, 2026
5ab2b22
Merge pull request #258 from TiTidom-RC/dev
TiTidom-RC May 23, 2026
148b73d
Handle engine override in TTS options
TiTidom-RC May 23, 2026
cc78087
Merge pull request #259 from TiTidom-RC/dev
TiTidom-RC May 23, 2026
4530f7d
Add Chromecast-specific log level setting
TiTidom-RC May 26, 2026
b6e4829
Move Chromecast log level setting down
TiTidom-RC May 26, 2026
f91a05e
Merge pull request #260 from TiTidom-RC/dev
TiTidom-RC May 26, 2026
1733cba
Auto update translation done by Mips2648/plugins-translations workflow
TiTidom-RC May 26, 2026
2cd241b
Merge pull request #261 from TiTidom-RC/translations
TiTidom-RC May 26, 2026
63f813b
Merge pull request #262 from TiTidom-RC/beta
TiTidom-RC May 26, 2026
22b06a4
Enhance TTS logging with context and formatting
TiTidom-RC May 27, 2026
b1571f9
Bump ttscast plugin version to 1.9.5
TiTidom-RC May 27, 2026
ab04168
Merge pull request #263 from TiTidom-RC/dev
TiTidom-RC May 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/checkPHP.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ on:

jobs:
php-lint:
name: PHP Lint — PHP 8.4
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
Expand Down
40 changes: 40 additions & 0 deletions .github/workflows/checkPHPCompat.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: PHP Compatibility Check

on:
pull_request:
branches:
- beta

jobs:
php-compat:
name: PHPStan — PHP ${{ matrix.php-version }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
php-version: ['7.4', '8.2', '8.4']

steps:
- uses: actions/checkout@v6

- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-version }}
tools: composer
coverage: none

- name: Install PHPStan
run: composer global require phpstan/phpstan --no-interaction --quiet

- name: Checkout Jeedom Core (sparse)
run: |
git clone --depth 1 --filter=blob:none --sparse \
https://github.com/jeedom/core.git /tmp/jeedom-core
git -C /tmp/jeedom-core sparse-checkout set core/class core/php core/repo

- name: PHP ${{ matrix.php-version }} Compatibility Check
run: |
PHPSTAN_VERSION=$(echo "${{ matrix.php-version }}" | awk -F. '{printf "%d%02d00", $1, $2}')
printf 'includes:\n - phpstan.neon.dist\nparameters:\n phpVersion: %s\n scanDirectories:\n - /tmp/jeedom-core/core/class\n - /tmp/jeedom-core/core/php\n - /tmp/jeedom-core/core/repo\n' "$PHPSTAN_VERSION" > phpstan.neon
phpstan analyse --level 0 --no-progress core/ desktop/ plugin_info/
25 changes: 25 additions & 0 deletions .github/workflows/checkPython.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Python Check

on:
pull_request:
branches:
- beta

jobs:
python-check:
name: Ruff Lint
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v6

- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.12'

- name: Install ruff
run: pip install ruff

- name: Ruff Check
run: ruff check resources/ttscastd/
17 changes: 17 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"authmode",
"bigben",
"bubbleupnp",
"castloglevel",
"chromecast",
"chromecasts",
"cmdwaittimeout",
Expand All @@ -31,16 +32,25 @@
"customradios",
"customsounds",
"customtext",
"defaultpromptresult",
"Deutsch",
"Echec",
"ehthumbs",
"Eiwc",
"ENXIO",
"filecontent",
"gcast",
"GCAST",
"gcloudapikey",
"gcloudaudioencoding",
"gcloudtts",
"geminitts",
"geminittsdefault",
"geminittsenabled",
"geminittsmodel",
"geminittsstyle",
"generatetts",
"getdefaultprompt",
"Getteur",
"github",
"gtranslatetts",
Expand All @@ -62,6 +72,7 @@
"maxrss",
"MDNS",
"miniplus",
"mkfifo",
"multizone",
"MUSICTRACK",
"mycast",
Expand All @@ -73,9 +84,12 @@
"newdevice",
"newone",
"newttscast",
"NONBLOCK",
"OLDDIR",
"Ondashboard",
"Onmobile",
"phpstan",
"PHPSTAN",
"purgettscache",
"pycache",
"refreshcast",
Expand All @@ -84,8 +98,10 @@
"rtcast",
"scanmode",
"setvolume",
"shivammathur",
"signum",
"ssml",
"streamingdefault",
"stype",
"subdevices",
"ttsaiapikey",
Expand All @@ -112,6 +128,7 @@
"volumeset",
"volumeup",
"Wavenet",
"WRONLY",
"youtube",
"ZCONF"
]
Expand Down
12 changes: 7 additions & 5 deletions core/ajax/ttscast.ajax.php
Original file line number Diff line number Diff line change
Expand Up @@ -109,23 +109,25 @@
}
log::add('ttscast', 'debug', "[UPLOAD][CustomSound] filename: {$_FILES['fileCustomSound']['name']}");
$extension = strtolower(strrchr($_FILES['fileCustomSound']['name'], '.'));
if (!in_array($extension, array('.mp3'))) {
throw new Exception('[UPLOAD][CustomSound] Extension de fichier non valide (autorisé .mp3) : ' . $extension);
if (!in_array($extension, array('.mp3', '.wav', '.ogg', '.opus', '.flac'))) {
throw new Exception('[UPLOAD][CustomSound] Extension de fichier non valide (autorisé .mp3, .wav, .ogg, .opus, .flac) : ' . $extension);
}

$safeFilename = basename($_FILES['fileCustomSound']['name']);

# TODO limiter taille upload mp3 dans les customSounds ?
/* if (filesize($_FILES['fileCustomSound']['tmp_name']) > 10000) {
throw new Exception(__('[UPLOAD][CustomSound] Le fichier est trop gros (max. 10Ko)', __FILE__));
} */

$filepath = __DIR__ . "/../../data/media/custom/{$_FILES['fileCustomSound']['name']}";
$filepath = __DIR__ . "/../../data/media/custom/{$safeFilename}";
log::add('ttscast', 'debug', "[UPLOAD][CustomSound] filepath: {$filepath}");
file_put_contents($filepath, file_get_contents($_FILES['fileCustomSound']['tmp_name']));
if (!file_exists($filepath)) {
throw new Exception(__('[UPLOAD][CustomSound] Impossible de sauvegarder le fichier', __FILE__));
}
log::add('ttscast', 'info', "[UPLOAD][CustomSound] Upload OK :: {$_FILES['fileCustomSound']['name']}");
ajax::success("{$_FILES['fileCustomSound']['name']}");
log::add('ttscast', 'info', "[UPLOAD][CustomSound] Upload OK :: {$safeFilename}");
ajax::success("{$safeFilename}");
}

if (init('action') == 'uploadCustomRadios') {
Expand Down
Loading