{% extends 'base.html' %} {% block content %} {% from '_helpers.jinja' import render_field, render_checkbox_field, render_button %} {% from '_common_fields.jinja' import render_common_settings_form %}
{{ render_field(form.requests.form.time_between_check, class="time-check-widget") }} Default time for all watches, when the watch does not have a specific time setting.
{{ render_field(form.requests.form.jitter_seconds, class="jitter_seconds") }} Example - 3 seconds random jitter could trigger up to 3 seconds earlier or up to 3 seconds later
{{ render_field(form.application.form.filter_failure_notification_threshold_attempts, class="filter_failure_notification_threshold_attempts") }} After this many consecutive times that the CSS/xPath filter is missing, send a notification
Set to 0 to disable
{% if not hide_remove_pass %} {% if current_user.is_authenticated %} {{ render_button(form.application.form.removepassword_button) }} {% else %} {{ render_field(form.application.form.password) }} Password protection for your changedetection.io application. {% endif %} {% else %} Password is locked. {% endif %}
{{ render_field(form.application.form.base_url, placeholder="http://yoursite.com:5000/", class="m-d") }} Base URL used for the {{ '{{ base_url }}' }} token in notifications and RSS links.
Default value is the ENV var 'BASE_URL' (Currently "{{settings_application['current_base_url']}}"), read more here.
{{ render_checkbox_field(form.application.form.extract_title_as_title) }} Note: This will automatically apply to all existing watches.
{{ render_checkbox_field(form.application.form.empty_pages_are_a_change) }} When a page contains HTML, but no renderable text appears (empty page), is this considered a change?
{% if form.requests.proxy %}
{{ render_field(form.requests.form.proxy, class="fetch-backend-proxy") }} Choose a default proxy for all watches
{% endif %}
{{ render_common_settings_form(form.application.form, emailprefix, settings_application) }}
{{ render_field(form.application.form.fetch_backend, class="fetch-backend") }}

Use the Basic method (default) where your watched sites don't need Javascript to render.

The Chrome/Javascript method requires a network connection to a running WebDriver+Chrome server, set by the ENV var 'WEBDRIVER_URL'.


Tip: Connect using BrightData Proxies, find out more here.
If you're having trouble waiting for the page to be fully rendered (text missing etc), try increasing the 'wait' time here.
This will wait n seconds before extracting the text.
{{ render_field(form.application.form.webdriver_delay) }}
{{ render_checkbox_field(form.application.form.ignore_whitespace) }} Ignore whitespace, tabs and new-lines/line-feeds when considering if a change was detected.
Note: Changing this will change the status of your existing watches, possibly trigger alerts etc.
{{ render_checkbox_field(form.application.form.render_anchor_tag_content) }} Render anchor tag content, default disabled, when enabled renders links as (link text)[https://somesite.com]
Note: Changing this could affect the content of your existing watches, possibly trigger alerts etc.
{{ render_field(form.application.form.global_subtractive_selectors, rows=5, placeholder="header footer nav .stockticker") }}
  • Remove HTML element(s) by CSS selector before text conversion.
  • Add multiple elements or CSS selectors per line to ignore multiple parts of the HTML.
{{ render_field(form.application.form.global_ignore_text, rows=5, placeholder="Some text to ignore in a line /some.regex\d{2}/ for case-INsensitive regex ") }} Note: This is applied globally in addition to the per-watch rules.
  • Note: This is applied globally in addition to the per-watch rules.
  • Each line processed separately, any line matching will be ignored (removed before creating the checksum)
  • Regular Expression support, wrap the entire line in forward slash /regex/
  • Changing this will affect the comparison checksum which may trigger an alert
  • Use the preview/show current tab to see ignores

Drive your changedetection.io via API, More about API access here

{{ render_checkbox_field(form.application.form.api_access_token_enabled) }}
Restrict API access limit by using x-api-key header


API Key {{api_key}}
{{ render_button(form.save_button) }} Back Clear Snapshot History
{% endblock %}