|
1 | 1 | # Changelog |
2 | 2 |
|
| 3 | +<!-- English only, on purpose: Home Assistant shows this file to whoever installs the |
| 4 | + add-on, from any country. One language, and the one that reaches the most people. The |
| 5 | + add-on's README is the bilingual one. --> |
| 6 | + |
3 | 7 | ## 1.0.3 |
4 | 8 |
|
5 | | -**L'interfaccia parla anche inglese.** Il selettore sta in testata: la scelta viene |
6 | | -ricordata e alla prima apertura si parte dalla lingua del browser. Da lì scende una catena |
7 | | -di tre anelli — interfaccia, lingua della ricetta, sistema di misura — ciascuno con il |
8 | | -precedente come ripiego e ciascuno sovrascrivibile. Chi non tocca niente ottiene un insieme |
9 | | -coerente; chi cucina in una lingua e vive in un'altra può incrociarli. |
| 9 | +**The interface speaks English too.** The switch is in the header: the choice is remembered |
| 10 | +and on first open it follows your browser's language. From it descends a chain of three |
| 11 | +links — interface, recipe language, measurement system — each falling back to the one before |
| 12 | +it and each overridable. Change nothing and you get a coherent set; someone who cooks in one |
| 13 | +language and lives in another can cross them. |
10 | 14 |
|
11 | | -**Il selettore della lingua non era collegato a niente.** Era disegnato nel pannello |
12 | | -*Opzioni* fin dalla 1.0.0, si poteva scegliere, e ogni estrazione usciva comunque in |
13 | | -italiano metrico. Un comando che non fa niente è peggio di un comando assente: insegna a |
14 | | -non fidarsi dell'interfaccia. |
| 15 | +**The recipe-language selector was not wired to anything.** It had been drawn in the |
| 16 | +*Options* panel since 1.0.0, you could pick a language, and every extraction came out in |
| 17 | +Italian with metric units regardless. A control that does nothing is worse than a missing |
| 18 | +one: it teaches you not to trust the interface. |
15 | 19 |
|
16 | | -**A Whisper si diceva che ogni reel era italiano.** La lingua del parlato era fissata a |
17 | | -"it" e non era esposta da nessuna parte, quindi anche un reel inglese veniva trascritto |
18 | | -come se fosse italiano — parole italiane forzate su suoni inglesi, e da lì in poi tutto il |
19 | | -resto lavorava su quelle. Il difetto era invisibile, perché una ricetta plausibile il |
20 | | -modello la produce comunque. Ora la lingua la riconosce Whisper da sé, e resta forzabile |
21 | | -dalle *Opzioni* quando sbaglia. |
| 20 | +**Whisper was told every reel was Italian.** The spoken language was pinned to "it" and |
| 21 | +exposed nowhere, so even an English reel was transcribed as if it were Italian — Italian |
| 22 | +words forced onto English sounds, and everything downstream then worked on those. The fault |
| 23 | +was invisible, because the model produces a plausible recipe anyway. Now Whisper detects the |
| 24 | +language itself, and it can still be forced from *Options* when detection gets it wrong. |
22 | 25 |
|
23 | | -**Trascinare un video perdeva le impostazioni.** Il caricamento di un file accettava solo |
24 | | -lingua e sistema: backend di trascrizione, modello e «usa solo la didascalia» venivano |
25 | | -scartati in silenzio. Ora le due strade prendono le stesse opzioni. |
| 26 | +**Dragging in a video threw away your settings.** Uploading a file only accepted the language |
| 27 | +and the measurement system: transcription backend, model and "use the caption only" were |
| 28 | +silently discarded. Both routes now take the same options. |
26 | 29 |
|
27 | 30 | ## 1.0.2 |
28 | 31 |
|
29 | | -**Il modello non si scaricava più dopo un errore.** Alla prima installazione i 9 GB di |
30 | | -`qwen2.5:14b` sono arrivati interi e sono stati scartati dalla verifica dello sha256 |
31 | | -(`digest mismatch`). Il pull si tentava una volta sola: dopo quel fallimento l'add-on |
32 | | -restava senza modello per sempre, e l'unico rimedio era riavviarlo a mano. |
| 32 | +**The model stopped re-downloading after a failure.** On first install the 9 GB of |
| 33 | +`qwen2.5:14b` arrived whole and were rejected by the sha256 check (`digest mismatch`). The |
| 34 | +pull was attempted once only: after that failure the add-on stayed without a model forever, |
| 35 | +and the only remedy was restarting it by hand. |
33 | 36 |
|
34 | | -Ora ritenta **tre volte**, con attesa crescente. Tre e non infinite: se la causa è il disco |
35 | | -pieno, riprovare in eterno non la risolve. Per distinguere le due cause — un file troncato |
36 | | -per spazio esaurito dà lo stesso `digest mismatch` di una corruzione in transito — a ogni |
37 | | -fallimento il registro scrive lo spazio libero su `/data`. |
| 37 | +It now retries **three times**, with growing waits. Three and not endlessly: if the cause is |
| 38 | +a full disk, retrying forever does not fix it. To tell the two causes apart — a file |
| 39 | +truncated by exhausted space gives the same `digest mismatch` as corruption in transit — the |
| 40 | +log writes the free space on `/data` at every failure. |
38 | 41 |
|
39 | | -**Il messaggio dell'interfaccia era sbagliato tre volte.** Consigliava |
40 | | -`ollama pull qwen2.5:7b-instruct`: un modello diverso da quello che l'add-on installa, e per |
41 | | -giunta quello scartato perché perde i gruppi di ingredienti e inventa le dosi. Diceva di |
42 | | -eseguire comandi in una shell che dentro Home Assistant non esiste. E non distingueva «nessun |
43 | | -modello» da «lo sto scaricando adesso», che è il caso normale della prima mezz'ora. |
| 42 | +**The interface's message was wrong three times over.** It suggested |
| 43 | +`ollama pull qwen2.5:7b-instruct`: a different model from the one the add-on installs, and |
| 44 | +moreover the one rejected for losing ingredient groups and inventing amounts. It told you to |
| 45 | +run commands in a shell that does not exist inside Home Assistant. And it did not distinguish |
| 46 | +"no model" from "downloading it right now", which is the normal case for the first half hour. |
44 | 47 |
|
45 | 48 | ## 1.0.1 |
46 | 49 |
|
47 | | -**L'interfaccia non partiva.** L'add-on si installava e si avviava, ma aprendolo Home |
48 | | -Assistant rispondeva «502 Bad Gateway». |
| 50 | +**The interface would not start.** The add-on installed and started, but opening it made Home |
| 51 | +Assistant answer "502 Bad Gateway". |
49 | 52 |
|
50 | | -Lo script di servizio passava `--ollama` dopo il sottocomando `serve`, ma è un'opzione |
51 | | -globale del programma e va prima: argparse usciva con codice 2, s6 riavviava il servizio |
52 | | -all'infinito, e l'Ingress non trovava nessuno in ascolto sulla porta 8500. Il server non è |
53 | | -mai partito nemmeno una volta — con un proxy davanti sembrava un problema di rete. |
| 53 | +The service script passed `--ollama` after the `serve` subcommand, but it is a global option |
| 54 | +of the program and goes before it: argparse exited with code 2, s6 restarted the service |
| 55 | +endlessly, and the Ingress found nobody listening on port 8500. The server never started even |
| 56 | +once — with a proxy in front it looked like a network problem. |
54 | 57 |
|
55 | | -Il registro contribuiva all'equivoco: annunciava «Interfaccia pronta sull'Ingress» *prima* |
56 | | -di avviarla, quindi affermava a ogni riavvio una cosa che non era vera. Ora dice «Avvio |
57 | | -l'interfaccia» e non testimonia più su ciò che non ha visto. |
| 58 | +The log added to the confusion: it announced "Interface ready on the Ingress" *before* |
| 59 | +starting it, so at every restart it asserted something that was not true. It now says |
| 60 | +"Starting the interface" and no longer testifies to what it has not seen. |
58 | 61 |
|
59 | | -Quella riga è un contratto fra due repository e non la controllava nessuno: ora è fissata da |
60 | | -`tests/test_cli.py` in Reel2Recipe. |
| 62 | +That line is a contract between two repositories and nobody was checking it: it is now held |
| 63 | +in place by `tests/test_cli.py` in Reel2Recipe. |
61 | 64 |
|
62 | 65 | ## 1.0.0 |
63 | 66 |
|
64 | | -Prima versione stabile. Le 0.1.x che l'hanno preceduta erano di collaudo e non sono più |
65 | | -disponibili: quanto avevano corretto è dentro questa. |
66 | | - |
67 | | -- Interfaccia di Reel2Recipe servita tramite Ingress, nel pannello laterale. |
68 | | -- Ollama e Whisper girano dentro l'add-on: nessun servizio remoto, nessuna chiave API, |
69 | | - nessun dato che lascia la macchina. |
70 | | -- Il modello LLM viene scaricato al primo avvio (`modello_llm`, `scarica_modello`) senza |
71 | | - bloccare l'interfaccia, che nel frattempo dichiara di non essere pronta. Il modello di |
72 | | - trascrizione (~1,5 GB) si scarica anch'esso all'avvio, e non alla prima ricetta: prima la |
73 | | - barra si fermava su «Trascrizione del parlato» per minuti senza spiegazione. |
74 | | -- Libreria, media e modelli su `/data`; modelli e media esclusi dai backup. |
75 | | -- `file_cookie` per i reel che richiedono l'accesso, letto da `/share` in sola lettura. Si |
76 | | - lavora su una copia privata e temporanea: yt-dlp riscrive quel file a fine scaricamento, |
77 | | - ma `/share` è montato in sola lettura, e senza la copia un download riuscito falliva |
78 | | - all'ultimo passo. La copia contiene credenziali di sessione, quindi nasce con permessi |
79 | | - ristretti e nome imprevedibile, e viene cancellata alla fine. |
80 | | -- I passi del procedimento escono senza numerazione: Mela numera le righe da sé, e |
81 | | - aggiungerla produceva «1 1. Frullare il tofu». |
82 | | -- Solo `amd64`: l'inferenza gira su CPU e serve una macchina con 16 GB di RAM. |
| 67 | +First stable version. The 0.1.x releases before it were trial runs and are no longer |
| 68 | +available: what they fixed is inside this one. |
| 69 | + |
| 70 | +- The Reel2Recipe interface served through the Ingress, in the sidebar. |
| 71 | +- Ollama and Whisper run inside the add-on: no remote service, no API key, no data leaving |
| 72 | + the machine. |
| 73 | +- The LLM is downloaded on first start (`modello_llm`, `scarica_modello`) without blocking |
| 74 | + the interface, which meanwhile declares itself not ready. The transcription model (~1.5 GB) |
| 75 | + is downloaded at startup too, rather than on the first recipe: previously the progress bar |
| 76 | + sat on "Transcribing the speech" for minutes with no explanation. |
| 77 | +- Library, media and models on `/data`; models and media excluded from backups. |
| 78 | +- `file_cookie` for reels that require signing in, read from `/share` read-only. A private, |
| 79 | + temporary copy is used: yt-dlp rewrites that file when a download ends, but `/share` is |
| 80 | + mounted read-only, and without the copy a successful download failed at the last step. The |
| 81 | + copy holds session credentials, so it is created with restricted permissions and an |
| 82 | + unpredictable name, and deleted afterwards. |
| 83 | +- Method steps come out unnumbered: Mela numbers the lines itself, and adding it produced |
| 84 | + "1 1. Blend the tofu". |
| 85 | +- `amd64` only: inference runs on the CPU and needs a machine with 16 GB of RAM. |
0 commit comments