Skill: wscffaa/hf-daily-papers-ofr (version 1.0.0)

# HF Daily Papers (OpenClaw Skill) — OFR 定制版 从 Hugging Face Daily Papers 热榜筛选 OFR 相关论文，按 6 大领域分类推送。 ## 领域分类 | 领域 | 关键词示例 | |------|----------| | 🎬 Restoration & Enhancement | restoration, denoising, super-resolution, scratch, flicker, colorization | | 🎞️ Video & Temporal | video, temporal, optical flow, frame interpolation, propagation | | ⚡ Efficient Architecture | efficient, pruning, quantization, distillation, real-time | | 🔭 Vision Backbone & Attention | transformer, attention, mamba, SSM, deformable, swin | | 🌊 Frequency & Wavelet | wavelet, frequency, fourier, FFT, DWT, subband | | 🎨 Diffusion & Generative Prior | diffusion, GAN, generative, flow matching, autoregressive | ## 输出 - Markdown: `recommendations/YYYY-MM-DD.md` - Telegram: `recommendations/YYYY-MM-DD.telegram.txt`（`--telegram` flag） ## CLI ```bash cd /workspace/openclaw/skills/hf-daily-papers python3 generator.py # 仅 Markdown python3 generator.py --telegram # Markdown + Telegram 格式 ``` ## 代理 默认使用 `http://127.0.0.1:7890`（Clash）。可通过环境变量覆盖： ```bash export HF_DAILY_PAPERS_PROXY=http://127.0.0.1:7897 ``` ## Cron 配置 - Job ID: [REDACTED_SECRET] - 时间: 每天 08:00 上海时间 - 推送: Telegram ## 来源 https://github.com/henry-y/openclaw-paper-tools

path: generator.py
content: #!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
HF Daily Papers Generator — OFR 定制版
生成 Markdown / Telegram 格式的论文推荐报告
6 个 OFR 相关领域关键词筛选
"""

import os
import re
import urllib.request
import json
import sys
from datetime import datetime

# Proxy: env var > default Clash
_proxy = os.environ.get('HF_DAILY_PAPERS_PROXY', 'http://127.0.0.1:7890')
if _proxy:
    os.environ['HTTP_PROXY'] = _proxy
    os.environ['HTTPS_PROXY'] = _proxy

# ── OFR 6 大领域关键词 ──────────────────────────────────────────
CATEGORIES = {
    '🎬 Restoration & Enhancement': [
        'restoration', 'restoring', 'denoising', 'denoise',
        'deblur', 'deblurring', 'super-resolution', 'super resolution',
        'inpainting', 'scratch', 'flicker', 'deflicker',
        'old film', 'film grain', 'degradation', 'artifact removal',
        'image enhancement', 'video enhancement', 'low-light',
        'color restoration', 'colorization', 'film restoration',
    ],
    '🎞️ Video & Temporal': [
        'video', 'temporal', 'optical flow', 'frame interpolation',
        'video generation', 'video editing', 'video inpainting',
        'temporal consistency', 'recurrent', 'propagation',
        'multi-frame', 'sequence', 'motion',
    ],
    '⚡ Efficient Architecture': [
        'efficient', 'lightweight', 'pruning', 'quantization',
        'distillation', 'mobile', 'fast', 'real-time',
        'computation', 'flops', 'memory efficient', 'sparse',
        'acceleration', 'compression',
    ],
    '🔭 Vision Backbone & Attention': [
        'transformer', 'attention', 'self-attention', 'cross-attention',
        'vision transformer', 'vit', 'swin', 'deformable',
        'convolution', 'cnn', 'backbone', 'encoder', 'decoder',
        'mamba', 'state space', 'ssm', 'linear attention',
    ],
    '🌊 Frequency & Wavelet': [
        'wavelet', 'frequency', 'fourier', 'fft', 'dct',
        'spectral', 'haar', 'dwt', 'idwt',
        'frequency domain', 'high-frequency', 'low-frequency',
        'band', 'subband',
    ],
    '🎨 Diffusion & Generative Prior': [
        'diffusion', 'generative', 'gan', 'generation',
        'text-to-image', 'text-to-video', 'stable diffusion',
        'score-based', 'flow matching', 'rectified flow',
        'autoregressive', 'prior', 'latent',
    ],
}


def fetch_hf_papers():
    """获取 HF Daily Papers"""
    print("📥 获取 HF Daily Papers...")
    try:
        req = urllib.request.Request(
            "https://huggingface.co/papers",
            headers={'User-Agent': 'Mozilla/5.0'}
        )
        with urllib.request.urlopen(req, timeout=30) as r:
            html = r.read().decode()
    except Exception as e:
        print(f"  ⚠️ HF 页面获取失败: {e}")
        return []

    paper_ids = list(set(re.findall(r'href="/papers/([0-9]+\.[0-9]+)"', html)))[:30]
    print(f"  找到 {len(paper_ids)} 篇 HF 论文 ID")

    papers = []
    for i, pid in enumerate(paper_ids):
        try:
            url = f"https://huggingface.co/api/papers/{pid}"
            req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'})
            with urllib.request.urlopen(req, timeout=10) as r:
                data = json.loads(r.read().decode())
                papers.append({
                    'pid': pid,
                    'title': data.get('title', 'N/A')[:120],
                    'upvotes': data.get('upvotes', 0),
                    'summary': data.get('summary', '')[:600].lower(),
                    'source': 'hf',
                    'url': f'https://huggingface.co/papers/{pid}',
                })
        except Exception:
            continue
        if (i + 1) % 10 == 0:
            print(f"  已处理 {i+1}/{len(paper_ids)}...")

    papers.sort(key=lambda x: x['upvotes'], reverse=True)
    return papers


def fetch_arxiv_papers(max_results=50):
    """获取 arXiv CS.CV 最新论文（补充 HF 热榜盲区）"""
    import xml.etree.ElementTree as ET

    print("📥 获取 arXiv CS.CV 最新论文...")
    url = (
        f'http://export.arxiv.org/api/query?'
        f'search_query=cat:cs.CV&sortBy=submittedDate'
        f'&sortOrder=descending&max_results={max_results}'
    )
    try:
        req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'})
        with urllib.request.urlopen(req, timeout=30) as r:
            xml_data = r.read().decode()
    except Exception as e:
        print(f"  ⚠️ arXiv 获取失败: {e}")
        return []

    ns = {
        'atom': 'http://www.w3.org/2005/Atom',
        'arxiv': 'http://arxiv.org/schemas/atom',
    }
    root = ET.fromstring(xml_data)
    entries = root.findall('atom:entry', ns)
    print(f"  找到 {len(entries)} 篇 arXiv 论文")

    papers = []
    for entry in entries:
        try:
            arxiv_id_raw = entry.find('atom:id', ns).text  # http://arxiv.org/abs/2602.22033v1
            pid = arxiv_id_raw.split('/')[-1].split('v')[0]  # 2602.22033
            title = entry.find('atom:title', ns).text.strip().replace('\n', ' ')[:120]
            summary = entry.find('atom:summary', ns).text.strip().replace('\n', ' ')[:600].lower()
            papers.append({
                'pid': pid,
                'title': title,
                'upvotes': 0,  # arXiv 没有 upvote
                'summary': summary,
                'source': 'arxiv',
                'url': f'https://arxiv.org/abs/{pid}',
            })
        except Exception:
            continue

    return papers


def fetch_papers():
    """合并 HF + arXiv 源，去重"""
    hf = fetch_hf_papers()
    arxiv = fetch_arxiv_papers(max_results=50)

    # 去重：以 pid 为准，HF 优先（有 upvotes）
    seen = {p['pid'] for p in hf}
    merged = list(hf)
    for p in arxiv:
        if p['pid'] not in seen:
            seen.add(p['pid'])
            merged.append(p)

    print(f"\n  合并: HF {len(hf)} + arXiv {len(arxiv)} → 去重后 {len(merged)}")
    # HF 论文按 upvotes 排在前面，arXiv 补充在后面
    merged.sort(key=lambda x: x['upvotes'], reverse=True)
    return merged


def classify_papers(papers):
    """按 6 个 OFR 领域分类（一篇可属多个领域）"""
    result = {cat: [] for cat in CATEGORIES}
    uncategorized = []

    for p in papers:
        text = (p['title'] + ' ' + p['summary']).lower()
        matched = False
        for cat, keywords in CATEGORIES.items():
            if any(kw in text for kw in keywords):
                result[cat].append(p)
                matched = True
        if not matched:
            uncategorized.append(p)

    return result, uncategorized


def generate_markdown(classified, uncategorized, output_dir, timestamp):
    """生成 Markdown 文件"""
    date_str = datetime.now().strftime('%Y-%m-%d')
    md_file = os.path.join(output_dir, f"{date_str}.md")

    lines = [f"# OFR 科研日报 — HF Daily Papers\n"]
    lines.append(f"**日期**: {date_str}  **生成时间**: {timestamp}\n")
    lines.append('---\n')

    total_relevant = sum(len(v) for v in classified.values())
    lines.append(f'> OFR 相关论文: **{total_relevant}** 篇（去重前）\n\n')

    for cat, papers in classified.items():
        if not papers:
            continue
        lines.append(f'## {cat} ({len(papers)} 篇)\n')
        for p in papers[:10]:
            src_tag = '🤗' if p.get('source') == 'hf' else '📄'
            up_str = f' ⬆️{p["upvotes"]}' if p['upvotes'] > 0 else ''
            lines.append(
                f'- {src_tag} [{p["title"]}]({p["url"]})'
                f'{up_str}\n'
            )
        lines.append('\n')

    if uncategorized:
        lines.append(f'## 📋 其他热门 ({len(uncategorized)} 篇)\n')
        for p in uncategorized[:5]:
            src_tag = '🤗' if p.get('source') == 'hf' else '📄'
            up_str = f' ⬆️{p["upvotes"]}' if p['upvotes'] > 0 else ''
            lines.append(
                f'- {src_tag} [{p["title"]}]({p["url"]})'
                f'{up_str}\n'
            )

    lines.append('\n---\n*Generated by OpenClaw HF Daily Papers Skill (OFR Edition)*\n')

    with open(md_file, 'w', encoding='utf-8') as f:
        f.writelines(lines)
    print(f"✅ Markdown: {md_file}")
    return md_file


def generate_telegram(classified, uncategorized, output_dir, timestamp):
    """生成 Telegram 格式文本"""
    date_str = datetime.now().strftime('%Y-%m-%d')
    tg_file = os.path.join(output_dir, f"{date_str}.telegram.txt")

    lines = [f"📰 OFR 科研日报 — {date_str}\n\n"]

    total_relevant = sum(len(v) for v in classified.values())
    if total_relevant == 0:
        lines.append("今日 HF 热榜暂无 OFR 相关论文。\n")
    else:
        for cat, papers in classified.items():
            if not papers:
                continue
            lines.append(f"{cat} ({len(papers)})\n")
            for p in papers[:5]:
                src_tag = '🤗' if p.get('source') == 'hf' else '📄'
                up_str = f' ⬆️{p["upvotes"]}' if p['upvotes'] > 0 else ''
                lines.append(
                    f"  {src_tag} {p['title']}\n"
                    f"    {up_str} {p['url']}\n"
                )
            lines.append('\n')

    if uncategorized:
        top3 = uncategorized[:3]
        lines.append(f"📋 其他热门\n")
        for p in top3:
            src_tag = '🤗' if p.get('source') == 'hf' else '📄'
            up_str = f' ⬆️{p["upvotes"]}' if p['upvotes'] > 0 else ''
            lines.append(
                f"  {src_tag} {p['title']}\n"
                f"    {up_str} {p['url']}\n"
            )

    with open(tg_file, 'w', encoding='utf-8') as f:
        f.writelines(lines)
    print(f"✅ Telegram: {tg_file}")
    return tg_file


def main():
    do_telegram = '--telegram' in sys.argv
    do_pdf = '--pdf' in sys.argv

    timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    output_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'recommendations')
    os.makedirs(output_dir, exist_ok=True)

    papers = fetch_papers()
    classified, uncategorized = classify_papers(papers)

    total_relevant = sum(len(v) for v in classified.values())
    print(f"\n📊 Total: {len(papers)} | OFR-related: {total_relevant} | Other: {len(uncategorized)}")
    for cat, ps in classified.items():
        if ps:
            print(f"  {cat}: {len(ps)}")

    # Always generate markdown
    generate_markdown(classified, uncategorized, output_dir, timestamp)

    # Telegram format
    if do_telegram:
        generate_telegram(classified, uncategorized, output_dir, timestamp)

    # PDF (optional)
    if do_pdf:
        try:
            from fpdf import FPDF
            # PDF generation omitted for brevity — use markdown instead
            print("⚠️ PDF generation not yet implemented in OFR edition. Use markdown.")
        except ImportError:
            print("⚠️ fpdf not installed. Run: pip3 install fpdf")


if __name__ == '__main__':
    main()


path: recommendations/2026-02-26.md
content: # OFR 科研日报 — HF Daily Papers
**日期**: 2026-02-26  **生成时间**: 2026-02-26 03:01:20
---
> OFR 相关论文: **75** 篇（去重前）

## 🎬 Restoration & Enhancement (6 篇)
- 📄 [RGB-Event HyperGraph Prompt for Kilometer Marker Recognition based on Pre-trained Foundation Models](https://arxiv.org/abs/2602.22026)
- 📄 [RobustVisRAG: Causality-Aware Vision-Based Retrieval-Augmented Generation under Visual Degradations](https://arxiv.org/abs/2602.22013)
- 📄 [PatchDenoiser: Parameter-efficient multi-scale patch learning and fusion denoiser for medical images](https://arxiv.org/abs/2602.21987)
- 📄 [Geometry-as-context: Modulating Explicit 3D in Scene-consistent Video Generation to Geometry Context](https://arxiv.org/abs/2602.21929)
- 📄 [Scan Clusters, Not Pixels: A Cluster-Centric Paradigm for Efficient Ultra-high-definition Image Restoration](https://arxiv.org/abs/2602.21917)
- 📄 [SkyReels-V4: Multi-modal Video-Audio Generation, Inpainting and Editing model](https://arxiv.org/abs/2602.21818)

## 🎞️ Video & Temporal (19 篇)
- 🤗 [JavisDiT++: Unified Modeling and Optimization for Joint Audio-Video Generation](https://huggingface.co/papers/2602.19163) ⬆️2
- 📄 [RGB-Event HyperGraph Prompt for Kilometer Marker Recognition based on Pre-trained Foundation Models](https://arxiv.org/abs/2602.22026)
- 📄 [PatchDenoiser: Parameter-efficient multi-scale patch learning and fusion denoiser for medical images](https://arxiv.org/abs/2602.21987)
- 📄 [Dream-SLAM: Dreaming the Unseen for Active SLAM in Dynamic Environments](https://arxiv.org/abs/2602.21967)
- 📄 [Global-Aware Edge Prioritization for Pose Graph Initialization](https://arxiv.org/abs/2602.21963)
- 📄 [Geometry-as-context: Modulating Explicit 3D in Scene-consistent Video Generation to Geometry Context](https://arxiv.org/abs/2602.21929)
- 📄 [Understanding Annotation Error Propagation and Learning an Adaptive Policy for Expert Intervention in Barrett's Video Se](https://arxiv.org/abs/2602.21855)
- 📄 [UniVBench: Towards Unified Evaluation for Video Foundation Models](https://arxiv.org/abs/2602.21835)
- 📄 [StoryMovie: A Dataset for Semantic Alignment of Visual Stories with Movie Scripts and Subtitles](https://arxiv.org/abs/2602.21829)
- 📄 [SemVideo: Reconstructs What You Watch from Brain Activity via Hierarchical Semantic Guidance](https://arxiv.org/abs/2602.21819)

## ⚡ Efficient Architecture (13 篇)
- 🤗 [World Guidance: World Modeling in Condition Space for Action Generation](https://huggingface.co/papers/2602.22010)
- 📄 [PatchDenoiser: Parameter-efficient multi-scale patch learning and fusion denoiser for medical images](https://arxiv.org/abs/2602.21987)
- 📄 [When LoRA Betrays: Backdooring Text-to-Image Models by Masquerading as Benign Adapters](https://arxiv.org/abs/2602.21977)
- 📄 [Dream-SLAM: Dreaming the Unseen for Active SLAM in Dynamic Environments](https://arxiv.org/abs/2602.21967)
- 📄 [Global-Aware Edge Prioritization for Pose Graph Initialization](https://arxiv.org/abs/2602.21963)
- 📄 [Mobile-Ready Automated Triage of Diabetic Retinopathy Using Digital Fundus Images](https://arxiv.org/abs/2602.21943)
- 📄 [Scan Clusters, Not Pixels: A Cluster-Centric Paradigm for Efficient Ultra-high-definition Image Restoration](https://arxiv.org/abs/2602.21917)
- 📄 [EndoDDC: Learning Sparse to Dense Reconstruction for Endoscopic Robotic Navigation via Diffusion Depth Completion](https://arxiv.org/abs/2602.21893)
- 📄 [DynamicGTR: Leveraging Graph Topology Representation Preferences to Boost VLM Capabilities on Graph QAs](https://arxiv.org/abs/2602.21864)
- 📄 [GeoMotion: Rethinking Motion Segmentation via Latent 4D Geometry](https://arxiv.org/abs/2602.21810)

## 🔭 Vision Backbone & Attention (17 篇)
- 📄 [RT-RMOT: A Dataset and Framework for RGB-Thermal Referring Multi-Object Tracking](https://arxiv.org/abs/2602.22033)
- 📄 [RobustVisRAG: Causality-Aware Vision-Based Retrieval-Augmented Generation under Visual Degradations](https://arxiv.org/abs/2602.22013)
- 📄 [PatchDenoiser: Parameter-efficient multi-scale patch learning and fusion denoiser for medical images](https://arxiv.org/abs/2602.21987)
- 📄 [Mobile-Ready Automated Triage of Diabetic Retinopathy Using Digital Fundus Images](https://arxiv.org/abs/2602.21943)
- 📄 [A Framework for Cross-Domain Generalization in Coronary Artery Calcium Scoring Across Gated and Non-Gated Computed Tomog](https://arxiv.org/abs/2602.21935)
- 📄 [Learning in the Null Space: Small Singular Values for Continual Learning](https://arxiv.org/abs/2602.21919)
- 📄 [Scan Clusters, Not Pixels: A Cluster-Centric Paradigm for Efficient Ultra-high-definition Image Restoration](https://arxiv.org/abs/2602.21917)
- 📄 [Protein Graph Neural Networks for Heterogeneous Cryo-EM Reconstruction](https://arxiv.org/abs/2602.21915)
- 📄 [SemVideo: Reconstructs What You Watch from Brain Activity via Hierarchical Semantic Guidance](https://arxiv.org/abs/2602.21819)
- 📄 [SkyReels-V4: Multi-modal Video-Audio Generation, Inpainting and Editing model](https://arxiv.org/abs/2602.21818)

## 🌊 Frequency & Wavelet (1 篇)
- 📄 [TIRAuxCloud: A Thermal Infrared Dataset for Day and Night Cloud Detection](https://arxiv.org/abs/2602.21905)

## 🎨 Diffusion & Generative Prior (19 篇)
- 🤗 [JavisDiT++: Unified Modeling and Optimization for Joint Audio-Video Generation](https://huggingface.co/papers/2602.19163) ⬆️2
- 🤗 [World Guidance: World Modeling in Condition Space for Action Generation](https://huggingface.co/papers/2602.22010)
- 📄 [RobustVisRAG: Causality-Aware Vision-Based Retrieval-Augmented Generation under Visual Degradations](https://arxiv.org/abs/2602.22013)
- 📄 [PatchDenoiser: Parameter-efficient multi-scale patch learning and fusion denoiser for medical images](https://arxiv.org/abs/2602.21987)
- 📄 [When LoRA Betrays: Backdooring Text-to-Image Models by Masquerading as Benign Adapters](https://arxiv.org/abs/2602.21977)
- 📄 [Global-Aware Edge Prioritization for Pose Graph Initialization](https://arxiv.org/abs/2602.21963)
- 📄 [Directed Ordinal Diffusion Regularization for Progression-Aware Diabetic Retinopathy Grading](https://arxiv.org/abs/2602.21942)
- 📄 [Geometry-as-context: Modulating Explicit 3D in Scene-consistent Video Generation to Geometry Context](https://arxiv.org/abs/2602.21929)
- 📄 [Protein Graph Neural Networks for Heterogeneous Cryo-EM Reconstruction](https://arxiv.org/abs/2602.21915)
- 📄 [EndoDDC: Learning Sparse to Dense Reconstruction for Endoscopic Robotic Navigation via Diffusion Depth Completion](https://arxiv.org/abs/2602.21893)

## 📋 其他热门 (11 篇)
- 📄 [PanoEnv: Exploring 3D Spatial Intelligence in Panoramic Environments with Reinforcement Learning](https://arxiv.org/abs/2602.21992)
- 📄 [Global-Local Dual Perception for MLLMs in High-Resolution Text-Rich Image Translation](https://arxiv.org/abs/2602.21956)
- 📄 [MindDriver: Introducing Progressive Multimodal Reasoning for Autonomous Driving](https://arxiv.org/abs/2602.21952)
- 📄 [Learning to Fuse and Reconstruct Multi-View Graphs for Diabetic Retinopathy Grading](https://arxiv.org/abs/2602.21944)
- 📄 [UNet-Based Keypoint Regression for 3D Cone Localization in Autonomous Racing](https://arxiv.org/abs/2602.21904)

---
*Generated by OpenClaw HF Daily Papers Skill (OFR Edition)*


path: recommendations/2026-02-26.telegram.txt
content: 📰 OFR 科研日报 — 2026-02-26

🎬 Restoration & Enhancement (6)
  📄 RGB-Event HyperGraph Prompt for Kilometer Marker Recognition based on Pre-trained Foundation Models
     https://arxiv.org/abs/2602.22026
  📄 RobustVisRAG: Causality-Aware Vision-Based Retrieval-Augmented Generation under Visual Degradations
     https://arxiv.org/abs/2602.22013
  📄 PatchDenoiser: Parameter-efficient multi-scale patch learning and fusion denoiser for medical images
     https://arxiv.org/abs/2602.21987
  📄 Geometry-as-context: Modulating Explicit 3D in Scene-consistent Video Generation to Geometry Context
     https://arxiv.org/abs/2602.21929
  📄 Scan Clusters, Not Pixels: A Cluster-Centric Paradigm for Efficient Ultra-high-definition Image Restoration
     https://arxiv.org/abs/2602.21917

🎞️ Video & Temporal (19)
  🤗 JavisDiT++: Unified Modeling and Optimization for Joint Audio-Video Generation
     ⬆️2 https://huggingface.co/papers/2602.19163
  📄 RGB-Event HyperGraph Prompt for Kilometer Marker Recognition based on Pre-trained Foundation Models
     https://arxiv.org/abs/2602.22026
  📄 PatchDenoiser: Parameter-efficient multi-scale patch learning and fusion denoiser for medical images
     https://arxiv.org/abs/2602.21987
  📄 Dream-SLAM: Dreaming the Unseen for Active SLAM in Dynamic Environments
     https://arxiv.org/abs/2602.21967
  📄 Global-Aware Edge Prioritization for Pose Graph Initialization
     https://arxiv.org/abs/2602.21963

⚡ Efficient Architecture (13)
  🤗 World Guidance: World Modeling in Condition Space for Action Generation
     https://huggingface.co/papers/2602.22010
  📄 PatchDenoiser: Parameter-efficient multi-scale patch learning and fusion denoiser for medical images
     https://arxiv.org/abs/2602.21987
  📄 When LoRA Betrays: Backdooring Text-to-Image Models by Masquerading as Benign Adapters
     https://arxiv.org/abs/2602.21977
  📄 Dream-SLAM: Dreaming the Unseen for Active SLAM in Dynamic Environments
     https://arxiv.org/abs/2602.21967
  📄 Global-Aware Edge Prioritization for Pose Graph Initialization
     https://arxiv.org/abs/2602.21963

🔭 Vision Backbone & Attention (17)
  📄 RT-RMOT: A Dataset and Framework for RGB-Thermal Referring Multi-Object Tracking
     https://arxiv.org/abs/2602.22033
  📄 RobustVisRAG: Causality-Aware Vision-Based Retrieval-Augmented Generation under Visual Degradations
     https://arxiv.org/abs/2602.22013
  📄 PatchDenoiser: Parameter-efficient multi-scale patch learning and fusion denoiser for medical images
     https://arxiv.org/abs/2602.21987
  📄 Mobile-Ready Automated Triage of Diabetic Retinopathy Using Digital Fundus Images
     https://arxiv.org/abs/2602.21943
  📄 A Framework for Cross-Domain Generalization in Coronary Artery Calcium Scoring Across Gated and Non-Gated Computed Tomog
     https://arxiv.org/abs/2602.21935

🌊 Frequency & Wavelet (1)
  📄 TIRAuxCloud: A Thermal Infrared Dataset for Day and Night Cloud Detection
     https://arxiv.org/abs/2602.21905

🎨 Diffusion & Generative Prior (19)
  🤗 JavisDiT++: Unified Modeling and Optimization for Joint Audio-Video Generation
     ⬆️2 https://huggingface.co/papers/2602.19163
  🤗 World Guidance: World Modeling in Condition Space for Action Generation
     https://huggingface.co/papers/2602.22010
  📄 RobustVisRAG: Causality-Aware Vision-Based Retrieval-Augmented Generation under Visual Degradations
     https://arxiv.org/abs/2602.22013
  📄 PatchDenoiser: Parameter-efficient multi-scale patch learning and fusion denoiser for medical images
     https://arxiv.org/abs/2602.21987
  📄 When LoRA Betrays: Backdooring Text-to-Image Models by Masquerading as Benign Adapters
     https://arxiv.org/abs/2602.21977

📋 其他热门
  📄 PanoEnv: Exploring 3D Spatial Intelligence in Panoramic Environments with Reinforcement Learning
     https://arxiv.org/abs/2602.21992
  📄 Global-Local Dual Perception for MLLMs in High-Resolution Text-Rich Image Translation
     https://arxiv.org/abs/2602.21956
  📄 MindDriver: Introducing Progressive Multimodal Reasoning for Autonomous Driving
     https://arxiv.org/abs/2602.21952


path: run_and_send.sh
content: #!/bin/bash
set -euo pipefail

# Generate today's HF papers markdown, then send a compact list via OpenClaw messaging.
#
# Required env:
#   TELEGRAM_TARGET   e.g. 6184653533 (user id) or @channelname
# Optional env:
#   OPENCLAW_BIN      default: openclaw
#   HF_DAILY_PAPERS_PROXY  e.g. http://127.0.0.1:7897

WORKDIR="$(cd "$(dirname "$0")" && pwd)"
OUTDIR="${WORKDIR}/recommendations"
DATE_STR="$(date +%Y-%m-%d)"
MD_FILE="${OUTDIR}/${DATE_STR}.md"

OPENCLAW_BIN="${OPENCLAW_BIN:-openclaw}"
TELEGRAM_TARGET="${TELEGRAM_TARGET:-}"

if [ -z "$TELEGRAM_TARGET" ]; then
  echo "Missing TELEGRAM_TARGET env" >&2
  exit 2
fi

cd "$WORKDIR"

# Generate markdown
/usr/bin/python3 "$WORKDIR/generator.py" >/dev/null

if [ ! -f "$MD_FILE" ]; then
  echo "Missing markdown output: $MD_FILE" >&2
  exit 1
fi

MSG=$(/usr/bin/python3 - <<'PY'
import re
from pathlib import Path
from datetime import datetime

md_path = Path(__file__).resolve().parent / "recommendations" / (datetime.now().strftime("%Y-%m-%d") + ".md")
text = md_path.read_text(encoding="utf-8")

sections = {"gen": [], "eff": []}
cur = None

for line in text.splitlines():
    if line.startswith("## 🎨"):
        cur = "gen"
    elif line.startswith("## ⚡"):
        cur = "eff"
    m = re.match(r"^### \[(\d+\.\d+)\]\(https://huggingface\.co/papers/\1\) - (.*)$", line)
    if m and cur:
        pid, title = m.group(1), m.group(2).strip()
        sections[cur].append((pid, title))

seen = set()

def fmt(items, max_n=10):
    out = []
    for pid, title in items:
        if pid in seen:
            continue
        seen.add(pid)
        title = re.sub(r"\s+", " ", title)
        if len(title) > 90:
            title = title[:87] + "..."
        out.append(f"- {pid} {title}\n  https://huggingface.co/papers/{pid}")
        if len(out) >= max_n:
            break
    return "\n".join(out)

date_str = datetime.now().strftime("%Y-%m-%d")
msg = (
    f"HF Daily Papers ({date_str})\n\n"
    f"Generation\n{fmt(sections['gen'], max_n=10) or '- (none)'}\n\n"
    f"Efficient\n{fmt(sections['eff'], max_n=10) or '- (none)'}\n\n"
    f"(auto)"
)
print(msg)
PY
)

"$OPENCLAW_BIN" message send --channel telegram --target "$TELEGRAM_TARGET" --message "$MSG" --silent >/dev/null


path: script.sh
content: #!/bin/bash

# Hugging Face Daily Papers - 自动生成 PDF 推荐报告
# 用法: ./script.sh [--pdf]

# Optional proxy: export HF_DAILY_PAPERS_PROXY if needed.
PROXY="${HF_DAILY_PAPERS_PROXY:-}"
GENERATE_PDF="false"

if [ "$1" = "--pdf" ]; then
    GENERATE_PDF="true"
fi

if [ -n "$PROXY" ]; then
    export HTTP_PROXY="$PROXY"
    export HTTPS_PROXY="$PROXY"
fi

echo "📥 获取 HF Daily Papers..."

# 获取页面
curl -sL "https://huggingface.co/papers" > /tmp/hf_papers.html 2>/dev/null

# 提取论文 ID
paper_ids=$(grep -oE 'href="/papers/[0-9]+\.[0-9]+' /tmp/hf_papers.html | sed 's|href="/papers/||' | sort -u | head -30)

# 获取论文详情
papers_data=$(mktemp)
echo "" > "$papers_data"

while IFS= read -r pid; do
    info=$(curl -s "https://huggingface.co/api/papers/$pid" 2>/dev/null)
    if [ -n "$info" ]; then
        title=$(echo "$info" | grep -oE '"title":"[^"]*"' | head -1 | sed 's/"title":"//g' | sed 's/"$//')
        upvotes=$(echo "$info" | grep -oE '"upvotes":[0-9]+' | grep -oE '[0-9]+')
        if [ -n "$title" ]; then
            echo "${pid}|${title}|${upvotes}" >> "$papers_data"
        fi
    fi
done <<< "$paper_ids"

# 按 upvotes 排序
sort -t'|' -k3 -nr "$papers_data" > "${papers_data}.sorted"
mv "${papers_data}.sorted" "$papers_data"

# 时间戳
output_dir="$(cd "$(dirname "$0")" && pwd)/recommendations"
mkdir -p "$output_dir"

echo ""
echo "✅ Markdown: $output_dir/$(date +%Y-%m-%d).md"

# 如果需要 PDF，调用 Python
if [ "$GENERATE_PDF" = "true" ]; then
    python3 "$output_dir/../generator.py" --pdf
fi

rm -f "$papers_data"


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)