Skip to content

Repository files navigation

ArtiCal

Render images using automatically generated events on your calendar. Display ART, using iCal!

Project Structure

/camhack-2025/
├── config.py
├── image_processor.py
├── ical_generator.py
├── ical_uploader.py
├── main.py
├── /input_images/
│   └── example.png
└── /output_ics/
    └── 000000.ics
    └── 1D2B53.ics
    └── ...
  • config.py: contains all the project settings
    • PALETTE: Colour palette in hex codes, e.g. ["#FFFFFF", "#000000"]
    • OUTPUT_DIR: Directory to output generated ics files ("./output_ics/")
    • INPUT_DIR: Directory where input images are stored ("./input_images/")
    • IMAGE_WIDTH: Number of pixel columns. Must be divisible by 7
    • IMAGE_HEIGHT: Number of pixel rows
    • SLOT_DURATION_MINS: Height of each pixel row in minutes
  • image_processor.py: Module to convert an image into a 2D array of hex codes
  • ical_generator.py: Module to convert pixel arrays into iCal files
  • ical_uplaoder.py: Module to deploy generated ics files to a netlify webserver
  • main.py: Main CLI application

Dependencies

Install Python Packages

uv venv
uv sync

Netlify CLI

npm install -g netlify-cli
netlify login

Usage

Create input directory input_images, and add images to the directory.

uv run main.py --name example.png --save_pixart

Running main.py with --save_pixart option creates pixart.jpg in INPUT_DIR, which serves as a preview for the final calendar art.

To deploy, run main.py with the --upload option.

Subscribe to the calendar feeds in your app of choice (Outlook, Google Calendar, Thunderbird). For example, if the netlify project name is artical-example, subscribe to https://artical-example.netlify.app/<hex code>.ics for every single hex code in PALETTE, without the "#" (e.g. "#1D2B53" becomes https://artical-example.netlify.app/1D2B53.ics). Unfortunately, there is no way to automatically set the colour of imported events using iCal files, and colours will have to be manually set in the calendar app.

Warning

Use this app at your own risk, we managed to get a Google account suspended by importing too many calendar events.

Demo

Original Image Calendar View (Outlook)

About

Show any image on calendar apps using automatically generated events. Built for CamHack 2025.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages