ProductPromotion
Logo

Open.Source

made by https://0x3d.site

GitHub - RouHim/this-week-in-past: Aggregates images taken this week, from previous years and presents them on a web page with a simple slideshow.
Aggregates images taken this week, from previous years and presents them on a web page with a simple slideshow.  - GitHub - RouHim/this-week-in-past: Aggregates images taken this week, from previou...
Visit Site

GitHub - RouHim/this-week-in-past: Aggregates images taken this week, from previous years and presents them on a web page with a simple slideshow.

GitHub - RouHim/this-week-in-past: Aggregates images taken this week, from previous years and presents them on a web page with a simple slideshow.

Motivation

When I migrated my photo collection from google photos to a locally hosted instance of photoprism, I missed the automatically generated slideshow feature of google photos, here it is now.

How it works

The meta information of all images are read at startup and cached in memory. When the slideshow is opened, images from this calendar week from previous years are displayed. If no images from the calendar year are found, random images are displayed.

Run the application

Native execution

Download the latest release for your system from the releases page:

# Assuming you run a x86/x64 system, if not adjust the binary name to download 
LATEST_VERSION=$(curl -L -s -H 'Accept: application/json' https://github.com/RouHim/this-week-in-past/releases/latest | \
sed -e 's/.*"tag_name":"\([^"]*\)".*/\1/') && \
curl -L -o this-week-in-past https://github.com/RouHim/this-week-in-past/releases/download/$LATEST_VERSION/this-week-in-past-x86_64-unknown-linux-musl && \
chmod +x this-week-in-past

Create a folder to store the application data:

mkdir data

Start the application with:

RESOURCE_PATHS=/path/to/pictures \
DATA_FOLDER=data \
SLIDESHOW_INTERVAL=60 \
./this-week-in-past

Since the binary is compiled completely statically, there are no dependencies on system libraries like glibc.

Docker

Docker Example:

docker run -p 8080:8080 \
        -v /path/to/pictures:/resources \
        -e SLIDESHOW_INTERVAL=60 \
        -e WEATHER_ENABLED=true \
        -e OPEN_WEATHER_MAP_API_KEY=<YOUR_KEY> \
        -e BIGDATA_CLOUD_API_KEY=<YOUR_KEY> \
        rouhim/this-week-in-past

Docker compose example:

version: "3.9"

services:
  this-week-in-past:
    image: rouhim/this-week-in-past
    volumes:
      - /path/to/pictures:/resources:ro # mount read only
    ports:
      - "8080:8080"
    environment:
      SLIDESHOW_INTERVAL: 10

Configuration

All configuration is done via environment variables:

Name Description Default value Can be overwritten in URL
RESOURCE_PATHS A list of folders from which the images should be loaded (comma separated). /resources (Container only)
DATA_FOLDER Path to a folder where the data should be stored, needs to read/write access /data (Container only)
PORT Port on which the application should listen. 8080
SLIDESHOW_INTERVAL Interval of the slideshow in seconds 30 x
REFRESH_INTERVAL Interval how often the page should be reloaded in minutes 60
DATE_FORMAT Date format of the image taken date (https://docs.rs/chrono/0.4.19/chrono/format/strftime/index.html) %d.%m.%Y
BIGDATA_CLOUD_API_KEY To resolve geo coordinates to city name. Obtain here: https://www.bigdatacloud.com
OPEN_WEATHER_MAP_API_KEY To receive weather live data. Obtain here: https://openweathermap.org/api
WEATHER_ENABLED Indicates if weather should be shown in the slideshow false x
WEATHER_LOCATION Name of a city Berlin
WEATHER_LANGUAGE Weather language (ISO_639-1 two digit code) en
WEATHER_UNIT Weather units (metric or imperial) metric
HOME_ASSISTANT_BASE_URL Home assistant base url (e.g.: http://192.168.0.123:8123)
HOME_ASSISTANT_ENTITY_ID Home assistant entity id to load the weather from (e.g.: sensor.outside_temperature)
HOME_ASSISTANT_API_TOKEN Home assistant api access token
SHOW_HIDE_BUTTON Show the hide button on the slideshow false x
RANDOM_SLIDESHOW Show only random images instead of images from this week in previous years false x
IGNORE_FOLDER_MARKER_FILES A list of file names which causes the folder in which the file is located to be ignored. (comma separated). .ignore
IGNORE_FOLDER_REGEX A regular expression that causes the folder to be ignored if it matches.

Some parameters, as marked in the table, can be overwritten as URL parameter e.g.: http://localhost:8080/?SLIDESHOW_INTERVAL=10&SHOW_HIDE_BUTTON=false

Ignoring folders

There are two ways to ignore folders:

  1. By ignore file: If a folder contains a file with the name specified in IGNORE_FOLDER_MARKER_FILES, the folder is ignored.
  2. By folder name: If a folder name matches the regular expression specified in IGNORE_FOLDER_REGEX, the folder is ignored.

If a folder is ignored, all its sub-elements (files and folders) are also ignored.

Limitations

  • Due to this issue of the image crate, there is currently no HEIC image support.

Performance

Example 1

  • Hardware: i3-12100T, 3xWD_BLACK SN750 (RAID-Z1), 32GB RAM
  • Photos: ~80k
  • Indexing: 6 seconds
  • Uncached slideshow change: < 1 second

Example 2

  • Hardware: Raspberry Pi Model B, Class 10 SD Card, 1GHz (OC) 32-Bit arm/v6, 512MB RAM
  • Photos: ~6k
  • Indexing: 38 seconds
  • Uncached slideshow change: ~7 seconds

Example 3

  • Hardware: LG G3 (Android Smartphone), Internal Storage, Snapdragon 801 4C 32-Bit arm/v7, 3GB RAM
  • Photos: ~8k
  • Indexing: 50 seconds
  • Uncached slideshow change: < 1 second

Indexing scales with storage performance

Slideshow change scales with CPU performance

Resources

Articles
to learn more about the open-source concepts.

Resources
which are currently available to browse on.

mail [email protected] to add your project or resources here 🔥.

FAQ's
to know more about the topic.

mail [email protected] to add your project or resources here 🔥.

Queries
or most google FAQ's about Open-Source.

mail [email protected] to add more queries here 🔍.

More Sites
to check out once you're finished browsing here.

0x3d
https://www.0x3d.site/
0x3d is designed for aggregating information.
NodeJS
https://nodejs.0x3d.site/
NodeJS Online Directory
Cross Platform
https://cross-platform.0x3d.site/
Cross Platform Online Directory
Open Source
https://open-source.0x3d.site/
Open Source Online Directory
Analytics
https://analytics.0x3d.site/
Analytics Online Directory
JavaScript
https://javascript.0x3d.site/
JavaScript Online Directory
GoLang
https://golang.0x3d.site/
GoLang Online Directory
Python
https://python.0x3d.site/
Python Online Directory
Swift
https://swift.0x3d.site/
Swift Online Directory
Rust
https://rust.0x3d.site/
Rust Online Directory
Scala
https://scala.0x3d.site/
Scala Online Directory
Ruby
https://ruby.0x3d.site/
Ruby Online Directory
Clojure
https://clojure.0x3d.site/
Clojure Online Directory
Elixir
https://elixir.0x3d.site/
Elixir Online Directory
Elm
https://elm.0x3d.site/
Elm Online Directory
Lua
https://lua.0x3d.site/
Lua Online Directory
C Programming
https://c-programming.0x3d.site/
C Programming Online Directory
C++ Programming
https://cpp-programming.0x3d.site/
C++ Programming Online Directory
R Programming
https://r-programming.0x3d.site/
R Programming Online Directory
Perl
https://perl.0x3d.site/
Perl Online Directory
Java
https://java.0x3d.site/
Java Online Directory
Kotlin
https://kotlin.0x3d.site/
Kotlin Online Directory
PHP
https://php.0x3d.site/
PHP Online Directory
React JS
https://react.0x3d.site/
React JS Online Directory
Angular
https://angular.0x3d.site/
Angular JS Online Directory