#355 by GitHub stars
microsoft/ResearchStudio
ResearchStudio: Our AI co-author, from research problem to final publication.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
ResearchStudio-Idea/evaluation/idea_quality/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Instructions only → After Instructions only
063f10088af4 → 063f10088af4
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 063f10088af4
No earlier version was observed for comparison.
ResearchStudio-Idea/skills/idea_spark/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
063f10088af4 → 063f10088af4
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 063f10088af4
No earlier version was observed for comparison.
ResearchStudio-Idea/skills/paper_search/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
063f10088af4 → 063f10088af4
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 063f10088af4
No earlier version was observed for comparison.
ResearchStudio-Idea/skills/scoop_check/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
063f10088af4 → 063f10088af4
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 063f10088af4
No earlier version was observed for comparison.
ResearchStudio-Reel/skills/paper2assets/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
063f10088af4 → 063f10088af4
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 063f10088af4
No earlier version was observed for comparison.
ResearchStudio-Reel/skills/paper2blog/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Local scripts → After Network or broad shell
063f10088af4 → 063f10088af4
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → 063f10088af4
No earlier version was observed for comparison.
ResearchStudio-Reel/skills/paper2poster/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
063f10088af4 → 063f10088af4
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 063f10088af4
No earlier version was observed for comparison.
ResearchStudio-Reel/skills/paper2poster/html2pptx/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
063f10088af4 → 063f10088af4
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 063f10088af4
No earlier version was observed for comparison.
ResearchStudio-Reel/skills/paper2reel/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
063f10088af4 → 063f10088af4
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 063f10088af4
No earlier version was observed for comparison.
ResearchStudio-Reel/skills/paper2video/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
063f10088af4 → 063f10088af4
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 063f10088af4
No earlier version was observed for comparison.
Heat
6.3- Star growth, last 7 daysAhead of 92% of tracked repositories
- Star growth, last 24 hoursAhead of 90% of tracked repositories
- Rank movement, last 7 daysAhead of 60% of tracked repositories
- Commits, last 30 daysAhead of 0% of tracked repositories
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekAhead of 0% of tracked repositories
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
Individual skills in this repository
- idea-quality
ResearchStudio-Idea/evaluation/idea_quality - idea-spark
ResearchStudio-Idea/skills/idea_spark - paper-search
ResearchStudio-Idea/skills/paper_search - scoop-check
ResearchStudio-Idea/skills/scoop_check - paper2assets
ResearchStudio-Reel/skills/paper2assets - paper2blog
ResearchStudio-Reel/skills/paper2blog - paper2poster
ResearchStudio-Reel/skills/paper2poster - html2pptx
ResearchStudio-Reel/skills/paper2poster/html2pptx - paper2reel
ResearchStudio-Reel/skills/paper2reel - paper2video
ResearchStudio-Reel/skills/paper2video
How it works
idea-quality
When your agent uses it
Score the QUALITY of a research idea at the idea stage — given a Markdown file with Title / Motivation / Method sections (no experiments needed), produce a per-axis quality assessment with cited evidence and an overall 0–100 score plus a verdict; or, given two such idea files, a blind head-to-head comparison. TRIGGER when the user asks "how good is this idea", "rate / score / grade this research idea or proposal", "review my idea .md before I write it up", "is this contribution strong enough to pursue", "which of these two idea files is stronger", or hands over an idea Markdown file (Title/Motivation/Method) and wants a quality judgment. Use this even when the user does not say the word "score" but clearly wants an assessment of how strong an idea is. DO NOT trigger for prior-art / overlap / "is this novel vs existing work" checks (that is a literature-collision task), for full reviews of finished papers that already have results, or for generating the idea itself.
What it loads into context
Frontmatter
219 tokensAlways available to the agent
SKILL.md
2,378 tokensWhen the skill is activated
Reference documents
622 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Input: an idea Markdown file
- Scope: what this judges, and what it deliberately does not
- The three axes
- Scoring: dual-track
- Output format
- Anti-bias rules (why they matter)
Files
SKILL.mdcore10,142 bytesevals/evals.jsonasset2,601 bytesevals/sample_ideas/mismatch_gate.mddoc880 bytesevals/sample_ideas/strong_grpo.mddoc1,362 bytesevals/sample_ideas/weak_temperature.mddoc677 bytes
Read SKILL.md
# Idea Quality
Judge how strong a research idea is **at the idea stage** — before any experiments exist — and return a quality score with reasons a reviewer would recognize. This skill is self-contained: it judges from first principles on the three axes below. It consults no external corpus, dataset, or other skill, so its judgment is reproducible from the idea text alone.
## Input: an idea Markdown file
The idea is a `.md` file with three sections. Read the file, then map each section to what it feeds:
```markdown
# Title
<≤ ~15 words: the idea's handle>
## Motivation
<the bottleneck / gap the idea attacks, why it matters, and why it is still open>View the complete source on GitHubidea-spark
When your agent uses it
Generate ONE reviewer-defensible, implementable research idea with a concrete method and falsification plan from a stated research direction. Use when the user asks for a research idea, novelty analysis, bottleneck diagnosis, or paper-shape suggestion. Skip code review, debugging, and unconstrained brainstorming without research context.
What it loads into context
Frontmatter
80 tokensAlways available to the agent
SKILL.md
2,386 tokensWhen the skill is activated
Reference documents
136,170 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Driving a run
- Version-bound model work
- Contribution selection and revision
- Phase 4: source fidelity before explanatory prose
- Completion, failure and cost bounds
- Maintaining this skill
- Model/configuration compatibility
Scripts executed separately
scripts/_merge.pyscripts/_time_guard.pyscripts/dedup_merge.pyscripts/extract_user_refs.pyscripts/fetch_sections.pyscripts/gen_pipeline.pyscripts/intent.pyscripts/json_repair.pyscripts/lint_markdown_safety.pyscripts/merge_revisions.pyscripts/next_step.pyscripts/pattern_summary.pyscripts/phase4_skeleton.pyscripts/quality_cli.pyscripts/quality_contract.pyscripts/quality_flow.pyscripts/render_pdf.pyscripts/run.pyscripts/search_arxiv.pyscripts/search_openalex.pyscripts/search_openreview.pyscripts/search_semanticscholar.pyscripts/validators/__init__.pyscripts/validators/alias_collateral_coverage.pyscripts/validators/chinese_word_order.pyscripts/validators/expansion_completeness.pyscripts/validators/implementability_completeness.pyscripts/validators/implementability_readability.pyscripts/validators/kill_switch_integrity.pyscripts/validators/motivation_opener.pyscripts/validators/subpattern_citation_consistency.pyscripts/validators/threat_grounding.pyscripts/validators/user_direction.py
Files
SKILL.mdcore11,619 bytesSKILL.mdcore11,619 bytesSKILL.mdcore11,619 bytesSKILL.mdcore11,619 bytesSKILL.mdcore11,619 bytesSKILL.mdcore11,619 bytesSKILL.mdcore11,619 bytesreferences/anti-patterns.mddoc5,789 bytesreferences/design-notes.mddoc72,362 bytesreferences/host-runbook.mddoc19,567 bytesreferences/ideation-patterns/adapt_via_conditioning.mddoc13,442 bytesreferences/ideation-patterns/algebraic_equivalence_unification.mddoc12,905 bytesreferences/ideation-patterns/architectural_operator_substitution.mddoc13,456 bytesreferences/ideation-patterns/assumption_audit_and_pivot.mddoc13,046 bytesreferences/ideation-patterns/characterize_limit_then_surpass.mddoc11,325 bytesreferences/ideation-patterns/companion-combos.mddoc5,737 bytesreferences/ideation-patterns/controlled_diagnostic_design.mddoc12,147 bytesreferences/ideation-patterns/decompose_and_delegate.mddoc13,727 bytesreferences/ideation-patterns/generative_process_redesign.mddoc12,389 bytesreferences/ideation-patterns/heterogeneous_decomposition.mddoc14,539 bytesreferences/ideation-patterns/overview.mddoc13,284 bytesreferences/ideation-patterns/reframe_as_solvable_object.mddoc12,859 bytesreferences/ideation-patterns/relax_discrete_search_to_continuous.mddoc13,762 bytesreferences/ideation-patterns/self_supervised_signal_engineering.mddoc13,719 bytesreferences/ideation-patterns/structural_prior_encoding.mddoc14,397 bytesreferences/ideation-patterns/targeted_self_supervised_objective.mddoc11,294 bytesreferences/ideation-patterns/unify_into_shared_representation.mddoc14,709 bytesreferences/ideation-sub-patterns/C00.mddoc9,562 bytesreferences/ideation-sub-patterns/C01.mddoc8,931 bytesreferences/ideation-sub-patterns/C02.mddoc8,673 bytesreferences/ideation-sub-patterns/C03.mddoc8,602 bytesreferences/ideation-sub-patterns/C04.mddoc8,406 bytesreferences/ideation-sub-patterns/C05.mddoc9,612 bytesreferences/ideation-sub-patterns/C06.mddoc8,439 bytesreferences/ideation-sub-patterns/C07.mddoc9,632 bytesreferences/ideation-sub-patterns/C08.mddoc9,002 bytesreferences/ideation-sub-patterns/C09.mddoc8,485 bytesreferences/ideation-sub-patterns/C10.mddoc8,259 bytesreferences/ideation-sub-patterns/C11.mddoc9,686 bytesreferences/ideation-sub-patterns/C12.mddoc9,409 bytesreferences/ideation-sub-patterns/C13.mddoc9,020 bytesreferences/ideation-sub-patterns/C14.mddoc9,519 bytesreferences/ideation-sub-patterns/C15.mddoc9,267 bytesreferences/ideation-sub-patterns/C16.mddoc9,354 bytesreferences/ideation-sub-patterns/C17.mddoc8,079 bytesreferences/ideation-sub-patterns/C18.mddoc8,422 bytesreferences/ideation-sub-patterns/C19.mddoc9,872 bytesreferences/ideation-sub-patterns/C20.mddoc9,045 bytesreferences/ideation-sub-patterns/C21.mddoc8,904 bytesreferences/ideation-sub-patterns/C22.mddoc8,823 bytesreferences/ideation-sub-patterns/C23.mddoc8,809 bytesreferences/ideation-sub-patterns/C24.mddoc9,523 bytesreferences/ideation-sub-patterns/C25.mddoc8,369 bytesreferences/ideation-sub-patterns/C26.mddoc9,016 bytesreferences/ideation-sub-patterns/C27.mddoc8,492 bytesreferences/ideation-sub-patterns/C28.mddoc9,159 bytesreferences/ideation-sub-patterns/C29.mddoc9,316 bytesreferences/ideation-sub-patterns/C30.mddoc9,966 bytesreferences/ideation-sub-patterns/overview.mddoc3,044 bytesreferences/intake-routing.mddoc2,446 bytesreferences/intent-recognition.mddoc11,352 bytesreferences/pattern-summary-rubric.mddoc8,373 bytesreferences/quality-flow.mddoc30,478 bytesreferences/relevance-partition-rubric.mddoc3,214 bytesreferences/retrieval-runbook.mddoc12,083 bytesreferences/schemas.mddoc4,559 bytesreferences/setup.mddoc6,111 bytesreferences/source-routing.mddoc3,828 bytesreferences/system-prompts/bottleneck_identify.txtdoc29,213 bytesreferences/system-prompts/coherence_trace.txtdoc30,356 bytesreferences/system-prompts/critique.txtdoc22,943 bytesreferences/system-prompts/derive_plain.txtdoc11,827 bytesreferences/system-prompts/expand.txtdoc11,788 bytesreferences/system-prompts/fidelity_review.txtdoc1,666 bytesreferences/system-prompts/formula_repair.txtdoc5,136 bytesreferences/system-prompts/ideate_generate.txtdoc33,905 bytesreferences/system-prompts/ideate_select.txtdoc17,373 bytesreferences/system-prompts/implementability_audit.txtdoc8,731 bytesreferences/system-prompts/post_revision_audit.txtdoc4,550 bytesreferences/system-prompts/refutation_recheck.txtdoc3,627 bytesreferences/system-prompts/revise.txtdoc13,644 bytesreferences/system-prompts/technical_repair.txtdoc3,708 bytesreferences/system-prompts/technical_review.txtdoc2,955 bytesscripts/_merge.pyruns3,015 bytesscripts/_time_guard.pyruns3,402 bytesscripts/dedup_merge.pyruns3,510 bytesscripts/extract_user_refs.pyruns6,738 bytesscripts/fetch_sections.pyruns46,965 bytesscripts/gen_pipeline.pyruns6,747 bytesscripts/intent.pyruns4,349 bytesscripts/json_repair.pyruns3,451 bytesscripts/lint_markdown_safety.pyruns5,289 bytesscripts/merge_revisions.pyruns23,457 bytesscripts/next_step.pyruns26,539 bytesscripts/pattern_summary.pyruns8,856 bytesscripts/phase4_skeleton.pyruns38,476 bytesscripts/quality_cli.pyruns51,310 bytesscripts/quality_contract.pyruns55,098 bytesscripts/quality_flow.pyruns47,104 bytesscripts/render_pdf.pyruns48,564 bytesscripts/run.pyruns115,253 bytesscripts/schemas.mddoc4,998 bytesscripts/search_arxiv.pyruns8,802 bytesscripts/search_openalex.pyruns14,688 bytesscripts/search_openreview.pyruns9,715 bytesscripts/search_semanticscholar.pyruns9,485 bytesscripts/source-routing.mddoc3,828 bytesscripts/validators/__init__.pyruns5,534 bytesscripts/validators/alias_collateral_coverage.pyruns8,365 bytesscripts/validators/chinese_word_order.pyruns5,025 bytesscripts/validators/expansion_completeness.pyruns12,474 bytesscripts/validators/implementability_completeness.pyruns7,637 bytesscripts/validators/implementability_readability.pyruns4,007 bytesscripts/validators/kill_switch_integrity.pyruns13,117 bytesscripts/validators/motivation_opener.pyruns3,063 bytesscripts/validators/subpattern_citation_consistency.pyruns7,029 bytesscripts/validators/threat_grounding.pyruns4,482 bytesscripts/validators/user_direction.pyruns4,564 bytes
Read SKILL.md
# Idea Spark
Generate one literature-grounded research proposal with a concrete mechanism and honest
falsification plan. A completed proposal is NOT evidence that the method works, is novel,
or that a theorem is proved. Ordinary Chinese and English serve readers outside the subfield;
the detailed English card retains technical obligations and implementation choices.
One run is one fresh directory: `next` writes a `run_contract.json` into an empty directory and
drives only directories that carry one. A directory with files but no contract is refused, not resumed.
## Driving a run
Use an absolute skill path and a fresh absolute run directory. Naming convention remains
`$PWD/ideaspark_run/<topic-slug>`; if taken, append a numeric suffix. Never reuse phase0.View the complete source on GitHubpaper-search
When your agent uses it
Search papers across arXiv, DBLP, OpenAlex, OpenReview, Semantic Scholar, and Crossref for a given query and year range, using ./scripts/search_papers.py. Use when the user asks to find papers, related work, prior art, or recent publications on a specific topic, especially when they mention a date range or specific venues like NeurIPS, ICLR, or ICML.
What it loads into context
Frontmatter
90 tokensAlways available to the agent
SKILL.md
4,205 tokensWhen the skill is activated
Reference documents
354 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use
- Inputs (all auto-inferred — NEVER ask the user for confirmation or clarification)
- How to run
- Valid source names
- Output schema
- Output to the user
- Dependencies & failure modes
- Model knowledge source
- Example
- Important Notes
Scripts executed separately
scripts/_env.pyscripts/_http_runtime.pyscripts/postprocess.pyscripts/search_papers.pyscripts/search_papers_by_arxiv.pyscripts/search_papers_by_crossref.pyscripts/search_papers_by_dblp.pyscripts/search_papers_by_google_scholar.pyscripts/search_papers_by_open_alex.pyscripts/search_papers_by_openreview.pyscripts/search_papers_by_semantic_scholar.pyscripts/selftest_postprocess.pyscripts/selftest_runtime.pyscripts/source_worker.py
Files
SKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesSKILL.mdcore17,046 bytesreferences/programmatic_api.mddoc1,508 bytesscripts/_env.pyruns2,105 bytesscripts/_http_runtime.pyruns6,528 bytesscripts/postprocess.pyruns6,013 bytesscripts/search_papers.pyruns16,690 bytesscripts/search_papers_by_arxiv.pyruns6,077 bytesscripts/search_papers_by_crossref.pyruns3,840 bytesscripts/search_papers_by_dblp.pyruns4,521 bytesscripts/search_papers_by_google_scholar.pyruns3,192 bytesscripts/search_papers_by_open_alex.pyruns3,977 bytesscripts/search_papers_by_openreview.pyruns6,750 bytesscripts/search_papers_by_semantic_scholar.pyruns3,414 bytesscripts/selftest_postprocess.pyruns4,523 bytesscripts/selftest_runtime.pyruns17,292 bytesscripts/source_worker.pyruns3,499 bytes
Read SKILL.md
# Paper Search Skill
Unified paper search across **arXiv**, **DBLP**, **OpenAlex**, **OpenReview**
(NeurIPS / ICLR / ICML), **Semantic Scholar**, and **Crossref** using
`./scripts/search_papers.py`. All sources are searched **concurrently** (in
independent child processes) by default for maximum speed. Queries within one
source remain serial. Returns results grouped by source.
## When to use
Trigger this skill when the user asks things like:
- "Find papers on X published between 2023 and 2025."
- "Search NeurIPS / ICLR / ICML for work on X."View the complete source on GitHubscoop-check
When your agent uses it
Check whether a proposed research novelty (given a problem statement and claimed idea/novelty) overlaps with existing published work. TRIGGER when the user asks to verify research novelty, check if an idea is new, compare a proposed contribution to prior art, do a literature/prior-art search for a specific claim, or assess whether a paper idea has been scooped. DO NOT TRIGGER for general literature reviews unrelated to a specific novelty claim, or for writing related-work sections of an already-validated idea.
What it loads into context
Frontmatter
109 tokensAlways available to the agent
SKILL.md
4,619 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Inputs
- Procedure
- Report
- Important Notes
Scripts executed separately
scripts/fetch_paper.sh
Files
SKILL.mdcore20,829 bytesSKILL.mdcore20,829 bytesscripts/fetch_paper.shruns3,799 bytes
Read SKILL.md
# Scoop Check
Systematically verify whether a proposed research novelty overlaps with existing literature. The goal is to either (a) surface prior work that already covers the claim, or (b) produce a crisp, defensible "delta" statement that distinguishes the proposed contribution.
## Inputs
This skill requires exactly **two inputs** from the user:
1. **Research problem** — the specific issue, challenge, or gap in knowledge being addressed.
2. **Novelty** — the specific claimed contribution (new method, theorem, dataset, framing, or insight) that distinguishes this work from prior art.
If either input is missing, vague, or conflated (e.g., the "novelty" merely restates the problem), infer the most reasonable interpretation and proceed immediately. Do **not** use `AskUserQuestion` or pause for confirmation at any point — always proceed directly through every step.
## ProcedureView the complete source on GitHubpaper2assets
When your agent uses it
Extract a research paper PDF into a structured set of poster-agnostic assets reusable by any downstream renderer (paper2poster, paper2blog, paper2audio, paper2video). Produces a `<outdir>/` containing the paper's full text (assets/meta/text.txt), per-figure captions (assets/meta/captions.json), cleaned figure rasters (assets/figures/*.png + assets/meta/figures.json manifest), paper metadata (assets/meta/metadata.json: title / authors / institutes / venue / paper_url / code_url), institute logos (assets/logos/*), URL QR codes (assets/qr/*), and a 9-section structured paper summary (assets/meta/paper_spec.md). The bundle follows the Output Contract layout (deliverables at top, everything else under `assets/`). Use when the user wants to extract paper content into reusable assets, OR as the mandatory upstream stage of any paper-rendering pipeline — e.g., "extract this paper", "build paper assets", "get the figures and spec from this PDF", "paper2assets".
What it loads into context
Frontmatter
253 tokensAlways available to the agent
SKILL.md
15,604 tokensWhen the skill is activated
Reference documents
1,214 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Output Contract (the shared layout every paper2* skill follows)
- Output contract
- Workflow
- Final deliverable check
- Tools
- Key rules
Scripts executed separately
scripts/build_package.pyscripts/crop_figure.pyscripts/extract_pdf.pyscripts/fetch_conf_logo.pyscripts/fetch_logos.pyscripts/figure_semantics.pyscripts/make_qr.pyscripts/source_figures.pyscripts/utils/__init__.pyscripts/utils/layout.pyscripts/utils/logo_quality.pyscripts/utils/logo_trim.py
Files
README.mddoc5,098 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesSKILL.mdcore63,302 bytesscripts/build_package.pyruns23,461 bytesscripts/crop_figure.pyruns40,175 bytesscripts/extract_pdf.pyruns49,364 bytesscripts/fetch_conf_logo.pyruns10,170 bytesscripts/fetch_logos.pyruns54,992 bytesscripts/figure_semantics.pyruns32,844 bytesscripts/make_qr.pyruns12,107 bytesscripts/source_figures.pyruns25,701 bytesscripts/utils/__init__.pyruns0 bytesscripts/utils/layout.pyruns3,549 bytesscripts/utils/logo_quality.pyruns11,780 bytesscripts/utils/logo_trim.pyruns6,553 bytes
Read SKILL.md
# paper2assets — paper PDF → reusable assets
One paper PDF in, a single `<outdir>/` of poster-agnostic assets out, ready for any downstream renderer.
## Output Contract (the shared layout every paper2* skill follows)
paper2assets defines the on-disk shape of **every** deliverable bundle in the pipeline. paper2poster, html2pptx, paper2blog, paper2video, and paper2reel all read from and write to a bundle laid out this way — a teammate adding or changing a downstream skill conforms to this contract.
**Rules**
1. The bundle directory is named after the paper.
2. The bundle's **top level holds ONLY that skill's deliverable FILES** — no loose intermediates, and as few folders as possible.
3. **Every** dependency and intermediate (figures, logos, qr, audio, fonts, captions, slides, the spec / json / txt) lives under one **`assets/`** container.
**Layout**View the complete source on GitHubpaper2blog
When your agent uses it
Use when transforming an academic paper, arXiv/OpenReview PDF, conference paper, technical report, poster, slide deck, repository README, or related research materials into a bilingual editorial package for an editing team. Produces two articles by default — a Chinese WeChat public-account version (`blog_zh.docx`) and an English research-blog version (`blog_en.docx`). Use for drafting, revising, or packaging article copy, figure placement, captions, image prompts, and the final `.docx` deliverables.
What it loads into context
Frontmatter
113 tokensAlways available to the agent
SKILL.md
4,506 tokensWhen the skill is activated
Reference documents
7,798 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Purpose
- Output Contract
- Load References
- Workflow
- Default Article Shape
- Quality Bar
- Tools
Scripts executed separately
scripts/build_wechat_docx.pyscripts/check_blog_package.pyscripts/crop_figure.pyscripts/extract_pdf.py
Files
README.mddoc4,579 bytesSKILL.mdcore19,866 bytesSKILL.mdcore19,866 bytesSKILL.mdcore19,866 bytesSKILL.mdcore19,866 bytesSKILL.mdcore19,866 bytesSKILL.mdcore19,866 bytesSKILL.mdcore19,866 bytesSKILL.mdcore19,866 bytesSKILL.mdcore19,866 bytesSKILL.mdcore19,866 bytesSKILL.mdcore19,866 bytesSKILL.mdcore19,866 bytesagents/openai.yamlasset236 bytesreferences/case-study-acl2026.mddoc2,916 bytesreferences/editorial-style.mddoc6,897 bytesreferences/image-guidelines.mddoc8,797 bytesreferences/output-contract.mddoc6,465 bytesreferences/review-checklist.mddoc4,510 bytesrequirements.txtdoc291 bytesscripts/build_wechat_docx.pyruns12,843 bytesscripts/check_blog_package.pyruns39,460 bytesscripts/crop_figure.pyruns14,899 bytesscripts/extract_pdf.pyruns38,658 bytes
Read SKILL.md
# Bilingual Paper Editorial
## Purpose
Create an editorial package for an editing team from academic paper materials. By default the package has **two required deliverables**, both `.docx`:
- **`<blog_outdir>/blog_zh.docx`** — a Chinese WeChat public-account article.
- **`<blog_outdir>/blog_en.docx`** — an English research-blog article.
Both carry strong content logic, figure-text coordination, captions, and source links. They share **one** evidence map and **one** set of extracted/cropped figures — you do the paper analysis and figure prep once, then write the article twice, once per language. When a `paper2assets` package exists, use it as that shared source of truth so blog, poster, slides, and video agree on the same section claims, figures, numbers, and narration scripts. Visual polish is secondary because editors may re-layout the article.
The two versions are not a mirror translation of each other. They report the **same facts, figures, numbers, and claims**, but each is voiced for its own audience: the `_zh` version in the restrained, public-account WeChat register; the `_en` version in a neutral Western research-blog register (see `references/editorial-style.md`). Write each natively in its language rather than translating sentence-by-sentence.
The default reader is technically curious but not necessarily expert in the paper's subfield. Preserve academic accuracy while making the contribution understandable and worth reading.View the complete source on GitHubpaper2poster
When your agent uses it
Render a pre-extracted paper's structured 9-section spec (`paper_spec.md`) into a single-page HTML academic poster, fit the layout to the page via an iterative measured-fill loop, and export it to print-ready PDF + PNG thumbnail. Requires the upstream `paper2assets` skill to have produced an output bundle with `manifest.json` at the root and an `assets/` folder holding the paper metadata and media. Use when the user wants an HTML poster, PDF/PNG export, or PPTX from extracted paper assets, for example "render the poster", "make the poster from this spec", "export poster to PDF", or "paper2poster". The three skills paper2assets → paper2poster → html2pptx run in sequence, each invokable on its own.
What it loads into context
Frontmatter
195 tokensAlways available to the agent
SKILL.md
21,281 tokensWhen the skill is activated
Reference documents
38,284 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Mandatory finishing gates (NEVER ship outside these bands)
- When to consult which reference
- Workflow
- Tools
- Templates
- Content guidelines
- Edge cases
- Key rules
Scripts executed separately
assets/katex/auto-render.min.jsassets/katex/katex.min.jsassets/mathjax/tex-svg.jsreferences/apply_theme.pyreferences/build_poster.pyreferences/compose_poster.pyreferences/fit_logos.pyscripts/check_poster.pyscripts/generate_audio.pyscripts/render_poster.pyscripts/select_figures.pyscripts/utils/__init__.pyscripts/utils/autofit.pyscripts/utils/canvas.pyscripts/utils/cli_common.pyscripts/utils/column_pack.pyscripts/utils/deliverables.pyscripts/utils/figure_semantics.pyscripts/utils/font_fidelity.pyscripts/utils/polish.pyscripts/utils/preflight.pyscripts/utils/render.pyscripts/utils/slack.pyscripts/utils/textutil.pyscripts/utils/verify_final.py
Files
README.mddoc11,021 bytesSKILL.mdcore85,920 bytesSKILL.mdcore85,920 bytesSKILL.mdcore85,920 bytesSKILL.mdcore85,920 bytesSKILL.mdcore85,920 bytesSKILL.mdcore85,920 bytesSKILL.mdcore85,920 bytesSKILL.mdcore85,920 bytesSKILL.mdcore85,920 bytesSKILL.mdcore85,920 bytesSKILL.mdcore85,920 bytesSKILL.mdcore85,920 bytesSKILL.mdcore85,920 bytesSKILL.mdcore85,920 bytesSKILL.mdcore85,920 bytesSKILL.mdcore85,920 bytesSKILL.mdcore85,920 bytesSKILL.mdcore85,920 bytesSKILL.mdcore85,920 bytesSKILL.mdcore85,920 bytesSKILL.mdcore85,920 bytesSKILL.mdcore85,920 bytesSKILL.mdcore85,920 bytesSKILL.mdcore85,920 bytesassets/fonts/Arimo-Bold.ttfasset481,924 bytesassets/fonts/Arimo-LICENSE.txtdoc5,208 bytesassets/fonts/Arimo-Regular.ttfasset478,456 bytesassets/fonts/Inter-Bold.ttfasset415,072 bytesassets/fonts/Inter-Bold.woff2asset141,904 bytesassets/fonts/Inter-BoldItalic.ttfasset425,296 bytesassets/fonts/Inter-ExtraBold.ttfasset416,228 bytesassets/fonts/Inter-ExtraBold.woff2asset141,928 bytesassets/fonts/Inter-Italic.ttfasset417,388 bytesassets/fonts/Inter-Regular.ttfasset407,056 bytesassets/fonts/Inter-Regular.woff2asset138,020 bytesassets/fonts/Inter-SemiBold.ttfasset413,976 bytesassets/fonts/Inter-SemiBold.woff2asset141,528 bytesassets/headers/v1.htmlasset6,182 bytesassets/headers/v2.htmlasset5,211 bytesassets/headers/v3.htmlasset6,283 bytesassets/headers/v4.htmlasset6,831 bytesassets/headers/v5.htmlasset7,502 bytesassets/headers/v6.htmlasset1,613 bytesassets/headers/v7.htmlasset1,883 bytesassets/headers_portrait/pv1.htmlasset1,646 bytesassets/headers_portrait/pv2.htmlasset2,996 bytesassets/headers_portrait/pv3.htmlasset2,559 bytesassets/headers_portrait/pv4.htmlasset2,074 bytesassets/headers_portrait/pv5.htmlasset2,561 bytesassets/headers_portrait/pv6.htmlasset1,979 bytesassets/headers_portrait/pv7.htmlasset2,057 bytesassets/katex/LICENSEasset1,107 bytesassets/katex/auto-render.min.jsruns3,478 bytesassets/katex/fonts/KaTeX_AMS-Regular.woff2asset28,076 bytesassets/katex/fonts/KaTeX_Caligraphic-Bold.woff2asset6,912 bytesassets/katex/fonts/KaTeX_Caligraphic-Regular.woff2asset6,908 bytesassets/katex/fonts/KaTeX_Fraktur-Bold.woff2asset11,348 bytesassets/katex/fonts/KaTeX_Fraktur-Regular.woff2asset11,316 bytesassets/katex/fonts/KaTeX_Main-Bold.woff2asset25,324 bytesassets/katex/fonts/KaTeX_Main-BoldItalic.woff2asset16,780 bytesassets/katex/fonts/KaTeX_Main-Italic.woff2asset16,988 bytesassets/katex/fonts/KaTeX_Main-Regular.woff2asset26,272 bytesassets/katex/fonts/KaTeX_Math-BoldItalic.woff2asset16,400 bytesassets/katex/fonts/KaTeX_Math-Italic.woff2asset16,440 bytesassets/katex/fonts/KaTeX_SansSerif-Bold.woff2asset12,216 bytesassets/katex/fonts/KaTeX_SansSerif-Italic.woff2asset12,028 bytesassets/katex/fonts/KaTeX_SansSerif-Regular.woff2asset10,344 bytesassets/katex/fonts/KaTeX_Script-Regular.woff2asset9,644 bytesassets/katex/fonts/KaTeX_Size1-Regular.woff2asset5,468 bytesassets/katex/fonts/KaTeX_Size2-Regular.woff2asset5,208 bytesassets/katex/fonts/KaTeX_Size3-Regular.woff2asset3,624 bytesassets/katex/fonts/KaTeX_Size4-Regular.woff2asset4,928 bytesassets/katex/fonts/KaTeX_Typewriter-Regular.woff2asset13,568 bytesassets/katex/katex.min.cssasset23,196 bytesassets/katex/katex.min.jsruns277,038 bytesassets/layouts/3col.htmlasset93,349 bytesassets/layouts/full.htmlasset110,287 bytesassets/layouts/half.htmlasset94,050 bytesassets/layouts/methoddriven.htmlasset118,488 bytesassets/layouts/methoddriven4.htmlasset117,290 bytesassets/layouts_portrait/full.htmlasset114,975 bytesassets/layouts_portrait/half.htmlasset107,024 bytesassets/math/katex.htmlasset1,434 bytesassets/math/mathjax.htmlasset1,534 bytesassets/mathjax/LICENSEasset11,358 bytesassets/mathjax/VERSIONasset14 bytesassets/mathjax/tex-svg.jsruns2,108,580 bytesassets/scan/aside.htmlasset3,802 bytesassets/scan/banner.htmlasset3,763 bytesassets/scan/chips.htmlasset3,815 bytesassets/scan/contact.htmlasset3,400 bytesassets/scan/directory.htmlasset4,482 bytesassets/scan/hero.htmlasset3,128 bytesassets/scan/twin.htmlasset3,292 bytesassets/styles/double-rule.cssasset1,550 bytesassets/styles/elevated.cssasset755 bytesassets/styles/framed.cssasset3,024 bytesassets/styles/left-bar.cssasset673 bytesassets/styles/legend-frame.cssasset1,630 bytesassets/styles/neo-brutal.cssasset691 bytesassets/styles/simple.cssasset2,096 bytesassets/styles/solid.cssasset1,935 bytesassets/styles/tag.cssasset1,623 bytesassets/styles/tinted.cssasset680 bytesassets/styles/underline.cssasset674 bytesreferences/apply_theme.pyruns12,238 bytesreferences/audio_narration.mddoc3,788 bytesreferences/branding_free_headers.mddoc3,473 bytesreferences/build_poster.pyruns6,794 bytesreferences/compose_poster.pyruns33,090 bytesreferences/content_patterns.mddoc18,600 bytesreferences/fit_logos.pyruns40,468 bytesreferences/header_v3_prototype.htmlasset7,254 bytesreferences/staged_fill.mddoc68,194 bytesreferences/template_substitution.mddoc29,731 bytesreferences/visual_polish.mddoc18,078 bytesrequirements.txtdoc279 bytesscripts/check_poster.pyruns15,009 bytesscripts/generate_audio.pyruns7,137 bytesscripts/render_poster.pyruns148,413 bytesscripts/select_figures.pyruns3,879 bytesscripts/utils/__init__.pyruns0 bytesscripts/utils/autofit.pyruns14,856 bytesscripts/utils/canvas.pyruns7,375 bytesscripts/utils/cli_common.pyruns1,521 bytesscripts/utils/column_pack.pyruns6,692 bytesscripts/utils/deliverables.pyruns5,466 bytesscripts/utils/figure_semantics.pyruns25,042 bytesscripts/utils/font_fidelity.pyruns43,049 bytesscripts/utils/polish.pyruns59,816 bytesscripts/utils/preflight.pyruns27,806 bytesscripts/utils/render.pyruns17,439 bytesscripts/utils/slack.pyruns66,865 bytesscripts/utils/textutil.pyruns616 bytesscripts/utils/verify_final.pyruns5,605 bytes
Read SKILL.md
# paper2poster — paper_spec.md → HTML poster → PDF/PNG + editable PPTX
This skill is the **rendering stage** of a 3-skill pipeline. It assumes `paper2assets` has already produced the input `<outdir>/`. Given that outdir, it picks figures, renders an HTML poster, iteratively fills the layout to fit a fixed page (60×36in landscape or 33.1×46.8in A0 portrait), generates per-section narration audio, hands the HTML to the bundled **html2pptx** sub-skill (vendored at `html2pptx/`) for an editable `.pptx`, and exports PDF + PNG. The html2pptx handoff is a **standard final step**, not optional — one run yields `poster.{html,pptx,pdf,png}`, because users want the editable deck in the same pass and won't call html2pptx separately.
```
<outdir>/ (produced by paper2assets)
manifest.json assets/figures/ assets/logos/ assets/qr/ assets/meta/{paper_spec.md, text.txt, figures.json, metadata.json}
│
▼ Step 1 — verify prerequisites
▼ Step 2: select figures from upstream semantics
│ → assets/meta/figure_selection.json
│ (Method / high-confidence optional Motivation / Result)
▼ Step 2.5 — optional per-figure visual box cut (asymmetric noise the
│ paper2assets deterministic chain couldn't catch — mostView the complete source on GitHubhtml2pptx
When your agent uses it
Convert a rendered HTML page (especially A0 conference posters) into a native PowerPoint .pptx with editable text + native shapes — NOT a PNG-in-slide. Walks the live DOM via headless chromium, extracts BLOCK-level text containers (p/h1-h6/li/td) as TextBoxes with inline <strong>/<em> as mixed-style Runs, <img> as Picture with object-fit:contain respected (plus white-tile decoration under transparent-PNG logos), CSS ::before/::after generated content (e.g. 'So what →' callouts) as inherited-style runs, SVG via cairosvg rasterization, decorative <div>/<section> with bg/border/gradient/box-shadow as Rectangle/RoundedRect with matching fill (solid + linear-gradient + outer shadow). All CSS colors (including color-mix/oklab/color()) normalized via canvas. CSS hyphens:auto becomes OOXML soft hyphens via pyphen. CSS line-height absolute Pt for paragraph spacing. Native OOXML bullets with hanging indent. Optional Claude-vision fidelity auditor runs by default (toggle with `--no-vision-audit`); diffs HTML truth vs PPT render → structured 12-category issue report. Supports both direct API (`ANTHROPIC_AUTH_TOKEN`) and base-URL proxy (`ANTHROPIC_BASE_URL`) auth. Targets ~95% visual fidelity with web fonts installed. TRIGGER when user asks: 'HTML to PPT', 'poster to PowerPoint', 'editable PPT from HTML', 'pptx from html', '1:1 PPT clone', or wants an HTML render shipped as an editable .pptx for a non-developer collaborator.
What it loads into context
Frontmatter
350 tokensAlways available to the agent
SKILL.md
6,380 tokensWhen the skill is activated
Reference documents
7,056 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use
- When NOT to use
- Setup (one-time)
- Quick start — one command
- Font workflow
- Verifying output
- Architecture
- Capability table
- Scripts
- Why this beats pixel-based PDF→PPTX converters
- Gotchas
- Dependencies
- Roadmap
Scripts executed separately
__init__.pyscripts/__init__.pyscripts/auto_correct_loop.pyscripts/auto_fix_loop.pyscripts/font_embedder.pyscripts/font_resolver.pyscripts/html_to_pptx.pyscripts/vision_aggregate.pyscripts/vision_audit.pyscripts/vision_compare.pyscripts/vision_eval_harness.py
Files
.gitignoreasset105 bytesGOTCHAS.mddoc19,250 bytesREADME.mddoc2,953 bytesSKILL.mdcore24,454 bytesSKILL.mdcore24,454 bytesSKILL.mdcore24,454 bytesSKILL.mdcore24,454 bytesSKILL.mdcore24,454 bytesSKILL.mdcore24,454 bytesSKILL.mdcore24,454 bytesSKILL.mdcore24,454 bytesSKILL.mdcore24,454 bytes__init__.pyruns0 bytesdifference.mddoc6,320 bytesrequirements.txtdoc86 bytesscripts/__init__.pyruns0 bytesscripts/auto_correct_loop.pyruns16,631 bytesscripts/auto_fix_loop.pyruns16,047 bytesscripts/font_embedder.pyruns32,899 bytesscripts/font_resolver.pyruns14,698 bytesscripts/html_to_pptx.pyruns164,415 bytesscripts/vision_aggregate.pyruns3,524 bytesscripts/vision_audit.pyruns13,644 bytesscripts/vision_compare.pyruns13,238 bytesscripts/vision_eval_harness.pyruns3,893 bytes
Read SKILL.md
# html2pptx
Convert a rendered HTML page → native PowerPoint .pptx with **editable shapes** (not a PNG-in-slide).
## When to use
- "Convert this HTML poster to PPT."
- "I need an editable PowerPoint version of my HTML page."
- "1:1 PPT clone of poster.html — fonts/colors/layout."
- "Hand off the poster to a non-developer in PPT."
## When NOT to use
- Need a flat PNG slide → use `paper2poster/demo/presentation/posters.pptx`.View the complete source on GitHubpaper2reel
When your agent uses it
Build an interactive HTML viewer that aligns paper2poster output with slide/video deck frames through a sidecar content_alignment.json, without modifying the original poster, PPTX, or blog deliverables.
What it loads into context
Frontmatter
47 tokensAlways available to the agent
SKILL.md
4,153 tokensWhen the skill is activated
Reference documents
1,543 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Viewer UX Contract
- Inputs And Outputs
- Poster + Slides Base Viewer
- Timeline-Backed Section Media
- Required Hard Gate
- Output Manifest
- Bootstrap From PDF Or Incomplete Bundle
- Alignment Rules
Scripts executed separately
scripts/build_poster_slides_view.pyscripts/build_reel_from_paper.pyscripts/build_section_media_from_timeline.pyscripts/check_reel_package.pyscripts/reel_downloads.pyscripts/serve_reel.py
Files
README.mddoc6,515 bytesSKILL.mdcore17,501 bytesSKILL.mdcore17,501 bytesSKILL.mdcore17,501 bytesSKILL.mdcore17,501 bytesSKILL.mdcore17,501 bytesSKILL.mdcore17,501 bytesSKILL.mdcore17,501 bytesSKILL.mdcore17,501 bytesSKILL.mdcore17,501 bytesSKILL.mdcore17,501 bytesSKILL.mdcore17,501 bytesSKILL.mdcore17,501 bytesassets/reel-wordmark.pngasset15,440 bytesassets/section_modal_contract.jsonasset2,711 bytesscripts/build_poster_slides_view.pyruns114,480 bytesscripts/build_reel_from_paper.pyruns22,890 bytesscripts/build_section_media_from_timeline.pyruns21,532 bytesscripts/check_reel_package.pyruns139,572 bytesscripts/reel_downloads.pyruns32,640 bytesscripts/serve_reel.pyruns8,614 bytes
Read SKILL.md
# paper2reel - aligned artifact viewer
`paper2reel` builds a browsing layer over existing artifacts. It does
not replace or mutate `paper2poster`, `ppt-master`, `paper2blog`, or
`paper2video` outputs.
The key artifact is:
```text
content_alignment.json
```
It maps the canonical section ids from `paper2assets`'s `assets/meta/sections.json` to:
View the complete source on GitHubpaper2video
When your agent uses it
Turn a research paper, a paper2assets package, or an existing PPT deck into a narrated MP4 video by fully delegating slide authoring to the installed ppt-master skill and fully delegating rendering, subtitles, timeline assembly, and strict media QA to the installed pptx2video skill and its public CLI. Resolves one explicit animation-trigger decision (on-click or after-previous) and hands it to both child skills so the delivered PPTX and the delivered MP4 never disagree, then audits the final PPTX's native p:timing tree to prove the handoff held. Use when the user wants a paper turned into a video, wants /paper2video, or wants a narrated MP4 plus editable PPTX from a paper2assets bundle.
What it loads into context
Frontmatter
187 tokensAlways available to the agent
SKILL.md
6,731 tokensWhen the skill is activated
Reference documents
7,620 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Why full delegation is mandatory
- Two child skills, one shared trigger decision
- Paths
- Output Contract
- Step 1: Build or reuse the shared paper2assets package
- Step 2: Resolve the one shared `ppt_trigger` decision
- Step 3: Author the deck with ppt-master, passing the resolved trigger
- Step 4: Prepare narration and bootstrap the editable protocol
- Step 5: Render through pptx2video, passing the same resolved trigger
- Step 6: Audit the final PPTX against the resolved trigger (MANDATORY gate)
- Step 7: Report
- Acceptance criteria
- Key rules
- Tools
- References
Scripts executed separately
scripts/ppt_options_contract.pyscripts/ppt_stage_validator.py
Files
README.mddoc7,406 bytesSKILL.mdcore27,251 bytesSKILL.mdcore27,251 bytesSKILL.mdcore27,251 bytesSKILL.mdcore27,251 bytesSKILL.mdcore27,251 bytesSKILL.mdcore27,251 bytesSKILL.mdcore27,251 bytesSKILL.mdcore27,251 bytesSKILL.mdcore27,251 bytesSKILL.mdcore27,251 bytesSKILL.mdcore27,251 bytesSKILL.mdcore27,251 bytesSKILL.mdcore27,251 bytesSKILL.mdcore27,251 bytesSKILL.mdcore27,251 bytesSKILL.mdcore27,251 bytesSKILL.mdcore27,251 bytesreferences/ppt_trigger_handoff.mddoc9,233 bytesreferences/pptx2video.mddoc8,456 bytesreferences/script_json_schema.mddoc5,462 bytesscripts/ppt_options_contract.pyruns31,073 bytesscripts/ppt_stage_validator.pyruns19,638 bytes
Read SKILL.md
# paper2video - paper/assets -> ppt-master deck -> pptx2video render -> narrated MP4
`paper2video` is a thin orchestrator with exactly one supported path. It does
not author slides itself, does not synthesize audio itself, does not
composite video itself, and does not gate QA itself. It resolves inputs and
one shared trigger decision, then fully delegates:
```text
paper.pdf
-> skills/paper2assets/scripts/build_package.py (shared package)
-> assets/meta/paper_spec.md + assets/meta/narration.json
-> ppt_options_contract.py resolve-ppt-trigger (ONE trigger decision)
-> installed ppt-master skill (full workflow, receives the trigger)
-> installed pptx2video skill / CLI `bootstrap` then `render` (full workflow, receives the trigger)View the complete source on GitHubSkills included
- idea-quality
- idea-spark
- paper-search
- scoop-check
- paper2assets
- paper2blog
- paper2poster
- html2pptx
- paper2reel
- paper2video
Repository facts
- License
- MIT
- Created
- Apr 27, 2026
- Last pushed
- Sep 21, 2026
- Forks
- 203
- Open issues
- 1
- Project activity
- Active
Rank over the last 12 weeks
Now #355 · best #326 · down 17 in 30 days
- #349 on Oct 29
- #352 from Oct 30 to Oct 31
- #350 on Nov 1
- #351 on Nov 2
- #353 from Nov 3 to Nov 5
- #355 since Nov 6
77 earlier periods
- #356 on Aug 2
- #354 on Aug 7
- #353 on Aug 8
- #347 on Aug 9
- #358 on Aug 10
- #356 on Aug 11
- #345 on Aug 12
- #351 on Aug 13
- #346 on Aug 14
- #343 on Aug 15
- #346 on Aug 16
- #344 on Aug 17
- #347 from Aug 18 to Aug 19
- #343 on Aug 20
- #345 on Aug 21
- #340 on Aug 22
- #343 on Aug 23
- #346 on Aug 24
- #345 on Aug 25
- #344 on Aug 26
- #342 on Aug 27
- #345 on Aug 28
- #342 on Aug 29
- #336 on Aug 30
- #340 on Aug 31
- #345 on Sep 1
- #340 on Sep 2
- #344 on Sep 3
- #338 on Sep 4
- #340 on Sep 5
- #335 on Sep 6
- #342 on Sep 7
- #340 on Sep 8
- #341 on Sep 9
- #339 on Sep 10
- #336 on Sep 11
- #338 on Sep 12
- #334 on Sep 13
- #336 on Sep 14
- #338 on Sep 15
- #336 on Sep 16
- #333 on Sep 17
- #332 on Sep 18
- #327 on Sep 19
- #335 from Sep 20 to Sep 21
- #338 on Sep 22
- #332 on Sep 23
- #330 on Sep 24
- #329 on Sep 25
- #326 on Sep 26
- #334 from Sep 27 to Sep 28
- #340 on Sep 29
- #336 on Sep 30
- #335 on Oct 1
- #339 on Oct 2
- #333 on Oct 3
- #329 on Oct 4
- #336 on Oct 5
- #338 from Oct 6 to Oct 7
- #341 on Oct 8
- #339 on Oct 9
- #330 on Oct 10
- #329 on Oct 11
- #334 on Oct 12
- #330 on Oct 13
- #331 on Oct 14
- #328 on Oct 15
- #332 on Oct 16
- #327 on Oct 17
- #332 on Oct 18
- #333 on Oct 19
- #334 from Oct 20 to Oct 21
- #335 on Oct 22
- #333 on Oct 23
- #331 on Oct 24
- #340 on Oct 25
- #347 on Oct 28
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 2, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 149 notes
ResearchStudio-Idea/skills/idea_spark/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedResearchStudio-Idea/skills/idea_spark/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedResearchStudio-Idea/skills/idea_spark/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedResearchStudio-Idea/skills/idea_spark/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedResearchStudio-Idea/skills/idea_spark/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedResearchStudio-Idea/skills/idea_spark/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedResearchStudio-Idea/skills/paper_search/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedResearchStudio-Idea/skills/paper_search/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedResearchStudio-Idea/skills/paper_search/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedResearchStudio-Idea/skills/paper_search/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedResearchStudio-Idea/skills/paper_search/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedResearchStudio-Idea/skills/paper_search/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedResearchStudio-Idea/skills/paper_search/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedResearchStudio-Idea/skills/paper_search/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedResearchStudio-Idea/skills/paper_search/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedResearchStudio-Idea/skills/paper_search/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedResearchStudio-Idea/skills/paper_search/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedResearchStudio-Idea/skills/paper_search/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedResearchStudio-Idea/skills/paper_search/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedResearchStudio-Idea/skills/paper_search/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- 3 broad permissionsin 3 files: paper2assets/SKILL.md:1 paper2poster/SKILL.md:1 paper2video/SKILL.md:1
- 4 dangerous shell commandsin 4 files: idea_spark/references/setup.md:19 idea_spark/scripts/render_pdf.py:904 html2pptx/README.md:28 and 1 more
- 395 network referencesin 66 files: idea_spark/scripts/fetch_sections.py:113 paper2assets/scripts/fetch_logos.py:27 paper_search/scripts/selftest_runtime.py:111 and 63 more
- 7 obfuscation signalsin 6 files: html2pptx/scripts/html_to_pptx.py:1892 idea_spark/scripts/gen_pipeline.py:137 paper2poster/assets/katex/auto-render.min.js:1 and 3 more
- No instruction overrides
- 111 executable scriptsin 111 files: idea_spark/SKILL.md:1 idea_spark/scripts/_merge.py:1 idea_spark/scripts/_time_guard.py:1 and 108 more
- 148 references to secretsin 39 files: idea_spark/scripts/run.py:62 paper_search/scripts/selftest_runtime.py:63 paper_search/scripts/_env.py:1 and 36 more
- No requests to vote in Hot
Show all 668 signals by file
ResearchStudio-Idea/skills/idea_spark/SKILL.md
- Executable scriptline 1
Executable file
ResearchStudio-Idea/skills/idea_spark/references/host-runbook.md
- Network accessline 45
- [ ] Phase 0: Literature grounding → lit_table.md, then Phase 0+ full-text fetch (MANDATORY — Phase 1 hard-gates on it)
ResearchStudio-Idea/skills/idea_spark/references/retrieval-runbook.md
- Network accessline 7
Phase 0 and 3.1 require **real external retrieval** via the bundled connector scripts (`scripts/search_*.py`) — never WebSearch or ad-hoc fetch (downstream phases reject unstructured output). Gate sentinel: `.lit_grounding_mode` = `real` vs - Network accessline 27
**Phase 0+ full-text fetch — MANDATORY.** The instant `lit_table.md` lands (and after the coverage check), run `phase0_fulltext` (entry-point table) before touching Phase 1. Pool = U (user refs, never capped) + **H (host-recall refs, retrie
ResearchStudio-Idea/skills/idea_spark/references/setup.md
- Dangerous shell operationline 19
- **Optional deps (only if you want the extras):** PDF compilation of the idea card needs **xelatex** *or* **tectonic** (macOS `brew install --cask mactex-no-gui` or `brew install tectonic`; Ubuntu `sudo apt-get install texlive-xetex` or `c - Network accessline 25
| Key | Required for | How to get | |---|---|---| | `OPENREVIEW_USER` + `OPENREVIEW_PASS` | OpenReview connector at logged-in rate limits. Without them (or with rejected ones) the connector reads public submissions anonymously. | Free signu - Network accessline 26
|---|---|---| | `OPENREVIEW_USER` + `OPENREVIEW_PASS` | OpenReview connector at logged-in rate limits. Without them (or with rejected ones) the connector reads public submissions anonymously. | Free signup at https://openreview.net | | `SEM - Network accessline 27
| `OPENREVIEW_USER` + `OPENREVIEW_PASS` | OpenReview connector at logged-in rate limits. Without them (or with rejected ones) the connector reads public submissions anonymously. | Free signup at https://openreview.net | - Network accessline 28
[Credential-related source omitted] - Access to secretsline 28
[Credential-related source omitted] - Access to secretsline 29
[Credential-related source omitted]
ResearchStudio-Idea/skills/idea_spark/references/source-routing.md
- Access to secretsline 14
[Credential-related source omitted] - Network accessline 20
- **Strength**: CS-focused academic graph (~200M works), returns **TLDR auto-summary** (Allen-AI 1-sentence) and **`externalIds` block** with DOI + ArXiv ID + DBLP key + MAG ID + PMID — enabling cross-source dedup without title-only matchin - Network accessline 21
- **Use for**: peer-reviewed proceedings + journals (6-24mo). DBLP keys arrive via `externalIds`, so no standalone DBLP connector is needed. - **Auth**: `SEMANTICSCHOLAR_API_KEY` strongly recommended. Apply free at https://www.semanticschol - Network accessline 22
[Credential-related source omitted] - Access to secretsline 22
[Credential-related source omitted]
ResearchStudio-Idea/skills/idea_spark/scripts/_merge.py
- Executable scriptline 1
Executable file
ResearchStudio-Idea/skills/idea_spark/scripts/_time_guard.py
- Executable scriptline 1
Executable file
ResearchStudio-Idea/skills/idea_spark/scripts/dedup_merge.py
- Executable scriptline 1
Executable file
ResearchStudio-Idea/skills/idea_spark/scripts/extract_user_refs.py
- Executable scriptline 1
Executable file - Network accessline 3
Recognised formats (regex-based, no LLM call): - arxiv URL: https://arxiv.org/abs/2401.12345, arxiv.org/pdf/2401.12345v2.pdf, arxiv.org/html/2401.12345 - Network accessline 4
- arxiv URL: https://arxiv.org/abs/2401.12345, arxiv.org/pdf/2401.12345v2.pdf, arxiv.org/html/2401.12345
ResearchStudio-Idea/skills/idea_spark/scripts/fetch_sections.py
- Executable scriptline 1
Executable file - Network accessline 113
try: req = urllib.request.Request(url, headers={"User-Agent": "idea-spark/1.0"}) - Network accessline 114
req = urllib.request.Request(url, headers={"User-Agent": "idea-spark/1.0"}) - Network accessline 115
with urllib.request.urlopen(req, timeout=timeout) as resp: - Network accessline 131
base_id = arxiv_id.split("v")[0] url = f"https://arxiv.org/html/{base_id}" - Network accessline 132
url = f"https://arxiv.org/html/{base_id}" - Access to secretsline 292
[Credential-related source omitted] - Network accessline 294
for lookup in candidates: url = f"https://api.semanticscholar.org/graph/v1/paper/{urllib.parse.quote(lookup, safe=':/')}?fields=externalIds" - Network accessline 295
url = f"https://api.semanticscholar.org/graph/v1/paper/{urllib.parse.quote(lookup, safe=':/')}?fields=externalIds" - Network accessline 300
time.sleep(_SS_MIN_INTERVAL_SEC - since_last) try: req = urllib.request.Request(url, headers={"User-Agent": "idea-spark/1.0"}) - Network accessline 301
[Credential-related source omitted] - Network accessline 302
req = urllib.request.Request(url, headers={"User-Agent": "idea-spark/1.0"}) - Network accessline 303
[Credential-related source omitted] - Access to secretsline 303
[Credential-related source omitted] - Network accessline 304
[Credential-related source omitted] - Access to secretsline 304
[Credential-related source omitted] - Network accessline 305
with urllib.request.urlopen(req, timeout=15) as r: - Network accessline 333
[Credential-related source omitted] - Network accessline 334
[Credential-related source omitted] - Access to secretsline 334
[Credential-related source omitted] - Network accessline 335
url = (f"https://api.semanticscholar.org/graph/v1/paper/" f"{urllib.parse.quote(f'DOI:{doi}', safe=':/')}?fields=openAccessPdf") for attempt in range(2): - Network accessline 340
time.sleep(_SS_MIN_INTERVAL_SEC - since_last) try: req = urllib.request.Request(url, headers={"User-Agent": "idea-spark/1.0"}) - Network accessline 341
[Credential-related source omitted] - Network accessline 342
req = urllib.request.Request(url, headers={"User-Agent": "idea-spark/1.0"}) - Network accessline 343
[Credential-related source omitted] - Access to secretsline 343
[Credential-related source omitted] - Network accessline 344
[Credential-related source omitted] - Access to secretsline 344
[Credential-related source omitted] - Network accessline 345
with urllib.request.urlopen(req, timeout=15) as r: - Access to secretsline 417
[Credential-related source omitted] - Network accessline 511
pdf_candidates: list[tuple[str, str]] = [] # (source_label, url) if arxiv_id: pdf_candidates.append(("arxiv", f"https://arxiv.org/pdf/{arxiv_id}")) - Network accessline 512
if arxiv_id: pdf_candidates.append(("arxiv", f"https://arxiv.org/pdf/{arxiv_id}")) ss_pdf = paper_meta.get("openAccessPdf") or {} - Network accessline 513
pdf_candidates.append(("arxiv", f"https://arxiv.org/pdf/{arxiv_id}")) - Network accessline 517
# ACL Anthology DOI -> free PDF. ACL / EMNLP / NAACL / *findings* papers are open even when # the connector only surfaced a landing-page URL, so derive the anthology PDF from the DOI: # 10.18653/[vN/]<id> -> https://aclanthology.o - Network accessline 519
# 10.18653/[vN/]<id> -> https://aclanthology.org/<id>.pdf - Network accessline 520
acl_m = re.match(r"^10\.18653/(?:v\d+/)?(.+)$", (paper_meta.get("doi") or "").strip(), re.I) if acl_m: pdf_candidates.append(("acl", f"https://aclanthology.org/{acl_m.group(1)}.pdf")) - Network accessline 521
if acl_m: pdf_candidates.append(("acl", f"https://aclanthology.org/{acl_m.group(1)}.pdf")) if or_id: - Network accessline 522
pdf_candidates.append(("acl", f"https://aclanthology.org/{acl_m.group(1)}.pdf")) - Network accessline 525
pdf_candidates.append(("or", f"https://openreview.net/pdf?id={or_id}"))
ResearchStudio-Idea/skills/idea_spark/scripts/gen_pipeline.py
- Executable scriptline 1
Executable file - Access to secretsline 94
[Credential-related source omitted] - Network accessline 97
token_provider = get_bearer_token_provider( DefaultAzureCredential(managed_identity_client_id=identity_id), "https://cognitiveservices.azure.com/.default", - Network accessline 98
DefaultAzureCredential(managed_identity_client_id=identity_id), "https://cognitiveservices.azure.com/.default", ) - Network accessline 99
"https://cognitiveservices.azure.com/.default", - Access to secretsline 106
[Credential-related source omitted] - Possible obfuscationline 137
image_bytes = base64.b64decode(image_b64)
ResearchStudio-Idea/skills/idea_spark/scripts/intent.py
ResearchStudio-Idea/skills/idea_spark/scripts/json_repair.py
- Executable scriptline 1
Executable file
ResearchStudio-Idea/skills/idea_spark/scripts/lint_markdown_safety.py
- Executable scriptline 1
Executable file
ResearchStudio-Idea/skills/idea_spark/scripts/merge_revisions.py
- Executable scriptline 1
Executable file
ResearchStudio-Idea/skills/idea_spark/scripts/next_step.py
ResearchStudio-Idea/skills/idea_spark/scripts/pattern_summary.py
ResearchStudio-Idea/skills/idea_spark/scripts/phase4_skeleton.py
- Executable scriptline 1
Executable file
ResearchStudio-Idea/skills/idea_spark/scripts/quality_cli.py
- Executable scriptline 1
Executable file - Network accessline 42
raw = [b for b in co.get('unrepaired', []) if b.get('severity') == 'blocking'] nc = (co.get('trace_report') or {}).get('naive_comparison') or {} - Network accessline 43
nc = (co.get('trace_report') or {}).get('naive_comparison') or {} - Access to secretsline 550
[Credential-related source omitted]
ResearchStudio-Idea/skills/idea_spark/scripts/quality_contract.py
- Executable scriptline 1
Executable file - Access to secretsline 78
[Credential-related source omitted] - Network accessline 467
else: out.append(finding(label + '_structural_anomaly', str(a.get('anomaly', ''))[:160], 'warn')) nc = trace.get('naive_comparison') or {} - Network accessline 468
out.append(finding(label + '_structural_anomaly', str(a.get('anomaly', ''))[:160], 'warn')) nc = trace.get('naive_comparison') or {} if nc.get('verdict') == 'equivalent_to_naive': - Network accessline 469
nc = trace.get('naive_comparison') or {}
ResearchStudio-Idea/skills/idea_spark/scripts/quality_flow.py
ResearchStudio-Idea/skills/idea_spark/scripts/render_pdf.py
- Executable scriptline 1
Executable file - Access to secretsline 838
[Credential-related source omitted] - Dangerous shell operationline 904
f' Ubuntu: sudo apt-get install texlive-xetex (or: cargo install tectonic)\n', - Access to secretsline 988
[Credential-related source omitted] - Access to secretsline 989
[Credential-related source omitted]
ResearchStudio-Idea/skills/idea_spark/scripts/run.py
- Executable scriptline 1
Executable file - Access to secretsline 62
[Credential-related source omitted] - Access to secretsline 63
[Credential-related source omitted] - Access to secretsline 85
[Credential-related source omitted] - Access to secretsline 87
[Credential-related source omitted] - Access to secretsline 89
[Credential-related source omitted] - Access to secretsline 93
[Credential-related source omitted] - Access to secretsline 98
[Credential-related source omitted] - Access to secretsline 108
[Credential-related source omitted] - Access to secretsline 109
[Credential-related source omitted] - Access to secretsline 111
[Credential-related source omitted] - Access to secretsline 222
[Credential-related source omitted] - Access to secretsline 223
[Credential-related source omitted] - Access to secretsline 266
[Credential-related source omitted] - Access to secretsline 332
[Credential-related source omitted] - Access to secretsline 446
[Credential-related source omitted] - Access to secretsline 450
[Credential-related source omitted] - Access to secretsline 641
[Credential-related source omitted] - Access to secretsline 792
[Credential-related source omitted] - Access to secretsline 960
[Credential-related source omitted]
ResearchStudio-Idea/skills/idea_spark/scripts/search_arxiv.py
- Executable scriptline 1
Executable file - Network accessline 27
# https (not http): http://export.arxiv.org 301-redirects to https, wasting a round-trip - Network accessline 29
ARXIV_API = 'https://export.arxiv.org/api/query' - Network accessline 31
USER_AGENT = 'research-studio-idea/1.0 (+https://arxiv.org/help/api)' - Network accessline 32
[Credential-related source omitted] - Access to secretsline 32
[Credential-related source omitted] - Network accessline 33
MAX_RETRIES = 4 # on 429, back off and retry this many times before giving up NS = {'atom': 'http://www.w3.org/2005/Atom', 'arxiv': 'http://arxiv.org/schemas/atom'} - Network accessline 34
NS = {'atom': 'http://www.w3.org/2005/Atom', - Network accessline 35
'arxiv': 'http://arxiv.org/schemas/atom'} - Network accessline 82
for attempt in range(MAX_RETRIES + 1): _throttle() req = urllib.request.Request(url, headers={'User-Agent': USER_AGENT}) - Network accessline 83
_throttle() req = urllib.request.Request(url, headers={'User-Agent': USER_AGENT}) try: - Network accessline 84
req = urllib.request.Request(url, headers={'User-Agent': USER_AGENT}) - Network accessline 85
try: with urllib.request.urlopen(req, timeout=30) as r: return r.read() - Network accessline 86
with urllib.request.urlopen(req, timeout=30) as r: - Network accessline 137
'source_id': arxiv_id, 'doi': '', 'paper_url': f'https://arxiv.org/abs/{arxiv_id}', - Network accessline 138
'doi': '', 'paper_url': f'https://arxiv.org/abs/{arxiv_id}', 'published_iso': published, - Network accessline 139
'paper_url': f'https://arxiv.org/abs/{arxiv_id}',
ResearchStudio-Idea/skills/idea_spark/scripts/search_openalex.py
- Executable scriptline 1
Executable file - Access to secretsline 6
[Credential-related source omitted] - Network accessline 23
API = 'https://api.openalex.org/works' - Access to secretsline 43
[Credential-related source omitted] - Access to secretsline 47
[Credential-related source omitted] - Access to secretsline 50
[Credential-related source omitted] - Access to secretsline 53
[Credential-related source omitted] - Network accessline 54
[Credential-related source omitted] - Access to secretsline 54
[Credential-related source omitted] - Network accessline 55
url = f'{API}?{urllib.parse.urlencode(q)}' req = urllib.request.Request(url, headers={'User-Agent': 'idea-spark/1.0'}) try: - Network accessline 56
req = urllib.request.Request(url, headers={'User-Agent': 'idea-spark/1.0'}) - Network accessline 57
try: with urllib.request.urlopen(req, timeout=timeout) as r: return json.loads(r.read()) - Network accessline 58
with urllib.request.urlopen(req, timeout=timeout) as r: - Access to secretsline 61
[Credential-related source omitted] - Network accessline 90
# Normalize: "https://arxiv.org/abs/2412.14171" → "2412.14171" - Network accessline 108
'source': 'openalex', 'source_id': work.get('id', '').split('/')[-1], 'doi': (work.get('doi') or '').replace('https://doi.org/', ''), - Network accessline 109
'source_id': work.get('id', '').split('/')[-1], 'doi': (work.get('doi') or '').replace('https://doi.org/', ''), 'arxiv_id': arxiv_id or None, - Network accessline 110
'doi': (work.get('doi') or '').replace('https://doi.org/', ''),
ResearchStudio-Idea/skills/idea_spark/scripts/search_openreview.py
- Executable scriptline 1
Executable file - Access to secretsline 38
[Credential-related source omitted] - Network accessline 39
[Credential-related source omitted] - Network accessline 40
[Credential-related source omitted] - Network accessline 41
[Credential-related source omitted] - Network accessline 42
except Exception as e: print(f' openreview: login rejected ({str(e)[:80]}); continuing anonymously', file=sys.stderr) return openreview.api.OpenReviewClient(baseurl='https://api2.openreview.net') - Network accessline 44
return openreview.api.OpenReviewClient(baseurl='https://api2.openreview.net') - Network accessline 138
'source_id': n.id, 'doi': '', 'paper_url': f'https://openreview.net/forum?id={n.id}', - Network accessline 139
'doi': '', 'paper_url': f'https://openreview.net/forum?id={n.id}', 'published_iso': '', - Network accessline 140
'paper_url': f'https://openreview.net/forum?id={n.id}',
ResearchStudio-Idea/skills/idea_spark/scripts/search_semanticscholar.py
- Executable scriptline 1
Executable file - Access to secretsline 11
[Credential-related source omitted] - Network accessline 32
API = 'https://api.semanticscholar.org/graph/v1/paper/search' - Network accessline 77
headers = {k: v for k, v in headers.items() if k != 'x-api-key'} for attempt in range(len(_BACKOFF_S) + 1): req = urllib.request.Request(url, headers=headers) - Network accessline 78
for attempt in range(len(_BACKOFF_S) + 1): req = urllib.request.Request(url, headers=headers) try: - Network accessline 79
req = urllib.request.Request(url, headers=headers) - Network accessline 80
try: with urllib.request.urlopen(req, timeout=45) as r: return json.loads(r.read()) - Network accessline 81
with urllib.request.urlopen(req, timeout=45) as r: - Access to secretsline 106
[Credential-related source omitted] - Access to secretsline 121
[Credential-related source omitted] - Access to secretsline 122
[Credential-related source omitted] - Network accessline 154
'arxiv_id': ext.get('ArXiv', ''), 'dblp_key': ext.get('DBLP', ''), 'paper_url': oa.get('url', '') or f'https://www.semanticscholar.org/paper/{paper.get("paperId","")}', - Network accessline 155
'dblp_key': ext.get('DBLP', ''), 'paper_url': oa.get('url', '') or f'https://www.semanticscholar.org/paper/{paper.get("paperId","")}', 'published_iso': paper.get('publicationDate', ''), - Network accessline 156
'paper_url': oa.get('url', '') or f'https://www.semanticscholar.org/paper/{paper.get("paperId","")}', - Access to secretsline 198
[Credential-related source omitted]
ResearchStudio-Idea/skills/idea_spark/scripts/source-routing.md
- Access to secretsline 14
[Credential-related source omitted] - Network accessline 20
- **Strength**: CS-focused academic graph (~200M works), returns **TLDR auto-summary** (Allen-AI 1-sentence) and **`externalIds` block** with DOI + ArXiv ID + DBLP key + MAG ID + PMID — enabling cross-source dedup without title-only matchin - Network accessline 21
- **Use for**: peer-reviewed proceedings + journals (6-24mo). DBLP keys arrive via `externalIds`, so no standalone DBLP connector is needed. - **Auth**: `SEMANTICSCHOLAR_API_KEY` strongly recommended. Apply free at https://www.semanticschol - Network accessline 22
[Credential-related source omitted] - Access to secretsline 22
[Credential-related source omitted]
ResearchStudio-Idea/skills/idea_spark/scripts/validators/__init__.py
- Executable scriptline 1
Executable file
ResearchStudio-Idea/skills/idea_spark/scripts/validators/alias_collateral_coverage.py
- Executable scriptline 1
Executable file
ResearchStudio-Idea/skills/idea_spark/scripts/validators/chinese_word_order.py
- Executable scriptline 1
Executable file
ResearchStudio-Idea/skills/idea_spark/scripts/validators/expansion_completeness.py
- Executable scriptline 1
Executable file
ResearchStudio-Idea/skills/idea_spark/scripts/validators/implementability_completeness.py
- Executable scriptline 1
Executable file
ResearchStudio-Idea/skills/idea_spark/scripts/validators/implementability_readability.py
- Executable scriptline 1
Executable file
ResearchStudio-Idea/skills/idea_spark/scripts/validators/kill_switch_integrity.py
- Executable scriptline 1
Executable file
ResearchStudio-Idea/skills/idea_spark/scripts/validators/motivation_opener.py
- Executable scriptline 1
Executable file
ResearchStudio-Idea/skills/idea_spark/scripts/validators/subpattern_citation_consistency.py
- Executable scriptline 1
Executable file
ResearchStudio-Idea/skills/idea_spark/scripts/validators/threat_grounding.py
- Executable scriptline 1
Executable file
ResearchStudio-Idea/skills/idea_spark/scripts/validators/user_direction.py
- Executable scriptline 1
Executable file
ResearchStudio-Idea/skills/paper_search/SKILL.md
- Executable scriptline 1
Executable file - Network accessline 357
| # | Title | Year | Venue | Notes | |-----|-------------|------|---------|-------| | [1](https://scholar.google.com/scholar?q=Title) | Title here | 2018 | NeurIPS | Foundational; often cited by recent work on X | - Network accessline 358
|-----|-------------|------|---------|-------| | [1](https://scholar.google.com/scholar?q=Title) | Title here | 2018 | NeurIPS | Foundational; often cited by recent work on X | | [2](...) | Title here | 2024 | ICLR | (uncertain — verify) | - Network accessline 359
| [1](https://scholar.google.com/scholar?q=Title) | Title here | 2018 | NeurIPS | Foundational; often cited by recent work on X |
ResearchStudio-Idea/skills/paper_search/scripts/_env.py
- Executable scriptline 1
[Credential-related source omitted] - Access to secretsline 1
[Credential-related source omitted] - Access to secretsline 3
[Credential-related source omitted] - Access to secretsline 6
[Credential-related source omitted] - Access to secretsline 10
[Credential-related source omitted] - Access to secretsline 11
[Credential-related source omitted] - Access to secretsline 30
[Credential-related source omitted] - Access to secretsline 31
[Credential-related source omitted] - Access to secretsline 35
[Credential-related source omitted] - Access to secretsline 45
[Credential-related source omitted] - Access to secretsline 50
[Credential-related source omitted]
ResearchStudio-Idea/skills/paper_search/scripts/_http_runtime.py
ResearchStudio-Idea/skills/paper_search/scripts/postprocess.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 39
def norm_doi(d) -> str: d = (d or "").strip().lower() for prefix in ("https://doi.org/", "http://doi.org/", "doi.org/", "doi:"): - Network accessline 40
d = (d or "").strip().lower() for prefix in ("https://doi.org/", "http://doi.org/", "doi.org/", "doi:"): if d.startswith(prefix): - Network accessline 41
for prefix in ("https://doi.org/", "http://doi.org/", "doi.org/", "doi:"):
ResearchStudio-Idea/skills/paper_search/scripts/search_papers.py
ResearchStudio-Idea/skills/paper_search/scripts/search_papers_by_arxiv.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 20
[Credential-related source omitted] - Network accessline 71
ARXIV_API = "https://export.arxiv.org/api/query" - Network accessline 99
ATOM_NS = {"atom": "http://www.w3.org/2005/Atom"} - Network accessline 129
m = re.search(r"arxiv\.org/abs/([^\s]+?)(v\d+)?$", paper_url) arxiv_id = m.group(1) if m else None doi_node = entry.find("{http://arxiv.org/schemas/atom}doi") - Network accessline 130
arxiv_id = m.group(1) if m else None doi_node = entry.find("{http://arxiv.org/schemas/atom}doi") doi = (doi_node.text or "").strip() if doi_node is not None else None - Network accessline 131
doi_node = entry.find("{http://arxiv.org/schemas/atom}doi")
ResearchStudio-Idea/skills/paper_search/scripts/search_papers_by_crossref.py
ResearchStudio-Idea/skills/paper_search/scripts/search_papers_by_dblp.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 28
url = "https://dblp.org/search/publ/api" - Network accessline 103
# Extract DOI from URL like https://doi.org/10.xxxx/yyyy or direct DOI - Network accessline 111
session, "GET", f"https://api.crossref.org/works/{doi}", - Network accessline 112
"GET", f"https://api.crossref.org/works/{doi}", source="dblp", - Network accessline 113
f"https://api.crossref.org/works/{doi}",
ResearchStudio-Idea/skills/paper_search/scripts/search_papers_by_google_scholar.py
ResearchStudio-Idea/skills/paper_search/scripts/search_papers_by_open_alex.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 28
[Credential-related source omitted] - Access to secretsline 28
[Credential-related source omitted] - Network accessline 29
url = "https://api.openalex.org/works" - Access to secretsline 44
[Credential-related source omitted] - Network accessline 69
"publication_date": work.get("publication_date", ""), "source": "open_alex", "doi": (work.get("doi") or "").replace("https://doi.org/", "") or None, - Network accessline 70
"source": "open_alex", "doi": (work.get("doi") or "").replace("https://doi.org/", "") or None, "arxiv_id": None, - Network accessline 71
"doi": (work.get("doi") or "").replace("https://doi.org/", "") or None,
ResearchStudio-Idea/skills/paper_search/scripts/search_papers_by_openreview.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 12
[Credential-related source omitted] - Access to secretsline 47
[Credential-related source omitted] - Access to secretsline 49
[Credential-related source omitted] - Network accessline 50
} try: v2 = openreview.api.OpenReviewClient(baseurl="https://api2.openreview.net") - Network accessline 51
try: v2 = openreview.api.OpenReviewClient(baseurl="https://api2.openreview.net") v1 = openreview.Client(baseurl="https://api.openreview.net") - Network accessline 52
v2 = openreview.api.OpenReviewClient(baseurl="https://api2.openreview.net") - Network accessline 53
v1 = openreview.Client(baseurl="https://api.openreview.net") - Access to secretsline 55
[Credential-related source omitted] - Access to secretsline 63
[Credential-related source omitted] - Access to secretsline 66
[Credential-related source omitted] - Network accessline 104
"year": pub.year, "abstract": abstract, "url": f"https://openreview.net/forum?id={note_id}" if note_id else "", - Network accessline 105
"abstract": abstract, "url": f"https://openreview.net/forum?id={note_id}" if note_id else "", "venue": venue, - Network accessline 106
"url": f"https://openreview.net/forum?id={note_id}" if note_id else "",
ResearchStudio-Idea/skills/paper_search/scripts/search_papers_by_semantic_scholar.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 28
[Credential-related source omitted] - Access to secretsline 28
[Credential-related source omitted] - Network accessline 29
url = "https://api.semanticscholar.org/graph/v1/paper/search" - Access to secretsline 45
[Credential-related source omitted]
ResearchStudio-Idea/skills/paper_search/scripts/selftest_postprocess.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 32
title_norm(' Held-Out: Widget Gating! ') == 'held out widget gating') check('norm_doi strips url prefixes', norm_doi('https://doi.org/10.1000/XYZ') == '10.1000/xyz' - Network accessline 33
check('norm_doi strips url prefixes', norm_doi('https://doi.org/10.1000/XYZ') == '10.1000/xyz' and norm_doi('doi:10.1/a') == '10.1/a') - Network accessline 34
norm_doi('https://doi.org/10.1000/XYZ') == '10.1000/xyz'
ResearchStudio-Idea/skills/paper_search/scripts/selftest_runtime.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 63
[Credential-related source omitted] - Access to secretsline 65
[Credential-related source omitted] - Access to secretsline 69
[Credential-related source omitted] - Access to secretsline 70
[Credential-related source omitted] - Access to secretsline 77
[Credential-related source omitted] - Access to secretsline 78
[Credential-related source omitted] - Access to secretsline 79
[Credential-related source omitted] - Access to secretsline 83
[Credential-related source omitted] - Access to secretsline 96
[Credential-related source omitted] - Access to secretsline 99
[Credential-related source omitted] - Access to secretsline 103
[Credential-related source omitted] - Access to secretsline 106
[Credential-related source omitted] - Network accessline 111
with self.assertRaises(requests.exceptions.ConnectTimeout): _http_runtime.request( session, "GET", "https://example.invalid", source="open_alex" - Network accessline 112
_http_runtime.request( session, "GET", "https://example.invalid", source="open_alex" ) - Network accessline 113
session, "GET", "https://example.invalid", source="open_alex" - Network accessline 120
with mock.patch.object(_http_runtime.time, "sleep") as sleep: response = _http_runtime.request( session, "GET", "https://example.invalid", source="crossref" - Network accessline 121
response = _http_runtime.request( session, "GET", "https://example.invalid", source="crossref" ) - Network accessline 122
session, "GET", "https://example.invalid", source="crossref" - Network accessline 130
session = FakeSession() _http_runtime.configure_external_session(session, "openreview") session.request("GET", "https://example.invalid") - Network accessline 131
_http_runtime.configure_external_session(session, "openreview") session.request("GET", "https://example.invalid") self.assertEqual(session.calls[0][2]["timeout"], (15.0, 300.0)) - Network accessline 132
session.request("GET", "https://example.invalid") - Access to secretsline 162
[Credential-related source omitted] - Access to secretsline 163
[Credential-related source omitted] - Network accessline 164
[Credential-related source omitted] - Access to secretsline 164
[Credential-related source omitted] - Network accessline 165
session = _http_runtime.create_session() base = f"http://127.0.0.1:{server.server_port}" try: - Network accessline 166
base = f"http://127.0.0.1:{server.server_port}" try: with self.assertRaises(requests.exceptions.RequestException): - Access to secretsline 312
[Credential-related source omitted] - Access to secretsline 342
[Credential-related source omitted] - Network accessline 351
all(client.session.calls[0][2]["timeout"] == (15.0, 300.0) for client in created) ) v2.session.request("GET", "https://example.invalid") - Network accessline 352
) v2.session.request("GET", "https://example.invalid") self.assertEqual(v2.session.calls[-1][2]["timeout"], (15.0, 300.0)) - Network accessline 353
v2.session.request("GET", "https://example.invalid") - Network accessline 377
def test_mock_response_matches_legacy_fixture_output(self): xml = """<?xml version="1.0" encoding="UTF-8"?> <feed xmlns="http://www.w3.org/2005/Atom" xmlns:arxiv="http://arxiv.org/schemas/atom"> - Network accessline 378
xml = """<?xml version="1.0" encoding="UTF-8"?> <feed xmlns="http://www.w3.org/2005/Atom" xmlns:arxiv="http://arxiv.org/schemas/atom"> <entry> - Network accessline 379
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:arxiv="http://arxiv.org/schemas/atom"> - Network accessline 380
<entry> <id>https://arxiv.org/abs/2401.12345v2</id> <published>2024-01-20T00:00:00Z</published> - Network accessline 381
<id>https://arxiv.org/abs/2401.12345v2</id> - Network accessline 406
"year": 2024, "abstract": "Abstract body.", "url": "https://arxiv.org/abs/2401.12345v2", - Network accessline 407
"abstract": "Abstract body.", "url": "https://arxiv.org/abs/2401.12345v2", "venue": "arXiv", - Network accessline 408
"url": "https://arxiv.org/abs/2401.12345v2",
ResearchStudio-Idea/skills/paper_search/scripts/source_worker.py
- Executable scriptline 1
#!/usr/bin/env python3
ResearchStudio-Idea/skills/scoop_check/SKILL.md
ResearchStudio-Idea/skills/scoop_check/scripts/fetch_paper.sh
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 7
# Behavior: # 1. Downloads the PDF to ${CLAUDE_PROJECT_DIR}/papers/<pdf_name>.pdf via curl # (falls back to wget if curl is missing). - Network accessline 8
# 1. Downloads the PDF to ${CLAUDE_PROJECT_DIR}/papers/<pdf_name>.pdf via curl # (falls back to wget if curl is missing). # 2. Verifies the result is actually a PDF (catches HTML error pages saved - Network accessline 9
# (falls back to wget if curl is missing). - Network accessline 43
download() { if command -v curl >/dev/null 2>&1; then - Network accessline 44
if command -v curl >/dev/null 2>&1; then - Network accessline 45
curl -fsSL --max-time 60 -o "${PDF_PATH}" "${PDF_URL}" - Network accessline 46
elif command -v wget >/dev/null 2>&1; then - Network accessline 47
wget -q --timeout=60 -O "${PDF_PATH}" "${PDF_URL}" - Network accessline 48
else echo "FAILED: neither curl nor wget is installed" >&2 return 1 - Network accessline 49
echo "FAILED: neither curl nor wget is installed" >&2
ResearchStudio-Reel/skills/paper2assets/SKILL.md
- Broad permissionsline 1
Bash(*), Read, Write, Edit, Grep, Glob, AskUserQuestion, WebFetch, WebSearch - Network accessline 189
"institutes": ["First Institute", "Second Institute"], "venue": "NeurIPS 2025", "paper_url": "https://arxiv.org/abs/...", - Network accessline 190
"venue": "NeurIPS 2025", "paper_url": "https://arxiv.org/abs/...", "code_url": "https://github.com/..." - Network accessline 191
"paper_url": "https://arxiv.org/abs/...", - Network accessline 192
"code_url": "https://github.com/..."
ResearchStudio-Reel/skills/paper2assets/scripts/build_package.py
- Executable scriptline 1
#!/usr/bin/env python3
ResearchStudio-Reel/skills/paper2assets/scripts/crop_figure.py
- Executable scriptline 1
#!/usr/bin/env python3
ResearchStudio-Reel/skills/paper2assets/scripts/extract_pdf.py
ResearchStudio-Reel/skills/paper2assets/scripts/fetch_conf_logo.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 66
def fetch(url, timeout=20, retries=4): - Network accessline 71
for attempt in range(retries): try: req = urllib.request.Request(url, headers={"User-Agent": UA}) - Network accessline 72
try: req = urllib.request.Request(url, headers={"User-Agent": UA}) with urllib.request.urlopen(req, timeout=timeout) as r: - Network accessline 73
req = urllib.request.Request(url, headers={"User-Agent": UA}) - Network accessline 74
with urllib.request.urlopen(req, timeout=timeout) as r: - Network accessline 82
def fetch_json(url): return json.loads(fetch(url).decode("utf-8")) - Network accessline 83
return json.loads(fetch(url).decode("utf-8")) - Network accessline 99
def wikidata_item(term): url = ("https://www.wikidata.org/w/api.php?action=wbsearchentities&format=json" "&language=en&type=item&limit=7&search=" + urllib.parse.quote(term)) - Network accessline 100
url = ("https://www.wikidata.org/w/api.php?action=wbsearchentities&format=json" "&language=en&type=item&limit=7&search=" + urllib.parse.quote(term)) hits = fetch_json(url).get("search", []) - Network accessline 109
def p154_filename(qid): url = ("https://www.wikidata.org/w/api.php?action=wbgetclaims&format=json" - Network accessline 110
url = ("https://www.wikidata.org/w/api.php?action=wbgetclaims&format=json" - Network accessline 121
def commons_url(filename, width=600): return ("https://commons.wikimedia.org/wiki/Special:FilePath/" + urllib.parse.quote(filename) + "?width=" + str(width)) - Network accessline 122
return ("https://commons.wikimedia.org/wiki/Special:FilePath/" - Network accessline 135
if not title: return None url = ("https://en.wikipedia.org/api/rest_v1/page/summary/" - Network accessline 136
return None url = ("https://en.wikipedia.org/api/rest_v1/page/summary/" + urllib.parse.quote(title.replace(" ", "_"))) - Network accessline 137
url = ("https://en.wikipedia.org/api/rest_v1/page/summary/" + urllib.parse.quote(title.replace(" ", "_"))) try: - Network accessline 155
if not title: return None url = ("https://en.wikipedia.org/w/api.php?action=query&format=json&prop=pageimages" - Network accessline 156
return None url = ("https://en.wikipedia.org/w/api.php?action=query&format=json&prop=pageimages" "&piprop=original|thumbnail&pithumbsize=600&pilicense=any&redirects=1&titles=" - Network accessline 157
url = ("https://en.wikipedia.org/w/api.php?action=query&format=json&prop=pageimages" "&piprop=original|thumbnail&pithumbsize=600&pilicense=any&redirects=1&titles=" + urllib.parse.quote(title)) - Network accessline 211
if not img_url: print(json.dumps({**base, "reason": f"no Wikipedia lead image / P154 logo for '{term}'"})); return 0 img = fetch(img_url) - Network accessline 212
print(json.dumps({**base, "reason": f"no Wikipedia lead image / P154 logo for '{term}'"})); return 0 img = fetch(img_url) if not is_image(img) or len(img) < 200: - Network accessline 213
img = fetch(img_url)
ResearchStudio-Reel/skills/paper2assets/scripts/fetch_logos.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 27
python fetch_logos.py --outdir <outdir> --from-spec <outdir>/paper_spec.md # WEB-SEARCH FALLBACK for an institute this Wikimedia pass missed: python fetch_logos.py --outdir <outdir> --add-logo "Westlake University=https://.../westla - Network accessline 29
python fetch_logos.py --outdir <outdir> --add-logo "Westlake University=https://.../westlake-logo.png" - Network accessline 158
def fetch(url: str, timeout: float = 15.0) -> bytes: - Network accessline 159
req = urllib.request.Request(url, headers={"User-Agent": UA}) - Network accessline 160
with urllib.request.urlopen(req, timeout=timeout) as r: - Network accessline 176
api = "https://en.wikipedia.org/w/api.php?" + urllib.parse.urlencode({ - Network accessline 178
"namespace": "0", "format": "json", "redirects": "resolve"}) try: data = json.loads(fetch(api).decode("utf-8", errors="ignore")) - Network accessline 179
try: data = json.loads(fetch(api).decode("utf-8", errors="ignore")) return [t for t in (data[1] if len(data) > 1 else []) if t] - Network accessline 180
data = json.loads(fetch(api).decode("utf-8", errors="ignore")) - Network accessline 490
return [] try: raw = fetch( - Network accessline 491
try: raw = fetch( f"https://www.wikidata.org/wiki/Special:EntityData/{qid}.json" - Network accessline 492
raw = fetch( - Network accessline 493
f"https://www.wikidata.org/wiki/Special:EntityData/{qid}.json" - Network accessline 521
)) rows.sort(key=lambda r: (r[0], r[1], r[2], r[3]), reverse=True) return ["https://commons.wikimedia.org/wiki/Special:FilePath/" - Network accessline 522
rows.sort(key=lambda r: (r[0], r[1], r[2], r[3]), reverse=True) return ["https://commons.wikimedia.org/wiki/Special:FilePath/" + urllib.parse.quote(fn.replace(" ", "_")) for *_, fn in rows] - Network accessline 523
return ["https://commons.wikimedia.org/wiki/Special:FilePath/" - Network accessline 530
Wikimedia rejects arbitrary thumb widths with HTTP 400 ("Use thumbnail sizes listed on https://w.wiki/GHai"). For raster originals we strip - Network accessline 531
sizes listed on https://w.wiki/GHai"). For raster originals we strip - Network accessline 780
try: data = fetch(url) - Network accessline 781
data = fetch(url) - Network accessline 818
"""Fetch (don't yet write) the best logo for `name`. - Network accessline 886
for title in titles: page = "https://en.wikipedia.org/wiki/" + urllib.parse.quote(title.replace(" ", "_")) - Network accessline 887
page = "https://en.wikipedia.org/wiki/" + urllib.parse.quote(title.replace(" ", "_")) - Network accessline 888
try: html = fetch(page).decode("utf-8", errors="ignore") except Exception as e: - Network accessline 889
html = fetch(page).decode("utf-8", errors="ignore") - Network accessline 917
for full in full_candidates: try: blob = fetch(full) - Network accessline 918
try: blob = fetch(full) except Exception: - Network accessline 919
blob = fetch(full)
ResearchStudio-Reel/skills/paper2assets/scripts/figure_semantics.py
- Executable scriptline 1
#!/usr/bin/env python3
ResearchStudio-Reel/skills/paper2assets/scripts/make_qr.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 22
# or, explicit URLs: python make_qr.py --outdir <outdir> \ --paper-url https://arxiv.org/pdf/1706.03762 \ - Network accessline 23
python make_qr.py --outdir <outdir> --paper-url https://arxiv.org/pdf/1706.03762 - Network accessline 24
--paper-url https://arxiv.org/pdf/1706.03762 \ - Network accessline 25
--code-url https://github.com/tensorflow/tensor2tensor - Network accessline 27
Prints a JSON summary on stdout AND writes it into metadata.json under `"qr"`: {"qr": [ {"kind": "paper", "url": "https://...", "path": "assets/qr/paper.png", "label": "Paper"}, - Network accessline 28
{"qr": [ {"kind": "paper", "url": "https://...", "path": "assets/qr/paper.png", "label": "Paper"}, {"kind": "code", "url": "https://...", "path": "assets/qr/code.png", "label": "Code"} - Network accessline 29
{"kind": "paper", "url": "https://...", "path": "assets/qr/paper.png", "label": "Paper"}, - Network accessline 30
{"kind": "code", "url": "https://...", "path": "assets/qr/code.png", "label": "Code"} - Network accessline 38
Sourcing rules: - `paper_url` falls back to `https://arxiv.org/pdf/<arxiv_id>` only when empty - Network accessline 39
- `paper_url` falls back to `https://arxiv.org/pdf/<arxiv_id>` only when empty - Network accessline 97
`code_url` and `project_url` are taken verbatim. `paper_url` falls back to `https://arxiv.org/pdf/<arxiv_id>` only when empty AND an arxiv_id is present. - Network accessline 98
`https://arxiv.org/pdf/<arxiv_id>` only when empty AND an arxiv_id is present. - Network accessline 102
arxiv_id = (meta.get("arxiv_id") or "").strip() if arxiv_id: paper_url = f"https://arxiv.org/pdf/{arxiv_id}" - Network accessline 103
if arxiv_id: paper_url = f"https://arxiv.org/pdf/{arxiv_id}" project_url = (meta.get("project_url") or "").strip() - Network accessline 104
paper_url = f"https://arxiv.org/pdf/{arxiv_id}"
ResearchStudio-Reel/skills/paper2assets/scripts/source_figures.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 60
def download_arxiv_source(aid: str, dest: Path) -> bool: url = f"https://arxiv.org/e-print/{aid}" - Network accessline 61
url = f"https://arxiv.org/e-print/{aid}" - Network accessline 62
tarball = dest / "source.tar.gz" try: req = urllib.request.Request(url, headers=_UA) - Network accessline 63
try: req = urllib.request.Request(url, headers=_UA) with urllib.request.urlopen(req, timeout=60) as r, open(tarball, "wb") as f: - Network accessline 64
req = urllib.request.Request(url, headers=_UA) - Network accessline 65
with urllib.request.urlopen(req, timeout=60) as r, open(tarball, "wb") as f: - Network accessline 274
if re.match(r"https?://", ref): try: req = urllib.request.Request(ref, headers=_UA) - Network accessline 275
try: req = urllib.request.Request(ref, headers=_UA) with urllib.request.urlopen(req, timeout=60) as r: - Network accessline 276
req = urllib.request.Request(ref, headers=_UA) - Network accessline 277
with urllib.request.urlopen(req, timeout=60) as r:
ResearchStudio-Reel/skills/paper2assets/scripts/utils/__init__.py
- Executable scriptline 1
Executable file
ResearchStudio-Reel/skills/paper2assets/scripts/utils/layout.py
- Executable scriptline 1
Executable file
ResearchStudio-Reel/skills/paper2assets/scripts/utils/logo_quality.py
- Executable scriptline 1
#!/usr/bin/env python3
ResearchStudio-Reel/skills/paper2assets/scripts/utils/logo_trim.py
- Executable scriptline 1
#!/usr/bin/env python3
ResearchStudio-Reel/skills/paper2blog/scripts/build_wechat_docx.py
- Executable scriptline 1
#!/usr/bin/env python3
ResearchStudio-Reel/skills/paper2blog/scripts/check_blog_package.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 47
NS = { "w": "http://schemas.openxmlformats.org/wordprocessingml/2006/main", - Network accessline 48
"w": "http://schemas.openxmlformats.org/wordprocessingml/2006/main", - Network accessline 49
"wp": "http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing", - Network accessline 50
"a": "http://schemas.openxmlformats.org/drawingml/2006/main", - Network accessline 51
"r": "http://schemas.openxmlformats.org/officeDocument/2006/relationships",
ResearchStudio-Reel/skills/paper2blog/scripts/crop_figure.py
- Executable scriptline 1
#!/usr/bin/env python3
ResearchStudio-Reel/skills/paper2blog/scripts/extract_pdf.py
ResearchStudio-Reel/skills/paper2poster/SKILL.md
ResearchStudio-Reel/skills/paper2poster/assets/fonts/Arimo-LICENSE.txt
- Network accessline 1
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ - Network accessline 2
Upstream-Name: Noto Upstream-Contact: https://github.com/googlei18n/noto-fonts/issues http://groups.google.com/group/noto-font - Network accessline 3
Upstream-Contact: https://github.com/googlei18n/noto-fonts/issues - Network accessline 4
http://groups.google.com/group/noto-font - Network accessline 5
Source: https://github.com/googlei18n/noto-fonts
ResearchStudio-Reel/skills/paper2poster/assets/katex/auto-render.min.js
- Possible obfuscationline 1
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderM - Executable scriptline 1
Executable file
ResearchStudio-Reel/skills/paper2poster/assets/katex/katex.min.js
ResearchStudio-Reel/skills/paper2poster/assets/layouts/3col.html
- Network accessline 1171
// Resolve sibling URL; works for file:// too (fetch may fail there — that's OK). const url = new URL("poster_debug.json", document.baseURI).toString(); fetch(url).then(r => r.ok ? r.json() : null).then(j => { - Network accessline 1172
const url = new URL("poster_debug.json", document.baseURI).toString(); fetch(url).then(r => r.ok ? r.json() : null).then(j => { if (!j || !Array.isArray(j.columns)) { cb(); return; } - Network accessline 1173
fetch(url).then(r => r.ok ? r.json() : null).then(j => {
ResearchStudio-Reel/skills/paper2poster/assets/layouts/full.html
- Network accessline 1294
// Resolve sibling URL; works for file:// too (fetch may fail there — that's OK). const url = new URL("poster_debug.json", document.baseURI).toString(); fetch(url).then(r => r.ok ? r.json() : null).then(j => { - Network accessline 1295
const url = new URL("poster_debug.json", document.baseURI).toString(); fetch(url).then(r => r.ok ? r.json() : null).then(j => { if (!j || !Array.isArray(j.columns)) { cb(); return; } - Network accessline 1296
fetch(url).then(r => r.ok ? r.json() : null).then(j => {
ResearchStudio-Reel/skills/paper2poster/assets/layouts/half.html
- Network accessline 1181
// Resolve sibling URL; works for file:// too (fetch may fail there — that's OK). const url = new URL("poster_debug.json", document.baseURI).toString(); fetch(url).then(r => r.ok ? r.json() : null).then(j => { - Network accessline 1182
const url = new URL("poster_debug.json", document.baseURI).toString(); fetch(url).then(r => r.ok ? r.json() : null).then(j => { if (!j || !Array.isArray(j.columns)) { cb(); return; } - Network accessline 1183
fetch(url).then(r => r.ok ? r.json() : null).then(j => {
ResearchStudio-Reel/skills/paper2poster/assets/layouts/methoddriven.html
- Network accessline 1387
// Resolve sibling URL; works for file:// too (fetch may fail there — that's OK). const url = new URL("poster_debug.json", document.baseURI).toString(); fetch(url).then(r => r.ok ? r.json() : null).then(j => { - Network accessline 1388
const url = new URL("poster_debug.json", document.baseURI).toString(); fetch(url).then(r => r.ok ? r.json() : null).then(j => { if (!j || !Array.isArray(j.columns)) { cb(); return; } - Network accessline 1389
fetch(url).then(r => r.ok ? r.json() : null).then(j => {
ResearchStudio-Reel/skills/paper2poster/assets/layouts/methoddriven4.html
- Network accessline 1373
// Resolve sibling URL; works for file:// too (fetch may fail there — that's OK). const url = new URL("poster_debug.json", document.baseURI).toString(); fetch(url).then(r => r.ok ? r.json() : null).then(j => { - Network accessline 1374
const url = new URL("poster_debug.json", document.baseURI).toString(); fetch(url).then(r => r.ok ? r.json() : null).then(j => { if (!j || !Array.isArray(j.columns)) { cb(); return; } - Network accessline 1375
fetch(url).then(r => r.ok ? r.json() : null).then(j => {
ResearchStudio-Reel/skills/paper2poster/assets/layouts_portrait/full.html
- Network accessline 1714
// Resolve sibling URL; works for file:// too (fetch may fail there — that's OK). const url = new URL("poster_debug.json", document.baseURI).toString(); fetch(url).then(r => r.ok ? r.json() : null).then(j => { - Network accessline 1715
const url = new URL("poster_debug.json", document.baseURI).toString(); fetch(url).then(r => r.ok ? r.json() : null).then(j => { if (!j || !Array.isArray(j.columns)) { cb(); return; } - Network accessline 1716
fetch(url).then(r => r.ok ? r.json() : null).then(j => {
ResearchStudio-Reel/skills/paper2poster/assets/layouts_portrait/half.html
- Network accessline 1491
// Resolve sibling URL; works for file:// too (fetch may fail there — that's OK). const url = new URL("poster_debug.json", document.baseURI).toString(); fetch(url).then(r => r.ok ? r.json() : null).then(j => { - Network accessline 1492
const url = new URL("poster_debug.json", document.baseURI).toString(); fetch(url).then(r => r.ok ? r.json() : null).then(j => { if (!j || !Array.isArray(j.columns)) { cb(); return; } - Network accessline 1493
fetch(url).then(r => r.ok ? r.json() : null).then(j => {
ResearchStudio-Reel/skills/paper2poster/assets/math/katex.html
- Network accessline 7
survives in each .katex's <annotation encoding="application/x-tex">, which html2pptx reads to rasterize/emit the equation (engine-agnostic math pass). --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/kate - Network accessline 8
html2pptx reads to rasterize/emit the equation (engine-agnostic math pass). --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css"> <script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/ka - Network accessline 9
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css"> - Network accessline 10
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script> - Network accessline 11
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js"
ResearchStudio-Reel/skills/paper2poster/assets/math/mathjax.html
ResearchStudio-Reel/skills/paper2poster/assets/mathjax/LICENSE
ResearchStudio-Reel/skills/paper2poster/assets/mathjax/tex-svg.js
ResearchStudio-Reel/skills/paper2poster/html2pptx/GOTCHAS.md
- Possible obfuscationline 141
2. Before sending text to PPT, run each long word (≥7 chars) through `pyphen.Pyphen(lang="en_US").inserted(word, "<U+00AD>")`
ResearchStudio-Reel/skills/paper2poster/html2pptx/README.md
ResearchStudio-Reel/skills/paper2poster/html2pptx/SKILL.md
- Access to secretsline 3
[Credential-related source omitted] - Dangerous shell operationline 34
sudo apt install libreoffice-impress - Network accessline 53
# Download static-weight TTFs (variable fonts register under wrong family name) mkdir -p /tmp/fonts-dl && cd /tmp/fonts-dl curl -sL "https://github.com/rsms/inter/releases/download/v4.0/Inter-4.0.zip" -o Inter.zip - Network accessline 54
mkdir -p /tmp/fonts-dl && cd /tmp/fonts-dl curl -sL "https://github.com/rsms/inter/releases/download/v4.0/Inter-4.0.zip" -o Inter.zip curl -sL "https://github.com/adobe-fonts/source-serif/releases/download/4.005R/source-serif-4.005_Desktop. - Network accessline 55
curl -sL "https://github.com/rsms/inter/releases/download/v4.0/Inter-4.0.zip" -o Inter.zip - Network accessline 56
curl -sL "https://github.com/adobe-fonts/source-serif/releases/download/4.005R/source-serif-4.005_Desktop.zip" -o SourceSerif4.zip - Network accessline 57
curl -sL "https://github.com/JetBrains/JetBrainsMono/releases/download/v2.304/JetBrainsMono-2.304.zip" -o JetBrainsMono.zip - Access to secretsline 120
[Credential-related source omitted] - Access to secretsline 121
[Credential-related source omitted] - Access to secretsline 175
[Credential-related source omitted] - Access to secretsline 337
[Credential-related source omitted]
ResearchStudio-Reel/skills/paper2poster/html2pptx/__init__.py
- Executable scriptline 1
Executable file
ResearchStudio-Reel/skills/paper2poster/html2pptx/scripts/__init__.py
- Executable scriptline 1
Executable file
ResearchStudio-Reel/skills/paper2poster/html2pptx/scripts/auto_correct_loop.py
- Executable scriptline 1
Executable file - Access to secretsline 130
[Credential-related source omitted] - Access to secretsline 131
[Credential-related source omitted] - Access to secretsline 270
[Credential-related source omitted] - Access to secretsline 271
[Credential-related source omitted] - Access to secretsline 272
[Credential-related source omitted] - Access to secretsline 274
[Credential-related source omitted] - Access to secretsline 275
[Credential-related source omitted]
ResearchStudio-Reel/skills/paper2poster/html2pptx/scripts/auto_fix_loop.py
- Executable scriptline 1
Executable file
ResearchStudio-Reel/skills/paper2poster/html2pptx/scripts/font_embedder.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 54
NS_P = "http://schemas.openxmlformats.org/presentationml/2006/main" - Network accessline 55
NS_R = "http://schemas.openxmlformats.org/officeDocument/2006/relationships" - Network accessline 56
NS_CT = "http://schemas.openxmlformats.org/package/2006/content-types" - Network accessline 57
NS_PR = "http://schemas.openxmlformats.org/package/2006/relationships" - Network accessline 58
FONT_REL_TYPE = ("http://schemas.openxmlformats.org/"
ResearchStudio-Reel/skills/paper2poster/html2pptx/scripts/font_resolver.py
- Executable scriptline 1
Executable file - Network accessline 41
FONT_DIR = Path.home() / ".local/share/fonts" GOOGLE_FONTS_CSS = "https://fonts.googleapis.com/css2" - Network accessline 42
GOOGLE_FONTS_CSS = "https://fonts.googleapis.com/css2" - Network accessline 43
# UA without WOFF2 support → Google serves plain TTF with .ttf URL. # Note: stricter UAs like "Mozilla/4.0 (compatible; MSIE 6.0)" cause Google # to serve extensionless URLs (https://...gstatic.com/l/font?kit=...) that - Network accessline 44
# Note: stricter UAs like "Mozilla/4.0 (compatible; MSIE 6.0)" cause Google # to serve extensionless URLs (https://...gstatic.com/l/font?kit=...) that # our regex won't catch. Plain "Mozilla/4.0" gets clean .ttf URLs. - Network accessline 45
# to serve extensionless URLs (https://...gstatic.com/l/font?kit=...) that - Network accessline 207
} url = GOOGLE_FONTS_CSS + "?" + urllib.parse.urlencode(params) req = urllib.request.Request(url, headers={"User-Agent": LEGACY_UA}) - Network accessline 208
url = GOOGLE_FONTS_CSS + "?" + urllib.parse.urlencode(params) req = urllib.request.Request(url, headers={"User-Agent": LEGACY_UA}) try: - Network accessline 209
req = urllib.request.Request(url, headers={"User-Agent": LEGACY_UA}) - Network accessline 210
try: with urllib.request.urlopen(req, timeout=HTTP_TIMEOUT) as r: if r.status != 200: - Network accessline 211
with urllib.request.urlopen(req, timeout=HTTP_TIMEOUT) as r: - Network accessline 215
except Exception: return 0 ttf_urls = re.findall(r"url\((https://[^)]+?\.ttf)\)", css) - Network accessline 216
return 0 ttf_urls = re.findall(r"url\((https://[^)]+?\.ttf)\)", css) if not ttf_urls: - Network accessline 217
ttf_urls = re.findall(r"url\((https://[^)]+?\.ttf)\)", css) - Network accessline 227
continue try: with urllib.request.urlopen(font_url, timeout=HTTP_TIMEOUT) as f: - Network accessline 228
try: with urllib.request.urlopen(font_url, timeout=HTTP_TIMEOUT) as f: fname.write_bytes(f.read()) - Network accessline 229
with urllib.request.urlopen(font_url, timeout=HTTP_TIMEOUT) as f:
ResearchStudio-Reel/skills/paper2poster/html2pptx/scripts/html_to_pptx.py
- Executable scriptline 1
Executable file - Network accessline 57
_M_NS = "http://schemas.openxmlformats.org/officeDocument/2006/math" - Network accessline 58
_A14_NS = "http://schemas.microsoft.com/office/drawing/2010/main" - Possible obfuscationline 1892
f.write(base64.b64decode(m.group(1))) - Possible obfuscationline 2338
core = _hyph.inserted(core, "<U+00AD>") - Network accessline 2976
body2 = body.replace( "<m:rPr>", f'<m:rPr><a:rPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" sz="{sz_attr}"/>', - Network accessline 2977
"<m:rPr>", f'<m:rPr><a:rPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" sz="{sz_attr}"/>', 1, - Network accessline 2978
f'<m:rPr><a:rPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" sz="{sz_attr}"/>', - Network accessline 2981
else: body2 = ( f'<m:rPr><a:rPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" sz="{sz_attr}"/></m:rPr>' - Network accessline 2982
body2 = ( f'<m:rPr><a:rPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" sz="{sz_attr}"/></m:rPr>' + body - Network accessline 2983
f'<m:rPr><a:rPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" sz="{sz_attr}"/></m:rPr>'
ResearchStudio-Reel/skills/paper2poster/html2pptx/scripts/vision_aggregate.py
- Executable scriptline 1
Executable file
ResearchStudio-Reel/skills/paper2poster/html2pptx/scripts/vision_audit.py
- Executable scriptline 1
Executable file - Network accessline 142
[Credential-related source omitted] - Access to secretsline 142
[Credential-related source omitted] - Access to secretsline 143
[Credential-related source omitted] - Access to secretsline 145
[Credential-related source omitted] - Network accessline 165
}], } req = urllib.request.Request( - Network accessline 166
} req = urllib.request.Request( base.rstrip("/") + "/v1/messages", - Network accessline 167
req = urllib.request.Request( - Network accessline 172
"content-type": "application/json"}, ) with urllib.request.urlopen(req, timeout=240) as r: - Network accessline 173
) with urllib.request.urlopen(req, timeout=240) as r: resp = json.loads(r.read()) - Network accessline 174
with urllib.request.urlopen(req, timeout=240) as r:
ResearchStudio-Reel/skills/paper2poster/html2pptx/scripts/vision_compare.py
- Executable scriptline 1
Executable file - Network accessline 104
[Credential-related source omitted] - Access to secretsline 104
[Credential-related source omitted] - Access to secretsline 105
[Credential-related source omitted] - Access to secretsline 107
[Credential-related source omitted] - Network accessline 126
}], } req = urllib.request.Request( - Network accessline 127
} req = urllib.request.Request( base.rstrip("/") + "/v1/messages", - Network accessline 128
req = urllib.request.Request( - Network accessline 135
}, ) with urllib.request.urlopen(req, timeout=180) as r: - Network accessline 136
) with urllib.request.urlopen(req, timeout=180) as r: resp = json.loads(r.read()) - Network accessline 137
with urllib.request.urlopen(req, timeout=180) as r:
ResearchStudio-Reel/skills/paper2poster/html2pptx/scripts/vision_eval_harness.py
- Executable scriptline 1
#!/usr/bin/env python3
ResearchStudio-Reel/skills/paper2poster/references/apply_theme.py
- Executable scriptline 1
#!/usr/bin/env python3
ResearchStudio-Reel/skills/paper2poster/references/audio_narration.md
- Access to secretsline 61
[Credential-related source omitted]
ResearchStudio-Reel/skills/paper2poster/references/build_poster.py
- Executable scriptline 1
#!/usr/bin/env python3
ResearchStudio-Reel/skills/paper2poster/references/compose_poster.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 355
[Credential-related source omitted] - Access to secretsline 358
[Credential-related source omitted] - Access to secretsline 457
[Credential-related source omitted] - Access to secretsline 535
[Credential-related source omitted] - Access to secretsline 629
[Credential-related source omitted] - Access to secretsline 631
[Credential-related source omitted] - Access to secretsline 642
[Credential-related source omitted] - Access to secretsline 647
[Credential-related source omitted] - Access to secretsline 677
[Credential-related source omitted]
ResearchStudio-Reel/skills/paper2poster/references/fit_logos.py
- Executable scriptline 1
#!/usr/bin/env python3
ResearchStudio-Reel/skills/paper2poster/references/staged_fill.md
- Network accessline 284
- Inject after Takeaway (per the SKILL.md custom-section table). - `Necessary` reads as a short link list, e.g., `Code: github.com/user/repo · Paper: arxiv.org/pdf/1706.03762 · Project: project.io`. Strip the `https://` prefix for compactne - Network accessline 285
- `Necessary` reads as a short link list, e.g., `Code: github.com/user/repo · Paper: arxiv.org/pdf/1706.03762 · Project: project.io`. Strip the `https://` prefix for compactness; render each as a `<a href="...">` link.
ResearchStudio-Reel/skills/paper2poster/references/template_substitution.md
- Network accessline 47
| `{{VENUE_TAG}}` | Short badge label used by landscape `v5` and Portrait `pv1`–`pv5`, normally `POSTER`. Replace only when the composed header contains it. | | `{{VENUE_LOGO}}` | Optional conference logo used by landscape `v1`–`v4`. Set to - Network accessline 48
| `{{VENUE_LOGO}}` | Optional conference logo used by landscape `v1`–`v4`. Set to `assets/logos/_venue.png` only when that file exists; otherwise leave empty so the text venue fallback renders. | | `{{VENUE_LINK}}` | Link used by landscape - Network accessline 49
| `{{VENUE_LINK}}` | Link used by landscape `v5` and Portrait `pv1`–`pv5`. **Priority order:** (1) `metadata.json` `code_url` if non-empty; (2) else `metadata.json` `paper_url` (which for arXiv papers is `https://arxiv.org/pdf/<arxiv_id>`); - Network accessline 188
| `{{QR_PAPER}}` / `{{QR_CODE}}` | the QR PNG paths (as above) — every variant keeps the `.tq` / `.qr-img` tiles. | | `{{CONTACT}}` | corresponding-author email (as above) — used by `aside` / `contact`. | | `{{URL_PAPER}}` / `{{URL_CODE}}` - Network accessline 190
| `{{URL_PAPER}}` / `{{URL_CODE}}` / `{{URL_PROJECT}}` | **Display-only short URL text** for the link-listing variants (`directory`, `chips`, `hero`, `banner`, `twin`). Source from `metadata.json` `paper_url` / `code_url` / `project_url`, *
ResearchStudio-Reel/skills/paper2poster/scripts/check_poster.py
- Executable scriptline 1
#!/usr/bin/env python3
ResearchStudio-Reel/skills/paper2poster/scripts/generate_audio.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 27
[Credential-related source omitted] - Access to secretsline 86
[Credential-related source omitted] - Network accessline 88
) cfg = { "endpoint": "https://67786-mpmfvjz3-swedencentral.cognitiveservices.azure.com", - Network accessline 89
cfg = { "endpoint": "https://67786-mpmfvjz3-swedencentral.cognitiveservices.azure.com", "deployment": "tts", - Network accessline 90
"endpoint": "https://67786-mpmfvjz3-swedencentral.cognitiveservices.azure.com", - Access to secretsline 93
[Credential-related source omitted] - Access to secretsline 96
[Credential-related source omitted]
ResearchStudio-Reel/skills/paper2poster/scripts/render_poster.py
ResearchStudio-Reel/skills/paper2poster/scripts/select_figures.py
- Executable scriptline 1
#!/usr/bin/env python3
ResearchStudio-Reel/skills/paper2poster/scripts/utils/__init__.py
- Executable scriptline 1
Executable file
ResearchStudio-Reel/skills/paper2poster/scripts/utils/autofit.py
- Executable scriptline 1
Executable file
ResearchStudio-Reel/skills/paper2poster/scripts/utils/canvas.py
- Executable scriptline 1
Executable file
ResearchStudio-Reel/skills/paper2poster/scripts/utils/cli_common.py
- Executable scriptline 1
Executable file
ResearchStudio-Reel/skills/paper2poster/scripts/utils/column_pack.py
ResearchStudio-Reel/skills/paper2poster/scripts/utils/deliverables.py
- Executable scriptline 1
Executable file
ResearchStudio-Reel/skills/paper2poster/scripts/utils/figure_semantics.py
- Executable scriptline 1
Executable file
ResearchStudio-Reel/skills/paper2poster/scripts/utils/font_fidelity.py
- Executable scriptline 1
Executable file
ResearchStudio-Reel/skills/paper2poster/scripts/utils/polish.py
ResearchStudio-Reel/skills/paper2poster/scripts/utils/preflight.py
- Executable scriptline 1
Executable file
ResearchStudio-Reel/skills/paper2poster/scripts/utils/render.py
- Executable scriptline 1
Executable file
ResearchStudio-Reel/skills/paper2poster/scripts/utils/slack.py
ResearchStudio-Reel/skills/paper2poster/scripts/utils/textutil.py
- Executable scriptline 1
Executable file
ResearchStudio-Reel/skills/paper2poster/scripts/utils/verify_final.py
ResearchStudio-Reel/skills/paper2reel/README.md
- Network accessline 60
Open `http://127.0.0.1:8900/reel.html`. Do not use `python -m http.server` for validation; video seek requires HTTP Range support.
ResearchStudio-Reel/skills/paper2reel/SKILL.md
- Network accessline 298
Open `http://127.0.0.1:8900/reel.html`. The preview is not considered faithful unless video requests return `206 Partial Content` for Range requests.
ResearchStudio-Reel/skills/paper2reel/scripts/build_poster_slides_view.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 46
LOCAL_OPEN_RUNTIME = "srcdoc-poster.v1" MATHJAX_VERSION = "3.2.2" MATHJAX_TARBALL_URL = f"https://registry.npmjs.org/mathjax/-/mathjax-{MATHJAX_VERSION}.tgz" - Network accessline 47
MATHJAX_VERSION = "3.2.2" MATHJAX_TARBALL_URL = f"https://registry.npmjs.org/mathjax/-/mathjax-{MATHJAX_VERSION}.tgz" REEL_ROOT = Path(__file__).resolve().parents[3] - Network accessline 48
MATHJAX_TARBALL_URL = f"https://registry.npmjs.org/mathjax/-/mathjax-{MATHJAX_VERSION}.tgz" - Network accessline 67
( re.compile( r"https://cdn\.jsdelivr\.net/npm/katex@[^/\"']+/dist/katex\.min\.css" - Network accessline 68
re.compile( r"https://cdn\.jsdelivr\.net/npm/katex@[^/\"']+/dist/katex\.min\.css" ), - Network accessline 69
r"https://cdn\.jsdelivr\.net/npm/katex@[^/\"']+/dist/katex\.min\.css" - Network accessline 73
( re.compile( r"https://cdn\.jsdelivr\.net/npm/katex@[^/\"']+/dist/katex\.min\.js" - Network accessline 74
re.compile( r"https://cdn\.jsdelivr\.net/npm/katex@[^/\"']+/dist/katex\.min\.js" ), - Network accessline 75
r"https://cdn\.jsdelivr\.net/npm/katex@[^/\"']+/dist/katex\.min\.js" - Network accessline 79
( re.compile( r"https://cdn\.jsdelivr\.net/npm/katex@[^/\"']+/" - Network accessline 80
re.compile( r"https://cdn\.jsdelivr\.net/npm/katex@[^/\"']+/" r"dist/contrib/auto-render\.min\.js" - Network accessline 81
r"https://cdn\.jsdelivr\.net/npm/katex@[^/\"']+/" - Network accessline 1823
print(f"[paper2reel] downloading MathJax {MATHJAX_VERSION} for local-open bundles") try: urllib.request.urlretrieve(MATHJAX_TARBALL_URL, tarball) - Network accessline 1824
try: urllib.request.urlretrieve(MATHJAX_TARBALL_URL, tarball) except Exception as exc: - Network accessline 1825
urllib.request.urlretrieve(MATHJAX_TARBALL_URL, tarball)
ResearchStudio-Reel/skills/paper2reel/scripts/build_reel_from_paper.py
- Executable scriptline 1
#!/usr/bin/env python3
ResearchStudio-Reel/skills/paper2reel/scripts/build_section_media_from_timeline.py
- Executable scriptline 1
#!/usr/bin/env python3
ResearchStudio-Reel/skills/paper2reel/scripts/check_reel_package.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 1281
checked += 1 url = f"{base_url}/{candidate}" request = urllib.request.Request(url, headers={"Range": "bytes=0-99"}) - Network accessline 1282
url = f"{base_url}/{candidate}" request = urllib.request.Request(url, headers={"Range": "bytes=0-99"}) try: - Network accessline 1283
request = urllib.request.Request(url, headers={"Range": "bytes=0-99"}) - Network accessline 1284
try: with urllib.request.urlopen(request, timeout=5) as response: status = int(response.status) - Network accessline 1285
with urllib.request.urlopen(request, timeout=5) as response: - Network accessline 1327
for kind in ARCHIVE_ORDER: url = f"{base_url}/__download__/{kind}" request = urllib.request.Request(url, method="HEAD") - Network accessline 1328
url = f"{base_url}/__download__/{kind}" request = urllib.request.Request(url, method="HEAD") try: - Network accessline 1329
request = urllib.request.Request(url, method="HEAD") - Network accessline 1330
try: with urllib.request.urlopen(request, timeout=5) as response: status = int(response.status) - Network accessline 1331
with urllib.request.urlopen(request, timeout=5) as response: - Network accessline 2558
thread = threading.Thread(target=httpd.serve_forever, daemon=True) thread.start() base_url = f"http://127.0.0.1:{port}" - Network accessline 2559
thread.start() base_url = f"http://127.0.0.1:{port}" url = f"{base_url}/reel.html" - Network accessline 2560
base_url = f"http://127.0.0.1:{port}"
ResearchStudio-Reel/skills/paper2reel/scripts/reel_downloads.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 25
VIDEO_README_TEXT = ( "Convert edited PPTX file into video using the PPTX2Video project. " "Project link: https://github.com/ai-nuts/pptx2video" - Network accessline 26
"Convert edited PPTX file into video using the PPTX2Video project. " "Project link: https://github.com/ai-nuts/pptx2video" ) - Network accessline 27
"Project link: https://github.com/ai-nuts/pptx2video"
ResearchStudio-Reel/skills/paper2reel/scripts/serve_reel.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 222
host, port = httpd.server_address print(f"[serve_reel] serving {bundle_dir}") print(f"[serve_reel] http://{host}:{port}/reel.html") - Network accessline 223
print(f"[serve_reel] serving {bundle_dir}") print(f"[serve_reel] http://{host}:{port}/reel.html") print("[serve_reel] Range support enabled for video seeking") - Network accessline 224
print(f"[serve_reel] http://{host}:{port}/reel.html")
ResearchStudio-Reel/skills/paper2video/README.md
- Network accessline 58
npx skills add ai-nuts/pptx2video --skill pptx2video python -m pip install \ 'pptx2video[svg] @ git+https://github.com/ai-nuts/pptx2video.git' - Network accessline 59
python -m pip install 'pptx2video[svg] @ git+https://github.com/ai-nuts/pptx2video.git' - Network accessline 60
'pptx2video[svg] @ git+https://github.com/ai-nuts/pptx2video.git'
ResearchStudio-Reel/skills/paper2video/SKILL.md
ResearchStudio-Reel/skills/paper2video/references/pptx2video.md
- Network accessline 3
Paper2Video delegates every render to the independently maintained [`ai-nuts/pptx2video`](https://github.com/ai-nuts/pptx2video) skill and its - Network accessline 4
[`ai-nuts/pptx2video`](https://github.com/ai-nuts/pptx2video) skill and its - Network accessline 14
npx skills add ai-nuts/pptx2video --skill pptx2video python -m pip install \ 'pptx2video[svg] @ git+https://github.com/ai-nuts/pptx2video.git' - Network accessline 15
python -m pip install 'pptx2video[svg] @ git+https://github.com/ai-nuts/pptx2video.git' - Network accessline 16
'pptx2video[svg] @ git+https://github.com/ai-nuts/pptx2video.git'
ResearchStudio-Reel/skills/paper2video/scripts/ppt_options_contract.py
- Executable scriptline 1
Executable file
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Declared and executed: 26 facts
- Contacts api.semanticscholar.org, which SKILL.md, the README and the plugin manifest do not mentionidea_spark/scripts/fetch_sections.py:295High confidence
- Contacts aclanthology.org, which SKILL.md, the README and the plugin manifest do not mentionidea_spark/scripts/fetch_sections.py:522High confidence
- Contacts cognitiveservices.azure.com, which SKILL.md, the README and the plugin manifest do not mentionidea_spark/scripts/gen_pipeline.py:99High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionidea_spark/scripts/search_arxiv.py:34High confidence
- Contacts api.openalex.org, which SKILL.md, the README and the plugin manifest do not mentionidea_spark/scripts/search_openalex.py:23High confidence
- Contacts doi.org, which SKILL.md, the README and the plugin manifest do not mentionidea_spark/scripts/search_openalex.py:110High confidence
- Contacts api.semanticscholar.org, which SKILL.md, the README and the plugin manifest do not mentionidea_spark/scripts/search_semanticscholar.py:32High confidence
- Contacts www.semanticscholar.org, which SKILL.md, the README and the plugin manifest do not mentionidea_spark/scripts/search_semanticscholar.py:156High confidence
- Contacts doi.org, which SKILL.md, the README and the plugin manifest do not mentionpaper_search/scripts/postprocess.py:41High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionpaper_search/scripts/search_papers_by_arxiv.py:99High confidence
- Contacts api.crossref.org, which SKILL.md, the README and the plugin manifest do not mentionpaper_search/scripts/search_papers_by_crossref.py:27High confidence
- Contacts dblp.org, which SKILL.md, the README and the plugin manifest do not mentionpaper_search/scripts/search_papers_by_dblp.py:28High confidence
- Contacts api.crossref.org, which SKILL.md, the README and the plugin manifest do not mentionpaper_search/scripts/search_papers_by_dblp.py:113High confidence
- Contacts api.openalex.org, which SKILL.md, the README and the plugin manifest do not mentionpaper_search/scripts/search_papers_by_open_alex.py:29High confidence
- Contacts doi.org, which SKILL.md, the README and the plugin manifest do not mentionpaper_search/scripts/search_papers_by_open_alex.py:71High confidence
- Contacts api.semanticscholar.org, which SKILL.md, the README and the plugin manifest do not mentionpaper_search/scripts/search_papers_by_semantic_scholar.py:29High confidence
- Contacts doi.org, which SKILL.md, the README and the plugin manifest do not mentionpaper_search/scripts/selftest_postprocess.py:34High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionpaper_search/scripts/selftest_runtime.py:379High confidence
- Contacts www.wikidata.org, which SKILL.md, the README and the plugin manifest do not mentionpaper2assets/scripts/fetch_conf_logo.py:100High confidence
- Contacts commons.wikimedia.org, which SKILL.md, the README and the plugin manifest do not mentionpaper2assets/scripts/fetch_conf_logo.py:122High confidence
- Contacts en.wikipedia.org, which SKILL.md, the README and the plugin manifest do not mentionpaper2assets/scripts/fetch_conf_logo.py:137High confidence
- Contacts en.wikipedia.org, which SKILL.md, the README and the plugin manifest do not mentionpaper2assets/scripts/fetch_logos.py:176High confidence
- Contacts www.wikidata.org, which SKILL.md, the README and the plugin manifest do not mentionpaper2assets/scripts/fetch_logos.py:493High confidence
- Contacts commons.wikimedia.org, which SKILL.md, the README and the plugin manifest do not mentionpaper2assets/scripts/fetch_logos.py:523High confidence
- Contacts schemas.openxmlformats.org, which SKILL.md, the README and the plugin manifest do not mentionpaper2blog/scripts/check_blog_package.py:48High confidence
- Contacts schemas.openxmlformats.org, which SKILL.md, the README and the plugin manifest do not mentionhtml2pptx/scripts/font_embedder.py:54High confidence
Signal confidence: 474 facts
- Executable script in the frontmatter of the SKILL.mdidea_spark/SKILL.md:1Low confidence
- Network access in code of documentationidea_spark/references/host-runbook.md:45Low confidence
- Network access in prose of documentationidea_spark/references/retrieval-runbook.md:7Low confidence
- Network access in prose of documentationidea_spark/references/retrieval-runbook.md:27Low confidence
- Dangerous shell operation in prose of documentationidea_spark/references/setup.md:19Low confidence
- Network access in prose of documentationidea_spark/references/setup.md:25Low confidence
- Network access in prose of documentationidea_spark/references/setup.md:26Low confidence
- Network access in prose of documentationidea_spark/references/setup.md:27Low confidence
- Network access in prose of documentationidea_spark/references/setup.md:28Low confidence
- Access to secrets in prose of documentation: a variable, placeholder or call, not a stored valueidea_spark/references/setup.md:28Low confidence
- Access to secrets in prose of documentationidea_spark/references/setup.md:29Low confidence
- Access to secrets in prose of documentationidea_spark/references/source-routing.md:14Low confidence
- Network access in prose of documentationidea_spark/references/source-routing.md:20Low confidence
- Network access in prose of documentationidea_spark/references/source-routing.md:21Low confidence
- Network access in prose of documentationidea_spark/references/source-routing.md:22Low confidence
- Access to secrets in prose of documentationidea_spark/references/source-routing.md:22Low confidence
- Executable script in prose of a file that runsidea_spark/scripts/_merge.py:1Low confidence
- Executable script in prose of a file that runsidea_spark/scripts/_time_guard.py:1Low confidence
- Executable script in prose of a file that runsidea_spark/scripts/dedup_merge.py:1Low confidence
- Executable script in prose of a file that runsidea_spark/scripts/extract_user_refs.py:1Low confidence
- Network access in prose of a file that runsidea_spark/scripts/extract_user_refs.py:3Low confidence
- Network access in prose of a file that runsidea_spark/scripts/extract_user_refs.py:4Low confidence
- Executable script in prose of a file that runsidea_spark/scripts/fetch_sections.py:1Low confidence
- Network access in code of a file that runsidea_spark/scripts/fetch_sections.py:113High confidence
- Network access in code of a file that runsidea_spark/scripts/fetch_sections.py:114High confidence
- Network access in code of a file that runsidea_spark/scripts/fetch_sections.py:115High confidence
- Network access in code of a file that runsidea_spark/scripts/fetch_sections.py:131High confidence
- Network access in code of a file that runsidea_spark/scripts/fetch_sections.py:132High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueidea_spark/scripts/fetch_sections.py:292Low confidence
- Network access in code of a file that runsidea_spark/scripts/fetch_sections.py:294High confidence
- Network access in code of a file that runsidea_spark/scripts/fetch_sections.py:295High confidence
- Network access in code of a file that runsidea_spark/scripts/fetch_sections.py:300High confidence
- Network access in code of a file that runsidea_spark/scripts/fetch_sections.py:301High confidence
- Network access in code of a file that runsidea_spark/scripts/fetch_sections.py:302High confidence
- Network access in code of a file that runsidea_spark/scripts/fetch_sections.py:303High confidence
- Access to secrets in code of a file that runsidea_spark/scripts/fetch_sections.py:303High confidence
- Network access in code of a file that runsidea_spark/scripts/fetch_sections.py:304High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueidea_spark/scripts/fetch_sections.py:304Low confidence
- Network access in code of a file that runsidea_spark/scripts/fetch_sections.py:305High confidence
- Network access in code of a file that runsidea_spark/scripts/fetch_sections.py:333High confidence
- Network access in code of a file that runsidea_spark/scripts/fetch_sections.py:334High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueidea_spark/scripts/fetch_sections.py:334Low confidence
- Network access in code of a file that runsidea_spark/scripts/fetch_sections.py:335High confidence
- Network access in code of a file that runsidea_spark/scripts/fetch_sections.py:340High confidence
- Network access in code of a file that runsidea_spark/scripts/fetch_sections.py:341High confidence
- Network access in code of a file that runsidea_spark/scripts/fetch_sections.py:342High confidence
- Network access in code of a file that runsidea_spark/scripts/fetch_sections.py:343High confidence
- Access to secrets in code of a file that runsidea_spark/scripts/fetch_sections.py:343High confidence
- Network access in code of a file that runsidea_spark/scripts/fetch_sections.py:344High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueidea_spark/scripts/fetch_sections.py:344Low confidence
and 424 more
Only the first 500 facts are listed.
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md ResearchStudio-Idea/evaluation/idea_quality/SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md ResearchStudio-Idea/evaluation/idea_quality/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md ResearchStudio-Idea/evaluation/idea_quality/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md ResearchStudio-Idea/evaluation/idea_quality/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md ResearchStudio-Idea/evaluation/idea_quality/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md ResearchStudio-Idea/evaluation/idea_quality/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.
Explore alternatives and comparisons
Add this badge to your README
It updates every night and links to this page.
[](https://hotskills.dev/skill/microsoft-researchstudio/)