¿Dónde puedo encontrar la documentación de la base de datos de Lightroom?

Estoy buscando documentación para las estructuras del catálogo de Lightroom (base de datos sqlite).

Aquí hay un ejemplo simple de lo que estoy tratando de hacer. Encontré una tabla que contiene los datos exif (AgHarvestedExifMetadata) y ahora estoy tratando de unirla con la imagen original (AgLibraryFile) pero no puedo encontrar un campo común para unirme. En este ejemplo, parece que id_global podría hacerlo, pero hasta ahora no he tenido suerte.

¿Dónde puedo encontrar documentación o ejemplos utilizando el catálogo o la base de datos backend de Lightroom? Encontré documentación para sqlite pero estoy buscando la estructura de la base de datos de Lightroom (tablas, claves externas, integridad referencial, etc.).

Esto no es realmente una pregunta de fotografía. El esquema interno utilizado en una base de datos incrustada en LR no se relaciona directamente con la fotografía.
@Robin: creo que es más fotografía que ingeniería y desarrollo de software. Es una pregunta específica de un software utilizado exclusivamente por fotógrafos para gestionar flujos de trabajo. Espero que haya fotógrafos que indaguen en el interior de sus herramientas y construyan otras herramientas para ampliar la funcionalidad.
Si no hay documentación oficial de Adobe, es razonable suponer que la ingeniería inversa es la alternativa. Si existe documentación oficial, no parece estar muy publicitada. Si existe un proyecto de código abierto de ingeniería inversa de larga data en la base de datos de Lightroom, tampoco parece estar muy publicitado. Debido a que Lightroom es de código cerrado y se ejecuta en sistemas operativos propietarios, ninguno de estos es sorprendente. De acuerdo o en desacuerdo con Stallman, su intuición sobre las libertades de los usuarios parece haberse confirmado en las últimas décadas.
¿Has intentado ponerte en contacto con Adobe?

Respuestas (3)

Estoy seguro de que no hay documentación oficial: Adobe realmente no quiere que hurguemos allí. Habiendo dicho eso, hay algunas publicaciones de blog con información sobre los contenidos del catálogo e incluso algunas que tratan sobre esa tabla. Aqui hay unos cuantos enlaces...

Esto no responde específicamente a su pregunta, pero puede arrojar luz sobre cómo se une a otras tablas: http://www.max.grenkowitz.net/?topic=1057

Este artículo tiene varias declaraciones SQL que pueden ayudarlo a descubrir cómo se relaciona la tabla con otras: https://forums.adobe.com/thread/1812037

Una buena descripción general con enlaces adicionales y algunos ejemplos: http://www.earthboundlight.com/phototips/querying-sqlite-lightroom-database.html

Otro ejemplo usando esa tabla: http://www.wideopenlens.com/blog/2012/08/hacking-lightroom-or-why-everyone-should-know-how-to-program

Gracias, Ian. Ese es exactamente el tipo de información que necesito.

Aquí hay algunos enlaces de Python a la base de datos publicados por un usuario:

https://github.com/bzimmer/openroom

Las tablas se modelan en el archivo openroom/model.py, incluidas algunas claves externas. Por ejemplo, la tabla AgHarvestedExifMetadata:

class Exif(Base):
    __tablename__ = "AgHarvestedExifMetadata"
    id = Column("id_local", Integer, primary_key=True)
    imageId = Column("image", Integer, ForeignKey("Adobe_images.id_local"))
    image = relation(Image, backref=backref('exif', uselist=False))
    aperture = Column(Integer)
    cameraId  = Column("cameraModelRef", Integer, ForeignKey("AgInternedExifCameraModel.id_local"))
    camera = relation(Camera)
    cameraSNId  = Column("cameraSNRef", Integer)
    dateDay = Column(Integer)
    dateMonth = Column(Integer)
    dateYear = Column(Integer)
    flashFired = Column(Boolean)
    focalLength = Column(Numeric)
    hasGPS = Column(Boolean)
    isoSpeedRating = Column(Integer)
    lensId = Column("lensRef", Integer, ForeignKey("AgInternedExifLens.id_local"))
    lens = relation(Lens)
    shutterSpeed = Column(Numeric)

Solo se representan algunas tablas y las definiciones son de 2009, pero sospecho que son iguales o similares en versiones más recientes de Lightroom.

Las licencias suelen contener una línea o un párrafo que prohíbe explícitamente la ingeniería inversa ; Estoy bastante seguro de que esto incluye analizar la base de datos. Tendría mucho cuidado a menos que haya verificado que las condiciones de la licencia permiten lo que está tratando de hacer. El texto completo está aquí: http://labs.adobe.com/technologies/eula/lightroom.html ; dice:

[...] No puede realizar ingeniería inversa, descompilar, desensamblar ni intentar descubrir el código fuente del Software excepto en la medida en que la ley aplicable le permita expresamente descompilar solo [...]

Podría ser necesario un abogado para interpretar eso con seguridad, ya que una estructura de base de datos no es realmente un código fuente en mi mente. Si la licencia incluye la prohibición del análisis de la base de datos, bien podría ser que a Adobe no le importe mucho que lo haga, pero eso no lo haría menos ilegal.

IANAL, pero estoy bastante seguro de que el "código fuente del software" no implica casi representaciones de texto sin formato de una biblioteca en formato SQLite.