Cómo crear tu propio Google Photos en tu servidor con PhotoView

Cómo crear tu propio Google Photos en tu servidor con PhotoView

Para seguir con la serie de alternativas seflhosted a Google que comenzamos con la alternativa a Google Drive, en este post vamos a poner en marcha nuestro propio Google Photos.

Como ya os comenté en el anterior post, las alternativas que os voy a plantear son todas de software libre que he encontrado tanto en nomoregoogle.com como en ethical.net, dos páginas que os animo a visitar antes de emprender cualquier proyecto de selfhosted.

nomoregoogle

En los tres post que completarán esta serie, os dejaré enlaces a otras alternativas que pueden ser de utilidad si se ajustan mejor a vuestras necesidades y que podéis probar para compararlos con los que yo os voy a enseñar a instalar y utilizar. Como siempre, os animo a que compartáis en los comentarios los resultados para que todos podamos aprender juntos.

TOC

Funciones de Google Photos y alternativas

Antes de empezar a plantear el listado de alternativas de Software Libre que hay disponibles para instalar en nuestro servidor, creo que lo primero es hacer un listado de las funciones más interesantes que tiene Google Photos. Con esta lista, cada uno deberá valorar las que más le interesa tener ya que no hay ninguna alternativa que sea 100% idéntica y contenga todas las funciones.

  • Reconocimiento de caras: es una de las funciones más interesantes, ya que nos permite buscar fotos por personas
  • Reconocimiento de objetos: por ejemplo, nos permite buscar fotos de nuestro gato o perro. También podemos buscar cosas como atardecers, playas etc.
  • Fotos geolocalizadas, para poder rememorar de forma rápida aquel viaje a la otra punta del mundo
  • Álbumes, para organizar las fotos a nuestro gusto
  • Recordatorio de fotos importantes el mismo día hace años
  • Creación de animaciones/vídeos/collage de las fotos del año, de un viaje etc.
  • Compartir fotos, álbumes y creaciones del punto anterior con otras personas.
  • Edición básica de fotos y videos
  • Copia automática de las fotos del móvil

Es posible que me olvide de alguna función, pero a esta larga lista solo queda añadir la limitación en espacio que nos imponen si no queremos pagar. Y lo más importante, debemos que tener en cuenta que las fotos subidas a Google Photos (y sus metadatos) pueden ser utilizadas por Google (y lo harán) tanto para promoción, venta a 3º para publicidad, creación de perfiles, desarrollo etc. Se mantiene solo el derecho de propiedad intelectual pero les estamos dando la posibilidad de utilizar nuestros datos y fotos para objetivos ajenos al mero almacenamiento.

Las alternativas que he encontrado en la red son estas las siguientes. Os dejo los enlaces para que podáis echar un vistazo a lo que ofrece cada una de ellas, pero en general todas tienen puntos fuertes y puntos débiles. Todo dependerá en cada caso el uso que quieras darle, pero añado una puntuación subjetiva del 1 al 10:

  • Nextcloud: si seguiste los pasos del post anterior, habrás visto que el propio nextcloud tiene un apartado de galería de fotos, pero solo por ahora es muy muy simple y además no está muy optimizado. Si no te quieres liar más, es tu opción. 5/10
  • Piwigo: probablemente la que más tiempo lleva en desarrollo. Estéticamente se ha quedado un poco atrás y no tiene muchas funciones. 6/10
  • Lychee: muy simple pero muy pocas funciones. Estéticamente mejorable. 5/10
  • LibrePhotos: la primera alternativa (bueno, técnicamente la segunda ya que es un fork de OwnPhotos) con funciones parecidas como el reconocimiento de caras. 5/10
  • PhotoPrism: muchas funciones, fácil de instalar. La única pega que puedo poner es que el desarrollo se ha ido encaminando a la creación de una empresa y las prioridades han cambiado. Por ahora no tiene opción de multi-usuario. 7/10
  • Photo-Stream: es una especie de foto-libro digital. Muy útil para crear un álbum compartido tipo bodas&bautizos pero sin ninguna función. Estéticamente muy logrado. 6/10
  • Photoview: un fork de librephotos que ha ido creciendo en paralelo para convertirse, en mi opinión, en la opción más completa. Estéticamente creo que PhotoPrism es algo mejor, pero el ambiente que se respira en la comunidad de desarrollo es mucho más sano. Poco a poco van añadiendo funciones y están muy abiertos a sugerencias. Multiusuario. 7/10

Si revisáis las diferentes funciones que aporta cada una de las alternativas veréis que al final, deberemos hacer alguna concesión ya que ninguna de las opciones tiene todas las funciones que hemos comentado. En mi caso, doy mucha más importancia a la opción de que sea multiusuario por lo que la guía consistirá en instalar la última opción, PhotoView.

Instalacion1

Instalando Photoview sobre unRaid con Docker

La instalación la haremos sobre nuestro servidor es UnRaid, pero con cualquier otro OS como Ubuntu Server o una Raspberry-pi es prácticamente igual (sí, PhotoView funciona en ARM). La única diferencia es que nosotros usaremos la interfaz de instalación de UnRaid para levantar el micro-servicio con Docker y no tendremos que usar la línea de comandos.

Los requisitos para instalar PhotoView son:

  • Disponer de una base de datos tipo mySQL
  • Para visualizar los mapas, un token de MapBox
  • Un subdominio que usaremos para acceder desde internet

Para empezar, vamos a crear la BBDD. Si seguiste los pasos del post de instalación de NextCloud, ya tendrás MariaDB instalado por lo que solo deberemos crear la base de datos siguiendo exactamente los mismos pasos pero para PhotoView. Vamos a abrir la consola del contenedor de MariaDB:

Accedemos a la base de datos con el siguiente comando:

mysql -u root -p

Nos pedirá la contraseña de root que deberemos tener guardada en nuestro vault. La copiamos de ahí y la pegamos con clic derecho de ratón y le damos a enter.

Ahora ya estamos conectados a la base de datos. Creamos el usuario photoview con una nueva contraseña diferente a la de root y damos enter:

CREATE USER ‘photoview’ IDENTIFIED by ‘contraseña’;

Creamos la base de datos para photoview:

CREATE DATABASE photoview;

Y le damos todos los derechos de escritura y lectura al usuario photoview usando la contraseña del usuario:

GRANT ALL PRIVILEGES ON photoview.* TO ‘photoview’ IDENTIFIED BY ‘contraseña’;

Ya tenemos la base de datos preparada. Guardamos eso si, la contraseña del usuario photoview ya que la necesitaremos durante la instalación de la la aplicación.

Ahora vamos a crearnos una cuenta en MapBox y una vez creada, en el apartado Tokens veremos que tenemos un token llamado Default public token. La dejamos a mano para la instalación.

Mapbox

Para terminar con los requisitos, vamos a crear un registro en nuestro Ngix Proxy Manager. Agregamos la entrada con el subdominio que queramos usar para el acceso externo (tipo https://photoview.tudominio.com) y apuntando al puerto http que vayamos a utilizar en la instalación, por ejemplo el 8694:

Ahora ya solo nos queda lanzar el docker con la app. Volvemos a nuestro dashboard de UnRaid, a la pestaña APPs y buscamos photoview. Instalamos la plantilla de CorneliousJD:

unraid1

Los datos que tenemos que rellenar son:

  • Web Interface: el puerto que hayamos puesto en Nginx, en mi caso el 8694
  • Photos Share: lo que vamos a hacer aquí es mapear la carpeta de nextcloud completa ya que luego en la propia APP deberemos mapear una subcarpeta a cada usuario. De esta forma, podremos utilizar la subida automática de fotos de nextcloud con su app móvil que funciona a las mil maravillas y PhotoView solo como galería de visualización.
  • PHOTOVIEW_MYSQL_URL: aquí debemos mere un string del tipo usuario:contraseña@tcp(IP-Unraid:puerto-maria-db)/base-de-datos -> en mi caso photoview:contraseña@tcp(ip.unraid:3306)/photoview.
  • PHOTOVIEW_PUBLIC_ENDPOINT: el subdominio que hayamos configurado en Ngix.
  • MAPBOX_TOKEN: el token que hemos creado en MapBox.

Aceptamos y lanzamos la instalación.

Al finalizar, vamos subdominio que acabamos de crear (por ejemplo https://photoview.tudominio.com) y debería aparecer la ventana de configuración inicial:

initial-setup

Aquí crearemos nuestro propio usuario que será el administrador, con el user/pass que queramos y que podemos almacenar en el vault, y en la ruta deberemos meter la ruta relativa de la carpeta de fotos de nuestro usuario de nextcloud.

El mapeo que hemos creado al lanzar el contenedor es que en la ruta /photos de PhotoView es la ruta de UnRaid /mnt/user/Media/nextcloud.

Por tanto, si nuestro usuario de NextCloud es admin, la ruta relativa a nuestras fotos será /photos/admin/files/Fotos ya que la ruta absoluta en UnRaid es /mnt/user/Media/nextcloud/admin/files/Fotos

Guardamos y ya tenemos la APP configurada de forma básica. Ahora deberás esperar a que finalice el proceso de escaneado de la biblioteca (ten paciencia sobretodo si tienes muchas fotos de gatos).

Instalacion2

Configuración y uso de Photoview

La configuración de PhotoView no permite hacer grandes cambios. Las únicas cosas que deberemos configurar son:

  • Idioma: podemos ponerlo en castellano o en el idioma que prefiramos
  • Escaneo periódico: aquí configuraremos cada cuanto queremos que se escaneen las bibliotecas de fotos y cuantas tareas concurrentes queremos que se lancen a la vez. Yo lo tengo configurado con 3 tareas y 1 vez al día, pero para esto lo mejor es que hagas pruebas de rendimiento empezando por 1 tarea al día ya que consume bastante CPU (aunque no por mucho tiempo).
  • Creación de usuarios: podremos crear tantos usuarios como queramos. La lógica es la misma que en la creación del usuario administrador, un user/pass y una ruta relativa a la carpeta de fotos de su usuario de NextCloud. Podremos hacer que otros usuarios sean Admins si así lo decidimos.

El uso de la App es bastante simple pero creo que conviene comentar la funcionalidad de Personas. El escaner de biblioteca utiliza una inteligencia artificial para identificar caras y agrupar las fotos de esas personas. Esto se hace con un modelo pre-entrenado con caras de cientos de miles de personas diferentes, pero no es infalible. En el apartado de personas, podremos poner nombre a las agrupaciones de caras que identifica como la misma persona:

cara1

También podremos fusionar dos agrupaciones diferentes si la IA las ha considerado personas diferentes pero realmente se trata de la misma persona. Esto suele ocurrir sobre todo cuando las resoluciones de las fotos son muy diferentes, o cuando la luz, peinados, sombreros etc hacen que sea más complicado para el modelo la correcta identificación:

cara2

Y en el caso contrario, si tenemos una identificación incorrecta de una foto con una cara que no corresponde, podremos separar esa foto de esa agrupación para proceder después a un etiquetado correcto. Una vez etiquetados algunos de los grupo, podemos re-entrenar el modelo usando el botón Reconocer caras sin etiquetar.

En el apartado de lugares, el escaner utilizará la geolocalización de las fotos que extrae de los metadatos para posicionarlos en el mapa. En la vista global inicial, nos aparecerán las fotos agrupadas por zonas geográficas grandes y a medida que vayamos haciendo zoom, nos irá mostrando agrupaciones cada vez más pequeñas de zonas más pequeñas (como booking):

mapa

El apartado álbumes será la visualización de las carpetas que tengamos creadas dentro del directorio de fotos de NextCloud.

Instalacion4

Carga automática de fotos desde el móvil con NextCloud

Una de las funciones más interesantes que tiene Google Photos es que nos realiza subidas automáticas de las fotos del teléfono. Esto hace que tengamos siempre un respaldo de nuestras fotos y que aunque cambiemos de terminal móvil, todas nuestras fotos estén siempre a salvo en un mismo lugar.

Para tener esta misma funcionalidad, nosotros vamos a utilizar la función de carga automática del cliente móvil de NextCloud. Lo que tenemos que hacer primero es descargar la app de f-droid, googleplay o appstore:

Nos logeamos usando nuestro subdominio de NextCloud y nuestro user/pass + el doble factor:

En configuración vamos a carga automática y aquí podremos seleccionar las carpetas que queremos que se sincronicen con nuestro cloud. Podemos simplemente hacer click en la nubecita para empezar a sincronizar a la carpeta por defecto (/SubidaInstantanea) o bien, entrando en los 3 puntos, podremos decidir nosotros la carpeta en la que se subirán las fotos, que podría ser una ruta tipo /fotos/movil/telegram, /fotos/movil/whatsapp, /fotos/movil/DCIM etc, dependiendo de la carpeta del móvil que vayamos a sincronizar:

Si hemos configurado el escaner de PhotoView para que se active una vez al día, las fotos que se vayan subiendo a NextCloud aparecerán en la galería el día siguiente.

Instalacion3

Migración de tus fotos de Google a PhotoView

Si estas realmente convencido de migrar tus fotos a esta alternativa, puedes descargar todas tus fotos de Google Photos simplemente accediendo a Google Takeout, seleccionando solo la parte de Google Fotos y descargando un ZIP.

Después de descomprimir los ficheros, puedes sincronizar la carpeta raíz desde el PC a tu NextCloud bien subiendo la carpeta completa desde el navegador o bien configurando un cliente de escritorio como hemos hecho con el teléfono.

Instalacion5

Y esto es todo, ya puedes echarte la siestecita que te mereces.

Esperemos que PhotoView vaya creciendo en funcionalidades extra para que se convierta de verdad una alternativa 10/10 a Google. Por ahora puede seguir el Roadmap que hay en el Github del proyecto, puedes colaborar en el desarrollo aportando código para esas funciones que faltan y también puedes probar alguna de las otras alternativas que he listado al principio del artículo. Si lo haces, por favor cuéntanos tu experiencia en los comentarios.

Nos vemos en el siguiente post que cerrará esta mini-serie de alternativas a servicios de Google en el que instalaremos una suite de ofimática de software libre muy completa.

PD: todas las fotos de relleno son de mi autoría y con el consentimiento de los modelos, por supuesto :)


Suscríbete, que es gratis

Nota: algunos de los enlaces a productos o servicios pueden ser enlaces referidos con los que podemos obtener una comisión de venta.