A super-simple photo album static site generator
Find a file
dependabot[bot] 4221aab72f
Some checks failed
Rust / build (push) Has been cancelled
Bump rand from 0.9.2 to 0.9.4 (#6)
Bumps [rand](https://github.com/rust-random/rand) from 0.9.2 to 0.9.4.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-random/rand/blob/0.9.4/CHANGELOG.md">rand's
changelog</a>.</em></p>
<blockquote>
<h2>[0.9.4] — 2026-04-13</h2>
<h3>Fixes</h3>
<ul>
<li>Fix doc build (<a
href="https://redirect.github.com/rust-random/rand/issues/1766">#1766</a>)</li>
</ul>
<p><a
href="https://redirect.github.com/rust-random/rand/issues/1766">#1766</a>:
<a
href="https://redirect.github.com/rust-random/rand/pull/1766">rust-random/rand#1766</a></p>
<h2>[0.9.3] — 2026-04-11</h2>
<p>This release back-ports a fix from v0.10. See also <a
href="https://redirect.github.com/rust-random/rand/issues/1763">#1763</a>.</p>
<h3>Changes</h3>
<ul>
<li>Deprecate feature <code>log</code> (<a
href="https://redirect.github.com/rust-random/rand/issues/1764">#1764</a>)</li>
<li>Replace usages of <code>doc_auto_cfg</code> (<a
href="https://redirect.github.com/rust-random/rand/issues/1764">#1764</a>)</li>
</ul>
<p><a
href="https://redirect.github.com/rust-random/rand/issues/1763">#1763</a>:
<a
href="https://redirect.github.com/rust-random/rand/pull/1763">rust-random/rand#1763</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="ba4c4c62d5"><code>ba4c4c6</code></a>
Prepare v0.9.4: fix doc build (<a
href="https://redirect.github.com/rust-random/rand/issues/1766">#1766</a>)</li>
<li><a
href="4b8b686ef3"><code>4b8b686</code></a>
Document new error-handling behaviour for ReseedingRng</li>
<li><a
href="6c25c6dd07"><code>6c25c6d</code></a>
Prepare v0.9.4: fix doc build</li>
<li><a
href="1aeee9f4c5"><code>1aeee9f</code></a>
Prepare v0.9.3: deprecate feature <code>log</code> (<a
href="https://redirect.github.com/rust-random/rand/issues/1764">#1764</a>)</li>
<li><a
href="98473ee6f9"><code>98473ee</code></a>
Prepare rand 0.9.2 (<a
href="https://redirect.github.com/rust-random/rand/issues/1648">#1648</a>)</li>
<li><a
href="031a1f5589"><code>031a1f5</code></a>
<code>examples/print-next.rs</code> (<a
href="https://redirect.github.com/rust-random/rand/issues/1647">#1647</a>)</li>
<li><a
href="6cb75ee59e"><code>6cb75ee</code></a>
Make UniformUsize serializable (<a
href="https://redirect.github.com/rust-random/rand/issues/1646">#1646</a>)</li>
<li><a
href="0c955c5b7a"><code>0c955c5</code></a>
Add some tests for BlockRng, BlockRng64 and Xoshiro RNGs (<a
href="https://redirect.github.com/rust-random/rand/issues/1639">#1639</a>)</li>
<li><a
href="204084a35f"><code>204084a</code></a>
Fix: Remove accidental editor swap file (<a
href="https://redirect.github.com/rust-random/rand/issues/1636">#1636</a>)</li>
<li><a
href="86262ac190"><code>86262ac</code></a>
Deprecate rand::rngs::mock module and StepRng (<a
href="https://redirect.github.com/rust-random/rand/issues/1634">#1634</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/rust-random/rand/compare/rand_core-0.9.2...0.9.4">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=rand&package-manager=cargo&previous-version=0.9.2&new-version=0.9.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/nickpegg/photojawn/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-14 17:40:01 -07:00
.github/workflows Rewrite in Rust (#3) 2025-05-08 12:27:49 -07:00
resources Reorganize command (#4) 2025-05-18 08:46:41 -07:00
src fix warnings, fmt 2025-09-25 15:13:16 -07:00
.gitignore fix .gitignore 2025-05-11 14:44:51 -07:00
.python-version Init commit 2024-08-03 07:37:28 -07:00
Cargo.lock Bump rand from 0.9.2 to 0.9.4 (#6) 2026-04-14 17:40:01 -07:00
Cargo.toml serde_yml -> serde_yaml_ng 2025-09-25 15:04:59 -07:00
LICENSE Add license 2024-08-04 18:29:39 -07:00
Makefile Rewrite in Rust (#3) 2025-05-08 12:27:49 -07:00
README.md Rewrite in Rust (#3) 2025-05-08 12:27:49 -07:00

photojawn

This is a super-simple photo album static site generator. You feed it a directory of photos (which can contain directories of photos, etc. etc.) and it'll generate a basic HTML photo album for you. You can then host the directory with a webserver of your choice or upload it to an S3 bucket.

It's everything I need and nothing I don't.

Getting Started

Installation

  1. Head on over to the releases page
  2. Download the binary for your OS/arch

Initialization

Then inside your photo directory, run:

photojawn init

This will create a config file, some Tera (similar to Jinja) HTML templates, and a CSS file. Edit them to your heart's content to make your photo album website purdy.

Generating the site

To generate the HTML files and various image sizes, inside your photo directory, run:

photojawn generate

Special features

  • HTML templates are written using Tera, which is very similar to Jinja
  • If you have a description.txt or description.md file in a directory with images, its contents will be used as the album description. .md files will be rendered as Markdown.
  • If an image file (e.g. IMG_1234.jpg) has a corresponding .txt or .md file (e.g. IMG_1234.md) then it'll be used as the image's caption. .md files will be rendered as Markdown.
  • If you have an image in a directory called cover.jpg (or a symlink to another image named that), then it'll be used as the cover image for the album. If one doesn't exist, the first image in the directory will be used as the cover image. If a directory has no images itself, it'll use the first sub-directory's cover as its cover image

y tho

Why create a new photo album doohickey? Why not use one of the untold number of cloud services or even self-hosted solutions? It boils down to a few things:

  1. I want control of my data. I don't want some company using my pictures to train their AI models, for example.
  2. A lot of the self-hosted solutions (Immich, PhotoPrism, etc.) don't support nested albums
  3. I love simplicity. I'm following the Unix philosophy here: "do one thing, do it well" and make use of composable tools to get the job done.

I took heavy inspiration by the photo albums found on https://bayarearides.com (example).