System AtomCrafts
FeedCraft comes with a set of built-in “AtomCrafts” that perform specific processing steps on your feeds. You can chain these AtomCrafts together in a FlowCraft to create powerful pipelines.
Content enhancement
Section titled “Content enhancement”These atoms fetch full article content or clean up HTML.
fulltext
Section titled “fulltext”Extracts the full content of the article from the original webpage.
- Use case: When the RSS feed only provides a summary or snippet.
- Mechanism: Uses a standard HTTP client to fetch the page and an algorithm to extract the main content. Fast and lightweight.
fulltext-plus
Section titled “fulltext-plus”Extracts full content using a headless browser (Puppeteer).
- Use case: For websites that require JavaScript to render content or have strong anti-bot protections.
- Mechanism: Connects to the configured browser provider (
browserless-restfulorcdp) to render the page. Slower but more robust. - Parameters:
mode(default:networkidle2): Wait condition.load: Wait for theloadevent.domcontentloaded: Wait for theDOMContentLoadedevent.networkidle0: Wait until there are 0 active network connections for at least 500ms.networkidle2: Wait until there are no more than 2 active network connections for at least 500ms. (Recommended for SPAs).
wait(default:0): Explicit wait time in seconds (e.g.,5).
cleanup
Section titled “cleanup”Cleans up the HTML content to remove clutter.
- Use case: Improving readability by removing classes, styles, and empty tags.
relative-link-fix
Section titled “relative-link-fix”Converts relative links (e.g., <a href="/about">) in the content to absolute links (e.g., <a href="https://example.com/about">).
- Use case: Essential when extracting full content, as relative links will break when viewed in an RSS reader.
guid-fix
Section titled “guid-fix”Replaces the RSS item GUID with an FNV-1a hash of the item’s content.
- Use case: Some feeds change their GUIDs frequently even when content hasn’t changed, causing duplicate unread items in readers. This atom stabilizes the GUID based on content.
beautify-content
Section titled “beautify-content”Re-formats the article using LLM to fix layout, remove ads, and standardizing Markdown, then converts back to clean HTML.
- Parameters:
prompt: Instructions for the “editor” persona.
AI processing
Section titled “AI processing”Use large language models to transform, enrich, or screen content.
translate-title
Section titled “translate-title”Translates the article title to your target language.
- Parameters:
prompt: Custom prompt. Defaults to a standard translation prompt. Supports{{.TargetLang}}placeholder.
translate-content
Section titled “translate-content”Translates the entire article content, replacing the original.
- Parameters:
prompt: Custom prompt. Supports{{.TargetLang}}.
translate-content-immersive
Section titled “translate-content-immersive”Bilingual translation. Appends the translation after each paragraph of the original text.
- Parameters:
prompt: Custom prompt.
summary
Section titled “summary”Generates a summary of the article and prepends it to the content.
- Parameters:
prompt: Custom prompt for summarization.
introduction
Section titled “introduction”Generates a short introduction or “lead-in” for the article.
- Parameters:
prompt: Custom prompt.
ai-content-process
Section titled “ai-content-process”Process article content using LLM according to custom rules and insert the generated result at a specified position.
- Parameters:
rule(Required): Instruction for processing each article content. Example: “Summarize key points and list action items.”extra-payload(Default:article_content): Comma-separated list of extra information to send to the LLM. Supported:article_summary,article_content,article_date,raw_rss_item.placement(Default:prepend): Where to write the generated content. Supported:prepend,replace,append.
ignore-advertorial
Section titled “ignore-advertorial”Uses LLM to detect if an article is an advertorial or soft advertisement (evaluating both title and content) and removes it.
- Parameters:
prompt-for-exclude: A prompt that should returntrueif the item is an ad.
Filtering
Section titled “Filtering”Control which items remain in the feed, including keyword, time, and semantic filters.
keyword
Section titled “keyword”Filters items based on keywords in the title or content.
- Parameters:
keywords: A comma-separated list of keywords to match (substring match, case-sensitive). Example:ad,sell,SALE.mode:include(default) to keep matching items, orexcludeto remove them.scope:title,content, orall(default).
Limits the number of items in the feed.
- Parameters:
num(default:10): The maximum number of items to keep.
time-limit
Section titled “time-limit”Filters out items that are older than a specific number of days.
- Parameters:
days(default:7): Max age of articles in days.
llm-filter
Section titled “llm-filter”Generic LLM-based filter. You define the condition for exclusion. The LLM evaluates both the article title and content against this condition.
- Parameters:
filter_condition: A natural language question/condition. If the LLM answers “yes” (true), the item is removed.- Example: “Is this article about sports?” (Removes sports articles).
embedding-filter
Section titled “embedding-filter”Semantic topic filtering powered by an embedding model. Instead of asking a chat model to judge every item, FeedCraft converts both your topic anchors and each article into vectors, compares them with cosine similarity, and then keeps or removes matching items.
Environment variables
Section titled “Environment variables”Set a dedicated embedding endpoint when possible:
FC_EMBEDDING_API_TYPE=openaiFC_EMBEDDING_API_BASE=https://api.openai.com/v1FC_EMBEDDING_API_KEY=sk-your-api-keyFC_EMBEDDING_API_MODEL=text-embedding-3-small # RequiredFC_EMBEDDING_BATCH_SIZE=5FC_EMBEDDING_MAX_INPUT_CHARS=8000Supported FC_EMBEDDING_API_TYPE values:
openai: OpenAI or OpenAI-compatible embedding endpoint.gemini: Gemini through its OpenAI-compatible embedding endpoint. SetFC_EMBEDDING_API_BASEandFC_EMBEDDING_API_MODELexplicitly.ollama: Local Ollama embedding model. SetFC_EMBEDDING_API_BASE, for examplehttp://localhost:11434, and an embedding model such asnomic-embed-textorbge-m3.
If FC_EMBEDDING_API_TYPE, FC_EMBEDDING_API_BASE, and FC_EMBEDDING_API_KEY are not set, FeedCraft falls back to the matching FC_LLM_API_TYPE, FC_LLM_API_BASE, and FC_LLM_API_KEY values. The embedding model name is independent: you must explicitly set FC_EMBEDDING_API_MODEL to a valid embedding model. FeedCraft does not provide a default embedding model and does not reuse FC_LLM_API_MODEL because that value is usually a chat model.
FC_EMBEDDING_MAX_INPUT_CHARS is a final safety cap applied to every text sent to the embedding service, including any instruction prefix. It is a character budget, not an exact tokenizer count. Keep it at or below a conservative value for your model’s token window, for example 8000 for an 8k-token embedding model.
Parameters
Section titled “Parameters”-
anchors(required): One topic anchor per line. Each anchor should describe what you want to match, for example:artificial intelligence infrastructuremachine learning researchlarge language model deployment -
threshold(default:0.6): Cosine similarity threshold from0to1. Higher values are stricter. Start with0.6, lower it if relevant articles are missing, and raise it if unrelated articles slip through. -
mode(default:include):includekeeps matching items;excluderemoves matching items. -
max_content_length(default:2000): Maximum article content characters used by this AtomCraft before the finalFC_EMBEDDING_MAX_INPUT_CHARSsafety cap is applied. -
instruction(optional): Text prefix prepended to every embedding input. Leave it empty unless your model benefits from a fixed task prefix.
Admin UI workflow
Section titled “Admin UI workflow”- Open Worktable → Process Feed Sources → AtomCraft.
- Create a new AtomCraft, for example
ai-news-only. - Select template
embedding-filter. - Fill
anchorswith one topic per line. - Keep
mode=includeto keep matching items, or switch toexcludeto remove matching items. - Save the AtomCraft.
- Use it in a FlowCraft, Recipe, Feed Compare, or directly:
/craft/ai-news-only?input_url=https%3A%2F%2Fexample.com%2Ffeed.xmlTroubleshooting
Section titled “Troubleshooting”- “anchors parameter is required”: Add at least one non-empty line to
anchors. - “FC_EMBEDDING_API_MODEL must be set”: Configure a single embedding model. Chat models are not suitable here.
- All items are removed: Lower
threshold, add broader anchors, or increasemax_content_length. - Too many unrelated items remain: Raise
threshold, make anchors more specific, or switch from broad category names to representative phrases. - Provider says the input is too long: Lower
FC_EMBEDDING_MAX_INPUT_CHARS, lowermax_content_length, or shorteninstruction.
Input & output
Section titled “Input & output”Pass-through proxy. HTML / JSON / Search to RSS converters are documented in Guides and System Tools.
Simple proxy for the feed.
- Use case: When you just want to forward the original feed without modification, or use FeedCraft as a central gateway.
FeedCraft v3.2.0