🛠 Free Tools & AI Utilities ↗

Get in touch

Tell us a little about your project and we'll follow up by email with licensing and download details.

HalidePhotography Portfolio WordPress Theme

Your photographs already know what lens they were shot on. This is the theme that says so.

halide.kilnwp.com LIVE
Halide Open live preview ↗

Overview

Who it is for

Halide is for a photographer with a body of work — a portfolio site rather than a shop, a blog or a wedding brochure. It assumes the visitor came to look at pictures and that the pictures are worth looking at properly.

Built on data that was already there

WordPress has been reading EXIF out of every uploaded JPEG since 2007 and storing it with the attachment: camera, lens, focal length, aperture, shutter speed, ISO, and the moment the shutter opened. It is sitting in the database of every photography site in the world, and virtually no theme has ever shown it.

Halide is built on it. Every technical value on the site is read from the file — there is no field to fill in, nothing to keep up to date, and no second copy that can fall out of step with the picture. Replace a photograph and the page describes the new one. Anything a file does not carry is simply not printed: nothing is guessed at, and nothing is shown as a dash that looks like a value.

A body of work you can walk sideways through

Because the data is real, it can be filtered on. A visitor can ask for only the wide work, or everything shot on the 400, or everything from one body — and every photograph’s own page links back into the archive by the way that frame was made, so the exposure line is something you travel along rather than merely read.

The filter bar only offers what would actually return something. A photographer with one camera and one lens gets no bar at all, rather than a row of buttons that all lead to the same page.

Nothing is cropped

Galleries are justified rows, computed on the server from the real pixel dimensions WordPress already stores. Each row is filled to a common height and then scaled to fit the measure exactly, so both edges are flush and every frame keeps its own proportions. A square grid solves mixed shapes by cropping — it decides the composition the photographer spent the afternoon on. This does not.

Because the layout is worked out before the page is sent, the markup arrives with the proportions already set: no measuring pass, no reflow, and no layout shift as the images load. It also works with scripting off, and it prints. The last row is deliberately left unstretched, so a final row holding one frame does not tower over everything above it — the tell-tale flaw of most justified galleries.

The ground is an emulsion

The background is silver halide, which is what the theme is named for. It is built as crystals rather than as noise — cellular, clumped, with a real spread of sizes — and the one thing that controls it is the ISO of the photographs on the page. The slow landscape work sits on a fine grain; the ISO 1600 night material coarsens it, because the page is describing the film. Nobody sets it, and it comes from the same data the captions are printed from.

What is in the box

  • Photographs as a content type, with a series taxonomy for bodies of work.
  • Filtering by focal-length band, camera and lens, indexed from the files on save.
  • A dark room option that exchanges the two ends of the scale rather than being a second design.

No page builder, no ACF, no build step and no third-party JavaScript. Two self-hosted OFL variable fonts, and nothing fetched from a CDN — looking at somebody’s photographs does not report the viewer to anyone.

Classic PHP theme, no build step. Photo post type with a series taxonomy. Camera data read from WordPress core image_meta — no EXIF parser, no upload hook, no exif dependency in the theme itself — normalised for display and indexed to its own meta keys on save so a whole archive can be filtered by focal-length band, camera or lens. Justified gallery computed server-side from stored pixel dimensions: rows filled to a common height then scaled to the measure, last row left unstretched, aspect ratios emitted so there is no layout shift and no script. Raw WebGL2 emulsion shader whose crystal size is driven by the median ISO of the photographs on the page, with a median-based quality governor and a still-frame reduced-motion path. Dark-room variant by token inversion. Two self-hosted OFL variable fonts.

What's included

  • Full theme source — every template, style sheet & script
  • One-click demo importer (idempotent, no page builder)
  • Live Customizer controls for copy, colours & content
  • Translation-ready .pot file + RTL stylesheet
  • HTML documentation + a CHANGELOG file
  • Lifetime updates + 6 months support (renewable)

Specifications

WordPress5.6 – 7.0
PHP8.0 – 8.3
BrowsersChrome, Firefox, Safari, Edge (latest)
LayoutFully responsive, mobile → desktop
LocalizationTranslation-ready · RTL included
AccessibilityKeyboard-navigable · prefers-reduced-motion
Page builderNot required — native Customizer
LicenseGNU GPL v2 · single-site commercial

Release

v1.2.1 Your photographs already know what lens they were shot on. This is the theme that says so.

The complete, dated version history ships in the theme’s CHANGELOG file. Every purchase includes lifetime access to future updates.

Dioptre Featured

Dioptre

$79

Hold the glasses up to the eye chart and change the prescription, lens and coating — a live WebGPU lens, drawn frames, a face-shape finder and appointment requests.

Healthcare Light
View →
Crumb Featured

Crumb

$69

Watch the loaf bake, see what is coming out of the oven next, and build a cake that shows you what it serves, what it costs and when it can be ready.

Booking Calculator
View →
Alembic Featured

Alembic

$79

Add a drop of water and watch the spirit open — a live WebGPU glass, a shelf of drawn bottles, a flavour finder and tour requests for craft distilleries.

Craft Dark
View →