{"id":14338653,"url":"https://github.com/Colin-XKL/FeedCraft","last_synced_at":"2025-08-19T06:33:09.212Z","repository":{"id":234497022,"uuid":"789019697","full_name":"Colin-XKL/FeedCraft","owner":"Colin-XKL","description":"craft your feed at ease! 轻量级rss中间件, 提取全文, 翻译、摘要一站式服务","archived":false,"fork":false,"pushed_at":"2024-11-14T11:21:24.000Z","size":898,"stargazers_count":56,"open_issues_count":12,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-11-14T12:26:44.836Z","etag":null,"topics":["ai","awesome-selfhost","docker","feed","gpt","llm","openai","rss","self-hosted","selfhost"],"latest_commit_sha":null,"homepage":"https://feed-craft.colinx.one/start.html","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Colin-XKL.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":"2024-04-19T14:46:30.000Z","updated_at":"2024-11-10T04:52:18.000Z","dependencies_parsed_at":"2024-04-19T16:00:19.473Z","dependency_job_id":"2816838d-1701-458c-a525-3ca88451f5a2","html_url":"https://github.com/Colin-XKL/FeedCraft","commit_stats":null,"previous_names":["colin-xkl/feedcraft"],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Colin-XKL%2FFeedCraft","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Colin-XKL%2FFeedCraft/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Colin-XKL%2FFeedCraft/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Colin-XKL%2FFeedCraft/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Colin-XKL","download_url":"https://codeload.github.com/Colin-XKL/FeedCraft/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230328777,"owners_count":18209392,"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":["ai","awesome-selfhost","docker","feed","gpt","llm","openai","rss","self-hosted","selfhost"],"created_at":"2024-08-26T06:00:41.319Z","updated_at":"2025-08-19T06:33:09.194Z","avatar_url":"https://github.com/Colin-XKL.png","language":"Vue","funding_links":[],"categories":["Vue"],"sub_categories":[],"readme":"![logo.png](asset/logo-header.png)\n\n# Feed Craft\n\nCraft all your feed in one place!\n\n![author](https://img.shields.io/badge/author-Colin-blue)\n![GitHub License](https://img.shields.io/github/license/Colin-XKL/FeedCraft)\n![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/Colin-XKL/FeedCraft/docker-publish.yml)\n![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/Colin-XKL/FeedCraft)\n![GitHub Release](https://img.shields.io/github/v/release/Colin-XKL/FeedCraft)\n![GitHub Discussions](https://img.shields.io/github/discussions/Colin-XKL/FeedCraft?link=https%3A%2F%2Fgithub.com%2FColin-XKL%2FFeedCraft%2Fdiscussions)\n![Container Image Size On GHCR](https://ghcr-badge.egpl.dev/colin-xkl/feed-craft/size?color=%2344cc11\u0026tag=latest\u0026label=image+size)\n![Arch Badge](https://img.shields.io/badge/arch-amd64|arm64-blue)\n![Open Source Love](https://badges.frapsoft.com/os/v2/open-source.svg?v=103)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/Colin-XKL/FeedCraft)\n\nDoc: [English](https://deepwiki.com/Colin-XKL/FeedCraft) | 简体中文\n\n**FeedCraft** is a powerful tool to process your rss feeds as a middleware, use it to translate your feed, extract\nfulltext, emulate browser\nto render js-heavy page, use llm such as google gemini to generate brief for your rss article, use natural language to\nfilter your rss feed, and more!\n\n**FeedCraft** 是一个简单、强大的RSS 源处理工具,他可以作为一个中间件处理你的RSS源.\n你可以用它来翻译、提取正文、模拟浏览器来渲染那些动态生成的网页并提取全文、通过大语言模型如Google\nGemini来生成文章摘要、通过自然语言筛选文章等\n\n## 核心特性\n\n- 开源可自部署, 与现用任何RSS阅读器协同使用\n- AI Power, 可以接入所有Open AI接口兼容的LLM对RSS进行处理, 可自定义prompt\n- 支持保存规则批量应用到不同的RSS源\n- 支持**便携模式**(portable mode, 即用即走, 只需要在原RSS地址前面加个前缀即可), 和**高级模式**(dock mode,\n  在后台页面自定义RSS地址和各类深度加工参数)\n\n## 快速开始\n\n访问以下URL格式即可快速调用FeedCraft对输入的RSS源进行指定的处理\n`https://feed-craft.colinx.one/craft/{craft_atom}?input_url={input_rss_url}`\n\nFeedCraft中的几个核心概念:\n\n- CraftAtom(工艺), 指要如何处理一个rss源, 比如是要进行翻译,还是提取正文,还是AI生成摘要等\n- CraftFlow(工艺组合), 多个craft atom组成的序列, 比如你可以定义一个新的名叫 clean-article 的 craft flow,\n  将提取全文、AI筛选文章、AI摘要组合到一起,\n- Recipe(食谱), 记录了以什么样的craft 或 craft flow对某个指定的rss源进行处理, 比如你可以指定一个名叫my-zhihu-daliy的recipe,\n  对知乎日报的rss自动进行AI生成摘要的操作, 这个recipe对应一个新的rss地址, 你可以直接订阅这个地址得到带摘要版本的知乎日报\n\n你可以先开始尝试下面的几个工艺(craft atom):\n\n- **proxy**: 简易RSS代理, 不作任何处理\n- **limit**: 限制文章个数, 默认最新10个\n- **fulltext**: 获取全文\n- **fulltext-plus**: 获取全文,但是会模拟浏览器渲染网页,适用于常规模式无法获取到文章内容,动态渲染内容的站点\n- **introduction**: 调用AI为文章生成摘要,附加在原文开头\n- **summary**: 调用AI总结文章主要内容,附加在原文开头\n- **translate-title**: 调用AI翻译文章标题\n- **translate-content**: 调用AI翻译文章内容, 只输出翻译后内容\n- **translate-content-immersive**: 调用AI翻译文章内容, 沉浸式翻译模式, 每个原文段落后面添加翻译后内容\n- **ignore-advertorial**: 调用AI对文章进行筛选, 排除营销软文\n\n你可以使用提供的demo站点快速开始体验 :\nhttps://feed-craft.colinx.one\n\n例如, 现在你想要阅读这个RSS源 `https://feeds.feedburner.com/visualcapitalist`, 但是由于是全英文的不方便快速略读,\n使用FeedCraft对标题进行翻译,\n那么只需要将订阅地址改成\n`https://feed-craft.colinx.one/craft/translate-title?input_url=https://feeds.feedburner.com/visualcapitalist`  即可.\n\n(部分RSS订阅软件不会自动进行字符转义, 你可能需要把 input_url 后面的内容进行手动转义,\n结果为\n`https://feed-craft.colinx.one/craft/translate-title?input_url=https%3A%2F%2Ffeeds.feedburner.com%2Fvisualcapitalist` )\n\n你可以使用下面几个 RSS 快速进行测试\n\n- 全英文，有全文\n  https://feeds.feedburner.com/visualcapitalist\n- 全英文，无全文\n  https://ourworldindata.org/atom.xml\n\n*注意: Demo站点仅供体验使用\n\n## 部署\n\n你可以通过docker快速自行部署一个FeedCraft实例,以获得更好的使用体验.\n下面为一个最小docker compose 示例:\n\n服务默认监听在 80 端口，你也可以在同一网络下的其他容器中，使用 `http://app.feed-craft/xxx` 这样来进行访问。  \n控制台默认账号`admin`, 密码 `adminadmin`, 登陆后请尽快修改默认密码\n\n```yaml\nversion: \"3\"\nservices:\n  app.feed-craft:\n    image: ghcr.io/colin-xkl/feed-craft\n    # image: colinxkl/feed-craft  # 你也可以使用docker hub的镜像\n    container_name: feed-craft\n    restart: always\n    ports:\n      - \"10088:80\"  # 10088可替换为任何你想使用的端口\n    volumes:\n      - ./feed-craft-db:/usr/local/feed-craft/db # db file\n    environment:\n      FC_PUPPETEER_HTTP_ENDPOINT: http://service.browserless:3000 # 替换为你自己的 browserless 或其他浏览器实例地址\n      FC_REDIS_URI: redis://service.redis:6379/ # 替换为你自己的redis 实例地址\n      FC_OPENAI_AUTH_KEY: skxxxxxx # 鉴权的key\n      FC_OPENAI_DEFAULT_MODEL: gemini-pro/chatgpt-3.5/... # 默认使用的模型\n      FC_OPENAI_ENDPOINT: https://xxxxxx # OPENAI API 或兼容平台的API接口路径\n```\n\n你也可以直接在一个compose文件中把redis等附加组件也一起部署好:\n\n```yaml\nversion: \"3\"\nservices:\n  app.feed-craft:\n    image: ghcr.io/colin-xkl/feed-craft\n    container_name: feed-craft\n    restart: always\n    ports:\n      - \"10088:80\"  # 10088可替换为任何你想使用的端口\n    volumes:\n      - ./feed-craft-db:/usr/local/feed-craft/db # db file\n    environment:\n      FC_PUPPETEER_HTTP_ENDPOINT: http://service.browserless:3000 # 替换为你自己的 browserless 或其他浏览器实例地址\n      FC_REDIS_URI: redis://service.redis:6379/ # 替换为你自己的redis 实例地址\n      FC_OPENAI_AUTH_KEY: skxxxxxx # 鉴权的key\n      FC_OPENAI_DEFAULT_MODEL: gemini-pro/chatgpt-3.5/... # 默认使用的模型\n      FC_OPENAI_ENDPOINT: https://xxxxxx # OPENAI API 或兼容平台的API接口路径，需要以 “/v1” 结尾\n  service.redis:\n    image: redis:6-alpine\n    container_name: feedcraft_redis\n    restart: always\n  service.browserless:\n    image: browserless/chrome\n    container_name: feedcraft_browserless\n    environment:\n      USE_CHROME_STABLE: true\n    restart: unless-stopped\n```\n\n## 关于 FeedCraft\n\nFeedCraft 的名称和Logo参考并致敬两款游戏: MineCraft和塞尔达, 初衷和愿景是做一个简单易用、同时足够灵活, 能够有更多可能性的RSS工具.\n使用问题、建议等欢迎在Discussion区讨论交流\n\n## 许可\n\nGPLv3\n\n## 页面展示\n\n**欢迎页**\n\u003cimg width=\"1900\" alt=\"Xnip2024-08-08_00-48-49\" src=\"https://github.com/user-attachments/assets/d3541f4e-9ab4-4948-9fc7-5b815db225ce\"\u003e\n\n**RSS源比较工具**\n你可以输入一个RSS 源的地址, 然后选择要使用的craft atom, 就可以看到前后的对比.\n如下图我应用的craft是自定义的, 只显示文章标题带有`RSS`的文章, 可以看到筛选后的结果少了很多\n\n\u003cimg width=\"1907\" alt=\"Xnip2024-08-08_01-05-09\" src=\"https://github.com/user-attachments/assets/7abd764a-8b19-4a72-8c94-e3ea442ff385\"\u003e\n\n**创建Craft Atom 自定义Prompt**\n\u003cimg width=\"1918\" alt=\"Xnip2024-08-08_00-46-13\" src=\"https://github.com/user-attachments/assets/ff15fe79-3792-4a96-b991-f121d2a8973e\"\u003e\n\n**自定义recipe, 指定使用哪个craft atom 处理哪个RSS源**\n\u003cimg width=\"1900\" alt=\"Xnip2024-08-08_00-48-34\" src=\"https://github.com/user-attachments/assets/5794de1d-28b6-45ff-8737-16f8adc6ed8a\"\u003e\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FColin-XKL%2FFeedCraft","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FColin-XKL%2FFeedCraft","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FColin-XKL%2FFeedCraft/lists"}