23 Commits

Author SHA1 Message Date
github-actions
db819141b4 GitHub bot : README updated 2026-01-11 17:03:33 +00:00
GitHub Actions
960ed1fc78 Revert 'clean' [nobuild] 2026-01-11 16:42:50 +00:00
Alexandre
ee0b45c41f clean 2026-01-11 17:42:06 +01:00
github-actions
d6cd035641 GitHub bot: changelog 2026-01-11 16:38:58 +00:00
Alexandre
361381af27 Update config.yaml 2026-01-11 17:35:15 +01:00
Alexandre
d7e782f460 Update 91-secrets.sh 2026-01-11 17:35:05 +01:00
github-actions
aea56a0ddd GitHub bot: changelog 2026-01-11 16:21:52 +00:00
Alexandre
497763c568 nobuild 2026-01-11 17:18:37 +01:00
Alexandre
b65adfedae Update config.yaml 2026-01-11 17:17:57 +01:00
Alexandre
525097746c Improve error handling in Chrome extensions script
Added error handling for downloading and unzipping Chrome extensions.
2026-01-11 17:17:41 +01:00
Alexandre
eee1a982c5 Update Dockerfile 2026-01-11 17:16:26 +01:00
github-actions
962f47a182 GitHub bot: changelog 2026-01-11 16:13:23 +00:00
Alexandre
6aee9243bd Update config.yaml 2026-01-11 17:09:00 +01:00
Alexandre
54bf2c7e89 Update README.md 2026-01-11 17:08:43 +01:00
Alexandre
741055cd79 Update README with environment variables section
Added information about additional environment variables.
2026-01-11 17:08:31 +01:00
Alexandre
1603ebc8ac Update README.md 2026-01-11 17:07:33 +01:00
Alexandre
aef148d8cd Revise README for clarity and organization
Updated the README to streamline information and improve clarity. Adjusted sections on secrets, configuration options, and installation steps.
2026-01-11 17:07:11 +01:00
Alexandre
25034e2e47 Update 91-secrets.sh 2026-01-11 17:06:14 +01:00
Alexandre
8c0ea30920 Update config.yaml 2026-01-11 17:05:04 +01:00
Alexandre
6f76debdd6 Update Dockerfile 2026-01-11 17:04:35 +01:00
GitHub Actions
217a7c7cd1 Revert 'Update config.yaml' [nobuild] 2026-01-11 15:58:46 +00:00
Alexandre
b71d394508 Update config.yaml 2026-01-11 16:55:15 +01:00
Alexandre
d08b9fbb12 Merge pull request #2361 from alexbelgium/codex/automatically-download-and-refresh-extensions
Auto-download Chromium extensions for karakeep
2026-01-11 16:53:51 +01:00
7 changed files with 126 additions and 78 deletions

View File

@@ -56,7 +56,7 @@ If you want to do add the repository manually, please follow the procedure highl
### Number of addons
- In the repository : 118
- In the repository : 119
- Installed : 63855
### Top 3
@@ -440,6 +440,13 @@ If you want to do add the repository manually, please follow the procedure highl
![aarch64][aarch64-badge]
![amd64][amd64-badge]
✓ [Karakeep](karakeep/) : A self-hostable bookmark-everything app (links, notes and images) with AI-based automatic tagging and full text search
  ![Version](https://img.shields.io/badge/dynamic/yaml?label=Version&query=%24.version&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2Fkarakeep%2Fconfig.yaml)
![Update](https://img.shields.io/badge/dynamic/json?label=Updated&query=%24.last_update&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2Fkarakeep%2Fupdater.json)
![aarch64][aarch64-badge]
![amd64][amd64-badge]
✓ [Kometa](kometa/) : Python script to update metadata information for movies, shows, and collections as well as automatically build collections
  ![Version](https://img.shields.io/badge/dynamic/yaml?label=Version&query=%24.version&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2Fkometa%2Fconfig.yaml)

View File

@@ -1,2 +1,8 @@
## 0.30.0-4 (11-01-2026)
- Minor bugs fixed
## 0.30.0-3 (11-01-2026)
- Minor bugs fixed
## 0.30.0-2 (11-01-2026)
- Minor bugs fixed
## 0.30.0 (2026-01-11)
- Initial add-on release

View File

@@ -108,8 +108,6 @@ RUN chmod 777 /ha_entrypoint.sh /ha_entrypoint_modif.sh && /ha_entrypoint_modif.
ADD "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/bashio-standalone.sh" "/.bashio-standalone.sh"
RUN chmod 777 /.bashio-standalone.sh
RUN sed -i "s|/usr/bin/env|/usr/bin/with-contenv|g" /etc/cont-init.d/*
RUN set -e; \
extensions_dir="/usr/src/chrome/extensions"; \
mkdir -p "${extensions_dir}"; \
@@ -132,6 +130,9 @@ RUN set -e; \
done; \
chown -R chrome:chrome "${extensions_dir}"
ENTRYPOINT [ "/usr/bin/env" ]
CMD [ "/ha_entrypoint.sh" ]
############
# 5 Labels #
############

View File

@@ -1,8 +1,8 @@
# Home assistant add-on: Karakeep
I maintain this and other Home Assistant add-ons in my free time: keeping up with upstream changes, HA changes, and testing on real hardware takes a lot of time (and some money). I use around 5-10 of my >110 addons so regularly I install test machines (and purchase some test services such as vpn) that I don't use myself to troubleshoot and improve the addons
I maintain this and other Home Assistant add-ons in my free time: keeping up with upstream changes, Home Assistant changes, and testing on real hardware takes a lot of time (and some money). I use around 510 of my >110 addons so regularly I install test machines (and purchase some test services such as VPNs) that I do not use myself, in order to troubleshoot and improve the addons.
If this add-on saves you time or makes your setup easier, I would be very grateful for your support!
If this add-on saves you time or makes your setup easier, I would be very grateful for your support.
[![Buy me a coffee][donation-badge]](https://www.buymeacoffee.com/alexbelgium)
[![Donate via PayPal][paypal-badge]](https://www.paypal.com/donate/?hosted_button_id=DZFULJZTP3UQA)
@@ -10,94 +10,94 @@ If this add-on saves you time or makes your setup easier, I would be very gratef
## Addon informations
![Version](https://img.shields.io/badge/dynamic/yaml?label=Version&query=%24.version&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2Fkarakeep%2Fconfig.yaml)
![Ingress](https://img.shields.io/badge/dynamic/yaml?label=Ingress&query=%24.ingress&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2Fkarakeep%2Fconfig.yaml)
![Arch](https://img.shields.io/badge/dynamic/yaml?color=success&label=Arch&query=%24.arch&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2Fkarakeep%2Fconfig.yaml)
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/9c6cf10bdbba45ecb202d7f579b5be0e)](https://www.codacy.com/gh/alexbelgium/hassio-addons/dashboard?utm_source=github.com&utm_medium=referral&utm_content=alexbelgium/hassio-addons&utm_campaign=Badge_Grade)
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/9c6cf10bdbba45ecb202d7f579b5be0e)](https://www.codacy.com/gh/alexbelgium/hassio-addons/dashboard)
[![GitHub Super-Linter](https://img.shields.io/github/actions/workflow/status/alexbelgium/hassio-addons/weekly-supelinter.yaml?label=Lint%20code%20base)](https://github.com/alexbelgium/hassio-addons/actions/workflows/weekly-supelinter.yaml)
[![Builder](https://img.shields.io/github/actions/workflow/status/alexbelgium/hassio-addons/onpush_builder.yaml?label=Builder)](https://github.com/alexbelgium/hassio-addons/actions/workflows/onpush_builder.yaml)
[donation-badge]: https://img.shields.io/badge/Buy%20me%20a%20coffee-%23d32f2f?logo=buy-me-a-coffee&style=flat&logoColor=white
[paypal-badge]: https://img.shields.io/badge/Donate%20via%20PayPal-0070BA?logo=paypal&style=flat&logoColor=white
_Thanks to everyone having starred my repo! To star it click on the image below, then it will be on top right. Thanks!_
_Thanks to everyone who has starred my repo!_
[![Stargazers repo roster for @alexbelgium/hassio-addons](https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.github/stars2.svg)](https://github.com/alexbelgium/hassio-addons/stargazers)
[![Stargazers repo roster](https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.github/stars2.svg)](https://github.com/alexbelgium/hassio-addons/stargazers)
---
## About
[Karakeep](https://karakeep.app/) is a bookmark-everything app with a touch of AI for the data hoarders out there. It stores content, screenshots, and metadata with search powered by Meilisearch.
[Karakeep](https://karakeep.app/) is a bookmark-everything app with a touch of AI for data hoarders.
It stores pages, screenshots, files, and metadata with fast full-text and semantic search powered by **Meilisearch**.
This addon is based on the [official Karakeep Docker image](https://github.com/karakeep-app/karakeep).
This add-on is based on the official Karakeep Docker image.
This Home Assistant add-on integrates Karakeep in a **Supervisor-native way**:
- Internal services (Meilisearch, Chromium, cache, paths) are pre-wired and hidden from the UI
- Secrets are **auto-generated and persisted**
- Only meaningful user settings are exposed
Add additional environment variables with [env_vars](https://github.com/alexbelgium/hassio-addons/wiki/Add-Environment-variables-to-your-Addon-2)
---
## Secrets & Security
Two secrets are required for Karakeep to work securely:
- `NEXTAUTH_SECRET`
- `MEILI_MASTER_KEY`
If you leave them empty, the add-on will:
- Generate strong cryptographic secrets automatically
- Store them permanently in the add-on options
- Reuse them across restarts and upgrades
You do **not** need to manage them manually.
---
## Configuration
Webui can be found at `<your-ip>:3000`.
Only **safe, meaningful options** are exposed.
All infrastructure (Meilisearch, Chromium, cache, paths, analytics, etc.) is managed automatically by the add-on.
### Options
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `NEXTAUTH_SECRET` | password | | Secret key for authentication (auto-generated if left blank). |
| `NEXTAUTH_SECRET` | password | *(auto)* | Authentication secret (auto-generated if empty). |
| `NEXTAUTH_URL` | str | | Public URL used by NextAuth (optional). |
| `DISABLE_SIGNUPS` | bool | `false` | Disable new account signups. |
| `MAX_ASSET_SIZE_MB` | int | `4` | Max asset upload size. |
| `OCR_LANGS` | str | | OCR language codes (comma-separated). |
| `OCR_CONFIDENCE_THRESHOLD` | int | | OCR confidence threshold (0-100). |
| `OPENAI_BASE_URL` | str | | Custom OpenAI base URL. |
| `OPENAI_API_KEY` | password | | OpenAI API key. |
| `OLLAMA_BASE_URL` | str | | Ollama base URL. |
| `INFERENCE_TEXT_MODEL` | str | | Text inference model name. |
| `INFERENCE_IMAGE_MODEL` | str | | Image inference model name. |
| `EMBEDDING_TEXT_MODEL` | str | | Embedding model name. |
| `INFERENCE_CONTEXT_LENGTH` | int | | Inference context length. |
| `INFERENCE_LANG` | str | | Language used for inference. |
| `INFERENCE_JOB_TIMEOUT_SEC` | int | | Timeout for inference jobs. |
| `CRAWLER_DOWNLOAD_BANNER_IMAGE` | bool | `true` | Download banner image during crawl. |
| `CRAWLER_STORE_SCREENSHOT` | bool | `false` | Store screenshot during crawl. |
| `CRAWLER_FULL_PAGE_SCREENSHOT` | bool | `false` | Capture full-page screenshots. |
| `CRAWLER_FULL_PAGE_ARCHIVE` | bool | `false` | Store full-page archive. |
| `CRAWLER_JOB_TIMEOUT_SEC` | int | | Crawler job timeout. |
| `CRAWLER_NAVIGATE_TIMEOUT_SEC` | int | | Navigation timeout. |
| `CRAWLER_VIDEO_DOWNLOAD` | bool | | Enable video downloads. |
| `CRAWLER_VIDEO_DOWNLOAD_MAX_SIZE` | int | | Max video size (MB). |
| `CRAWLER_VIDEO_DOWNLOAD_TIMEOUT_SEC` | int | | Video download timeout. |
| `CRAWLER_ENABLE_ADBLOCKER` | bool | `true` | Enable ad blocking in the crawler. |
| `CHROME_EXTENSIONS_DIR` | str | `/usr/src/chrome/extensions` | Extensions directory for headless Chromium. |
| `MEILI_MASTER_KEY` | password | | Meilisearch master key (auto-generated if left blank). |
| `MEILI_ADDR` | str | | Meilisearch URL. |
| `BROWSER_WEB_URL` | str | | Chromium remote debugging URL. |
| `DATA_DIR` | str | | Data directory (leave default). |
| `DISABLE_SIGNUPS` | bool | `false` | Disable new user signups. |
| `MAX_ASSET_SIZE_MB` | int | `4` | Maximum asset upload size. |
| `OPENAI_API_KEY` | password | | OpenAI API key for AI features. |
| `OCR_LANGS` | str | | OCR languages (comma separated). |
| `INFERENCE_LANG` | str | | Language used for AI inference. |
| `CRAWLER_DOWNLOAD_BANNER_IMAGE` | bool | `true` | Download banner image. |
| `CRAWLER_STORE_SCREENSHOT` | bool | `true` | Store page screenshots. |
| `CRAWLER_FULL_PAGE_SCREENSHOT` | bool | `true` | Capture full-page screenshots. |
| `CRAWLER_FULL_PAGE_ARCHIVE` | bool | `true` | Store full-page archive. |
| `CRAWLER_ENABLE_ADBLOCKER` | bool | `true` | Enable ad blocking. |
| `CRAWLER_VIDEO_DOWNLOAD` | bool | `false` | Enable video downloads. |
| `TZ` | str | `Etc/UTC` | Timezone. |
### Extensions for headless Chromium
This add-on loads extensions in headless Chromium with the `--headless=new` flag. The defaults are downloaded automatically during the image build and refreshed each time the add-on starts into `/usr/src/chrome/extensions` (non-persistent).
You can override the base folder with the `CHROME_EXTENSIONS_DIR` option to point to a host-mounted directory if you prefer to manage extensions manually. Any missing extension folder is skipped at runtime.
### Custom Scripts and Environment Variables
This addon supports custom scripts and environment variables through the `addon_config` mapping:
- **Custom scripts**: See [Running Custom Scripts in Addons](https://github.com/alexbelgium/hassio-addons/wiki/Running-custom-scripts-in-Addons)
- **env_vars option**: Use the add-on `env_vars` option to pass extra environment variables (uppercase or lowercase names). See https://github.com/alexbelgium/hassio-addons/wiki/Add-Environment-variables-to-your-Addon-2 for details.
---
## Installation
The installation of this add-on is pretty straightforward and not different in
comparison to installing any other Hass.io add-on.
1. Add my Home Assistant add-ons repository
[![Add repository][repository-badge]][repository-url]
1. [Add my Hass.io add-ons repository][repository] to your Hass.io instance. [![Add repository on my Home Assistant][repository-badge]][repository-url]
1. Install this add-on.
1. Click the `Save` button to store your configuration.
1. Start the add-on (secrets are auto-generated if left blank).
1. Check the logs of the add-on to see if everything went well.
1. Open the webUI and complete the onboarding.
2. Install **Karakeep**
3. Click **Save**
4. Start the add-on (secrets are auto-generated)
5. Open the Web UI and complete onboarding
---
## Support
Create an issue on GitHub if you need support.
Create an issue on GitHub if you need help.
[repository]: https://github.com/alexbelgium/hassio-addons
[repository-badge]: https://img.shields.io/badge/Add%20repository%20to%20my-Home%20Assistant-41BDF5?logo=home-assistant&style=for-the-badge

View File

@@ -3,8 +3,8 @@ arch:
- amd64
name: Karakeep
slug: karakeep
description: bookmark-everything app with a touch of AI for the data hoarders out there
version: "0.30.0"
description: A self-hostable bookmark-everything app (links, notes and images) with AI-based automatic tagging and full text search
version: 0.30.0-4
url: https://github.com/alexbelgium/hassio-addons/tree/master/karakeep
image: ghcr.io/alexbelgium/karakeep-{arch}
init: false
@@ -33,6 +33,7 @@ options:
OPENAI_API_KEY: ""
OCR_LANGS: ""
INFERENCE_LANG: ""
MEILI_MASTER_KEY: "" # <-- add this
CRAWLER_DOWNLOAD_BANNER_IMAGE: true
CRAWLER_STORE_SCREENSHOT: true
CRAWLER_FULL_PAGE_SCREENSHOT: true
@@ -48,7 +49,7 @@ schema:
OPENAI_API_KEY: password?
OCR_LANGS: str?
INFERENCE_LANG: str?
MEILI_MASTER_KEY: str?
MEILI_MASTER_KEY: password? # <-- change to password?
CRAWLER_DOWNLOAD_BANNER_IMAGE: bool
CRAWLER_STORE_SCREENSHOT: bool
CRAWLER_FULL_PAGE_SCREENSHOT: bool

View File

@@ -1,16 +1,36 @@
#!/command/with-contenv bashio
#!/usr/bin/with-contenv bashio
# shellcheck shell=bash
set -e
generate_secret() {
tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 64
# Avoid SIGPIPE from `tr` when `head` terminates early under pipefail.
(
set +o pipefail 2>/dev/null || true
tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 64
)
}
set_option() {
local key="$1"
local value="$2"
# Store permanently in Home Assistant add-on options
bashio::addon.option "${key}" "${value}"
# Export into current process
export "${key}=${value}"
# Export into s6 so all services inherit it
if [ -d /var/run/s6/container_environment ]; then
printf "%s" "${value}" > "/var/run/s6/container_environment/${key}"
fi
}
load_option() {
local key="$1"
local value
value="$(bashio::config "${key}")"
export "${key}=${value}"
if [ -d /var/run/s6/container_environment ]; then
@@ -20,13 +40,10 @@ set_option() {
for key in MEILI_MASTER_KEY NEXTAUTH_SECRET; do
if bashio::config.has_value "${key}"; then
value="$(bashio::config "${key}")"
export "${key}=${value}"
if [ -d /var/run/s6/container_environment ]; then
printf "%s" "${value}" > "/var/run/s6/container_environment/${key}"
fi
bashio::log.info "Using existing ${key}"
load_option "${key}"
else
bashio::log.warning "${key} is not set. Generating a new value and storing it in addon options."
bashio::log.warning "${key} not set, generating persistent secret"
value="$(generate_secret)"
set_option "${key}" "${value}"
fi

View File

@@ -3,7 +3,6 @@
set -e
EXTENSIONS_DIR="${CHROME_EXTENSIONS_DIR:-/usr/src/chrome/extensions}"
bashio::log.info "Refreshing Chromium extensions in ${EXTENSIONS_DIR}"
mkdir -p "${EXTENSIONS_DIR}"
@@ -11,15 +10,32 @@ mkdir -p "${EXTENSIONS_DIR}"
download_extension() {
local name="$1"
local extension_id="$2"
local crx_path
local crx_path rc
crx_path="$(mktemp)"
curl -fsSL "https://clients2.google.com/service/update2/crx?response=redirect&prodversion=120.0&acceptformat=crx2,crx3&x=id%3D${extension_id}%26installsource%3Dondemand%26uc" \
-o "${crx_path}"
if ! curl -fsSL \
"https://clients2.google.com/service/update2/crx?response=redirect&prodversion=120.0&acceptformat=crx2,crx3&x=id%3D${extension_id}%26installsource%3Dondemand%26uc" \
-o "${crx_path}"; then
rm -f "${crx_path}"
bashio::log.warning "Failed to download extension ${name}. Continuing without refresh."
return 0
fi
rm -rf "${EXTENSIONS_DIR:?}/${name}"
mkdir -p "${EXTENSIONS_DIR}/${name}"
unzip -q "${crx_path}" -d "${EXTENSIONS_DIR}/${name}"
rc=0
unzip -q "${crx_path}" -d "${EXTENSIONS_DIR}/${name}" || rc=$?
rm -f "${crx_path}"
# unzip may return 1 even though files extracted (common with CRX zip metadata)
if [ "${rc}" -ne 0 ] && [ "${rc}" -ne 1 ]; then
bashio::log.warning "Failed to unzip extension ${name} (rc=${rc}). Continuing."
return 0
fi
return 0
}
download_extension "i-dont-care-about-cookies" "fllaojicojecljbmefodhfapmkghcbnh"