¿Por qué mi trabajo no es editable?

{
“nodes”: [
{
“parameters”: {
“options”: {}
},
“type”: “n8n-nodes-base.splitInBatches”,
“typeVersion”: 3,
“position”: [
768,
144
],
“name”: “Iterar sobre elementos”,
“id”: “038cb313-5e42-449f-bdd0-cc3547196ac3”
},
{
“parameters”: {
“resource”: “speech”,
“voice”: {
“_rl": true,
“value”: “7lu3ze7orhWaNeSPowWx”,
“mode”: “id”
},
“text”: “={{ $json.content }}”,
“additionalOptions”: {
“outputFormat”: “mp3_44100_128”,
“voiceSettings”: “{\n "stability": 0.5,\n "similarity_boost": 0.75,\n "style": 0,\n "use_speaker_boost": true,\n "speed": 1.1\n}”
},
“requestOptions”: {}
},
“type”: “@elevenlabs/n8n-nodes-elevenlabs.elevenLabs”,
“typeVersion”: 1,
“position”: [
1008,
144
],
“name”: “Generar audio”,
“id”: “da068333-a1a2-49cd-8f59-0ce527dccf65”,
“alwaysOutputData”: false,
“notesInFlow”: false,
“credentials”: {
“elevenLabsApi”: {
“id”: “9cnPNS9Egm9Q1lmb”,
“name”: “Cuenta de ElevenLabs”
}
}
},
{
“parameters”: {
“path”: “db0c9de5-c9ab-4482-b80a-a0d076c3f6e1”,
“formTitle”: “Formulario”,
“formDescription”: " ",
“formFields”: {
“values”: [
{
“fieldLabel”: “texto”
},
{
“fieldLabel”: “imagen”,
“fieldType”: “file”
}
]
},
“options”: {}
},
“type”: “n8n-nodes-base.formTrigger”,
“typeVersion”: 2,
“position”: [
-64,
144
],
“name”: “Envío del texto con divisiones nNÚMERO”,
“id”: “c1b87efa-74e8-4c87-8487-6dc7be4fedf0”,
“webhookId”: “db0c9de5-c9ab-4482-b80a-a0d076c3f6e1”
},
{
“parameters”: {
“jsCode”: “// Obtiene el texto del formulario\nconst rawText = $input.first().json.text;\n\nconst regex = /(n\d+)(.*?)(?=n\d+|$)/gs;\n\nconst blocks = [];\nlet match;\n\nwhile ((match = regex.exec(rawText)) !== null) {\n blocks.push({\n number: match[1],\n content: match[2].trim()\n });\n}\n\nreturn blocks.map(block =\ ({ json: block }));”
},
“type”: “n8n-nodes-base.code”,
“typeVersion”: 2,
“position”: [
320,
144
],
“name”: “Separación del texto en bloques”,
“id”: “22277a9b-a462-4a15-9004-eafbc0bb34f5”
},
{
“parameters”: {
“jsCode”: “const items = $input.all();\n\nreturn items.map(item =\ {\n const text = item.json.content;\n\n const cleaned = text.replace(/[\/\\]/g, ‘’);\n\n item.json.content = cleaned;\n\n return item;\n});”
},
“type”: “n8n-nodes-base.code”,
“typeVersion”: 2,
“position”: [
480,
144
],
“id”: “c2ff9fae-3727-42e2-948c-055d3c04fc39”,
“name”: “Código en JavaScript”
},
{
“parameters”: {
“fileName”: "=/files/youtube/audio_english
{{$item(0).$node["Separación del texto en bloques"].json["number"]}}.mp3”,
“options”: {}
},
“id”: “fade28f9-9db0-4161-b795-31b8a40f06a1”,
“name”: “Guardar imagen1”,
“type”: “n8n-nodes-base.writeBinaryFile”,
“typeVersion”: 1,
“position”: [
1280,
144
]
}
],
“connections”: {
“Loop Over Items”: {
“main”: [
,
[
{
“node”: “Generate Audio”,
“type”: “main”,
“index”: 0
}
]
]
},
“Generate Audio”: {
“main”: [
[
{
“node”: “Salvar imagem1”,
“type”: “main”,
“index”: 0
}
]
]
},
“Envio do texto com divisões nNÚMERO”: {
“main”: [
[
{
“node”: “Separação do texto em blocos”,
“type”: “main”,
“index”: 0
}
]
]
},
“Separação do texto em blocos”: {
“main”: [
[
{
“node”: “Code in JavaScript”,
“type”: “main”,
“index”: 0
}
]
]
},
“Code in JavaScript”: {
“main”: [
[
{
“node”: “Loop Over Items”,
“type”: “main”,
“index”: 0
}
]
]
},
“Salvar imagem1”: {
“main”: [

]
}
},
“pinData”: {},
“meta”: {
“templateCredsSetupCompleted”: true,
“instanceId”: “842620cf479449a2cd5aeaaaceb0f67e5512a70acd309b0df108bddc73a12684”
}
}

Describe el problema/error/pregunta

¿Cuál es el mensaje de error (si hay alguno)?

Por favor, comparte tu flujo de trabajo

(Selecciona los nodos en tu lienzo y usa los atajos de teclado CMD+C/CTRL+C y CMD+V/CTRL+V para copiar y pegar el flujo de trabajo.)

Comparte el resultado devuelto por el último nodo

Información sobre tu configuración de n8n

  • Versión de n8n:
  • Base de datos (predeterminado: SQLite):
  • Configuración EXECUTIONS_PROCESS de n8n (predeterminado: own, main):
  • Ejecutando n8n a través de (Docker, npm, n8n cloud, aplicación de escritorio):
  • Sistema operativo:

¿Podrías pegar tu código en un formato de texto preformateado?

Tu docker-compose.yml necesita un permiso en el environment, y cuando agregues “- N8N_RESTRICT_FILE_ACCESS_TO=/files/youtube” debería funcionar bien ahora.

1. Asegúrate de que el volumen está montado correctamente (Docker):

En tu docker-compose.yml, monta un directorio local en /files dentro del contenedor:

volumes:
- ./local-files:/files
environment:
- N8N_RESTRICT_FILE_ACCESS_TO=/files

2. Corrige la propiedad del directorio:

Asegúrate de que el directorio montado sea propiedad del UID 1000 (el usuario node dentro del contenedor):

chown -R 1000:1000 ./local-files
chmod 755 ./local-files

3. Reinicia tus contenedores después de hacer cambios:

docker compose down && docker compose up -d