Files
ImmichWebhookImageCompression/server.js
T
azures04 d5563ad946 Add server, DB, and image processing modules
Introduce initial project scaffold: Express webhook server (server.js) for Immich uploads, DB pool (modules/database.js) using pg, immich repository (repositories/immichRepo.js) with get/update functions, image processing via sharp (modules/image_processor.js), a small execution helper (modules/execution_helper.js), and package.json + package-lock. Server validates a bearer token, filters non-image assets, waits briefly, compresses the image and updates DB path. Requires env vars: DB_HOST, DB_USER, DB_PORT, DB_NAME, DB_PASS, PASS_CODE, IMMICH_DATA_PATH, IMG_COMPRESSION_OUTPUT_FORMAT, IMG_COMPRESSION_OUTPUT_QUALITY, PORT.
2026-09-01 20:12:29 +02:00

37 lines
1.3 KiB
JavaScript

import "dotenv/config"
import express from "express"
import database from "./modules/database.js"
import immichDb from "./repositories/immichRepo.js"
import execHelper from "./modules/execution_helper.js"
import imageProcessor from "./modules/image_processor.js"
await database.connect()
const app = express()
app.use(express.json())
app.use(express.urlencoded({ extended: true }))
app.post("/", async (req, res) => {
const authorization = req.headers.authorization
if (authorization != `Bearer ${process.env.PASS_CODE}`) {
res.status(401).send()
}
const assetType = req.body.data.asset.type
if (assetType != "IMAGE") {
res.end()
}
const assetFilePath = req.body.data.asset.originalPath
if (imageProcessor.getMediaType(assetFilePath) != "IMAGE") {
res.end()
}
const assetId = req.body.data.asset.id
await execHelper.sleep(550)
const asset = await immichDb.getMediaInDatabase(assetId)
await imageProcessor.processCompression(asset[0].originalPath)
immichDb.updateMediaPathInDatabase(assetId, imageProcessor.changeExtension(asset[0].originalPath, process.env.IMG_COMPRESSION_OUTPUT_FORMAT))
return res.status(200).send()
})
app.listen(process.env.PORT, () => {
return console.log(`Server listening at port : ${process.env.PORT}`)
})