diff --git a/CHANGELOG.md b/CHANGELOG.md index d5907d7..dc20abc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,35 @@ Format : [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/), versions ## [Non publié] +## [1.4.0] - 2026-10-28 + +### Ajouté +- Lecteur : réglage « Couper le Mix complet à la lecture » (Général, activé par défaut). À + l'ouverture d'un clip qui a une piste Jeu ou une piste d'appli, la piste 1 est coupée pour ne + rien entendre en double ; elle se réactive avec M. L'état muet/solo/volume est retenu par + clip. L'export et la compression gardent la piste 1 tant qu'on ne l'a pas coupée soi-même + (GAL-04). +- Son « clip terminé » à la fin d'un clip avec « après » (La → Mi → La à l'octave), distinct du + carillon de l'appui et des sons d'enregistrement, soumis à « Son de confirmation » et exclu des + clips en « Tous les sons sauf PalaClips » (RPL-10). La fin d'un enregistrement ne joue plus le + carillon de sauvegarde par-dessus son propre son. +- Réglages → Replay & qualité en trois onglets (Replay, Enregistrement, Commun), chacun avec son + estimation de taille ; l'onglet est retenu pendant la session, un point marque l'onglet qui a + un changement non appliqué, et le résumé de l'enregistrement sur État ouvre l'onglet + Enregistrement (APP-15). + +### Modifié +- État : en fenêtre large, « Derniers clips » et la colonne des pistes et performances défilent + chacun de leur côté sous le bandeau ; sous 1000 px, la page défile comme avant. 12 derniers + clips au lieu de 5. +- État : la cellule Source affiche la vraie source (« 2560×1440 · 240 Hz » pour un écran, la + taille de la fenêtre capturée pour une fenêtre), mise à jour en direct ; la qualité enregistrée + reste dans le résumé de la cellule Replay. +- Lecteur : pendant le glisser sur la barre de temps ou une piste, le curseur, le temps et la + zone jouée suivent la souris à chaque image ; l'image est chargée quand la souris s'arrête + (120 ms) et au relâchement, une demande à la fois. Sur un clip 1440p120 HEVC de 3 min : + 2 chargements au lieu de 122, curseur redessiné toutes les 17 ms au lieu d'être figé (GAL-03). + ## [1.3.1] - 2026-10-26 ### Ajouté diff --git a/Cargo.lock b/Cargo.lock index eb7f20e..2d656f9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3012,7 +3012,7 @@ dependencies = [ [[package]] name = "palaclips-app" -version = "1.3.1" +version = "1.4.0" dependencies = [ "palaclips-engine", "serde", @@ -3033,7 +3033,7 @@ dependencies = [ [[package]] name = "palaclips-cli" -version = "1.3.1" +version = "1.4.0" dependencies = [ "anyhow", "clap", @@ -3049,7 +3049,7 @@ dependencies = [ [[package]] name = "palaclips-engine" -version = "1.3.1" +version = "1.4.0" dependencies = [ "crossbeam-channel", "notify", diff --git a/Cargo.toml b/Cargo.toml index d6b793c..218fb42 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ default-members = ["crates/engine", "crates/cli"] exclude = ["third_party"] [workspace.package] -version = "1.3.1" +version = "1.4.0" edition = "2024" rust-version = "1.90" license = "MIT" diff --git a/README.fr.md b/README.fr.md index cc98deb..2b19bbd 100644 --- a/README.fr.md +++ b/README.fr.md @@ -62,7 +62,9 @@ fonctionne avec les anti-triches comme Easy Anti-Cheat. - **Capture d'un écran ou d'une fenêtre** par Windows Graphics Capture ; une fenêtre est retrouvée par le nom de son programme après un redémarrage. - **Galerie de clips** avec un lecteur multipiste : écoute piste par piste (muet, solo, - volume), découpe, export, copie du fichier pour le coller dans Discord. + volume, retenus par clip ; Mix complet coupé à l'ouverture pour ne rien entendre en double), + déplacement fluide même sur un long clip HEVC, découpe, export, copie du fichier pour le + coller dans Discord. - **Compression à une taille cible** : 20 Mo pour Discord, 50 ou 500 Mo pour Nitro, ou une taille libre ; résolution et images par seconde choisies selon la taille, taille finale vérifiée. Depuis la galerie (un ou plusieurs clips), le lecteur ou par glisser-déposer depuis @@ -86,7 +88,7 @@ fonctionne avec les anti-triches comme Easy Anti-Cheat. | Replay & qualité | |---| -| ![Replay & qualité : taille d'un clip et Mo par minute, puis les réglages du replay, de l'enregistrement et communs](docs/screenshots/fr/replay-quality.png) | +| ![Replay & qualité en trois onglets (replay, enregistrement, commun), chacun avec son estimation de taille](docs/screenshots/fr/replay-quality.png) | ## Configuration requise diff --git a/README.md b/README.md index 2a0781e..9b59b7c 100644 --- a/README.md +++ b/README.md @@ -61,8 +61,9 @@ Anti-Cheat. Without a hardware encoder, **encoding on the processor** in H.264 or AV1. - **Screen or window capture** through Windows Graphics Capture; a window is found again by its program name after a restart. -- **Clip gallery** with a multitrack player: listen track by track (mute, solo, volume), trim, - export, or copy the file to paste it into Discord. +- **Clip gallery** with a multitrack player: listen track by track (mute, solo, volume, + remembered per clip; Full mix muted on opening so nothing plays twice), smooth scrubbing even + on long HEVC clips, trim, export, or copy the file to paste it into Discord. - **Compress to a target size**: 20 MB for Discord, 50 or 500 MB for Nitro, or any size; resolution and frame rate follow the size, and the final size is checked. From the gallery (one or several clips), the player, or by dragging files from File Explorer. @@ -84,7 +85,7 @@ Anti-Cheat. | Replay & quality | |---| -| ![Replay & quality: clip size and MB per minute, then the replay, recording and shared settings](docs/screenshots/en/replay-quality.png) | +| ![Replay & quality in three tabs (replay, recording, shared), each with its size estimate](docs/screenshots/en/replay-quality.png) | ## Requirements diff --git a/app/package-lock.json b/app/package-lock.json index 47bfe2c..7dae4d2 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -1,12 +1,12 @@ { "name": "palaclips-ui", - "version": "1.3.1", + "version": "1.4.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "palaclips-ui", - "version": "1.3.1", + "version": "1.4.0", "dependencies": { "@fontsource/barlow": "5.3.0", "@fontsource/barlow-condensed": "5.3.0", diff --git a/app/package.json b/app/package.json index fd1fd23..a976b19 100644 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "palaclips-ui", "private": true, - "version": "1.3.1", + "version": "1.4.0", "type": "module", "scripts": { "dev": "vite", diff --git a/app/src-tauri/tauri.conf.json b/app/src-tauri/tauri.conf.json index ad14a58..5a95968 100644 --- a/app/src-tauri/tauri.conf.json +++ b/app/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "PalaClips", - "version": "1.3.1", + "version": "1.4.0", "identifier": "com.palawi.palaclips", "build": { "beforeDevCommand": "npm run dev", diff --git a/docs/HANDOFF.md b/docs/HANDOFF.md index 733d986..d3e0d3d 100644 --- a/docs/HANDOFF.md +++ b/docs/HANDOFF.md @@ -59,7 +59,15 @@ l'accord de Palawi. Brouillon relu connecté (version, signature = `.sig`, liens publics) ; vérifié sans connexion après publication : `latest.json` 1.3.1, installeur, `.sig`, page et CHANGELOG en 200. Branche : `dev`. -- **Dernière mise à jour :** 2026-10-26 +- **v1.4.0 en préparation (2026-10-27/28)** : six retours de Palawi, une PR chacun : défilement + d'État et 12 clips (#125), cellule Source = vraie source (#126, `SourceMode`, `source_changed`), + glisser fluide dans le lecteur (#124, `ScrubSession`), son « clip terminé » (#127, + `clip_saved.origin`), Replay & qualité en onglets (#128), Mix complet coupé à la lecture et + état par clip (#129, `player.mute_full_mix`, colonne `mix`). Décisions et mesures : + `docs/reports/v1.4.md`. Session manuelle de Palawi validée le 2026-10-28. Préparation de la + version : branche `chore/release-v1.4.0`. Reste : PR `dev` → `main`, tag et brouillon **avec + l'accord de Palawi**, puis publication avec son accord. +- **Dernière mise à jour :** 2026-10-28 ## Ce qui existe @@ -299,6 +307,23 @@ `size-estimate.ps1`, `many-tracks.ps1 [-Keep]`, `app-isolated.ps1 -RightScreen`. Preuves : `docs/reports/v1.3/`. +- **v1.4 (2026-10-27/28)** : + - Moteur : `events::SourceMode` (`capture_started.source_mode`, `source_changed` relevé chaque + seconde dans le fil d'encodage, `capture::display::refresh_hz`) ; `events::SaveOrigin` + (`clip_saved.origin` : `replay`, `post_roll`, `recording`) ; `chime::Sound::ClipFinished` ; + `Library::mix` / `set_mix` (colonne `mix`, ajoutée aux bases existantes). + - Shell : `player.mute_full_mix` dans `settings.json` (`get_player` / `set_player`), + `clip_mix` / `set_clip_mix` (`ClipMix { tracks, full_mix_chosen }`, volume borné) ; son joué + selon `origin` (rien pour un enregistrement, qui a son propre son de fin). + - Front : `lib/scrubSession.ts` (glisser : dessin immédiat, chargement après 120 ms ou au + relâchement, dernière position gagnante, audio tenu par `PlayerAudio.hold/release`) ; + `lib/qualityTabs.ts` (onglets, onglet retenu, `Destination.tab`) ; `lib/playerMix.ts` + (coupure du Mix complet seulement avec une piste Jeu ou appli, export sur l'état choisi). + - Scripts : `cdp-run.ps1` (app isolée + script CDP, sortie dans `target/journals/