<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Tim O&apos;Ryan&apos;s blog</title>
    <description>My Jekyll blog site</description>
    <link>https://www.oryan.uk/blog/</link>
    <atom:link href="https://www.oryan.uk/blog/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Sun, 05 Apr 2026 13:26:01 +0000</pubDate>
    <lastBuildDate>Sun, 05 Apr 2026 13:26:01 +0000</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
    
      <item>
        <title>Adding camera settings to pictures using ImageMagick</title>
        <description>&lt;figure&gt;
  &lt;a href=&quot;&quot; target=&quot;&quot;&gt;
    &lt;img src=&quot;/blog/assets/images/gen/blog/2026-03-16-manchester-trams-metadata.jpg&quot; alt=&quot;Photograph of St Peter&apos;s Square tram station in Manchester. The image is captioned with the camera settings.&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;
    &lt;h4&gt;Photograph of trams in Manchester, showing camera settings&lt;/h4&gt;
    &lt;p&gt;&lt;/p&gt;
  &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;At the camera club I’ve joined recently, a couple of speakers have displayed photographs with the camera settings superimposed over the image. I wondered how they’d done this, but didn’t think to ask. A search of the internet didn’t reveal any easy way to do this in an automated fashion, so I decided to figure it out for myself.&lt;/p&gt;

&lt;p&gt;I knew that I could use &lt;a href=&quot;https://exiftool.org/&quot;&gt;exiftool&lt;/a&gt;&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; to view the metadata on my images, and &lt;a href=&quot;https://imagemagick.org/&quot;&gt;ImageMagick&lt;/a&gt;&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; to resize and add elements to them. The question was how to combine the two and have a result that looked good.&lt;/p&gt;

&lt;p&gt;For the rest of the article I will be using this image of a proud scooter owner.&lt;/p&gt;

&lt;figure&gt;
  &lt;a href=&quot;&quot; target=&quot;&quot;&gt;
    &lt;img src=&quot;/blog/assets/images/gen/blog/2026-04-04-scooter-owner.jpg&quot; alt=&quot;&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;
    &lt;h4&gt;A proud scooter owner&lt;/h4&gt;
    &lt;p&gt;&lt;/p&gt;
  &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;finding-the-right-data-using-exiftool&quot;&gt;Finding the right data using exiftool&lt;/h2&gt;

&lt;p&gt;The command to run exiftool on the command line is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exiftool&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To get the full EXIF data from an image, run the command &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exiftool &amp;lt;filename&amp;gt;&lt;/code&gt;. For this image, the following data is returned:&lt;/p&gt;

&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ExifTool Version Number         : 13.36
File Name                       : 2026-04-04-scooter-owner.jpg
Directory                       : .
File Size                       : 633 kB
File Modification Date/Time     : 2026:03:23 20:41:53+00:00
File Access Date/Time           : 2026:04:04 17:59:35+01:00
File Inode Change Date/Time     : 2026:04:04 17:59:34+01:00
File Permissions                : -rw-r--r--
File Type                       : JPEG
File Type Extension             : jpg
MIME Type                       : image/jpeg
Exif Byte Order                 : Little-endian (Intel, II)
Make                            : Canon
Camera Model Name               : Canon EOS 850D
X Resolution                    : 240
Y Resolution                    : 240
Resolution Unit                 : inches
Software                        : Adobe Photoshop Lightroom Classic 15.2.1 (Macintosh)
Modify Date                     : 2026:03:23 20:41:53
Copyright                       : Tim O&apos;Ryan
Exposure Time                   : 1/250
F Number                        : 4.0
Exposure Program                : Aperture-priority AE
ISO                             : 100
Sensitivity Type                : Recommended Exposure Index
Recommended Exposure Index      : 100
Exif Version                    : 0231
Date/Time Original              : 2026:03:22 13:44:57
Create Date                     : 2026:03:22 13:44:57
Offset Time                     : +00:00
Offset Time Original            : +00:00
Offset Time Digitized           : +00:00
Shutter Speed Value             : 1/250
Aperture Value                  : 4.0
Exposure Compensation           : 0
Max Aperture Value              : 4.0
Metering Mode                   : Multi-segment
Flash                           : No Flash
Focal Length                    : 24.0 mm
Sub Sec Time Original           : 93
Sub Sec Time Digitized          : 93
Color Space                     : sRGB
Focal Plane X Resolution        : 2688.726593
Focal Plane Y Resolution        : 2688.726593
Focal Plane Resolution Unit     : cm
Custom Rendered                 : Normal
Exposure Mode                   : Auto
White Balance                   : Auto
Scene Capture Type              : Standard
Lens Info                       : 24-70mm f/?
Lens Model                      : EF24-70mm f/4L IS USM
Lens Serial Number              : 8424000290
Compression                     : JPEG (old-style)
Thumbnail Offset                : 970
Thumbnail Length                : 19917
Displayed Units X               : inches
Displayed Units Y               : inches
Current IPTC Digest             : c0b6a936036c4068499ded398d854858
Coded Character Set             : UTF8
Application Record Version      : 4
Time Created                    : 13:44:57
Digital Creation Date           : 2026:03:22
Digital Creation Time           : 13:44:57+00:00
Copyright Notice                : Tim O&apos;Ryan
Copyright Flag                  : True
Creator Tool                    : Adobe Photoshop Lightroom Classic 15.2.1 (Macintosh)
Metadata Date                   : 2026:03:23 20:41:53Z
Lens                            : EF24-70mm f/4L IS USM
Image Number                    : 0
Approximate Focus Distance      : 1.82
Flash Compensation              : 0
Firmware                        : 1.0.0
Date Created                    : 2026:03:22 13:44:57.930
Document ID                     : xmp.did:a164ddb0-b486-451f-b7f3-b6df01014af2
Preserved File Name             : _MG_6024.CR3
Original Document ID            : 55813A5F105906EBD5D9B11E8C36D27E
Instance ID                     : xmp.iid:a164ddb0-b486-451f-b7f3-b6df01014af2
Format                          : image/jpeg
Raw File Name                   : _MG_6024.CR3
Version                         : 18.2.2
Compatible Version              : 285212672
Process Version                 : 15.4
Auto Lateral CA                 : 1
Lens Profile Enable             : 1
Lens Manual Distortion Amount   : 0
Tone Curve Name 2012            : Linear
Camera Profile                  : Camera Faithful
Camera Profile Digest           : BD36C3F0247FAC03E6C2AA9CE32FC464
Lens Profile Setup              : LensDefaults
Lens Profile Name               : Adobe (Canon EF 24-70mm f/4 L IS USM)
Lens Profile Filename           : Canon EOS-1Ds Mark III (Canon EF 24-70mm f4L IS USM) - RAW.lcp
Lens Profile Digest             : ABA7404FAA184A74B905644028569C94
Lens Profile Is Embedded        : False
Lens Profile Distortion Scale   : 100
Lens Profile Vignetting Scale   : 100
Has Crop                        : True
Already Applied                 : True
History Action                  : derived, saved
History Parameters              : converted from image/x-canon-cr3 to image/jpeg, saved to new location
History Instance ID             : xmp.iid:a164ddb0-b486-451f-b7f3-b6df01014af2
History When                    : 2026:03:23 20:41:53Z
History Software Agent          : Adobe Photoshop Lightroom Classic 15.2.1 (Macintosh)
History Changed                 : /
Derived From Document ID        : 55813A5F105906EBD5D9B11E8C36D27E
Derived From Original Document ID: 55813A5F105906EBD5D9B11E8C36D27E
Rights                          : Tim O&apos;Ryan
DCT Encode Version              : 100
APP14 Flags 0                   : [14], Encoded with Blend=1 downsampling
APP14 Flags 1                   : (none)
Color Transform                 : YCbCr
Image Width                     : 2000
Image Height                    : 1333
Encoding Process                : Baseline DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:4:4 (1 1)
Aperture                        : 4.0
Image Size                      : 2000x1333
Megapixels                      : 2.7
Scale Factor To 35 mm Equivalent: 4.8
Shutter Speed                   : 1/250
Create Date                     : 2026:03:22 13:44:57.93+00:00
Date/Time Original              : 2026:03:22 13:44:57.93+00:00
Modify Date                     : 2026:03:23 20:41:53+00:00
Thumbnail Image                 : (Binary data 19917 bytes, use -b option to extract)
Date/Time Created               : 2026:03:22 13:44:57
Digital Creation Date/Time      : 2026:03:22 13:44:57+00:00
Circle Of Confusion             : 0.006 mm
Depth Of Field                  : 0.28 m (1.69 - 1.97 m)
Field Of View                   : 17.6 deg
Focal Length                    : 24.0 mm (35 mm equivalent: 116.2 mm)
Hyperfocal Distance             : 23.20 m
Light Value                     : 12.0
Lens ID                         : Canon EF 24-70mm f/4L IS USM
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Editing software can also add more data – Lightroom Classic also adds a lot of data about your edits. I have removed some information to prevent the list being unreasonably long.&lt;/p&gt;

&lt;p&gt;For the purposes of this article, we are interested in the following information:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Filename&lt;/li&gt;
  &lt;li&gt;Date and time&lt;/li&gt;
  &lt;li&gt;Focal length (note that this appears in the list twice – more on this in a bit)&lt;/li&gt;
  &lt;li&gt;Aperture&lt;/li&gt;
  &lt;li&gt;Shutter speed&lt;/li&gt;
  &lt;li&gt;ISO&lt;/li&gt;
  &lt;li&gt;Lens model information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If we want to get a particular value, the command looks like this: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exiftool -ValueToGet filename&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This is a bit confusing, because the labels in our list above contain spaces and other non-alphanumeric characters. To convert these to an option that exiftool can understand, just remove these characters. So, the command to extract &lt;strong&gt;Exposure Time&lt;/strong&gt; from our image will be:&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;exiftool &lt;span class=&quot;nt&quot;&gt;-ExposureTime&lt;/span&gt; 2026-04-04-scooter-owner
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;and to extract &lt;strong&gt;Date/Time Original&lt;/strong&gt; it will be:&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;exiftool &lt;span class=&quot;nt&quot;&gt;-DateTimeOriginal&lt;/span&gt; 2026-04-04-scooter-owner.jpg
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;We can also get multiple values at once:&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;exiftool &lt;span class=&quot;nt&quot;&gt;-ModifyDate&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-Copyright&lt;/span&gt; 2026-04-04-scooter-owner.jpg
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;formatting-the-exiftool-output&quot;&gt;Formatting the exiftool output&lt;/h3&gt;

&lt;p&gt;One of the most useful features of exiftool is the ability to format the output to include our own text along with the data from exiftool. We interpolate the returned data into our own text string.&lt;/p&gt;

&lt;p&gt;For our final image, we want the camera settings to look like this when superimposed onto the photograph:&lt;/p&gt;

&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
File: 2026-04-04-scooter-owner.jpg – 2026:03:22 13:44:57
24.0 mm, 1/250 sec at ƒ/4.0, ISO 100
EF24-70mm f/4L IS USM

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;We can use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exiftool -p&lt;/code&gt; for this. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-p&lt;/code&gt; option means &lt;strong&gt;print&lt;/strong&gt;, and the options provided will determine how the data is printed.&lt;/p&gt;

&lt;p&gt;The format string can be passed in one of two ways: directly as a string in the first argument to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-p&lt;/code&gt;, or as a text file. Because we want the text to span multiple lines, using a text file is easier.&lt;/p&gt;

&lt;p&gt;To extract the information and format it, run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exiftool -p format-file image-file&lt;/code&gt; where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;format-file&lt;/code&gt; is our text file and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;image-file&lt;/code&gt; is the image we are reading the exif data from. For the rest of this article, I will be using a file called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exif_fmt.txt&lt;/code&gt;, but it can have any name.&lt;/p&gt;

&lt;p&gt;Our text file looks like this:&lt;sup id=&quot;fnref:3&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# Example exiftool formatting file
File: $FileName – $DateTimeOriginal
$FocalLength, $ShutterSpeed sec at ƒ/$Aperture, ISO $ISO
$LensModel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In common with most files, a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#&lt;/code&gt; symbol denotes a comment.&lt;/p&gt;

&lt;p&gt;In this file, we prefix our EXIF tags with a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$&lt;/code&gt; symbol, and this instructs exiftool to replace this text with the value from the EXIF data.&lt;/p&gt;

&lt;p&gt;In our example, we run:&lt;sup id=&quot;fnref:4&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:4&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;exiftool &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; exif_fmt.txt 2026-04-04-scooter-owner.jpg
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exiftool -p&lt;/code&gt; has many more options than I can cover here, including conditional statements and options for running on  multiple image files. I’ve copied the relevant &lt;a href=&quot;/assets/attachments/exif_fmt_guide.txt&quot;&gt;manual page&lt;/a&gt; for anyone who is interested.&lt;/p&gt;

&lt;h2 id=&quot;using-imagemagick&quot;&gt;Using ImageMagick&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Full disclosure: The next part is almost certainly not the best way to accomplish this task. ImageMagick is an enormous package with lots of options and I don’t know even 2% of it. But in the absence of anyone else having written a guide for this, this is what you’re getting. For example, a lot of numbers are hard-coded here. They work for my purposes. Feel free to change them.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The first thing I’m going to do is resize the image. We’re not printing these but we might be displaying them on a screen. I’m going to make the image 2000px wide – good enough to display on most screens and we can always reduce its size later.&lt;/p&gt;

&lt;p&gt;To resize the image to 2000px on the longest edge, run:&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;magick input_file.jpg &lt;span class=&quot;nt&quot;&gt;-resize&lt;/span&gt; x2000 output_file.jpg
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;By providing only one size value (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;x2000&lt;/code&gt;), we tell ImageMagick to resize the longest edge, retaining the same aspect ratio and all other settings.&lt;/p&gt;

&lt;p&gt;The rest of this guide assumes we are working on a 2000px wide image.&lt;/p&gt;

&lt;h3 id=&quot;creating-a-semitransparent-box-with-a-border-and-adding-text-to-it&quot;&gt;Creating a semitransparent box with a border, and adding text to it&lt;/h3&gt;

&lt;p&gt;In this part, we are going to create a box big enough to hold our three lines of text, and put some text in it.&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;magick 2026-04-04-scooter-owner.jpg &lt;span class=&quot;nt&quot;&gt;-auto-orient&lt;/span&gt; xc: &lt;span class=&quot;nt&quot;&gt;-fill&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;rgba(0,0,0,0.7)&apos;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-stroke&lt;/span&gt; white &lt;span class=&quot;nt&quot;&gt;-strokewidth&lt;/span&gt; 4 &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
   &lt;span class=&quot;nt&quot;&gt;-draw&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;rectangle 0,%[fx:h-200] %[fx:w],%[fx:h]&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
   &lt;span class=&quot;nt&quot;&gt;-gravity&lt;/span&gt; South &lt;span class=&quot;nt&quot;&gt;-pointsize&lt;/span&gt; 50 &lt;span class=&quot;nt&quot;&gt;-strokewidth&lt;/span&gt; 0 &lt;span class=&quot;nt&quot;&gt;-fill&lt;/span&gt; white  &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
   &lt;span class=&quot;nt&quot;&gt;-annotate&lt;/span&gt; +0+15 &lt;span class=&quot;s2&quot;&gt;&quot;Insert text here&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
   &lt;span class=&quot;nt&quot;&gt;-composite&lt;/span&gt; out.jpg
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This command does a number of things:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Uses &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2026-04-04-scooter-owner.jpg&lt;/code&gt; as the input file&lt;/li&gt;
  &lt;li&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-auto-orient&lt;/code&gt; option ensures that the image is oriented correctly in portrait or landscape orientation. This is necessary to ensure that the caption appears at the bottom of portrait images and not down the left hand side.&lt;/li&gt;
  &lt;li&gt;Draws a rectangle with a black background at 70% opacity (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-fill &apos;rgba(0,0,0,0.7)&apos;&lt;/code&gt;) and a white border that is 4 pixels wide (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-stroke white -strokewidth 4&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;The rectangle is positioned at the bottom of the image, spans the full width of the image, and is 200 pixels tall (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-draw &quot;rectangle 0,%[fx:h-200] %[fx:w],%[fx:h]&quot;&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;At the bottom of the image, in the centre (corresponding to South on a compass), start drawing some text (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-gravity South&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;The text will be white, 50pt size, with no outline (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-pointsize 50 -strokewidth 0 -fill white&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;The text is inset 15 pixels from the bottom of the image and 0 pixels from the left, and reads “Insert text here” (without quotes) (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-annotate +0+15 &quot;Insert text here&quot;&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;Save our composited image to a new file called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;out.jpg&lt;/code&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-composite out.jpg&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;adding-our-exif-data-to-the-image&quot;&gt;Adding our EXIF data to the image&lt;/h3&gt;

&lt;p&gt;We’re now going to combine our exiftool and ImageMagick commands into a single command, using variables to store intermediate data.&lt;/p&gt;

&lt;p&gt;Since the input file for both commands is the same (our photograph), we can set this as a variable called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;infile&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;infile&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;2026-04-04-scooter-owner.jpg &lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Next we need to get our EXIF data from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exiftool&lt;/code&gt;. As we will be passing this to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;magick&lt;/code&gt; in the next step, we also need to store this in a variable. We will call this &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;settings&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;settings&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;exiftool &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; exif_fmt.txt &lt;span class=&quot;nv&quot;&gt;$infile&lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The backticks (``) around the exiftool command mean that we are storing the output of the command in our variable.&lt;/p&gt;

&lt;p&gt;Finally, we run our ImageMagick command to add the text to the image:&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;magick &lt;span class=&quot;nv&quot;&gt;$infile&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-auto-orient&lt;/span&gt; xc: &lt;span class=&quot;nt&quot;&gt;-fill&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;rgba(0,0,0,0.5)&apos;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-stroke&lt;/span&gt; white &lt;span class=&quot;nt&quot;&gt;-strokewidth&lt;/span&gt; 4 &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
   &lt;span class=&quot;nt&quot;&gt;-draw&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;rectangle 0,%[fx:h-200] %[fx:w],%[fx:h]&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
   &lt;span class=&quot;nt&quot;&gt;-gravity&lt;/span&gt; South &lt;span class=&quot;nt&quot;&gt;-pointsize&lt;/span&gt; 50 &lt;span class=&quot;nt&quot;&gt;-strokewidth&lt;/span&gt; 0 &lt;span class=&quot;nt&quot;&gt;-fill&lt;/span&gt; white &lt;span class=&quot;nt&quot;&gt;-annotate&lt;/span&gt; +0+15 &lt;span class=&quot;nv&quot;&gt;$settings&lt;/span&gt;  &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
   &lt;span class=&quot;nt&quot;&gt;-composite&lt;/span&gt; out.jpg
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Putting it all together, our command looks like this:&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;infile&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;./2026-04-04-scooter-owner.jpg &lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;settings&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;exiftool &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; exif_fmt.txt &lt;span class=&quot;nv&quot;&gt;$infile&lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
magick &lt;span class=&quot;nv&quot;&gt;$infile&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-auto-orient&lt;/span&gt; xc: &lt;span class=&quot;nt&quot;&gt;-fill&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;rgba(0,0,0,0.5)&apos;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-stroke&lt;/span&gt; white &lt;span class=&quot;nt&quot;&gt;-strokewidth&lt;/span&gt; 4 &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
   &lt;span class=&quot;nt&quot;&gt;-draw&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;rectangle 0,%[fx:h-200] %[fx:w],%[fx:h]&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
   &lt;span class=&quot;nt&quot;&gt;-gravity&lt;/span&gt; South &lt;span class=&quot;nt&quot;&gt;-pointsize&lt;/span&gt; 50 &lt;span class=&quot;nt&quot;&gt;-strokewidth&lt;/span&gt; 0 &lt;span class=&quot;nt&quot;&gt;-fill&lt;/span&gt; white &lt;span class=&quot;nt&quot;&gt;-annotate&lt;/span&gt; +0+15 &lt;span class=&quot;nv&quot;&gt;$settings&lt;/span&gt;  &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
   &lt;span class=&quot;nt&quot;&gt;-composite&lt;/span&gt; out.jpg
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;For anyone unfamiliar with running commands on the terminal, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;;&lt;/code&gt; character means ‘move on to the next command’, and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\&lt;/code&gt; character means ‘continue the current command on a new line’. The entire command could be a single line, but splitting the lines with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\&lt;/code&gt; makes it more readable.&lt;/p&gt;

&lt;p&gt;Our final image looks like this:&lt;/p&gt;

&lt;figure&gt;
  &lt;a href=&quot;&quot; target=&quot;&quot;&gt;
    &lt;img src=&quot;/blog/assets/images/gen/blog/2026-04-04-scooter-owner-with-caption.jpg&quot; alt=&quot;&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;
    &lt;h4&gt;A proud scooter owner, with the image now showing the metadata&lt;/h4&gt;
    &lt;p&gt;&lt;/p&gt;
  &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;With portrait images, you may find that the text is too wide for the image, particularly if the filename is long. You can easily play about with settings to get the balance right. This image has a text size of 40 and offset of 30:&lt;/p&gt;

&lt;figure&gt;
  &lt;a href=&quot;&quot; target=&quot;&quot;&gt;
    &lt;img src=&quot;/blog/assets/images/gen/blog/2026-04-04-back-of-some-shops-with-caption.jpg&quot; alt=&quot;&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;
    &lt;h4&gt;The back of some shops&lt;/h4&gt;
    &lt;p&gt;&lt;/p&gt;
  &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;This took a lot of trial and error and I’m pleased that it works, but I would love it if someone who knows ImageMagick better than me could come up with a more programmatic way of doing this. For example, automatically sizing the box based on the text size, or resizing the text so that it doesn’t flow off the sides of the image in portrait orientation. This might not be ideal for doing batches of images but could definitely be improved.&lt;/p&gt;

&lt;p&gt;In any case, I hope this has been helpful to someone.&lt;/p&gt;

&lt;h2 id=&quot;notes&quot;&gt;Notes&lt;/h2&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;On my Mac, I used &lt;a href=&quot;https://formulae.brew.sh/formula/exiftool#default&quot;&gt;homebrew&lt;/a&gt; to install exiftool. On Windows, the process seems to be more of a hassle, but the instructions are &lt;a href=&quot;https://exiftool.org/install.html#Windows&quot;&gt;on the exiftool website&lt;/a&gt;. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Like exiftool, there is a homebrew package available for ImageMagick. Also like exiftool, the installation process for Windows is a hassle, but instructions are &lt;a href=&quot;https://imagemagick.org/script/download.php#windows&quot;&gt;on the ImageMagick website&lt;/a&gt;. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;To get the stylised ƒ symbol: on a Mac, press &lt;strong&gt;option + f&lt;/strong&gt;. On Windows/Linux, I don’t know. Copy it from here I guess. &lt;a href=&quot;#fnref:3&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:4&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;This example assumes everything is in the same directory, our current working directory. &lt;a href=&quot;#fnref:4&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Sat, 04 Apr 2026 16:00:00 +0000</pubDate>
        <link>https://www.oryan.uk/blog/posts/2026-04-04-adding-camera-settings-with-imagemagick/</link>
        <guid isPermaLink="true">https://www.oryan.uk/blog/posts/2026-04-04-adding-camera-settings-with-imagemagick/</guid>
        
        
        <category>photography</category>
        
        <category>tools</category>
        
      </item>
    
      <item>
        <title>An afternoon at Hornsea seafront</title>
        <description>&lt;figure&gt;
  &lt;a href=&quot;&quot; target=&quot;&quot;&gt;
    &lt;img src=&quot;/blog/assets/images/gen/blog/2026-02-24-hornsea-boat-launch.jpg&quot; alt=&quot;Photograph of the boat launch at Hornsea, with the sea in the background. The building has been converted to a café and various posters and signs appear in the windows. There is a Union Jack in front of the building and to the side a lone male figure stands with his back to the camera.&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;
    &lt;h4&gt;Hornsea boat launch&lt;/h4&gt;
    &lt;p&gt;&lt;/p&gt;
  &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;hornsea-boat-launch&quot;&gt;Hornsea boat launch&lt;/h2&gt;

&lt;p&gt;This first image was almost the first picture I took after leaving the car park. It took a couple of goes to get the composition right, but I like this one because it says a lot about where we are and what we are doing:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;We are in Britain&lt;/li&gt;
  &lt;li&gt;We are by the sea&lt;/li&gt;
  &lt;li&gt;It is Windy&lt;/li&gt;
  &lt;li&gt;This is not a posh seaside town&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I like the clutter and the slightly chaotic nature of the image. The building shows signs of being well-used, having a history as a working building and not merely a tourist attraction. There is still a Covid-19 poster in the window.&lt;/p&gt;

&lt;p&gt;The flag has clearly been placed haphazardly, and recently, like a lot of British flags in recent years. One thing that I notice when taking pictures of public buildings is how many of them have flags in front of them now compared to their Wikipedia pictures from several years ago.&lt;/p&gt;

&lt;p&gt;I think the composition has worked well here. I had to decide whether to keep the windsock in frame or crop it out. In the end I decided to keep it because it adds weight to the right hand side of the frame, stopping the viewer’s eye from drifting out of frame, and forming a triangle with the flag.&lt;/p&gt;

&lt;figure&gt;
  &lt;a href=&quot;&quot; target=&quot;&quot;&gt;
    &lt;img src=&quot;/blog/assets/images/gen/blog/2026-02-24-hornsea-dog-couple.jpg&quot; alt=&quot;Photograph of a man and a woman sitting on some rocks at the beach. Five small dogs mill around their feet. The man is bending down to take the lead off one of the dogs and the woman is looking at the camera.&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;
    &lt;h4&gt;Taking the dogs out&lt;/h4&gt;
    &lt;p&gt;&lt;/p&gt;
  &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;taking-the-dogs-out&quot;&gt;Taking the dogs out&lt;/h2&gt;

&lt;p&gt;This one I really like because it was the first picture I took where I asked the subject if I could photograph them. I just liked the activity of the five dogs and the couple were framed really nicely on the rocks. There’s a lot of depth to the image even though it’s simple – dogs in the foreground, couple in the midground and the sea wall and sky in the background.&lt;/p&gt;

&lt;p&gt;I would call this a semi-candid shot. It’s not posed, but she is looking at the camera and aware the picture is being taken. It’s not intrusive although it has caught them by surprise, and the picture feels alive as a result.&lt;/p&gt;

&lt;p&gt;I might have preferred the light a little bit softer on this one, but it was taken at midday so, in that respect, it is what it is. I like the sharp focus and long depth of field – this adds to the candid street style of the picture.&lt;/p&gt;

&lt;figure&gt;
  &lt;a href=&quot;&quot; target=&quot;&quot;&gt;
    &lt;img src=&quot;/blog/assets/images/gen/blog/2026-02-24-hornsea-seamark.jpg&quot; alt=&quot;Photograph of the Hornsea seamark taken from land. The seamark is a tall tapered post, painted reddish brown and chrome, with a slupture depicting waves at the top. To the side is a signpost and in front of this two men stand with their backs to the camera. In the background is the sea, and in the far distance wind turbines can be seen.&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;
    &lt;h4&gt;Signpost and seamark&lt;/h4&gt;
    &lt;p&gt;&lt;/p&gt;
  &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;signpost-and-seamark&quot;&gt;Signpost and seamark&lt;/h2&gt;

&lt;p&gt;I composed this with just the seamark (a landmark visible from the sea) and signpost, and then took a few exposures with different people moving through the shot. This one was my favourite. The two lads are stood naturally, casually, unaware of the camera, but it doesn’t feel intrusive. They are not obstructing anything important and their position in relation to the other elements adds depth to the composition. The one on the left is looking to the right, drawing the viewer’s eye back into the frame and towards the other subjects.&lt;/p&gt;

&lt;p&gt;The seamark forms a strong triangle with the sea wall and the other elements. There is symmetry between these two elements, in both form and function. It is visually and narratively pleasing, if I say so myself.&lt;/p&gt;

&lt;p&gt;This was taken later, a couple of hours after midday, and the light is a lot softer as a result, almost flat. This effect wasn’t deliberate, but it feels nostalgic, like holiday snaps taken on a cheap 35mm compact camera.&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;Thank you for persevering to the end of this fairly long post. This is the start of a journey for me and the first step is a very small one. These are not exciting pictures or particularly well written words, but they represent a genuine effort on my part to learn, improve, and create something meaningful.&lt;/p&gt;
</description>
        <pubDate>Wed, 25 Feb 2026 11:00:00 +0000</pubDate>
        <link>https://www.oryan.uk/blog/posts/2026-02-25-an-afternoon-at-hornsea-seafront/</link>
        <guid isPermaLink="true">https://www.oryan.uk/blog/posts/2026-02-25-an-afternoon-at-hornsea-seafront/</guid>
        
        
        <category>photography</category>
        
      </item>
    
      <item>
        <title>This is a blog</title>
        <description>&lt;p&gt;I’ve decided to start a blog.&lt;/p&gt;

&lt;p&gt;There are lots of reasons why people start writing a blog. I’m not going to go through them all here because that would take a long time and I don’t care. My reason are as follows:&lt;/p&gt;

&lt;h2 id=&quot;photography&quot;&gt;Photography&lt;/h2&gt;

&lt;p&gt;I want somewhere where I can put my photographs on display and write a little bit about them without the pressure of having to maintain a portfolio site. Writing things down helps fix them in your brain and gives you something tangible (sort of) to review. It will be interesting to see what I thought was good when I wrote about it, and whether than changes or improves over time.&lt;/p&gt;

&lt;p&gt;But why publish any of this?&lt;/p&gt;

&lt;h2 id=&quot;journalling&quot;&gt;Journalling&lt;/h2&gt;

&lt;p&gt;Journalling is a habit I’ve wanted to pick up for a while. My thoughts tend to be disorganised and often they will rattle around in my head until they become distracting. I’ve started writing a private journal, but I also want to develop my writing to be, essentially, better.&lt;/p&gt;

&lt;p&gt;Writing my thoughts down helps me make sense of them, and making them public means I have to be able to defend my opinions – which can only improve them. And knowing that there might be an audience means having to be clear and concise, and consider every word.&lt;/p&gt;

&lt;h2 id=&quot;whats-with-the-sheep&quot;&gt;What’s with the sheep?&lt;/h2&gt;

&lt;p&gt;I just like the sheep. Look at it there, just chilling in the sun.&lt;/p&gt;
</description>
        <pubDate>Tue, 24 Feb 2026 19:00:00 +0000</pubDate>
        <link>https://www.oryan.uk/blog/posts/2026-02-24-this-blog/</link>
        <guid isPermaLink="true">https://www.oryan.uk/blog/posts/2026-02-24-this-blog/</guid>
        
        
        <category>thoughts</category>
        
      </item>
    
      <item>
        <title>My experience of installing Jekyll: Part 3 – more Github Pages</title>
        <description>&lt;p&gt;Once I had got the build process sorted and the site was live on Github Pages, I suspected I would have some work to do to get the site working behind my Cloudfront distribution.&lt;/p&gt;

&lt;p&gt;I knew I wanted to serve the site at &lt;a href=&quot;https://www.oryan.uk/blog/&quot;&gt;https://www.oryan.uk/blog/&lt;/a&gt;, but this seemed impossible because, it turns out, the build process for Github Pages disregards the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;baseurl&lt;/code&gt; variable specified in &lt;strong&gt;_config.yml&lt;/strong&gt; and forces it to use a path corresponding to the name of the Github repo.&lt;/p&gt;

&lt;p&gt;My various attempts to change the base url to /blog, or even /oryan-uk-jekyll/blog were unsuccessful. Removing the dynamically-generated &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--baseurl&lt;/code&gt; value from the build workflow and overwriting it with my own simply cause the build to fail in ways I couldn’t understand.&lt;/p&gt;

&lt;p&gt;In the end, I simply changed the name of the repo to &lt;strong&gt;blog&lt;/strong&gt; in order to force the Github Pages URL to change. I didn’t like doing that – I’d prefer to have a more descriptive name for the repo, but unless it’s possible to change the path that Github Pages serves from (I don’t think it is), it’s a necessary compromise.&lt;/p&gt;

&lt;p&gt;In any case, all this means that I don’t need to write a part 4 of this covering Cloudfront, since the existing distribution that I created for another purpose still works. If it turns out I need to change it in future, I might write about it then.&lt;/p&gt;

&lt;p&gt;So anyway now I have a blog. Now I just need to remember to actually write things on it, and maybe get off the boring default template.&lt;/p&gt;
</description>
        <pubDate>Thu, 18 Sep 2025 16:00:00 +0000</pubDate>
        <link>https://www.oryan.uk/blog/posts/2025-09-18-my-experience-of-installing-jekyll-part-3-more-github-pages/</link>
        <guid isPermaLink="true">https://www.oryan.uk/blog/posts/2025-09-18-my-experience-of-installing-jekyll-part-3-more-github-pages/</guid>
        
        
        <category>jekyll</category>
        
      </item>
    
      <item>
        <title>My experience of installing Jekyll: Part 2 – Github Pages</title>
        <description>&lt;p&gt;Now it was time to put this on the internet somewhere.&lt;/p&gt;

&lt;h2 id=&quot;github&quot;&gt;Github&lt;/h2&gt;

&lt;p&gt;Uploading the site to Github was simple, as the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitignore&lt;/code&gt; file was already configured properly, only needing a line for the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.vscode&lt;/code&gt; folder to be added.&lt;/p&gt;

&lt;p&gt;The repository is at &lt;a href=&quot;https://github.com/oryant/oryan-uk-jekyll&quot;&gt;oryant/oryan-uk-jekyll&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;github-pages-and-github-actions&quot;&gt;Github Pages and Github Actions&lt;/h2&gt;

&lt;p&gt;The next step was to create a Github Pages site for the blog. Since the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_site&lt;/code&gt; folder is not part of the repository, this needs to be generated dynamically using Github Actions.&lt;/p&gt;

&lt;p&gt;It seemed logical to follow the &lt;a href=&quot;https://ashmaroli.github.io/jekyll/docs/continuous-integration/github-actions/&quot;&gt;Github Actions&lt;/a&gt; tutorial from the Jekyll site. This was okay at first, but I soon found that the Jekyll Actions link to the Github marketplace was dead. I decided to use the search tool in Github, and figured that the action called &lt;strong&gt;GitHub Pages Jekyll&lt;/strong&gt; should work well enough.&lt;/p&gt;

&lt;p&gt;Not knowing what most of the file meant, I left in untouched. I assume some stuff is being read from the site’s config.yml file but actually the whole process is fairly opaque, which isn’t my favourite.&lt;/p&gt;

&lt;p&gt;I encountered an error message the first time this ran, because I hadn’t set up Github Pages yet. Having to go to Settings in the repository to configure Pages seems like a weird choice, but I’ve done it before so I didn’t have any trouble setting this up.&lt;/p&gt;

&lt;p&gt;My blog is now live at &lt;a href=&quot;https://oryant.github.io/oryan-uk-jekyll&quot;&gt;Github Pages&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;fixing-errors&quot;&gt;Fixing errors&lt;/h2&gt;

&lt;p&gt;I noticed that I was getting a warning message when deploying the site to Github Pages:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;build&lt;/p&gt;

  &lt;p&gt;The github-pages gem can’t satisfy your Gemfile’s dependencies. If you want to use a different Jekyll version or need additional dependencies, consider building Jekyll site with GitHub Actions: https://jekyllrb.com/docs/continuous-integration/github-actions/&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This took me back to a different version of the Jekyll instructions from the ones I had been following. This page suggested I should be using the &lt;strong&gt;Jekyll&lt;/strong&gt; workflow, not the &lt;strong&gt;GitHub Pages Jekyll&lt;/strong&gt; one I had been using. Since it was early days I figured I might as well try again with this other workflow.&lt;/p&gt;

&lt;p&gt;The process of removing one workflow and adding another was fiddly, and every change would result in a push to the main branch, kicking off one or both of the workflows and generating errors. Eventually I got it working, and, after editing the workflow to force a later version of Ruby to be used, the site is back up and running.&lt;/p&gt;

&lt;p&gt;Overall, the experience of setting this up was a bit frustrating due to slightly old documentation, but that’s to be expected from something a) free and b) aimed at computer people.&lt;/p&gt;
</description>
        <pubDate>Tue, 16 Sep 2025 21:00:00 +0000</pubDate>
        <link>https://www.oryan.uk/blog/posts/2025-09-16-installing-jekyll-part-2/</link>
        <guid isPermaLink="true">https://www.oryan.uk/blog/posts/2025-09-16-installing-jekyll-part-2/</guid>
        
        
        <category>jekyll</category>
        
      </item>
    
      <item>
        <title>My experience of installing Jekyll: Part 1 – Local setup</title>
        <description>&lt;p&gt;I was a bit wary about installing and self-hosting this blog, but it has turned out to be a fairly simple experience so far – although there were a couple of issues with the macOS instructions on the Jekyll website.&lt;/p&gt;

&lt;h2 id=&quot;installing-ruby&quot;&gt;Installing Ruby&lt;/h2&gt;

&lt;p&gt;The instructions for macOS mention that Big Sur comes with Ruby 2.6.3 installed, which is greater than the 2.5.0 the Jekyll apparently requires, but that earlier macOS versions will need to install Ruby through Homebrew. In fact, I immediately ran into issues with this version because some of the dependencies required at least version 3.0.0 of Ruby.&lt;/p&gt;

&lt;p&gt;After installing the latest version of Ruby using Homebrew, I still needed to install rbenv in order to get the correct binary to execute. For some reason, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;which ruby&lt;/code&gt; kept returning the OS version instead of the Homebrew version. Once rbenv was installed and initialised, and I’d restarted my terminal a couple of times, I was able to install Jekyll itself.&lt;/p&gt;

&lt;h2 id=&quot;quickstart&quot;&gt;Quickstart&lt;/h2&gt;

&lt;p&gt;This was pretty basic but it worked. I decided not to go through the full tutorial right now, but I did have a look at it and it would have been useful to have some of the information from there in the quickstart.&lt;/p&gt;
</description>
        <pubDate>Tue, 16 Sep 2025 16:54:24 +0000</pubDate>
        <link>https://www.oryan.uk/blog/posts/2025-09-16-installing-jekyll-part-1/</link>
        <guid isPermaLink="true">https://www.oryan.uk/blog/posts/2025-09-16-installing-jekyll-part-1/</guid>
        
        
        <category>jekyll</category>
        
      </item>
    
  </channel>
</rss>