Files
PictureFrame/index.js
2025-04-03 09:22:53 -06:00

69 lines
1.7 KiB
JavaScript

const rclone = require('rclone.js')
const schedule = require('node-schedule')
const fs = require('fs')
const sharp = require('sharp')
const inky = require('@aeroniemi/inky')
const frame = new inky.Impression73()
const folder = './gallery/'
var ticker = false
var filelist = false
function downloadImgs() {
console.log('Starting download from Google Photos...')
const sync = rclone.sync('gphotos:album/Family Room Photo Frame', folder)
sync.stdout.on('data', function(data) {
console.log(data.toString())
})
sync.on('exit', function() {
console.log('Synchronized from Google Photos. Loading images...')
loadImgs()
})
}
function loadImgs() {
fs.readdir(folder, (err, files) => {
if (err || files.length == 0) {
console.log('No images found. Exiting.')
process.exit(1)
} else {
console.log(files.length + ' images found. Starting album display...')
filelist = files
displayAlbum()
}
})
}
function displayAlbum() {
if (filelist.length == 0) loadImgs()
else {
imgref = Math.floor(Math.random() * filelist.length)
imgfile = filelist.splice(imgref, 1)[0]
console.log('Randomly displaying image ' + (imgref + 1) + ' of ' + (filelist.length + 1) + ' remaining: ' + imgfile)
displayImage(imgfile)
ticker = setTimeout(displayAlbum, 1800000)
}
}
function displayImage(filename) {
sharp(folder + filename)
.resize(800,480)
.toFile('output.png', (err, info) => {
frame.display_png('output.png')
frame.show()
})
}
// We start by downloading images. Other functions will be called if this is successful...
downloadImgs()
// Define a cron-job to restart everything at 1:30am (including a refresh of the album)....
schedule.scheduleJob('0 30 1 * * *', function() {
clearTimeout(ticker)
console.log('Resetting...')
downloadImgs()
})