auto-base16-theme icon indicating copy to clipboard operation
auto-base16-theme copied to clipboard

Automatically generate a base16 color set for syntax highlighting based on the colors in an image

  • Auto Base16 Theme [[./images/Example4.jpg]] ** What it does This script generates a [[https://github.com/chriskempson/base16][base16]] color theme intended for code syntax highlighting from a source image.

This means you can have beautiful, readable themes which match your desktop background without having to do any work.

I currently only have a template for Emacs, but it should work for any editor which supports base16. If you create a template for your format/editor of choice, please feel free to create a pull request adding that template so others can benefit from it.

** Setup This script relies on [[https://github.com/thefryscorer/schemer2][schemer2]] to choose colors from images. It then takes the output of schemer2 and selects colors which fit the base16 format. Make sure you have Go installed, then install schemer2: : go get github.com/thefryscorer/schemer2 AutoBase16Theme.py requires Python 3.

** How to Use Run the following command, replacing ~your image~ with the image you want the theme's colors to be pulled from: : schemer2 -format img::colors -in [your image] -out colors.txt && python3 AutoBase16Theme.py [your template] [your output file]

*** Explanation

  • ~schemer2~ generates the color palette from the source image and outputs a list of color values to ~colors.txt~.
  • We then run AutoBase16Theme.py (which loads ~colors.txt~ by default). AutoBase16Theme.py selects from these color values (and modifies them, if necessary) such that a good theme is created. It loads ~your template~ and writes the final theme to ~your output file~.

For example, I have an image "wallpaper.jpg" and I want an [[https://github.com/belak/base16-emacs][Emacs base16]] theme to be generated: : schemer2 -format img::colors -in wallpaper.jpg -out colors.txt && python3 AutoBase16Theme.py emacs-base16-theme-template.el base16-my-wallpaper-theme.el I can then copy ~base16-my-wallpaper-theme.el~ into my Emacs base16 directory and evaluate it, then select it as a theme.

*** Additional Arguments Note that running : python3 AutoBase16Theme.py will output help with argument descriptions.

*** Emacs convenience function Here's an Emacs Lisp setup for making it easier to create new themes. You'll need to customize it with your own paths. #+BEGIN_SRC lisp (setq macoy-auto-theme-schemer2-bin "~/go/bin/schemer2.exe") (setq macoy-auto-theme-script-dir "~/auto-base16-theme") (setq macoy-auto-theme-output-file "~/AppData/Roaming/.emacs.d/elpa/base16-theme-20190413.1637/base16-my-auto-theme.el")

(defun macoy-generate-auto-theme () "Create a base16 auto-theme using AutoBase16Theme.py based on the image selected." (interactive)

(let ((default-directory macoy-auto-theme-script-dir))
  (compile
   (format "%s -format img::colors -in \"%s\" -out colors.txt && C:/Python_34/python.exe AutoBase16Theme.py emacs-base16-theme-template.el %s"
           macoy-auto-theme-schemer2-bin (read-file-name "Image: ") macoy-auto-theme-output-file))))

#+END_SRC ** Example results [[./images/Example1.jpg]] [[./images/Example2.jpg]] [[./images/Example3.jpg]]