La portada pasa de 17rem a 22rem y la columna del título crece hasta su
altura, así que los botones se descuelgan y su base queda a la misma
línea que la de la portada: 494 y 494 medidos en el navegador. El aviso
de venta y las plataformas suben por encima de ellos, porque lo que se
viene a hacer va abajo del todo. La separación la pone un `gap` y no un
margen: ninguna de las dos cosas está siempre, y un margen sobre un
hueco vacío despegaba los botones justo en las fichas que no las tienen.
Las etiquetas no salían porque no había ninguna: las diez de «Cupido sin
flechas» entraron sin ellas. No están en el material —el prompt de Suno
dice cómo suena el tema, no de qué va—, así que van escritas a mano en
`sembrar-etiquetas-cupido.mjs`, donde se leen y se discuten, reusando el
vocabulario que ya existía siempre que encajaba.
Y se pintan en fantasma y en color. Sin relleno: son un dato, no una
acción, y un botón lleno al lado del de escuchar competiría con él. El
tono sale del nombre —nueve elegidos, saltando el marino del fondo y el
oro del acento—, así que «Desamor» es del mismo color en la ficha, en el
blog y en la portada sin tabla que mantener. Medidos los dieciocho
casos: el peor da 6,14 sobre 4,5 que pide el texto pequeño.
El botón de añadir al pack faltaba por lo mismo: el importador ponía
`estado = publicado` pero dejaba `ala_venta` en el false de la columna, y
un tema publicado y no a la venta sale sin botón. Ahora lo pone al
crear la canción y no lo toca al reimportar, que esa decisión es del
panel. Las diez ya están a la venta.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
El importador metió el texto; esto mete los archivos. Diez másteres a
media/audio (fuera de git), su muestra de cuarenta segundos a
static/muestras y la portada cuadrada de mil píxeles a static/images,
con sus filas en `medio` y atadas a cancion.audio_id, muestra_id y
portada_id. El disco se queda con la portada del primer tema porque la
carpeta no trae una suya.
Las portadas estaban en subcarpetas `cover` y `covers`, no en la raíz de
cada canción: el lector solo miraba la raíz y `Video`, así que ocho de
las diez iban a acabar con la miniatura de YouTube recortada. Ahora
busca la subcarpeta sin mirar mayúsculas, que además es un fallo de
verdad en Linux, donde `Video` no es `video`.
Comprobado a ojo: el botón de escuchar ya no está apagado, la muestra
suena (0:40, con su etiqueta) y las diez portadas cargan.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
El primer disco real del catálogo. Hasta ahora todo era inventado salvo
«Dorina».
`npm run album:importar -- "<carpeta>"` lee la carpeta y dice lo que haría;
solo escribe con `--escribir`, y hay que pedirlo. Es idempotente por slug, así
que corregir un `.txt` y volver a lanzarlo actualiza en vez de duplicar.
El desmontaje de los `.txt` está en `scripts/album/carpeta.mjs`, compartido con
el lector: si Suno vuelve a cambiar lo que pone al copiar, se arregla en un
sitio. De cada archivo salen tres cosas —el prompt de estilo, la letra con
etiquetas y la letra limpia de detrás de la raya— y la que se publica es la
limpia; la de las etiquetas es lo que se le pega a Suno, y va en el prompt.
Los títulos salen del nombre del máster porque las carpetas están sin acentuar
—«Quèdate», «Pague»—, y `--titulo` corrige lo que ni siquiera eso acierta: el
archivo francés pone «libére» donde va «libère». El idioma se deduce contando
palabras frecuentes: nueve en español y una en francés. La fecha sale del
máster más reciente, que es lo más cerca que hay de «cuándo quedó terminado».
Y el prompt de cada canción, que es lo que obligó a la migración 0012: `prompt`
ataba a un género y estos son de canciones concretas. No sustituye a
`genero_id`, se suma, y es coherente con lo que el modelo ya preveía —
`ejemplo_id` apunta al audio que salió del prompt—.
## El hueco de la portada
Diez fichas publicadas sin imagen destaparon algo que llevaba ahí desde
siempre: un `<img>` sin `src` es el icono de imagen rota del navegador, y eso
salía en siete sitios —la ficha del disco, la del tema, las dos tarjetas, el
carrito, la cuenta y la barra del reproductor—. Nunca se había visto porque
todo el catálogo tenía imagen.
`SinPortada` ocupa el hueco con la inicial del título. No dice «falta la
portada»: eso es un problema nuestro, no de quien mira. Y va a hacer falta más,
porque el texto de un disco entra por un lado y sus archivos por otro.
El botón de reproducir ya se apagaba solo sin audio; eso estaba bien hecho.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
`node scripts/album/leer.mjs "<carpeta>"`. No escribe nada: solo informa.
Hace falta porque el material no esta en un formato, esta en cinco. Los `.txt`
de letra vienen de pegar lo que devuelve Suno, y Suno ha ido cambiando lo que
pone alrededor —«Add a Caption», «Weirdness 58%», «(Cover) artwork»—, asi que
la cabecera es distinta en casi cada cancion. Un importador que diera eso por
bueno meteria en la base la palabra «artwork» como si fuera una letra.
De cada `.txt` saca tres cosas: el prompt de estilo que se le dio a Suno, la
letra con etiquetas —que es lo que se le pega a Suno, no lo que se publica— y
la letra limpia de detras de la raya de guiones, que es la de la web. Cuando no
hay raya, la limpia se saca quitando las lineas de etiqueta.
El titulo sale del nombre del master y no de la carpeta: las carpetas estan sin
acentuar o mal acentuadas —«Quedate», «Pague», «para que recordar»— y el master
lleva el titulo como se escribe.
Sobre las diez canciones de «cupido-sin-flechas» encuentra letra, prompt, mp3 y
wav en todas; falta portada en una y video en tres.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>