Recuperare l’errore “?:0: attempt to index field ‘folder’ (a nil value)” su Lightroom

A volte può capitare che Lightroom inizi a comunicare esoterici errori in inglese come quello del titolo.

Questi errori si presentano sopratutto nel momento in cui si preme “Pubblica” o si cerca di esportare determinate foto, rendendo impossibile l’operazione.
Ho cercato su internet le varie soluzioni proposte, e sono tutte orientate nel cancellare le raccolte incriminate o i servizi di pubblicazione che presentano il problema, per poi ricominciare da capo.
Una serie di indizi in questi articoli mi hanno portato a sospettare quale fosse il problema, ma solo quando ho scoperto che un catalogo Lightroom è in realtà semplicemente un database di Sqlite ho finalmente risolto il problema.
In questo tutorial vi insegnerò un modo molto crudo per poterli recuperare. In ogni caso, è un’operazione molto delicata e non sono responsabile di eventuali danni dovuti all’applicazione di questa procedura, anche se, se la seguirete fedelmente, potrete sempre contare sulla copia di backup.

Errore Interno: ?:0: attempt to index field ‘folder’ (a nil value)

Ok, ma di preciso a cosa è dovuto questo errore?
Dalle mie analisi, si tratta di alcune registrazioni all’interno del catalogo che si sono rovinate, Le foto sull’hard disk sono probabilmente ancora a posto, ma qualcosa internamente a Lightroom va in errore quando cerca di accederci.
Altri sintomi sono una lentezza esasperante nel momento in cui si vanno a cambiare i metadati di molte foto, oppure l’impossibilità di farlo.

Primi passi

Come prima cosa, avrete bisogno di scaricare la versione per il vostro sistema operativo di Sqlite. Una volta che lo avrete salvato, create una cartella e chiamatela come volete, io vi consiglio Recupero, o qualcosa di simile, e scompattatelo al suo interno. Avete bisogno del file la cui descrizione recita “A command line shell etc…”.
Questo file permette di modificare il contenuto dei database in formato Sqlite.
Ora dovete fare una copia del vostro catalogo di Lightroom in questa cartella. Questo passo è importantissimo: andrete a cancellare a mano alcuni record all’interno di questo file, per cui lavorate solo su una copia!. Già che ci siete, fate una seconda copia dello stesso catalogo da un’altra parte: vi servirà in caso di disastro. A questo punto, caricate Lightroom facendo doppio click sulla copia che ne avete fatto all’interno della cartella Recupero. Ora lo distruggeremo.

Distruggere il catalogo di Lightroom

Aver fatto doppio click sulla copia significa che Lightroom sta partendo con la copia del catalogo, e non con il vostro catalogo originale (di cui comunque avete fatto una copia prima, vero?).
Le foto che creano l’errore hanno un brutto vizio: non si possono cancellare. Per cui, se ora rimuoviamo tutte le cartelle dal nostro catalogo, quelle foto rimaranno anche se non ci saranno più cartelle all’interno del catalogo.
Per rimuovere le cartelle, fate click con il pulsante destro del mouse su di loro, nel pannello a sinistra, e scegliere Rimuovi dal menù contestuale.


Quando avrete rimosso tutte le cartelle, resteranno comunque delle foto, probabilmente senza anteprima se avete copiato il solo catalogo, o con l’anteprima se avete copiato entrambi i file, anche quello delle preview.
In entrambi i casi, non sono veri file, ma solo “fantasmi”.
Ora chiudete Lightroom, andremo a vedere quali sono questi file all’interno del catalogo.

Aprite un Prompt di MSDOS o un Terminale nel caso siate sotto OSX. Utilizzate i comandi DOS per spostarvi all’interno della cartella in cui state lavorando. Nel mio caso ho dovuto scrivere:

cd Pictures
cd Librerie\ Lightroom
cd Per\ Articolo

Questa è la parte più difficile per chi non è avvezzo al terminale. Sappiate che cd significa cambia directory e che per regolarvi di dove siete dovrete utilizzare il comando dir se siete sotto Windows o il comando ls se siete con un Macintosh.
Utilizzando questi comandi vedrete i file presenti nella cartella in cui siete, rendendovi conto all’incirca di dove siete e dove andare per arrivare alla cartella Recupero che avete creato prima.
Se avete problemi in questa parte, lasciate un commento e cercherò di guidarvi.

Entrati all’interno della cartella Recupero (o comunque la abbiate chiamata), lanciate il seguente comando:

sqlite3 "nome del catalogo"

Nel mio caso, ho dovuto scrivere

sqlite3 "Catalago Generico 2012.lrcat"

Apparirà un prompt diverso, probabilmente “sqlite>”. A questo punto inserite la seguente riga:

select * from be_images;

Compreso il punto e virgola alla fine. Apparirà una serie di righe apparentemente senza senso. come le seguenti (prese direttamente dalla mia libreria rovinata):

340654|FE56B862-9A77-4DEF-A8C8-CC6ED659BF1E|2.0|2012-09-30T00:43:04.40|DaCondividere|-63113817600.0|||340668.0|PSD|2464.0|4928.0|||AB||340492|||0.0|z||none|5.0|340655|2.0|13.0|373109460.858119
350433|7ABA399F-479F-455C-ACA9-AA98474DEA28|2.0|2012-09-30T00:43:04.40|Profilato|371072766.987898|PX830 730 Artisan837 730 Epson Photo|soft proofing|350450.0|PSD|2464.0|4928.0||340654|AB|||||0.0|z||none|5.0|340655|0.0|6.0|371075837.092028
350467|6D541884-EA7E-4817-A53E-C169CB1CF628|1.5|2012-09-30T00:43:04.40|Profilato|-63113817600.0|||350519.0|PSD|1260.0|1890.0|||AB|||||0.0|z||none|5.0|350468|2.0|3.0|372603422.21577
350526|F7514FB6-4FF4-4CBC-9467-8C68B521E9A3|2.0|2012-09-30T00:43:04.40|Profilato|371075818.53346|PX830 730 Artisan837 730 Epson Matte Paper-HW|soft proofing|350543.0|PSD|2464.0|4928.0||340654|AB|||||0.0|z||none|5.0|340655|1.0|7.0|371076009.897282
350562|F20F3EED-06C5-4DE9-AA99-B2FA068D2D0C|1.5|2012-09-30T00:43:04.40|Profilato|-63113817600.0|||350608.0|PSD|1260.0|1890.0|||AB|||||0.0|z||none|5.0|350563|2.0|2.0|372603428.133962
364969|C4101A47-3A53-454A-85C9-40AAF28BE373|0.662337662337662|2012-10-13T09:03:15.30|DaCondividere|-63113817600.0|||365031.0|PSD|4928.0|3264.0|||AB|||||-1.0|48.0||none|1.0|364970|2.0|10.0|373297895.813943
382854|FFECEEF4-0AF2-436B-8336-5998CC534A9F|0.662337662337662|2012-10-13T09:03:15.30|Profilato|372546416.896818|PX830 730 Artisan837 730 Epson Matte Paper-HW|soft proofing|382881.0|PSD|4928.0|3264.0||364969|AB|||||0.0|49.0||none|5.0|364970|1.0|10.0|373202808.889262
382897|B95604E7-8244-4069-8BF1-6D6098CB3C5C|0.666666666666667|2012-10-13T09:03:15.30|Profilato|-63113817600.0|||382973.0|PSD|1890.0|1260.0|||AB|||||0.0|46.0||none|5.0|382898|2.0|4.0|373202824.257484
383029|F853364A-A464-41A1-97F3-0B83601628C4|0.640928725701944|2012-10-13T09:03:15.3|Profilato|-63113817600.0|||383100.0|PSD|1852.0|1187.0|||AB|||||0.0|z||none|3.0|383030|2.0|2.0|372578153.963035
383119|BFB1DF75-65E7-4D05-8F99-7EDAD8E94CCC|0.666666666666667|2012-10-13T09:03:15.3|Profilato|-63113817600.0|||383195.0|PSD|1890.0|1260.0|||AB|||||0.0|z||none|3.0|383120|2.0|1.0|372578898.415497

Oramai siamo nel cuore di Lightroom. Vedete il primo numero di ogni riga? E’ l’indicativo dell’immagine all’interno di questa tabella, e si chiama id_local.
Ora dovrete appuntarvi questi numeri, che nel mio caso sono 340654, 350433, 350467, 350526, 350562, 364969, 382854, 382897, 383029, 383119. Queste sono le foto rovinate all’interno del mio catalogo, che mi impedivano di pubblicare, esportare e nell’insieme vivere felice.

Uscite dall’interfaccia di sqlite scrivendo

.quit

Compreso (è importantissimo) il punto iniziale.

Le cose diventano serie

Ora dovrete andare a giocare con il vostro catalogo originale. Copiatelo, o spostatelo, nella cartella Recupero, ed apritelo utilizzando sqlite3, come fatto precedentemente per la copia.
A questo punto, andremo a cancellare a mano le righe all’interno della tabella Adobe_images in modo da togliere di mezzo le foto rovinate.
Per far questo, utilizzerete il seguente comando:

delete * from Adobe_images where id_local in (…);

Dovrete inserire anche il punto e virgola alla fine, e al posto dei tre puntini di sospensione mettere i numeri che vi siete appuntati nel passo precedente.
Sotto vedrete una schermata della procedura eseguita da me.


Uscite nuovamente da sqlite.

.quit

Ora copiate il catalogo modificato da Recupero nuovamente alla vostra cartella dei cataloghi.

Finito!

Se avete fatto tutto come descritto, ora, aprendo il catalogo, potrete ricominciare a pubblicare ed esportare e modificare tag e tutto quello che vi pare senza problemi e senza inspiegabili rallentamenti.
Se avete sbagliato qualcosa e trovate il vostro catalogo irrimediabilmente rovinato, dovrete recuperarlo dalla seconda copia che avete fatto all’inizio di qeusto articolo o da un backup. Dovrete semplicemente ricopiarlo sopra a quello modificato, e ricominciare.
Come unica cosa, ricordatevi che tutte le copie, le modifiche, e così via, fanno fatte rigorosamente a Lightroom chiuso, per evitare che ci siano modifiche in corso.

Notate bene: questo sistema non è pulito. Resteranno sicuramente, all’interno del database, dei riferimenti ai file rovinati, ma in punti in cui, finora, a me non hanno causato problemi di sorta.

Annunci