Individual skill
ts-figure-optimize
The suite's SOLE figure vectorizer: turn ONE raster scientific figure (a PNG/JPG, e.g. a gpt-image-2 schematic) into an editable, publication-ready figure via DrawAI's **key-free HYBRID** — local perception (SAM3 region detection + PaddleOCR + Box-IR layout, no account) then a deterministic hybrid build that keeps the approved render **pixel-exact** (a whole-canvas raster) and lays an **editable <text> overlay** on top (~0.91 SSIM), exported as a self-contained SVG + vector PDF + an editable PPTX. The render's full richness is preserved EXACTLY (it IS the approved image) while every label becomes editable. The original raster is always kept. Hybrid is the ONLY mode used: there is no Codex full-vector redraw (legacy/off — it needs an account, and a redraw of a dense figure loses fidelity) and no Claude-redraw fallback. If this runtime cannot be provisioned, the caller keeps the approved PNG as-is — never a lossy redraw. Independent of the paper pipeline — give it any figure image.
skills/ts-figure-optimize/SKILL.md
Source commit c17149def034bc777462de612926c8e3b6d01b8c
What was checked
- Matches the observed repository HEAD
- Yes
- Scanner rules are current
- No
- Repository scan complete
- No
- Skill scan complete
- No
- Observed behavior
- Not checked yet
- Last checked
- Nov 10, 2026
These are observations at the recorded commit, not a guarantee of safety. Review the source before running it.
Install this skill
Choose an agent in your Stack or copy a command below. Commands fetch the pinned commit and copy only this skill directory. Existing destinations are refused. Copying a command does not install anything.
An install command is unavailable: current rules, complete repository and skill scans, an eligible behavior level and a permitted license are required.
Repository context
- Repository stars (not skill ratings)
- 1,200
- Repository last updated
- Aug 22, 2026
- License
- MIT
Observed agent integration: No specific integration evidence. Standard SKILL.md installation does not imply verified compatibility.
- research Derived category
Files and excerpt
File metadata and permitted, redacted excerpts come from the recorded scan. Source links are pinned to that commit.
Browse files
SKILL.mdcore · 20,211 bytesSKILL.mdcore · 20,211 bytesSKILL.mdcore · 20,211 bytesSKILL.mdcore · 20,211 bytesSKILL.mdcore · 20,211 bytesSKILL.mdcore · 20,211 bytesSKILL.mdcore · 20,211 bytesengine/ENGINE_VERSION.txtdoc · 159 bytesengine/LICENSEasset · 11,357 bytesengine/README.mddoc · 8,568 bytesengine/configs/drawai/config.template.yamlasset · 1,772 bytesengine/configs/drawai/config.yamlasset · 1,772 bytesengine/configs/drawai/config_fast_poster.yamlasset · 1,707 bytesengine/configs/drawai/harbor_smoke_2048.yamlasset · 1,740 bytesengine/pyproject.tomlasset · 1,119 bytesengine/scripts/assets_visualization.pyruns · 13,402 bytesengine/scripts/bootstrap_drawai_local_runtime.shruns · 8,061 bytesengine/scripts/build_assemble_debug_report.pyruns · 55,794 bytesengine/scripts/build_drawai_run_comparison.pyruns · 19,085 bytesengine/scripts/build_editability_paper_figure.pyruns · 20,106 bytesengine/scripts/build_element_distribution_map.pyruns · 19,288 bytesengine/scripts/build_scheme_a_overview_figure.pyruns · 12,027 bytesengine/scripts/download_drawai_local_models.shruns · 14,116 bytesengine/scripts/ensure_local_codex_gateway.pyruns · 6,048 bytesengine/scripts/run_codex_element_analysis.pyruns · 59,076 bytesengine/scripts/run_codex_python_sdk_imagegen.pyruns · 6,229 bytesengine/scripts/run_codex_python_sdk_svg_stage.pyruns · 8,499 bytesengine/scripts/run_drawai_experiment.pyruns · 32,508 bytesengine/scripts/run_drawai_explainer_frontend.pyruns · 132 bytesengine/scripts/run_drawai_workbench_frontend.shruns · 2,720 bytesengine/scripts/start_drawai_workbench_local.shruns · 7,109 bytesengine/src/drawai/README.mddoc · 905 bytesengine/src/drawai/__init__.pyruns · 1,013 bytesengine/src/drawai/_local_runtime_fs.pyruns · 521 bytesengine/src/drawai/_vendor/__init__.pyruns · 45 bytesengine/src/drawai/_vendor/svg_pptx_converter/__init__.pyruns · 72 bytesengine/src/drawai/_vendor/svg_pptx_converter/__main__.pyruns · 80 bytesengine/src/drawai/_vendor/svg_pptx_converter/cli.pyruns · 5,674 bytesengine/src/drawai/_vendor/svg_pptx_converter/config.pyruns · 21,656 bytesengine/src/drawai/_vendor/svg_pptx_converter/pptx_animations.pyruns · 26,755 bytesengine/src/drawai/_vendor/svg_pptx_converter/project_utils.pyruns · 15,750 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_finalize/__init__.pyruns · 471 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_finalize/align_embed_images.pyruns · 16,106 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_finalize/crop_images.pyruns · 11,432 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_finalize/embed_icons.pyruns · 14,460 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_finalize/embed_images.pyruns · 9,553 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_finalize/fix_image_aspect.pyruns · 13,371 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_finalize/flatten_tspan.pyruns · 26,333 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_finalize/svg_rect_to_path.pyruns · 10,314 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_to_pptx/__init__.pyruns · 465 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_to_pptx/animation_config.pyruns · 9,659 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_to_pptx/drawingml_context.pyruns · 6,426 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_to_pptx/drawingml_converter.pyruns · 22,039 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_to_pptx/drawingml_elements.pyruns · 70,357 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_to_pptx/drawingml_paths.pyruns · 13,801 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_to_pptx/drawingml_styles.pyruns · 21,922 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_to_pptx/drawingml_utils.pyruns · 15,987 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_to_pptx/pptx_builder.pyruns · 43,723 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_to_pptx/pptx_cli.pyruns · 28,682 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_to_pptx/pptx_dimensions.pyruns · 4,363 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_to_pptx/pptx_discovery.pyruns · 2,938 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_to_pptx/pptx_media.pyruns · 4,534 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_to_pptx/pptx_narration.pyruns · 7,371 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_to_pptx/pptx_notes.pyruns · 4,691 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_to_pptx/pptx_slide_xml.pyruns · 4,738 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_to_pptx/tspan_flattener.pyruns · 1,748 bytesengine/src/drawai/_vendor/svg_pptx_converter/svg_to_pptx/use_expander.pyruns · 4,233 bytesengine/src/drawai/agent_cli_svg.pyruns · 22,808 bytesengine/src/drawai/artifacts.pyruns · 7,566 bytesengine/src/drawai/asset_geometry.pyruns · 9,161 bytesengine/src/drawai/asset_manifest_utils.pyruns · 6,385 bytesengine/src/drawai/asset_materialization.pyruns · 28,994 bytesengine/src/drawai/asset_policy.pyruns · 36,379 bytesengine/src/drawai/asset_selection_loop.pyruns · 13,690 bytesengine/src/drawai/cli.pyruns · 6,220 bytesengine/src/drawai/codex_cli.pyruns · 1,945 bytesengine/src/drawai/codex_python_sdk_imagegen.pyruns · 24,606 bytesengine/src/drawai/codex_python_sdk_svg.pyruns · 36,654 bytesengine/src/drawai/codex_svg_tool_loop.pyruns · 15,794 bytesengine/src/drawai/config.pyruns · 27,391 bytesengine/src/drawai/core/__init__.pyruns · 365 bytesengine/src/drawai/core/artifacts.pyruns · 3,012 bytesengine/src/drawai/core/context.pyruns · 375 bytesengine/src/drawai/core/errors.pyruns · 425 bytesengine/src/drawai/core/runner.pyruns · 4,436 bytesengine/src/drawai/core/stage.pyruns · 1,328 bytesengine/src/drawai/device_profiles.pyruns · 1,599 bytesengine/src/drawai/domain/__init__.pyruns · 35 bytesengine/src/drawai/domain/box_ir/__init__.pyruns · 595 bytesengine/src/drawai/domain/box_ir/document.pyruns · 15,236 bytesengine/src/drawai/domain/box_ir/merge.pyruns · 17,847 bytesengine/src/drawai/domain/box_ir/prompt_ir.pyruns · 2,196 bytesengine/src/drawai/experiment_artifacts.pyruns · 3,260 bytesengine/src/drawai/explainer_app.pyruns · 94,870 bytesengine/src/drawai/http_utils.pyruns · 2,624 bytesengine/src/drawai/image_normalization.pyruns · 4,492 bytesengine/src/drawai/local_cli.pyruns · 35,595 bytesengine/src/drawai/local_runtime.pyruns · 35,369 bytesengine/src/drawai/local_services.pyruns · 13,746 bytesengine/src/drawai/local_setup.pyruns · 31,336 bytesengine/src/drawai/model_runtime.pyruns · 12,785 bytesengine/src/drawai/ocr_provider.pyruns · 18,671 bytesengine/src/drawai/overlays.pyruns · 18,776 bytesengine/src/drawai/pipeline.pyruns · 183,917 bytesengine/src/drawai/pptx_inspector.pyruns · 1,546 bytesengine/src/drawai/prompt_plan.pyruns · 479 bytesengine/src/drawai/providers/__init__.pyruns · 406 bytesengine/src/drawai/providers/protocols.pyruns · 1,017 bytesengine/src/drawai/providers/registry.pyruns · 1,796 bytesengine/src/drawai/public_stages.pyruns · 13,736 bytesengine/src/drawai/rmbg_client.pyruns · 4,572 bytesengine/src/drawai/sam3_client.pyruns · 18,498 bytesengine/src/drawai/scientific_svg_profile.pyruns · 14,416 bytesengine/src/drawai/server_cli.pyruns · 19,333 bytesengine/src/drawai/stages/__init__.pyruns · 342 bytesengine/src/drawai/stages/file_backed.pyruns · 8,138 bytesengine/src/drawai/svg_generation_loop.pyruns · 110,811 bytesengine/src/drawai/svg_reference_utils.pyruns · 1,229 bytesengine/src/drawai/svg_to_ppt.pyruns · 41,262 bytesengine/src/drawai/svg_to_ppt_check.pyruns · 21,280 bytesengine/src/drawai/svg_validation.pyruns · 33,074 bytesengine/src/drawai/workbench/__init__.pyruns · 90 bytesengine/src/drawai/workbench/api.pyruns · 83,331 bytesengine/src/drawai/workbench/assets.pyruns · 17,803 bytesengine/src/drawai/workbench/models.pyruns · 2,975 bytesengine/src/drawai/workbench/runner.pyruns · 27,195 bytesengine/src/drawai/workbench/store.pyruns · 18,058 bytesengine/uv.lockasset · 266,676 bytesreferences/drawai_adapter.mddoc · 5,641 bytesreferences/failure_handling.mddoc · 2,150 bytesreferences/local_repair_strategy.mddoc · 4,442 bytesreferences/quality_metrics.mddoc · 5,767 bytesreferences/text_and_formula_rules.mddoc · 2,840 bytesreferences/workflow.mddoc · 2,355 bytesrequirements.txtdoc · 562 bytesscripts/_common.pyruns · 9,973 bytesscripts/_dotenv.pyruns · 1,650 bytesscripts/build_hybrid_pptx.pyruns · 11,773 bytesscripts/build_report.pyruns · 10,229 bytesscripts/check_vector_pdf.pyruns · 9,336 bytesscripts/compare_regions.pyruns · 6,673 bytesscripts/diff_overlay.pyruns · 3,393 bytesscripts/export_paper_figure.pyruns · 3,593 bytesscripts/fix_raster_backgrounds.pyruns · 12,601 bytesscripts/measure_similarity.pyruns · 5,862 bytesscripts/region_crops.pyruns · 5,043 bytesscripts/render_pptx.pyruns · 3,759 bytesscripts/render_svg.pyruns · 2,260 bytesscripts/run_hybrid.pyruns · 7,972 bytesscripts/run_preprocess_ir.pyruns · 2,021 bytesscripts/run_reconstruction.pyruns · 20,054 bytesscripts/setup_drawai.pyruns · 6,131 bytesscripts/verify_pptx_editability.pyruns · 3,959 bytesscripts/verify_text_and_formulas.pyruns · 7,127 bytesscripts/verify_text_gpt.pyruns · 6,575 bytesscripts/verify_waveforms.pyruns · 4,859 bytesscripts/vision_region_diff.pyruns · 8,541 bytesscripts/waveform_primitive.pyruns · 9,055 bytes
Read excerpt
# ts-figure-optimize — raster figure → editable HYBRID, the key-free DrawAI path
This is the suite's **only** figure vectorizer, and it runs DrawAI's **key-free HYBRID**: SAM3 segments
the layout and PaddleOCR reads the text **locally** (on a GPU box, no Claude/Codex account), then a
deterministic build keeps the approved render **pixel-exact** and lays an **editable `<text>` overlay**
on top — exported as a self-contained SVG + vector PDF + editable PPTX (~0.91 SSIM; ~63 editable text
boxes on the test figure). The figure's richness is preserved EXACTLY (the graphics ARE the approved
render) while every label becomes editable.
**Hybrid is the ONLY mode used.** The engine also contains a legacy Codex full-vector redraw
(`run_reconstruction.py`) — it is **off**: it needs an LLM account, and a full redraw of a dense figure
measurably loses fidelity vs the exact render (~0.67 vs 0.91 SSIM). So the suite rule is **HYBRID, or
else keep the approved PNG — never redraw.**