{"id":14979386,"url":"https://github.com/soyaine/horcrux","last_synced_at":"2025-10-28T18:31:46.600Z","repository":{"id":39579282,"uuid":"202088146","full_name":"soyaine/horcrux","owner":"soyaine","description":"Generate you own online gallery easily. Photo is the horcrux of memory.","archived":false,"fork":false,"pushed_at":"2023-02-13T20:28:54.000Z","size":89302,"stargazers_count":58,"open_issues_count":4,"forks_count":25,"subscribers_count":2,"default_branch":"gh-pages","last_synced_at":"2025-02-01T17:23:33.607Z","etag":null,"topics":["gallery","gallery-images","gallery-template","gh-pages","jekyll","jekyll-template","jekyll-theme","jekyll-themes","photo-gallery"],"latest_commit_sha":null,"homepage":"https://soyaine.github.io/horcrux/","language":"CSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/soyaine.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-08-13T07:23:42.000Z","updated_at":"2024-12-25T19:32:12.000Z","dependencies_parsed_at":"2024-09-19T02:04:32.162Z","dependency_job_id":"1f362c17-ee60-4891-9300-9bc12fcdc342","html_url":"https://github.com/soyaine/horcrux","commit_stats":{"total_commits":43,"total_committers":1,"mean_commits":43.0,"dds":0.0,"last_synced_commit":"d9b2ffd04624efa1d1197d7df4f7c4daa1b30f3d"},"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soyaine%2Fhorcrux","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soyaine%2Fhorcrux/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soyaine%2Fhorcrux/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soyaine%2Fhorcrux/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/soyaine","download_url":"https://codeload.github.com/soyaine/horcrux/tar.gz/refs/heads/gh-pages","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238700407,"owners_count":19515919,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gallery","gallery-images","gallery-template","gh-pages","jekyll","jekyll-template","jekyll-theme","jekyll-themes","photo-gallery"],"created_at":"2024-09-24T13:59:55.276Z","updated_at":"2025-10-28T18:31:44.025Z","avatar_url":"https://github.com/soyaine.png","language":"CSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Horcrux\nGenerate your own online photograph gallery easily.\n\n![demo](https://raw.githubusercontent.com/soyaine/horcrux/gh-pages/assets/imxie-demo.png)\n\n## Features\n- Simple but beautiful UI.\n- Auto-watermark your photos.\n- Auto-generate thumbnails for better load speed.\n- Sort photos by time, modify as you like, and keep it when you add new photos.\n- Keep the order when you put new photos in.\n- Support multi-level albums.\n- Based on Jekyll and GitHub Pages.\n\n## Demo\nHere is a live demo: [https://soyaine.github.io/horcrux/](https://soyaine.github.io/horcrux/)\n\n## Quick Start\nFork this repo, or clone to your local.\n``` bash\n$ git clone git@github.com:soyaine/horcrux.git\n```\nMake sure you have installed Python3, check current python version.\n``` bash\n$ python3 -V\n```\n- If your command `python` rather than `python3` point to Python3, please change the code in two command file, modify `python3 -m venv venv` to `python -m venv venv`.\n  ```bash\n  # setup.command / config.command\n  python -m venv venv \n  ```\n- If version \u003c 3 or error, install Python3, and then recheck.\n  ```\n  $ brew install python3\n  $ python3 -V\n  ```\n- If the check passes, next step.\n\nChange the config in file `_config.yml`, **especially the name**, which will shown as the site header and the watermark text in your photos.\n\n``` yml\nname: Horcrux\ninstagram: your_ins_account_id\n```\n\nRemove all resources under `./photos/`, then create folder in it, the folder name will shown as headline of a group of photos. Copy some photos into it. \n```bash\nphotos\n├── 2019\n│    ├── Duo\n│    │   ├── 07.jpg\n│    │   ├── 08.jpg\n│    │   ├── 09.jpg\n│    └── Hey\n│        ├── 02.jpg\n│        └── 1.jpg\n└── Mey\n    ├── 02.jpg\n    └── 1.jpg\n```\n\n\u003e **⚠️NOTE** \n\u003e \n\u003e Please always keep your own original photo files in other place, because the watermark will change the original one. \n\u003e \n\u003e When you first try this, just put several photos in, to see wheather you like the watermark effect or not.\n\nDouble click the `setup.command`, the process is doing:\n- Generate thumbnails with the suffix of `.min.jpg`\n- Watermark original photos with `name` value set in `_config.yml`\n- Traverse all folders and files, generate a file `_data/config.json`\n\nRun and greet your gallery in locally by [Jekyll](https://help.github.com/en/articles/setting-up-your-github-pages-site-locally-with-jekyll).\n```\n$ jekyll serve --watch\n```\n\nGit push to the remote branch `gh-pages`, then it will be online. 🎉\n```\n$ git add .\n$ git commit -m \"init gallery\"\n$ git push -u origin gh-pages\n```\n\n## Make It Yours\nIf you have run successfully locally, here are more details you can reform it. The following is the default settings of Horcrux, almost all config are set in `_config.yml`:\n\n### Headline and Instagram Link\n\n```yml\nname: Horcrux # Headline of the page, watermark text\n\ninstagram: ins_id\n```\n\n- The value of `name` is both the website headline and the watermark text.\n- There is a text link to your Instagram page at the bottom of the page, just set it blank if you don't want.\n\n### Albums and photos process\n\n```yml\n# How to process the photos and albums to config\nprocess:\n  keep_order: True\n  nested_album:\n    separator: ' · '\n  album:\n    sort_by_time: True # False: sort by filename\n    order_by: create # other two value can be: access, modify\n    reverse: True\n  photo:\n    sort_by_time: False\n    order_by: modify\n    reverse: True\n    min_width: 600\n    watermark:\n      thumbnail: False\n      original: True\n      fontsize: 40\n      fontfamily: Eczar-Medium.ttf\n      rotate: 0\n```\n\n**`sort_by_time`, `order_by`, `reverse`:**\n\n- Sort the albums (folder under `photos`) by create time, from new to old.\n- Sort the photos by name.\n\n**`keep_order`:**\n- When you change the `order` value in JSON under `_data`, and add new photos or new albums, then double click `setup.command`, a new `config.json` file will be generated, all old order set manually will be retained.\n- If you just modify `order` without new photo added, you can just double click `config.command`, which will read all JSON files (Horcrux.json and others under albums folder), and regenerate the `config.json` file.\n\n**`separator`:**\n- If you created nested folders under the `photos` folder, Horcrux can handle it too.\n- The album which path in `./photos/2019/duo/`, its displayed title in page will be: **DUO** · 2019, spliced by `separator` ` · `.\n\n\n**`watermark`:**\n- Watermark the original photos.\n- The text of the watermark is the value of `name`.\n- The position is in the middle of the bottom of the photo.\n\n### Gallery Style\n\n```yml\nframe_padding: 10px # the white gap between photo and outer border\n\n# Widescreen\ncolumn: 3 \ncolumn_gap: 30px\nrow_gap: 30px\n\n# Smallscreen\nsmall_screen:\n  column: 2\n  column_gap: 10px\n  row_gap: 10px\n```\n\n**`column`:**\n- In wide screen, photos divided into 3 columns.\n- In small screen, photos divided into 2 columns.\n\n**`frame_padding`, `column_gap`, `row_gap`:**\n- Each photo has a white square frame background. The white gap between photo and frame outer border is 10px.\n- In wide screen, the spacing between columns is 30px, the same for rows.\n- In small screen, the spacing between columns is 10px, the same for rows.\n\n### Color Palette\n\nMost of the color palette is defined in `./sass/base.scss`, you can change them to your color.\n\n```scss\n$background: #fafafa;\n$surface: #fff;\n\n$title: #5f5f5f;\n$subtitle: #868686;\n$text: #C8C8C8;\n$link: #98A3AA;\n```\n\n- `$background`: whole page's background color\n- `$surface`: the color of photo square frame\n\n## Acknowledgments\nThe idea of generating album JSON for using Jekyll and GitHub Pages is inspired by AndyZhang's [gallery](https://github.com/andyzg/gallery).\n\nSpecial thanks to my friend [Hugo \u003cimg src=\"https://avatars2.githubusercontent.com/u/11666634?s=460\u0026v=4\" width=\"20\" height=\"20\"\u003e](https://github.com/xcc3641), the photographs both in the mockup above and in the live demo were taken by him. In the beginning, I just wanted to write a tool for him to share photography. Later I found it can be open-sourced. So there is Horcrux, he named it.\n\n## Author\n© [Soyaine](https://github.com/soyaine)\n\n## Support\nIf you have any question about Horcrux, feel free to start an [issue](https://github.com/soyaine/horcrux/issues/new). \n\nYou can also reach out to me by email [soyaine1@gmail.com](mailto:soyaine1@gmail.com)\n\n## License\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoyaine%2Fhorcrux","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsoyaine%2Fhorcrux","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoyaine%2Fhorcrux/lists"}