{"id":19004,"date":"2026-09-12T10:45:32","date_gmt":"2026-09-12T08:45:32","guid":{"rendered":"https:\/\/www.beseit.net\/?p=19004"},"modified":"2026-09-13T16:38:56","modified_gmt":"2026-09-13T14:38:56","slug":"muntatge-dun-servidor-tts-local-amb-veu-catalana-ona-upc-a-deepin","status":"publish","type":"post","link":"https:\/\/www.beseit.net\/?p=19004","title":{"rendered":"\u00a0\u2b50Muntatge d&#8217;un servidor TTS local amb veu catalana (Ona, UPC) a Deepin"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">\ud83c\udfaf Objectius<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;objectiu del projecte es doble:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Instal\u00b7lar un servidor local de s\u00edntesi de veu (TTS)<\/strong> accessible a <code>http:\/\/127.0.0.1:8765\/<\/code>, amb capacitat de conversa (STT + LLM + TTS).<\/li>\n\n\n\n<li><strong>Disposar d&#8217;una veu en catal\u00e0<\/strong> d&#8217;alta qualitat per a proves i integraci\u00f3, de manera que el sistema es pugui reproduir en altres punts de treball amb audio.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">El resultat final combina dues eines complement\u00e0ries:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>speech-to-speech<\/code><\/strong> (servidor conversacional complet, port 8765)<\/li>\n\n\n\n<li><strong>Piper TTS<\/strong> amb la veu <strong>Ona de la UPC<\/strong> (port 10200)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<pre class=\"wp-block-code\"><code> <mark style=\"background-color:rgba(0, 0, 0, 0);color:#f41a1a\" class=\"has-inline-color\">docker exec piper bash -c \"echo \\\"Hola, soc l'Ona, la meva veu s'ha desenvolupat a la UPC de Barcelona.\\\" | piper --model \/config\/ca_ES-upc_ona-medium.onnx --output_file -\" | aplay -f S16_LE -r 22050 -c 1\nPlaying WAVE 'stdin' : Signed 16 bit Little Endian, Rate 22050 Hz, Mono\n<\/mark><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udce6 Fase 1 \u2014 Preparaci\u00f3 de l&#8217;entorn<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Sistema:<\/strong> Deepin (basat en Debian)<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo apt update\nsudo apt install python3 python3-pip python3-venv git docker.io -y<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Creaci\u00f3 de l&#8217;entorn virtual i instal\u00b7laci\u00f3 del paquet conversacional:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">mkdir -p ~\/tts-server &amp;&amp; cd ~\/tts-server\npython3 -m venv venv\nsource venv\/bin\/activate\npip install --upgrade pip\npip install speech-to-speech<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\ude80 Fase 2 \u2014 Primer arrencada del servidor <code>speech-to-speech<\/code><\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">speech-to-speech<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Resultats de la primera execuci\u00f3:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u2705 Descarrega autom\u00e0tica de depend\u00e8ncies (NLTK, Silero VAD)<\/li>\n\n\n\n<li>\u2705 Descarrega del model de reconeixement de veu <strong>Parakeet TDT<\/strong> (nvidia\/parakeet-tdt-0.6b-v3, ~230 MB)<\/li>\n\n\n\n<li>\u2705 Model desat en mem\u00f2ria cau (<code>~\/.cache\/huggingface<\/code>)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Incidents detectats:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u26a0\ufe0f M\u00f2dul opcional <code>DeepFilterNet<\/code> no disponible (millora d&#8217;\u00e0udio, no cr\u00edtic)<\/li>\n\n\n\n<li>\u26a0\ufe0f Av\u00eds de <code>HF_TOKEN<\/code> (nom\u00e9s per a l\u00edmits de desc\u00e0rrega, no impedeix el funcionament)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Observaci\u00f3 important:<\/strong> el servidor escolta en protocol <strong>WebSocket<\/strong> a <code>ws:\/\/127.0.0.1:8765\/v1\/realtime<\/code>, no \u00e9s un endpoint HTTP cl\u00e0ssic, per tant <code>curl<\/code> no \u00e9s el client adequat per provar-lo.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udc33 Fase 3 \u2014 Instal\u00b7laci\u00f3 de Docker a Deepin<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Per al desplegament lleuger del TTS, vam instal\u00b7lar Docker:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo systemctl enable --now docker\nsudo usermod -aG docker $USER\nnewgrp docker   # activa el grup a la sessi\u00f3 actual<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Prova de verificaci\u00f3:<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker run hello-world<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u2705 Resposta: <em>\u00abHello from Docker!\u00bb<\/em> \u2192 instal\u00b7laci\u00f3 correcta.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udde3\ufe0f Fase 4 \u2014 Piper TTS amb veu catalana (Ona, UPC)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Creaci\u00f3 del contenidor amb la veu catalana:<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker run -d \\\n  --name piper \\\n  -p 10200:10200 \\\n  -e PIPER_VOICE=ca_ES-upc_ona-medium \\\n  --restart unless-stopped \\\n  linuxserver\/piper<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Incident resolt:<\/strong> a la primera creaci\u00f3 sense <code>PIPER_VOICE<\/code>, el contenidor fallava amb l&#8217;error <code>--voice is required for the piper backend<\/code>. Calia especificar la veu mitjan\u00e7ant la variable d&#8217;entorn.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Logs d&#8217;\u00e8xit:<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">INFO:wyoming_piper.download:Downloaded \/config\/ca_ES-upc_ona-medium.onnx\nINFO:__main__:Ready\nConnection to localhost (127.0.0.1) 10200 port [tcp\/*] succeeded!<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u2705 Veu <strong>Ona<\/strong> (<code>ca_ES-upc_ona-medium<\/code>, desenvolupada a la UPC de Barcelona) descarregada i carregada.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd0a Fase 5 \u2014 Prova de s\u00edntesi de veu<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>S\u00edntesi directa dins del contenidor:<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker exec piper bash -c \"echo 'Hola, soc l'Ona, la meva veu s'ha desenvolupat a la UPC de Barcelona.' | piper --model \/config\/ca_ES-upc_ona-medium.onnx --output_file \/config\/prova.wav\"<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Extracci\u00f3 i reproducci\u00f3:<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker cp piper:\/config\/prova.wav ~\/prova.wav\naplay ~\/prova.wav<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">Per fer que l&#8217;\u00e0udio <mark style=\"background-color:rgba(0, 0, 0, 0);color:#f31616\" class=\"has-inline-color\">soni directament pels altaveus <\/mark>en lloc de guardar-lo en un fitxer,<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker exec piper bash -c \"echo \\\"Hola, soc l'Ona, la meva veu s'ha desenvolupat a la UPC de Barcelona.\\\" | piper --model \/config\/ca_ES-upc_ona-medium.onnx --output_file -\" | aplay -f S16_LE -r 22050 -c 1\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Despres d&#8217;un canvi de sessi\u00f3 o inicialitzaci\u00f3 pot arrancar aix\u00ed:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"930\" height=\"168\" src=\"https:\/\/www.beseit.net\/wp-content\/uploads\/2026\/09\/imagen-1.png\" alt=\"\" class=\"wp-image-19014\" srcset=\"https:\/\/www.beseit.net\/wp-content\/uploads\/2026\/09\/imagen-1.png 930w, https:\/\/www.beseit.net\/wp-content\/uploads\/2026\/09\/imagen-1-300x54.png 300w, https:\/\/www.beseit.net\/wp-content\/uploads\/2026\/09\/imagen-1-768x139.png 768w, https:\/\/www.beseit.net\/wp-content\/uploads\/2026\/09\/imagen-1-500x90.png 500w\" sizes=\"auto, (max-width: 930px) 100vw, 930px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed tens la comanda modificada utilitzant <strong><code>aplay<\/code><\/strong> (el reproductor est\u00e0ndard d&#8217;ALSA a Linux):<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">\u2705 Fitxer WAV generat correctament: <strong>220 kB, 22.050 Hz, 16 bits, mono<\/strong><br>\u26a0\ufe0f <em>La reproducci\u00f3 d&#8217;\u00e0udio no es va poder verificar en aquest equip per manca de sortida d&#8217;\u00e0udio.<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcca Resultats finals<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Servei<\/th><th>Port<\/th><th>Protocol<\/th><th>Estat<\/th><\/tr><\/thead><tbody><tr><td><strong>speech-to-speech<\/strong> (STT+LLM+TTS)<\/td><td>8765<\/td><td>WebSocket (<code>\/v1\/realtime<\/code>)<\/td><td>\u2705 Instal\u00b7lat (models en cau)<\/td><\/tr><tr><td><strong>Piper TTS<\/strong> (veu Ona, catal\u00e0)<\/td><td>10200<\/td><td>Wyoming<\/td><td>\u2705 Funcionant<\/td><\/tr><tr><td><strong>Docker<\/strong><\/td><td>\u2014<\/td><td>\u2014<\/td><td>\u2705 Operatiu<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Arxius i ubicacions clau:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Entorn virtual: <code>~\/tts-server\/venv<\/code><\/li>\n\n\n\n<li>Cau de models HuggingFace: <code>~\/.cache\/huggingface<\/code><\/li>\n\n\n\n<li>Model de veu: <code>\/config\/ca_ES-upc_ona-medium.onnx<\/code> (dins del contenidor)<\/li>\n\n\n\n<li>\u00c0udio de prova: <code>~\/prova.wav<\/code><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd04 Fases de reproducci\u00f3 en un altre punt de treball<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Instal\u00b7lar depend\u00e8ncies:<\/strong> <code>python3-venv<\/code>, <code>git<\/code>, <code>docker.io<\/code><\/li>\n\n\n\n<li><strong>Crear l&#8217;entorn virtual<\/strong> i instal\u00b7lar <code>speech-to-speech<\/code><\/li>\n\n\n\n<li><strong>Arrencar el servidor conversacional:<\/strong> <code>speech-to-speech<\/code> (port 8765)<\/li>\n\n\n\n<li><strong>Instal\u00b7lar Docker<\/strong> i afegir l&#8217;usuari al grup<\/li>\n\n\n\n<li><strong>Crear el contenidor Piper<\/strong> amb <code>PIPER_VOICE=ca_ES-upc_ona-medium<\/code> (port 10200)<\/li>\n\n\n\n<li><strong>Verificar amb els logs:<\/strong> missatge <code>Ready<\/code> i connexi\u00f3 al port 10200<\/li>\n\n\n\n<li><strong>Prova de s\u00edntesi:<\/strong> <code>docker exec piper ... | piper --model ... --output_file ...<\/code><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\ude80 Properes passes (ampliaci\u00f3 prevista)<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Desplegament al Synology (192.168.1.49)<\/strong> mitjan\u00e7ant el Centre de paquets \u2192 Container Manager, replicant el contenidor Piper al port 10200.<\/li>\n\n\n\n<li><strong>Integraci\u00f3 amb Home Assistant<\/strong> (protocol Wyoming compatible).<\/li>\n\n\n\n<li><strong>Prova d&#8217;\u00e0udio<\/strong> a un equip amb sortida d&#8217;\u00e0udio per validar la qualitat de la veu.<\/li>\n\n\n\n<li><strong>Exploraci\u00f3 d&#8217;altres veus<\/strong> del cat\u00e0leg de Piper (<code>ca_ES-upc_pau-medium<\/code>, masculina).<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">Dep\u00e8n de qu\u00e8 vulguis fer exactament:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd01 Opci\u00f3 1: Tancar sessi\u00f3 gr\u00e0ficament (Deepin)<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Fes clic a la <strong>icona d&#8217;engegada\/apagada<\/strong> (a la safata del sistema, a la part inferior dreta de la pantalla, o a l&#8217;extrem superior dret).<\/li>\n\n\n\n<li>Selecciona <strong>\u00abTanca la sessi\u00f3\u00bb<\/strong> (o <em>Log Out<\/em>).<\/li>\n\n\n\n<li>A la pantalla d&#8217;inici de sessi\u00f3, selecciona el teu usuari i escriu la contrasenya.<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udca1 Tamb\u00e9 pots fer servir la drecera de teclat <strong><code>Ctrl + Alt + Del<\/code><\/strong> (en algunes versions obre el men\u00fa amb l&#8217;opci\u00f3 de tancar sessi\u00f3).<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd04 Opci\u00f3 2: Simplement reiniciar l&#8217;ordinador<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Si et surt m\u00e9s a compte:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo reboot<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Qu\u00e8 passa quan tornis a entrar?<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Servei<\/th><th>Es reinicia sol?<\/th><\/tr><\/thead><tbody><tr><td><strong>Docker<\/strong><\/td><td>\u2705 S\u00ed (servei del sistema)<\/td><\/tr><tr><td><strong>Contenidor Piper<\/strong><\/td><td>\u2705 S\u00ed (t\u00e9 <code>--restart unless-stopped<\/code>)<\/td><\/tr><tr><td><strong>Servidor speech-to-speech (port 8765)<\/strong><\/td><td>\u274c No \u2014 l&#8217;has d&#8217;engegar manualment<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Per engegar el servidor conversacional despr\u00e9s de reiniciar:<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">cd ~\/tts-server &amp;&amp; source venv\/bin\/activate &amp;&amp; speech-to-speech<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddea Verifica que tot va b\u00e9 despr\u00e9s d&#8217;entrar<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Docker i el teu grup\ngroups | grep docker\n\n# El contenidor Piper en marxa\ndocker ps | grep piper<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si surt <code>docker<\/code> a la primera comanda i el contenidor <code>piper<\/code> apareix com a <strong>Up<\/strong>, tot est\u00e0 correcte! \u2705<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vols que et cre\u00ef un <strong>script d&#8217;inici autom\u00e0tic<\/strong> perqu\u00e8 el servidor de 8765 tamb\u00e9 s&#8217;engegui sol en entrar a la sessi\u00f3? \ud83d\ude0a<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83c\udf93 Conclusions<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La instal\u00b7laci\u00f3 d&#8217;un <strong>TTS en catal\u00e0<\/strong> \u00e9s viable amb eines de codi obert (Piper + veus de la UPC), sense necessitat de serveis externs.<\/li>\n\n\n\n<li>La combinaci\u00f3 <strong><code>speech-to-speech<\/code> + Piper<\/strong> cobreix tant el cas d&#8217;\u00fas conversacional complet (WebSocket 8765) com el de s\u00edntesi lleugera i fiable (Wyoming 10200).<\/li>\n\n\n\n<li>L&#8217;\u00fas de <strong>Docker<\/strong> garanteix la portabilitat i la reproductibilitat entre equips i fins i tot en NAS com el Synology.<\/li>\n\n\n\n<li>La veu <strong>Ona de la UPC<\/strong> ofereix una s\u00edntesi en catal\u00e0 de bona qualitat i \u00e9s la candidata principal per al desplegament final.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Cr\u00e8dits: projecte realitzat amb assist\u00e8ncia de UOS AI sobre Deepin Desktop Environment.<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">Espero que et vagi molt b\u00e9 al blog! \ud83d\udcd6 Si vols, tamb\u00e9 et puc preparar una <strong>versi\u00f3 en Markdown<\/strong> m\u00e9s curta per a xarxes socials, o una <strong>guia PDF<\/strong> amb captures. Gr\u00e0cies a tu per la paci\u00e8ncia i bona feina! \ud83d\ude0a<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83c\udfaf Objectius L&#8217;objectiu del projecte es doble: El resultat final combina dues eines complement\u00e0ries: \ud83d\udce6 Fase 1 \u2014 Preparaci\u00f3 de l&#8217;entorn Sistema: Deepin (basat en Debian) Creaci\u00f3 de l&#8217;entorn virtual i instal\u00b7laci\u00f3 del paquet conversacional: \ud83d\ude80 Fase 2 \u2014 Primer &hellip; <a href=\"https:\/\/www.beseit.net\/?p=19004\">Continua llegint <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":3167,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[207,1],"tags":[],"class_list":["post-19004","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deepin-linux","category-bloc-de-notes"],"_links":{"self":[{"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/19004","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=19004"}],"version-history":[{"count":11,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/19004\/revisions"}],"predecessor-version":[{"id":19061,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/19004\/revisions\/19061"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/media\/3167"}],"wp:attachment":[{"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=19004"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=19004"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=19004"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}