diff --git a/.github/workflows/calibreapp-image-actions.yml b/.github/workflows/calibreapp-image-actions.yml
index b02224a62..2cf521775 100644
--- a/.github/workflows/calibreapp-image-actions.yml
+++ b/.github/workflows/calibreapp-image-actions.yml
@@ -1,3 +1,10 @@
+# Image Actions will run in the following scenarios:
+# - on Pull Requests containing images (not including forks)
+# - on pushing of images to `main` (for forks)
+# - on demand (https://github.blog/changelog/2020-07-06-github-actions-manual-triggers-with-workflow_dispatch/)
+# - at 11 PM every Sunday in anything gets missed with any of the above scenarios
+# For Pull Requests, the images are added to the PR.
+# For other scenarios, a new PR will be opened if any images are compressed.
 name: Compress Images
 
 on:
@@ -7,18 +14,50 @@ on:
       - '**.jpeg'
       - '**.png'
       - '**.webp'
+  push:
+    branches:
+      - master
+    paths:
+      - '**.jpg'
+      - '**.jpeg'
+      - '**.png'
+      - '**.webp'
+  workflow_dispatch:
+  schedule:
+    - cron: '00 23 * * 0'
 
 jobs:
   build:
-    # Only run on Pull Requests within the same repository, and not from forks.
-    if: github.event.pull_request.head.repo.full_name == github.repository
+    # The job needs to be able to pull the code and create a pull request.
+    permissions:
+      contents: read #  for actions/checkout
+      pull-requests: write #  to create pull request
+
     name: calibreapp/image-actions
     runs-on: ubuntu-latest
+
+    if: |
+      github.repository == 'pi-hole/docs' &&
+      (github.event_name != 'pull_request' ||
+       github.event.pull_request.head.repo.full_name == github.repository)
+
     steps:
       - name: Checkout Repo
         uses: actions/checkout@v4.2.2
 
       - name: Compress Images
-        uses: calibreapp/image-actions@1.1.0 # TODO: if they start using a tag like v1, switch to that
+        uses: calibreapp/image-actions@main # Their latest tag is > 4 years old and the README says to use main
         with:
           githubToken: ${{ secrets.GITHUB_TOKEN }}
+          # For non-Pull Requests, run in compressOnly mode and we'll PR after.
+          compressOnly: ${{ github.event_name != 'pull_request' }}
+
+      # If it's not a Pull Request then commit any changes as a new PR.
+      - name: Create Pull Request
+        if: |
+          github.event_name != 'pull_request' &&
+          steps.calibre.outputs.markdown != ''
+
+        run: gh pr create -B image_compress -H master --title 'Auto Compress Images' --body ${{ steps.calibre.outputs.markdown }}
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}