#
Filters
Filters allow you to modify variables in Web Clipper templates. Filters are applied to variables using the syntax {{variable|filter}}.
- Filters work for any kind of variable including
prompt,meta,selector, andschemavariables. - Filters can be chained, e.g.
{{variable|filter1|filter2}}, and are applied in the order they are added.
#
Dates
Convert and modify dates.
#
date
Converts a date to the specified format, see reference.
{{date|date:"YYYY-MM-DD"}}converts the current date to "YYYY-MM-DD".- Use
date:("outputFormat", "inputFormat")to specify the input format, e.g."12/01/2024"|date:("YYYY-MM-DD", "MM/DD/YYYY")parses "12/01/2024" and returns"2024-12-01".
#
date_modify
Modifies a date by adding or subtracting a specified amount of time, see reference.
"2024-12-01"|date_modify:"+1 year"returns"2025-12-01""2024-12-01"|date_modify:"- 2 months"returns"2024-10-01"
#
duration
Converts ISO 8601 duration strings or seconds into formatted time strings. Uses tokens: HH (padded hours), H (hours), mm (padded minutes), m (minutes), ss (padded seconds), s (seconds).
"PT1H30M"|duration:"HH:mm:ss"returns"01:30:00"."3665"|duration:"H:mm:ss"returns"1:01:05".- Setting
durationwithout any parameters usesHH:mm:ssover 1 hour,mm:ssunder 1 hour. - Supports both ISO 8601 duration strings (e.g.,
PT6702S,PT1H30M) and plain seconds.
#
Text conversion and capitalization
Convert text strings from one format to another.
#
camel
Converts text to camelCase.
#
capitalize
Capitalizes the first character of the value and converts the rest to lowercase, e.g. "hELLO wORLD"|capitalize returns "Hello world".
#
kebab
Converts text to kebab-case.
#
lower
Converts text to lowercase.
#
pascal
Converts text to PascalCase.
#
replace
Replaces occurrences of specified text:
- Simple replacement:
"hello!"|replace:",":""removes all commas. - Multiple replacements:
"hello world"|replace:("e":"a","o":"0")returns"hall0 w0rld". - Replacements are applied in the order they are specified.
- To remove specified text, use
""as the replacement value. - Special characters including
: | { } ( ) ' "should be escaped with a backslash when used in the search term, e.g.\:to search for a literal colon.
Regex is supported using JavaScript regex syntax:
- Replace all vowels:
"hello world"|replace:"/[aeiou]/g":"*"→"h*ll* w*rld". - Case-insensitive:
"HELLO world"|replace:"/hello/i":"hi"→"hi world". - Multiple regex:
"hello world"|replace:("/[aeiou]/g":"*","/\s+/":"-")→"h*ll*-w*rld". - Available flags:
g(global),i(case-insensitive),m(multiline),s(dotAll),u(unicode),y(sticky).
#
safe_name
Converts text to a safe file name.
- By default,
safe_nameapplies the most conservative sanitization rules. - OS-specific rules can be applied with
safe_name:oswhereoscan bewindows,mac, orlinuxto only apply the rules for that operating system.
#
snake
Converts text to snake_case.
#
title
Converts text to Title Case, e.g. "hello world"|title returns "Hello World".
#
trim
Removes white space from both ends of a string.
" hello world "|trimreturns"hello world".
#
uncamel
Converts camelCase or PascalCase to space-separated words, which you can further format with other filters like title or capitalize.
"camelCase"|uncamelreturns"camel case"."PascalCase"|uncamelreturns"pascal case".
#
upper
Converts a value to uppercase, e.g. "hello world"|upper returns "HELLO WORLD".
#
Text formatting
Apply Basic formatting syntax and Advanced formatting syntax to text.
#
blockquote
Adds a Markdown quote prefix (> ) to each line of the input.
#
callout
Creates a callout with optional parameters: {{variable|callout:("type", "title", foldState)}}
typeis the callout type, and defaults to "info"titleis the callout title, and defaults to emptyfoldStateis a boolean to set the fold state (true for folded, false for unfolded, null for not foldable)
#
footnote
Converts an array or object into a list of Markdown footnotes.
- For arrays:
["first item","second item"]|footnotereturns:[^1]: first itemetc. - For objects:
{"First Note": "Content 1", "Second Note": "Content 2"}|footnotereturns:[^first-note]: Content 1etc.
#
fragment_link
Converts strings and arrays into text fragment links. Defaults to "link" for the link text.
highlights|fragment_linkreturnsHighlight content [link](text-fragment-url)highlights|fragment_link:"custom title"returnsHighlight content [custom title](text-fragment-url)
#
image
Converts strings, arrays, or objects into Markdown image syntax.
- For strings:
"image.jpg"|image:"alt text"returns. - For arrays:
["image1.jpg","image2.jpg"]|image:"alt text"returns an array of Markdown image strings with the same alt text for all images. - For objects:
{"image1.jpg": "Alt 1", "image2.jpg": "Alt 2"}|imagereturns Markdown image strings with alt text from the object keys.
#
link
Converts strings, arrays, or objects into Markdown link syntax (not to be confused with
- For strings:
"url"|link:"author"returns[author](url). - For arrays:
["url1","url2"]|link:"author"returns an array of Markdown links with the same text for all links. - For objects:
{"url1": "Author 1", "url2": "Author 2"}|linkreturns Markdown links with the text that matches the object keys.
#
list
Converts an array to a Markdown list.
listto convert to a bullet list.list:taskto convert to a task list.list:numberedto convert to a numbered list.list:numbered-taskto convert to a task list with numbers.
#
table
Converts an array or array of objects into a Markdown table:
- For an array of objects, it uses the object keys as headers.
- For an array of arrays, it creates a table with each nested array as a row.
- For a simple array, it creates a single-column table with "Value" as the header.
- Custom column headers can be specified using:
table:("Column 1", "Column 2", "Column 3"). When used with a simple array, it automatically breaks the data into rows based on the number of columns specified.
#
wikilink
Converts strings, arrays, or objects into Obsidian wikilink syntax.
- For strings:
"page"|wikilinkreturns[[page]]. - For strings with alias:
"page"|wikilink:"alias"returns[[page|alias]]. - For arrays:
["page1","page2"]|wikilinkreturns an array of wikilinks without aliases. - For arrays with alias:
["page1","page2"]|wikilink:"alias"returns an array of wikilinks with the same alias for all links. - For objects:
{"page1": "alias1", "page2": "alias2"}|wikilinkreturns wikilinks with the keys as page names and values as aliases.
#
Numbers
#
calc
Performs basic arithmetic operations on numbers.
- Supports operators:
+,-,*,/,**(or^) for exponentiation. - Example:
5|calc:"+10"returns15. - Example:
2|calc:"**3"returns8(2 cubed). - Returns the original string if the input is not a number.
#
length
Returns the length of strings, arrays, or number of keys in objects.
- For strings:
"hello"|lengthreturns5. - For arrays:
["a","b","c"]|lengthreturns3. - For objects:
{"a":1,"b":2}|lengthreturns2.
#
round
Rounds a number to the nearest integer or to a specified number of decimal places.
- Without parameters:
3.7|roundreturns4. - With decimal places specified:
3.14159|round:2returns3.14.
#
HTML processing
Process HTML content and convert HTML to Markdown. Note that your input variable must contain HTML content, e.g. using {{fullHtml}}, {{contentHtml}} or a {{selectorHtml:}} variable.
#
markdown
Converts a string to an Obsidian Flavored Markdown formatted string.
- Useful when combined with variables that return HTML such as
{{contentHtml}},{{fullHtml}}, and selector variables like{{selectorHtml:cssSelector}}.
#
remove_attr
Removes only the specified HTML attributes from tags.
- Example:
"<div class="test" id="example">Content</div>"|remove_attr:"class"returns<div id="example">Content</div>. - Multiple attributes:
{{fullHtml|remove_attr:("class,style,id")}}
#
remove_html
Removes the specified HTML elements and their content from a string.
- Supports tag name, class, or id, e.g.
{{fullHtml|remove_html:("img,.class-name,#element-id")}} - To remove only HTML tags or attributes without removing the content use the
strip_tagsorstrip_attrfilters.
#
remove_tags
Removes only the specified HTML tags. Keeps the content of the tags.
- Example:
"<p>Hello <b>world</b>!</p>"|remove_tags:"b"returns"<p>Hello world!</p>". - Multiple tags:
{{fullHtml|remove_tags:("a,em,strong")}}
#
replace_tags
Replaces HTML tags, maintaining the content and attributes of the tag.
{{fullHtml|replace_tags:"strong":"h2"}}replaces all<strong>tags with<h2>.
#
strip_attr
Removes all HTML attributes from a string.
- Use
strip_attr:("class, id")to keep specific attributes. - Example:
"<div class="test" id="example">Content</div>"|strip_attr:("class")returns<div id="example">Content</div>.
#
strip_md
Removes all Markdown formatting and returns a plain text string, e.g. turning **text** into text.
- Turns formatted text into unformatted plain text, including bold, italic, highlights, headers, code, blockquotes, tables, task lists, and wikilinks.
- Entirely removes tables, footnotes, images, and HTML elements.
#
strip_tags
Removes all HTML tags from a string. Content within the tag is preserved.
- Use
strip_tags:("p,strong,em")to keep specific tags. - Example:
"<p>Hello <b>world</b>!</p>"|strip_tags:("b")returnsHello <b>world</b>!.
#
Arrays and objects
Process arrays and objects.
#
first
Returns the first element of an array as a string.
["a","b","c"]|firstreturns"a".- If the input is not an array, it returns the input unchanged.
#
join
Combines elements of an array into a string.
["a","b","c"]|joinreturns"a,b,c".- A custom separator can be specified:
["a","b","c"]|join:" "returns"a b c". Usejoin:"\n"to separate elements with a line break. - It can be useful after
splitorslice:"a,b,c,d"|split:","|slice:1,3|join:" "returns"b c".
#
last
Returns the last element of an array as a string.
["a","b","c"]|lastreturns"c".- If the input is not an array, it returns the input unchanged.
#
map
Applies a transformation to each element of an array using the syntax map:item => item.property or map:item => item.nested.property for nested properties.
[{gem: "obsidian", color: "black"}, {gem: "amethyst", color: "purple"}]|map:item => item.gemreturns["obsidian", "amethyst"].- Use parentheses for object literals and complex expressions:
map:item => ({key: value}), e.g.:[{gem: "obsidian", color: "black"}, {gem: "amethyst", color: "purple"}]|map:item => ({name: item.gem, color: item.color})returns[{name: "obsidian", color: "black"}, {name: "amethyst", color: "purple"}].
String literals are supported and automatically wrapped in an object with a str property. The str property is used to store the result of string literal transformations, e.g. ["rock", "pop"]|map:item => "genres/${item}" returns [{str: "genres/rock"}, {str: "genres/pop"}].
Combine map with the template filter, e.g. map:item => ({name: ${item.gem}, color: item.color})|template:"- ${name} is ${color}\n".
#
merge
Adds new values to an array.
- For arrays:
["a","b"]|merge:("c","d")returns["a","b","c","d"]. - Single value:
["a","b"]|merge:"c"returns["a","b","c"]. - If input is not an array, it creates a new array:
"a"|merge:("b","c")returns["a","b","c"]. - Values can be quoted:
["a"]|merge:('b,"c,d",e')returns["a","b","c,d","e"].
#
nth
Keeps nth items in an array using CSS-style nth-child syntax and group patterns. All positions are 1-based (first item is position 1).
array|nth:3keeps only the 3rd element.array|nth:3nkeeps every 3rd element (3, 6, 9, etc.).array|nth:n+3keeps the 3rd and all following elements.
Group pattern syntax for repeating structures:
array|nth:1,2,3:5keeps positions 1, 2, 3 from each group of 5 items. Example:[1,2,3,4,5,6,7,8,9,10]|nth:1,2,3:5returns[1,2,3,6,7,8].
#
object
Manipulates object data:
object:arrayconverts an object to an array of key-value pairs.object:keysreturns an array of the object's keys.object:valuesreturns an array of the object's values.- Example:
{"a":1,"b":2}|object:arrayreturns[["a",1],["b",2]].
#
slice
Extracts a portion of a string or array.
- For strings:
"hello"|slice:1,4returns"ell". - For arrays:
["a","b","c","d"]|slice:1,3returns["b","c"]. - If only one parameter is provided, it slices from that index to the end:
"hello"|slice:2returns"llo". - Negative indices count from the end:
"hello"|slice:-3returns"llo". - The second parameter is exclusive:
"hello"|slice:1,4includes characters at indices 1, 2, and 3. - Using a negative second parameter excludes elements from the end:
"hello"|slice:0,-2returns"hel".
#
split
Divides a string into an array of substrings.
"a,b,c"|split:","returns["a","b","c"]."hello world"|split:" "returns["hello","world"].- If no separator is provided, it splits on every character:
"hello"|splitreturns["h","e","l","l","o"]. - Regular expressions can be used as separators:
"a1b2c3"|split:[0-9]returns["a","b","c"].
#
template
Applies a template string to an object or array of objects, using the syntax object|template:"Template with ${variable}".
- Access nested properties:
{"gem":{"name":"Obsidian"}}|template:"${gem.name}"returns"Obsidian". - For objects:
{"gem":"obsidian","hardness":5}|template:"${gem} has a hardness of ${hardness}"returns"obsidian has a hardness of 5". - For arrays:
[{"gem":"obsidian","hardness":5},{"gem":"amethyst","hardness":7}]|template:"- ${gem} has a hardness of ${hardness}\n"returns a formatted list.
Works with string literals from map by accessing the str property:
- Example:
["rock", "pop"]|map:item => "genres/${item}"|template:"${str}"returns"genres/rock\ngenres/pop". - The
strproperty is automatically used when applyingtemplateto objects created bymapwith string literals.
#
unique
Removes duplicate values from arrays and objects.
- For arrays of primitives:
[1,2,2,3,3]|uniquereturns[1,2,3]. - For arrays of objects:
[{"a":1},{"b":2},{"a":1}]|uniquereturns[{"a":1},{"b":2}]. - For objects it removes properties with duplicate values, keeping the last occurrence's key.
- For strings it returns the input unchanged.