Monitors selected BFI IMAX film pages and sends notifications when new buyable screenings appear.
Currently watches:
- The Odyssey
- Dune: Part Three
The script stores previous results in data/state.json so it can detect changes without sending repeated alerts.
You need:
- Docker
- Docker Compose
Copy the environment example:
cp .env.example .envEdit .env:
nano .envAdd your Discord webhook URL:
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/YOUR_WEBHOOK_HEREHome Assistant is optional. Leave it blank if you do not use it:
HA_WEBHOOK_URL=Build the Docker image:
docker compose buildRun once to create the baseline state:
docker compose run --rm bfi-watch python /app/watch_bfi.py --debugThe first run usually does not send an alert. It saves the current screenings as the baseline.
docker compose run --rm bfi-watchThis sends a fake test notification:
docker compose run --rm bfi-watch python /app/watch_bfi.py --test --debugWarning: this saves the fake test entry into the normal data/state.json.
For a safe test that does not touch the main state file, use a separate test folder:
mkdir -p test-data
cp data/state.json test-data/state.json
docker compose run --rm \
-v "$PWD/test-data:/data" \
bfi-watch \
python /app/watch_bfi.py --test --debugRun the same command again. The second run should not alert again.
After testing:
rm -rf test-dataTo run automatically every 5 minutes:
crontab -eAdd this line, changing /path/to/bfi-watch to the actual folder path:
*/5 * * * * cd /path/to/bfi-watch && echo "===== $(date) =====" >> cron.log && docker compose run --rm -T bfi-watch >> cron.log 2>&1Example:
*/5 * * * * cd /home/ashil/bfi-watch && echo "===== $(date) =====" >> cron.log && docker compose run --rm -T bfi-watch >> cron.log 2>&1Show the latest log entries:
tail -n 80 cron.logWatch logs live:
tail -f cron.logExit live view with:
Ctrl + C
If you want to reset the saved baseline:
rm data/state.json
docker compose run --rm bfi-watch python /app/watch_bfi.py --debugThe next run will create a fresh baseline.
The script alerts when:
- a new buyable screening appears
- an existing screening changes to
BUY
It tries to avoid alerts for:
- sold-out changes
- minor text changes
- hidden page text changes
- button wording changes
- repeated already-seen screenings
Do not share your real .env file.
Anyone with your Discord webhook URL can post messages into your Discord channel.