@prismer/runtime 2.2.55 → 2.2.63
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +574 -0
- package/apc/skills/releasing-test/SKILL.md +9 -0
- package/built-in-skills/agent-coordination/SKILL.md +21 -4
- package/built-in-skills/agent-meta/SKILL.md +11 -0
- package/built-in-skills/assets/SKILL.md +1 -1
- package/built-in-skills/canvas-design/SKILL.md +3 -3
- package/built-in-skills/canvas-design/canvas-fonts/IBMPlexSerif-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/InstrumentSerif-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/LICENSE-SOURCES.md +16 -0
- package/built-in-skills/claim-agent-ownership/SKILL.md +7 -3
- package/built-in-skills/claude-api/SKILL.md +1 -1
- package/built-in-skills/claude-api/python/claude-api/README.md +2 -2
- package/built-in-skills/claude-api/python/claude-api/tool-use.md +9 -5
- package/built-in-skills/claude-api/python/managed-agents/README.md +11 -1
- package/built-in-skills/claude-api/shared/error-codes.md +4 -4
- package/built-in-skills/claude-api/shared/managed-agents-client-patterns.md +4 -2
- package/built-in-skills/claude-api/shared/managed-agents-core.md +1 -2
- package/built-in-skills/claude-api/shared/managed-agents-events.md +41 -22
- package/built-in-skills/claude-api/shared/managed-agents-multiagent.md +5 -3
- package/built-in-skills/claude-api/shared/managed-agents-self-hosted-sandboxes.md +1 -1
- package/built-in-skills/claude-api/shared/managed-agents-tools.md +2 -3
- package/built-in-skills/claude-api/shared/model-migration.md +3 -3
- package/built-in-skills/claude-api/shared/models.md +1 -1
- package/built-in-skills/claude-api/typescript/claude-api/batches.md +1 -1
- package/built-in-skills/claude-api/typescript/claude-api/files-api.md +3 -1
- package/built-in-skills/claude-api/typescript/claude-api/tool-use.md +8 -2
- package/built-in-skills/claude-api/typescript/managed-agents/README.md +8 -2
- package/built-in-skills/codebase-design/SKILL.md +15 -1
- package/built-in-skills/codebase-design/references/requesting-code-review/GUIDE.md +291 -0
- package/built-in-skills/codebase-design/references/requesting-code-review/LICENSE +21 -0
- package/built-in-skills/codebase-design/references/requesting-code-review/LICENSE.superpowers +21 -0
- package/built-in-skills/codebase-design/references/requesting-code-review/NOTICE.md +37 -0
- package/built-in-skills/codebase-design/references/sdlc-review/GUIDE.md +130 -0
- package/built-in-skills/codebase-design/references/sdlc-review/LICENSE +21 -0
- package/built-in-skills/codebase-design/references/sdlc-review/NOTICE.md +17 -0
- package/built-in-skills/codebase-design/references/simplify-code/GUIDE.md +269 -0
- package/built-in-skills/codebase-design/references/simplify-code/LICENSE +21 -0
- package/built-in-skills/codebase-design/references/simplify-code/NOTICE.md +37 -0
- package/built-in-skills/competitor-intelligence/LICENSE +21 -0
- package/built-in-skills/competitor-intelligence/NOTICE.md +6 -0
- package/built-in-skills/competitor-intelligence/SKILL.md +125 -0
- package/built-in-skills/competitor-intelligence/scripts/watch_state.py +160 -0
- package/built-in-skills/conversation-compaction/SKILL.md +3 -0
- package/built-in-skills/council-creator/SKILL.md +4 -3
- package/built-in-skills/diagnosing-bugs/SKILL.md +12 -0
- package/built-in-skills/diagnosing-bugs/references/desktop-dom/GUIDE.md +64 -0
- package/built-in-skills/diagnosing-bugs/references/desktop-dom/LICENSE +21 -0
- package/built-in-skills/diagnosing-bugs/references/desktop-dom/NOTICE.md +17 -0
- package/built-in-skills/diagnosing-bugs/references/systematic-debugging/GUIDE.md +410 -0
- package/built-in-skills/diagnosing-bugs/references/systematic-debugging/LICENSE +21 -0
- package/built-in-skills/diagnosing-bugs/references/systematic-debugging/LICENSE.superpowers +21 -0
- package/built-in-skills/diagnosing-bugs/references/systematic-debugging/NOTICE.md +37 -0
- package/built-in-skills/doc-coauthoring/SKILL.md +6 -0
- package/built-in-skills/doc-coauthoring/references/humanizer/GUIDE.md +647 -0
- package/built-in-skills/doc-coauthoring/references/humanizer/LICENSE +21 -0
- package/built-in-skills/doc-coauthoring/references/humanizer/LICENSE.hermes +21 -0
- package/built-in-skills/doc-coauthoring/references/humanizer/PROVENANCE.md +7 -0
- package/built-in-skills/document-actions/LICENSE +21 -0
- package/built-in-skills/document-actions/NOTICE.md +21 -0
- package/built-in-skills/document-actions/SKILL.md +46 -0
- package/built-in-skills/evidence-citations/LICENSE +21 -0
- package/built-in-skills/evidence-citations/NOTICE.md +21 -0
- package/built-in-skills/evidence-citations/SKILL.md +46 -0
- package/built-in-skills/evidence-citations/references/citation-formats.md +68 -0
- package/built-in-skills/evidence-citations/references/grounding-rationale.md +64 -0
- package/built-in-skills/evidence-citations/scripts/sources.py +720 -0
- package/built-in-skills/frontend-design/SKILL.md +6 -0
- package/built-in-skills/frontend-design/references/claude-design/GUIDE.md +650 -0
- package/built-in-skills/frontend-design/references/claude-design/LICENSE +21 -0
- package/built-in-skills/frontend-design/references/claude-design/LICENSE.hermes +21 -0
- package/built-in-skills/frontend-design/references/claude-design/PROVENANCE.md +7 -0
- package/built-in-skills/image-generate/SKILL.md +5 -0
- package/built-in-skills/image-generate/scripts/generate-and-deliver.mjs +24 -3
- package/built-in-skills/mcp-builder/reference/evaluation.md +11 -2
- package/built-in-skills/mcp-builder/reference/node_mcp_server.md +34 -5
- package/built-in-skills/mcp-builder/reference/python_mcp_server.md +6 -2
- package/built-in-skills/mcp-builder/scripts/connections.py +1 -1
- package/built-in-skills/mcp-builder/scripts/evaluation.py +52 -34
- package/built-in-skills/mcp-builder/scripts/requirements.txt +2 -2
- package/built-in-skills/meeting-actions/LICENSE +21 -0
- package/built-in-skills/meeting-actions/NOTICE.md +21 -0
- package/built-in-skills/meeting-actions/SKILL.md +48 -0
- package/built-in-skills/memory/SKILL.md +27 -3
- package/built-in-skills/memory/references/llm-wiki/GUIDE.md +468 -0
- package/built-in-skills/memory/references/llm-wiki/LICENSE +21 -0
- package/built-in-skills/memory/references/llm-wiki/NOTICE.md +4 -0
- package/built-in-skills/memory/references/llm-wiki/scripts/lint_wiki.py +84 -0
- package/built-in-skills/memory/references/llm-wiki/scripts/requirements.txt +1 -0
- package/built-in-skills/memory/references/llm-wiki/templates/SCHEMA.md +19 -0
- package/built-in-skills/memory/references/llm-wiki/templates/index.md +9 -0
- package/built-in-skills/memory/references/llm-wiki/templates/log.md +4 -0
- package/built-in-skills/memory-dream/SKILL.md +8 -15
- package/built-in-skills/memory-import/SKILL.md +51 -0
- package/built-in-skills/office-artifacts/NOTICE.md +15 -0
- package/built-in-skills/office-artifacts/SKILL.md +20 -0
- package/built-in-skills/office-artifacts/references/RESOURCE-LIMITS.md +44 -0
- package/built-in-skills/office-artifacts/references/docx/GUIDE.md +196 -0
- package/built-in-skills/office-artifacts/references/docx/LICENSE +21 -0
- package/built-in-skills/office-artifacts/references/docx/NOTICE.md +21 -0
- package/built-in-skills/office-artifacts/references/docx/references/revisions-and-comments.md +88 -0
- package/built-in-skills/office-artifacts/references/docx/scripts/docx_comments.py +292 -0
- package/built-in-skills/office-artifacts/references/docx/scripts/docx_common.py +93 -0
- package/built-in-skills/office-artifacts/references/docx/scripts/docx_create.py +177 -0
- package/built-in-skills/office-artifacts/references/docx/scripts/docx_edit.py +250 -0
- package/built-in-skills/office-artifacts/references/docx/scripts/docx_read.py +169 -0
- package/built-in-skills/office-artifacts/references/docx/scripts/docx_revisions.py +149 -0
- package/built-in-skills/office-artifacts/references/docx/scripts/docx_template.py +70 -0
- package/built-in-skills/office-artifacts/references/docx/scripts/docx_validate.py +155 -0
- package/built-in-skills/office-artifacts/references/docx/tests/test_docx_skill.py +525 -0
- package/built-in-skills/office-artifacts/references/pdf/GUIDE.md +125 -0
- package/built-in-skills/office-artifacts/references/pdf/LICENSE +21 -0
- package/built-in-skills/office-artifacts/references/pdf/NOTICE.md +21 -0
- package/built-in-skills/office-artifacts/references/pdf/references/forms.md +99 -0
- package/built-in-skills/office-artifacts/references/pdf/references/nano-pdf-editing.md +40 -0
- package/built-in-skills/office-artifacts/references/pdf/references/ocr-extraction.md +165 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/_raster.py +87 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/extract_marker.py +95 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/extract_pymupdf.py +107 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_create.py +153 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_fill_form.py +97 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_form_layout.py +168 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_make_form.py +145 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_merge.py +50 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_meta.py +123 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_page_image.py +101 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_read.py +153 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_secure.py +71 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_split.py +86 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_stamp.py +145 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_watermark.py +51 -0
- package/built-in-skills/office-artifacts/references/pdf/tests/test_pdf_skill.py +414 -0
- package/built-in-skills/office-artifacts/references/powerpoint/GUIDE.md +220 -0
- package/built-in-skills/office-artifacts/references/powerpoint/LICENSE +21 -0
- package/built-in-skills/office-artifacts/references/powerpoint/NOTICE.md +21 -0
- package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_create.py +214 -0
- package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_edit.py +442 -0
- package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_from_template.py +88 -0
- package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_read.py +131 -0
- package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_render.py +104 -0
- package/built-in-skills/office-artifacts/references/powerpoint/tests/test_powerpoint_skill.py +478 -0
- package/built-in-skills/office-artifacts/references/xlsx/GUIDE.md +196 -0
- package/built-in-skills/office-artifacts/references/xlsx/LICENSE +21 -0
- package/built-in-skills/office-artifacts/references/xlsx/NOTICE.md +21 -0
- package/built-in-skills/office-artifacts/references/xlsx/references/restructuring.md +74 -0
- package/built-in-skills/office-artifacts/references/xlsx/scripts/csv_to_xlsx.py +108 -0
- package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_create.py +259 -0
- package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_edit.py +269 -0
- package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_read.py +160 -0
- package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_recalc.py +111 -0
- package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_restructure.py +418 -0
- package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_to_csv.py +69 -0
- package/built-in-skills/office-artifacts/references/xlsx/tests/test_xlsx_skill.py +542 -0
- package/built-in-skills/office-artifacts/tests/test_resource_regressions.py +272 -0
- package/built-in-skills/persona-generator/SKILL.md +9 -9
- package/built-in-skills/pkf-svg/SKILL.md +5 -0
- package/built-in-skills/pkf-svg/references/architecture-diagram/GUIDE.md +148 -0
- package/built-in-skills/pkf-svg/references/architecture-diagram/LICENSE +21 -0
- package/built-in-skills/pkf-svg/references/architecture-diagram/LICENSE.hermes +21 -0
- package/built-in-skills/pkf-svg/references/architecture-diagram/PROVENANCE.md +7 -0
- package/built-in-skills/pkf-svg/references/architecture-diagram/templates/template.html +345 -0
- package/built-in-skills/pkf-writing/SKILL.md +36 -14
- package/built-in-skills/prismer-airtable/LICENSE +21 -0
- package/built-in-skills/prismer-airtable/NOTICE.md +11 -0
- package/built-in-skills/prismer-airtable/SKILL.md +248 -0
- package/built-in-skills/prismer-airtable/scripts/airtable_client.py +76 -0
- package/built-in-skills/prismer-apple-notes/LICENSE +21 -0
- package/built-in-skills/prismer-apple-notes/NOTICE.md +17 -0
- package/built-in-skills/prismer-apple-notes/SKILL.md +118 -0
- package/built-in-skills/prismer-apple-notes/scripts/readiness.py +47 -0
- package/built-in-skills/prismer-apple-reminders/LICENSE +21 -0
- package/built-in-skills/prismer-apple-reminders/NOTICE.md +17 -0
- package/built-in-skills/prismer-apple-reminders/SKILL.md +155 -0
- package/built-in-skills/prismer-apple-reminders/scripts/readiness.py +47 -0
- package/built-in-skills/prismer-ascii-video/LICENSE +21 -0
- package/built-in-skills/prismer-ascii-video/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-ascii-video/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-ascii-video/README.md +290 -0
- package/built-in-skills/prismer-ascii-video/SKILL.md +252 -0
- package/built-in-skills/prismer-ascii-video/provenance/category-DESCRIPTION.md +3 -0
- package/built-in-skills/prismer-ascii-video/references/architecture.md +807 -0
- package/built-in-skills/prismer-ascii-video/references/composition.md +900 -0
- package/built-in-skills/prismer-ascii-video/references/effects.md +1877 -0
- package/built-in-skills/prismer-ascii-video/references/inputs.md +693 -0
- package/built-in-skills/prismer-ascii-video/references/optimization.md +688 -0
- package/built-in-skills/prismer-ascii-video/references/scenes.md +1018 -0
- package/built-in-skills/prismer-ascii-video/references/shaders.md +1408 -0
- package/built-in-skills/prismer-ascii-video/references/troubleshooting.md +360 -0
- package/built-in-skills/prismer-baoyu-infographic/LICENSE +21 -0
- package/built-in-skills/prismer-baoyu-infographic/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-baoyu-infographic/LICENSE.origin +21 -0
- package/built-in-skills/prismer-baoyu-infographic/PORT_NOTES.md +37 -0
- package/built-in-skills/prismer-baoyu-infographic/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-baoyu-infographic/SKILL.md +240 -0
- package/built-in-skills/prismer-baoyu-infographic/references/analysis-framework.md +182 -0
- package/built-in-skills/prismer-baoyu-infographic/references/base-prompt.md +43 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/bento-grid.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/binary-comparison.md +48 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/bridge.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/circular-flow.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/comic-strip.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/comparison-matrix.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/dashboard.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/dense-modules.md +72 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/funnel.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/hierarchical-layers.md +48 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/hub-spoke.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/iceberg.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/isometric-map.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/jigsaw.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/linear-progression.md +48 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/periodic-table.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/story-mountain.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/structural-breakdown.md +48 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/tree-branching.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/venn-diagram.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/winding-roadmap.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/structured-content-template.md +244 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/aged-academia.md +36 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/bold-graphic.md +36 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/chalkboard.md +61 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/claymation.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/corporate-memphis.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/craft-handmade.md +44 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/cyberpunk-neon.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/hand-drawn-edu.md +63 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/ikea-manual.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/kawaii.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/knolling.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/lego-brick.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/morandi-journal.md +60 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/origami.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/pixel-art.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/pop-laboratory.md +48 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/retro-pop-grid.md +47 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/storybook-watercolor.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/subway-map.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/technical-schematic.md +36 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/ui-wireframe.md +29 -0
- package/built-in-skills/prismer-blocked-page-recovery/LICENSE +21 -0
- package/built-in-skills/prismer-blocked-page-recovery/NOTICE.md +17 -0
- package/built-in-skills/prismer-blocked-page-recovery/SKILL.md +158 -0
- package/built-in-skills/prismer-blocked-page-recovery/scripts/recover_page.py +311 -0
- package/built-in-skills/prismer-box/LICENSE +21 -0
- package/built-in-skills/prismer-box/NOTICE.md +11 -0
- package/built-in-skills/prismer-box/SKILL.md +147 -0
- package/built-in-skills/prismer-box/references/bulk-operations.md +43 -0
- package/built-in-skills/prismer-box/references/cli-guide.md +133 -0
- package/built-in-skills/prismer-box/references/content-workflows.md +86 -0
- package/built-in-skills/prismer-box/references/hubs.md +77 -0
- package/built-in-skills/prismer-box/references/oauth-setup.md +92 -0
- package/built-in-skills/prismer-box/references/rest-api.md +37 -0
- package/built-in-skills/prismer-box/references/sdk-development.md +85 -0
- package/built-in-skills/prismer-box/references/search-and-ai.md +147 -0
- package/built-in-skills/prismer-box/references/troubleshooting.md +33 -0
- package/built-in-skills/prismer-box/references/webhooks-and-events.md +43 -0
- package/built-in-skills/prismer-codebase-inspection/LICENSE +21 -0
- package/built-in-skills/prismer-codebase-inspection/NOTICE.md +17 -0
- package/built-in-skills/prismer-codebase-inspection/SKILL.md +141 -0
- package/built-in-skills/prismer-computer-use/LICENSE +21 -0
- package/built-in-skills/prismer-computer-use/NOTICE.md +17 -0
- package/built-in-skills/prismer-computer-use/SKILL.md +372 -0
- package/built-in-skills/prismer-design-md/LICENSE +21 -0
- package/built-in-skills/prismer-design-md/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-design-md/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-design-md/SKILL.md +227 -0
- package/built-in-skills/prismer-design-md/templates/starter.md +99 -0
- package/built-in-skills/prismer-email-inbox-triage/LICENSE +21 -0
- package/built-in-skills/prismer-email-inbox-triage/NOTICE.md +11 -0
- package/built-in-skills/prismer-email-inbox-triage/SKILL.md +116 -0
- package/built-in-skills/prismer-findmy/LICENSE +21 -0
- package/built-in-skills/prismer-findmy/NOTICE.md +17 -0
- package/built-in-skills/prismer-findmy/SKILL.md +150 -0
- package/built-in-skills/prismer-findmy/scripts/readiness.py +47 -0
- package/built-in-skills/prismer-gif-search/LICENSE +21 -0
- package/built-in-skills/prismer-gif-search/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-gif-search/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-gif-search/SKILL.md +97 -0
- package/built-in-skills/prismer-gif-search/scripts/tenor.py +81 -0
- package/built-in-skills/prismer-github/LICENSE +21 -0
- package/built-in-skills/prismer-github/NOTICE.md +17 -0
- package/built-in-skills/prismer-github/SKILL.md +74 -0
- package/built-in-skills/prismer-github/references/auth.md +91 -0
- package/built-in-skills/prismer-github/references/ci-troubleshooting.md +193 -0
- package/built-in-skills/prismer-github/references/code-review.md +465 -0
- package/built-in-skills/prismer-github/references/conventional-commits.md +81 -0
- package/built-in-skills/prismer-github/references/github-api-cheatsheet.md +177 -0
- package/built-in-skills/prismer-github/references/issue-to-pr.md +74 -0
- package/built-in-skills/prismer-github/references/issues.md +336 -0
- package/built-in-skills/prismer-github/references/pr-workflow.md +346 -0
- package/built-in-skills/prismer-github/references/repo-management.md +484 -0
- package/built-in-skills/prismer-github/references/review-output-template.md +84 -0
- package/built-in-skills/prismer-github/scripts/ensure-gh.py +132 -0
- package/built-in-skills/prismer-github/scripts/gh-env.sh +25 -0
- package/built-in-skills/prismer-github/scripts/git-credential-token.py +68 -0
- package/built-in-skills/prismer-github/scripts/github-api.py +71 -0
- package/built-in-skills/prismer-github/scripts/github-context.py +28 -0
- package/built-in-skills/prismer-github/templates/bug-report.md +35 -0
- package/built-in-skills/prismer-github/templates/feature-request.md +31 -0
- package/built-in-skills/prismer-github/templates/pr-body-bugfix.md +35 -0
- package/built-in-skills/prismer-github/templates/pr-body-feature.md +33 -0
- package/built-in-skills/prismer-google-workspace/LICENSE +21 -0
- package/built-in-skills/prismer-google-workspace/NOTICE.md +11 -0
- package/built-in-skills/prismer-google-workspace/SKILL.md +369 -0
- package/built-in-skills/prismer-google-workspace/references/daily-brief.md +65 -0
- package/built-in-skills/prismer-google-workspace/references/gmail-search-syntax.md +63 -0
- package/built-in-skills/prismer-google-workspace/scripts/_hermes_home.py +17 -0
- package/built-in-skills/prismer-google-workspace/scripts/_private_state.py +39 -0
- package/built-in-skills/prismer-google-workspace/scripts/google_api.py +1339 -0
- package/built-in-skills/prismer-google-workspace/scripts/gws_bridge.py +121 -0
- package/built-in-skills/prismer-google-workspace/scripts/setup.py +563 -0
- package/built-in-skills/prismer-google-workspace/tests/test_productivity_regressions.py +214 -0
- package/built-in-skills/prismer-hermes-agent/LICENSE +21 -0
- package/built-in-skills/prismer-hermes-agent/NOTICE.md +17 -0
- package/built-in-skills/prismer-hermes-agent/SKILL.md +247 -0
- package/built-in-skills/prismer-hermes-agent/references/background-systems.md +108 -0
- package/built-in-skills/prismer-hermes-agent/references/cli-reference.md +158 -0
- package/built-in-skills/prismer-hermes-agent/references/configuration.md +96 -0
- package/built-in-skills/prismer-hermes-agent/references/contributor-guide.md +151 -0
- package/built-in-skills/prismer-hermes-agent/references/delegate-task-concurrency-diagnosis.md +47 -0
- package/built-in-skills/prismer-hermes-agent/references/desktop-plugins.md +215 -0
- package/built-in-skills/prismer-hermes-agent/references/native-mcp.md +351 -0
- package/built-in-skills/prismer-hermes-agent/references/petdex.md +82 -0
- package/built-in-skills/prismer-hermes-agent/references/portal-auth-for-third-party-apps.md +135 -0
- package/built-in-skills/prismer-hermes-agent/references/project-context-files.md +55 -0
- package/built-in-skills/prismer-hermes-agent/references/providers-and-models.md +81 -0
- package/built-in-skills/prismer-hermes-agent/references/security-privacy.md +73 -0
- package/built-in-skills/prismer-hermes-agent/references/slash-commands.md +119 -0
- package/built-in-skills/prismer-hermes-agent/references/themes.md +134 -0
- package/built-in-skills/prismer-hermes-agent/references/troubleshooting.md +87 -0
- package/built-in-skills/prismer-hermes-agent/references/tui-widgets.md +144 -0
- package/built-in-skills/prismer-hermes-agent/references/webhooks.md +219 -0
- package/built-in-skills/prismer-hermes-agent/references/windows-quirks.md +64 -0
- package/built-in-skills/prismer-hermes-agent/templates/clock.mjs +51 -0
- package/built-in-skills/prismer-hermes-agent/templates/plugin.js +97 -0
- package/built-in-skills/prismer-hermes-agent/templates/skin.yaml +49 -0
- package/built-in-skills/prismer-himalaya/LICENSE +21 -0
- package/built-in-skills/prismer-himalaya/NOTICE.md +11 -0
- package/built-in-skills/prismer-himalaya/SKILL.md +340 -0
- package/built-in-skills/prismer-himalaya/references/configuration.md +227 -0
- package/built-in-skills/prismer-himalaya/references/message-composition.md +206 -0
- package/built-in-skills/prismer-himalaya/scripts/compose_draft.py +48 -0
- package/built-in-skills/prismer-im-collab/SKILL.md +1 -1
- package/built-in-skills/prismer-imessage/LICENSE +21 -0
- package/built-in-skills/prismer-imessage/NOTICE.md +17 -0
- package/built-in-skills/prismer-imessage/SKILL.md +128 -0
- package/built-in-skills/prismer-imessage/scripts/readiness.py +47 -0
- package/built-in-skills/prismer-manim-video/LICENSE +21 -0
- package/built-in-skills/prismer-manim-video/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-manim-video/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-manim-video/README.md +23 -0
- package/built-in-skills/prismer-manim-video/SKILL.md +279 -0
- package/built-in-skills/prismer-manim-video/references/animation-design-thinking.md +161 -0
- package/built-in-skills/prismer-manim-video/references/animations.md +282 -0
- package/built-in-skills/prismer-manim-video/references/camera-and-3d.md +135 -0
- package/built-in-skills/prismer-manim-video/references/decorations.md +202 -0
- package/built-in-skills/prismer-manim-video/references/equations.md +216 -0
- package/built-in-skills/prismer-manim-video/references/graphs-and-data.md +163 -0
- package/built-in-skills/prismer-manim-video/references/mobjects.md +333 -0
- package/built-in-skills/prismer-manim-video/references/paper-explainer.md +255 -0
- package/built-in-skills/prismer-manim-video/references/production-quality.md +190 -0
- package/built-in-skills/prismer-manim-video/references/rendering.md +187 -0
- package/built-in-skills/prismer-manim-video/references/scene-planning.md +118 -0
- package/built-in-skills/prismer-manim-video/references/troubleshooting.md +135 -0
- package/built-in-skills/prismer-manim-video/references/updaters-and-trackers.md +260 -0
- package/built-in-skills/prismer-manim-video/references/visual-design.md +124 -0
- package/built-in-skills/prismer-manim-video/scripts/setup.sh +15 -0
- package/built-in-skills/prismer-maps/LICENSE +21 -0
- package/built-in-skills/prismer-maps/NOTICE.md +11 -0
- package/built-in-skills/prismer-maps/SKILL.md +240 -0
- package/built-in-skills/prismer-maps/scripts/maps_client.py +1324 -0
- package/built-in-skills/prismer-node-inspect-debugger/LICENSE +21 -0
- package/built-in-skills/prismer-node-inspect-debugger/NOTICE.md +17 -0
- package/built-in-skills/prismer-node-inspect-debugger/SKILL.md +347 -0
- package/built-in-skills/prismer-notion/LICENSE +21 -0
- package/built-in-skills/prismer-notion/NOTICE.md +11 -0
- package/built-in-skills/prismer-notion/SKILL.md +495 -0
- package/built-in-skills/prismer-notion/references/block-types.md +112 -0
- package/built-in-skills/prismer-obsidian/LICENSE +21 -0
- package/built-in-skills/prismer-obsidian/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-obsidian/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-obsidian/SKILL.md +80 -0
- package/built-in-skills/prismer-obsidian/provenance/category-DESCRIPTION.md +3 -0
- package/built-in-skills/prismer-obsidian/scripts/write_note.py +84 -0
- package/built-in-skills/prismer-p5js/LICENSE +21 -0
- package/built-in-skills/prismer-p5js/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-p5js/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-p5js/README.md +64 -0
- package/built-in-skills/prismer-p5js/SKILL.md +574 -0
- package/built-in-skills/prismer-p5js/references/animation.md +439 -0
- package/built-in-skills/prismer-p5js/references/color-systems.md +355 -0
- package/built-in-skills/prismer-p5js/references/core-api.md +410 -0
- package/built-in-skills/prismer-p5js/references/export-pipeline.md +534 -0
- package/built-in-skills/prismer-p5js/references/interaction.md +398 -0
- package/built-in-skills/prismer-p5js/references/shapes-and-geometry.md +300 -0
- package/built-in-skills/prismer-p5js/references/troubleshooting.md +532 -0
- package/built-in-skills/prismer-p5js/references/typography.md +302 -0
- package/built-in-skills/prismer-p5js/references/visual-effects.md +905 -0
- package/built-in-skills/prismer-p5js/references/webgl-and-3d.md +423 -0
- package/built-in-skills/prismer-p5js/scripts/export-frames.js +91 -0
- package/built-in-skills/prismer-p5js/scripts/render.sh +113 -0
- package/built-in-skills/prismer-p5js/scripts/serve.sh +25 -0
- package/built-in-skills/prismer-p5js/scripts/setup.sh +87 -0
- package/built-in-skills/prismer-p5js/templates/viewer.html +401 -0
- package/built-in-skills/prismer-popular-web-designs/LICENSE +21 -0
- package/built-in-skills/prismer-popular-web-designs/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-popular-web-designs/LICENSE.origin +21 -0
- package/built-in-skills/prismer-popular-web-designs/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-popular-web-designs/SKILL.md +218 -0
- package/built-in-skills/prismer-popular-web-designs/templates/airbnb.md +259 -0
- package/built-in-skills/prismer-popular-web-designs/templates/airtable.md +102 -0
- package/built-in-skills/prismer-popular-web-designs/templates/apple.md +326 -0
- package/built-in-skills/prismer-popular-web-designs/templates/bmw.md +193 -0
- package/built-in-skills/prismer-popular-web-designs/templates/cal.md +272 -0
- package/built-in-skills/prismer-popular-web-designs/templates/claude.md +325 -0
- package/built-in-skills/prismer-popular-web-designs/templates/clay.md +317 -0
- package/built-in-skills/prismer-popular-web-designs/templates/clickhouse.md +294 -0
- package/built-in-skills/prismer-popular-web-designs/templates/cohere.md +279 -0
- package/built-in-skills/prismer-popular-web-designs/templates/coinbase.md +142 -0
- package/built-in-skills/prismer-popular-web-designs/templates/composio.md +320 -0
- package/built-in-skills/prismer-popular-web-designs/templates/cursor.md +322 -0
- package/built-in-skills/prismer-popular-web-designs/templates/elevenlabs.md +278 -0
- package/built-in-skills/prismer-popular-web-designs/templates/expo.md +294 -0
- package/built-in-skills/prismer-popular-web-designs/templates/figma.md +233 -0
- package/built-in-skills/prismer-popular-web-designs/templates/framer.md +259 -0
- package/built-in-skills/prismer-popular-web-designs/templates/hashicorp.md +291 -0
- package/built-in-skills/prismer-popular-web-designs/templates/ibm.md +345 -0
- package/built-in-skills/prismer-popular-web-designs/templates/intercom.md +159 -0
- package/built-in-skills/prismer-popular-web-designs/templates/kraken.md +138 -0
- package/built-in-skills/prismer-popular-web-designs/templates/linear.app.md +380 -0
- package/built-in-skills/prismer-popular-web-designs/templates/lovable.md +311 -0
- package/built-in-skills/prismer-popular-web-designs/templates/minimax.md +270 -0
- package/built-in-skills/prismer-popular-web-designs/templates/mintlify.md +339 -0
- package/built-in-skills/prismer-popular-web-designs/templates/miro.md +121 -0
- package/built-in-skills/prismer-popular-web-designs/templates/mistral.ai.md +274 -0
- package/built-in-skills/prismer-popular-web-designs/templates/mongodb.md +279 -0
- package/built-in-skills/prismer-popular-web-designs/templates/notion.md +322 -0
- package/built-in-skills/prismer-popular-web-designs/templates/nvidia.md +306 -0
- package/built-in-skills/prismer-popular-web-designs/templates/ollama.md +280 -0
- package/built-in-skills/prismer-popular-web-designs/templates/opencode.ai.md +294 -0
- package/built-in-skills/prismer-popular-web-designs/templates/pinterest.md +243 -0
- package/built-in-skills/prismer-popular-web-designs/templates/posthog.md +269 -0
- package/built-in-skills/prismer-popular-web-designs/templates/raycast.md +281 -0
- package/built-in-skills/prismer-popular-web-designs/templates/replicate.md +274 -0
- package/built-in-skills/prismer-popular-web-designs/templates/resend.md +316 -0
- package/built-in-skills/prismer-popular-web-designs/templates/revolut.md +198 -0
- package/built-in-skills/prismer-popular-web-designs/templates/runwayml.md +257 -0
- package/built-in-skills/prismer-popular-web-designs/templates/sanity.md +370 -0
- package/built-in-skills/prismer-popular-web-designs/templates/sentry.md +275 -0
- package/built-in-skills/prismer-popular-web-designs/templates/spacex.md +207 -0
- package/built-in-skills/prismer-popular-web-designs/templates/spotify.md +259 -0
- package/built-in-skills/prismer-popular-web-designs/templates/stripe.md +335 -0
- package/built-in-skills/prismer-popular-web-designs/templates/supabase.md +268 -0
- package/built-in-skills/prismer-popular-web-designs/templates/superhuman.md +265 -0
- package/built-in-skills/prismer-popular-web-designs/templates/together.ai.md +276 -0
- package/built-in-skills/prismer-popular-web-designs/templates/uber.md +308 -0
- package/built-in-skills/prismer-popular-web-designs/templates/vercel.md +323 -0
- package/built-in-skills/prismer-popular-web-designs/templates/voltagent.md +336 -0
- package/built-in-skills/prismer-popular-web-designs/templates/warp.md +266 -0
- package/built-in-skills/prismer-popular-web-designs/templates/webflow.md +105 -0
- package/built-in-skills/prismer-popular-web-designs/templates/wise.md +186 -0
- package/built-in-skills/prismer-popular-web-designs/templates/x.ai.md +270 -0
- package/built-in-skills/prismer-popular-web-designs/templates/zapier.md +341 -0
- package/built-in-skills/prismer-product-price-monitor/LICENSE +21 -0
- package/built-in-skills/prismer-product-price-monitor/NOTICE.md +11 -0
- package/built-in-skills/prismer-product-price-monitor/SKILL.md +97 -0
- package/built-in-skills/prismer-product-price-monitor/scripts/watch_state.py +116 -0
- package/built-in-skills/prismer-python-debugpy/LICENSE +21 -0
- package/built-in-skills/prismer-python-debugpy/NOTICE.md +17 -0
- package/built-in-skills/prismer-python-debugpy/SKILL.md +377 -0
- package/built-in-skills/prismer-python-debugpy/scripts/dap_client.py +68 -0
- package/built-in-skills/prismer-songsee/LICENSE +21 -0
- package/built-in-skills/prismer-songsee/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-songsee/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-songsee/SKILL.md +91 -0
- package/built-in-skills/prismer-songwriting-and-ai-music/LICENSE +21 -0
- package/built-in-skills/prismer-songwriting-and-ai-music/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-songwriting-and-ai-music/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-songwriting-and-ai-music/SKILL.md +317 -0
- package/built-in-skills/prismer-spike/LICENSE +21 -0
- package/built-in-skills/prismer-spike/LICENSE.gsd +21 -0
- package/built-in-skills/prismer-spike/NOTICE.md +17 -0
- package/built-in-skills/prismer-spike/SKILL.md +212 -0
- package/built-in-skills/prismer-teams-meeting-pipeline/LICENSE +21 -0
- package/built-in-skills/prismer-teams-meeting-pipeline/NOTICE.md +11 -0
- package/built-in-skills/prismer-teams-meeting-pipeline/SKILL.md +156 -0
- package/built-in-skills/prismer-xurl/LICENSE +21 -0
- package/built-in-skills/prismer-xurl/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-xurl/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-xurl/SKILL.md +444 -0
- package/built-in-skills/prismer-xurl/provenance/category-DESCRIPTION.md +3 -0
- package/built-in-skills/prismer-youtube-content/LICENSE +21 -0
- package/built-in-skills/prismer-youtube-content/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-youtube-content/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-youtube-content/SKILL.md +86 -0
- package/built-in-skills/prismer-youtube-content/provenance/category-DESCRIPTION.md +3 -0
- package/built-in-skills/prismer-youtube-content/references/output-formats.md +56 -0
- package/built-in-skills/prismer-youtube-content/scripts/fetch_transcript.py +146 -0
- package/built-in-skills/research-arxiv/LICENSE +21 -0
- package/built-in-skills/research-arxiv/NOTICE.md +4 -0
- package/built-in-skills/research-arxiv/SKILL.md +263 -0
- package/built-in-skills/research-arxiv/scripts/search_arxiv.py +111 -0
- package/built-in-skills/role-builder/SKILL.md +7 -1
- package/built-in-skills/role-builder/scripts/author-role.mjs +23 -7
- package/built-in-skills/role-builder/scripts/ingest-role.mjs +15 -117
- package/built-in-skills/role-builder/scripts/instantiate-and-run.mjs +15 -1
- package/built-in-skills/role-builder/scripts/operation-harness.mjs +6 -4
- package/built-in-skills/skill-creator/LICENSE.prismer +21 -0
- package/built-in-skills/skill-creator/NOTICE.md +18 -0
- package/built-in-skills/skill-creator/SKILL.md +20 -1
- package/built-in-skills/skill-creator/eval-viewer/generate_review.py +20 -31
- package/built-in-skills/skill-creator/eval-viewer/viewer.html +35 -23
- package/built-in-skills/skill-creator/references/hermes-agent-skill-authoring/GUIDE.md +220 -0
- package/built-in-skills/skill-creator/references/hermes-agent-skill-authoring/LICENSE +21 -0
- package/built-in-skills/{skill-authoring/SKILL.md → skill-creator/references/skill-authoring/GUIDE.md} +1 -1
- package/built-in-skills/{skill-builder/SKILL.md → skill-creator/references/skill-builder/GUIDE.md} +8 -12
- package/built-in-skills/skill-creator/references/skill-builder/scripts/ingest.mjs +93 -0
- package/built-in-skills/skill-creator/scripts/aggregate_benchmark.py +3 -2
- package/built-in-skills/skill-creator/scripts/import-library.mjs +30 -7
- package/built-in-skills/skill-creator/scripts/improve_description.py +14 -16
- package/built-in-skills/skill-creator/scripts/package_skill.py +16 -9
- package/built-in-skills/skill-creator/scripts/quick_validate.py +22 -5
- package/built-in-skills/skill-creator/scripts/run_eval.py +63 -144
- package/built-in-skills/skill-creator/scripts/run_loop.py +24 -16
- package/built-in-skills/slack-gif-creator/core/gif_builder.py +13 -2
- package/built-in-skills/slack-gif-creator/core/validators.py +17 -7
- package/built-in-skills/tasks/SKILL.md +2 -2
- package/built-in-skills/tdd/SKILL.md +7 -0
- package/built-in-skills/tdd/references/test-driven-development/GUIDE.md +356 -0
- package/built-in-skills/tdd/references/test-driven-development/LICENSE +21 -0
- package/built-in-skills/tdd/references/test-driven-development/LICENSE.superpowers +21 -0
- package/built-in-skills/tdd/references/test-driven-development/NOTICE.md +37 -0
- package/built-in-skills/team/SKILL.md +1 -1
- package/built-in-skills/web-artifacts-builder/SKILL.md +3 -3
- package/built-in-skills/web-artifacts-builder/scripts/bundle-artifact.sh +9 -7
- package/built-in-skills/web-artifacts-builder/scripts/init-artifact.sh +28 -55
- package/built-in-skills/webapp-qa/LICENSE +21 -0
- package/built-in-skills/webapp-qa/NOTICE.md +37 -0
- package/built-in-skills/webapp-qa/SKILL.md +41 -0
- package/built-in-skills/webapp-qa/references/dogfood/GUIDE.md +161 -0
- package/built-in-skills/webapp-qa/references/issue-taxonomy.md +109 -0
- package/built-in-skills/webapp-qa/templates/dogfood-report-template.md +86 -0
- package/built-in-skills/webapp-testing/SKILL.md +9 -2
- package/built-in-skills/webapp-testing/examples/console_logging.py +10 -4
- package/built-in-skills/webapp-testing/examples/element_discovery.py +11 -4
- package/built-in-skills/webapp-testing/examples/static_html_automation.py +14 -9
- package/built-in-skills/webapp-testing/scripts/with_server.py +34 -10
- package/built-in-skills/weekly-review/LICENSE +21 -0
- package/built-in-skills/weekly-review/NOTICE.md +21 -0
- package/built-in-skills/weekly-review/SKILL.md +49 -0
- package/components/eaas-pi-components.manifest.json +37 -0
- package/dist/cli.cjs +7017 -3340
- package/dist/cli.js +6631 -2936
- package/dist/index.cjs +7863 -3830
- package/dist/index.d.cts +459 -5
- package/dist/index.d.ts +459 -5
- package/dist/index.js +7106 -3064
- package/package.json +7 -2
- package/plugins/memory/prismer/__init__.py +4 -0
- package/plugins/memory/prismer/tool-schemas.generated.json +8 -0
- package/built-in-skills/skill-builder/scripts/ingest.mjs +0 -265
- package/built-in-skills/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- /package/built-in-skills/{document-generation/SKILL.md → office-artifacts/references/document-generation/GUIDE.md} +0 -0
- /package/built-in-skills/{skill-authoring/skill.json → skill-creator/references/skill-authoring/draft-contract.json} +0 -0
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
# Animations Reference
|
|
2
|
+
|
|
3
|
+
## Core Concept
|
|
4
|
+
|
|
5
|
+
An animation is a Python object that computes intermediate visual states of a mobject over time. Animations are objects passed to `self.play()`, not functions.
|
|
6
|
+
|
|
7
|
+
`run_time` controls seconds (default: 1). Always specify it explicitly for important animations.
|
|
8
|
+
|
|
9
|
+
## Creation Animations
|
|
10
|
+
|
|
11
|
+
```python
|
|
12
|
+
self.play(Create(circle)) # traces outline
|
|
13
|
+
self.play(Write(equation)) # simulates handwriting (for Text/MathTex)
|
|
14
|
+
self.play(FadeIn(group)) # opacity 0 -> 1
|
|
15
|
+
self.play(GrowFromCenter(dot)) # scale 0 -> 1 from center
|
|
16
|
+
self.play(DrawBorderThenFill(sq)) # outline first, then fill
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Removal Animations
|
|
20
|
+
|
|
21
|
+
```python
|
|
22
|
+
self.play(FadeOut(mobject)) # opacity 1 -> 0
|
|
23
|
+
self.play(Uncreate(circle)) # reverse of Create
|
|
24
|
+
self.play(ShrinkToCenter(group)) # scale 1 -> 0
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Transform Animations
|
|
28
|
+
|
|
29
|
+
```python
|
|
30
|
+
# Transform -- modifies the original in place
|
|
31
|
+
self.play(Transform(circle, square))
|
|
32
|
+
# After: circle IS the square (same object, new appearance)
|
|
33
|
+
|
|
34
|
+
# ReplacementTransform -- replaces old with new
|
|
35
|
+
self.play(ReplacementTransform(circle, square))
|
|
36
|
+
# After: circle removed, square on screen
|
|
37
|
+
|
|
38
|
+
# TransformMatchingTex -- smart equation morphing
|
|
39
|
+
eq1 = MathTex(r"a^2 + b^2")
|
|
40
|
+
eq2 = MathTex(r"a^2 + b^2 = c^2")
|
|
41
|
+
self.play(TransformMatchingTex(eq1, eq2))
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**Critical**: After `Transform(A, B)`, variable `A` references the on-screen mobject. Variable `B` is NOT on screen. Use `ReplacementTransform` when you want to work with `B` afterwards.
|
|
45
|
+
|
|
46
|
+
## The .animate Syntax
|
|
47
|
+
|
|
48
|
+
```python
|
|
49
|
+
self.play(circle.animate.set_color(RED))
|
|
50
|
+
self.play(circle.animate.shift(RIGHT * 2).scale(0.5)) # chain multiple
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Additional Creation Animations
|
|
54
|
+
|
|
55
|
+
```python
|
|
56
|
+
self.play(GrowFromPoint(circle, LEFT * 3)) # scale 0 -> 1 from a specific point
|
|
57
|
+
self.play(GrowFromEdge(rect, DOWN)) # grow from one edge
|
|
58
|
+
self.play(SpinInFromNothing(square)) # scale up while rotating (default PI/2)
|
|
59
|
+
self.play(GrowArrow(arrow)) # grows arrow from start to tip
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Movement Animations
|
|
63
|
+
|
|
64
|
+
```python
|
|
65
|
+
# Move a mobject along an arbitrary path
|
|
66
|
+
path = Arc(radius=2, angle=PI)
|
|
67
|
+
self.play(MoveAlongPath(dot, path), run_time=2)
|
|
68
|
+
|
|
69
|
+
# Rotate (as a Transform, not .animate — supports about_point)
|
|
70
|
+
self.play(Rotate(square, angle=PI / 2, about_point=ORIGIN), run_time=1.5)
|
|
71
|
+
|
|
72
|
+
# Rotating (continuous rotation, updater-style — good for spinning objects)
|
|
73
|
+
self.play(Rotating(gear, angle=TAU, run_time=4, rate_func=linear))
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
`MoveAlongPath` takes any `VMobject` as the path — use `Arc`, `CubicBezier`, `Line`, or a custom `VMobject`. Position is computed via `path.point_from_proportion()`.
|
|
77
|
+
|
|
78
|
+
## Emphasis Animations
|
|
79
|
+
|
|
80
|
+
```python
|
|
81
|
+
self.play(Indicate(mobject)) # brief yellow flash + scale
|
|
82
|
+
self.play(Circumscribe(mobject)) # draw rectangle around it
|
|
83
|
+
self.play(Flash(point)) # radial flash
|
|
84
|
+
self.play(Wiggle(mobject)) # shake side to side
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Rate Functions
|
|
88
|
+
|
|
89
|
+
```python
|
|
90
|
+
self.play(FadeIn(mob), rate_func=smooth) # default: ease in/out
|
|
91
|
+
self.play(FadeIn(mob), rate_func=linear) # constant speed
|
|
92
|
+
self.play(FadeIn(mob), rate_func=rush_into) # start slow, end fast
|
|
93
|
+
self.play(FadeIn(mob), rate_func=rush_from) # start fast, end slow
|
|
94
|
+
self.play(FadeIn(mob), rate_func=there_and_back) # animate then reverse
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Composition
|
|
98
|
+
|
|
99
|
+
```python
|
|
100
|
+
# Simultaneous
|
|
101
|
+
self.play(FadeIn(title), Create(circle), run_time=2)
|
|
102
|
+
|
|
103
|
+
# AnimationGroup with lag
|
|
104
|
+
self.play(AnimationGroup(*[FadeIn(i) for i in items], lag_ratio=0.2))
|
|
105
|
+
|
|
106
|
+
# LaggedStart
|
|
107
|
+
self.play(LaggedStart(*[Write(l) for l in lines], lag_ratio=0.3, run_time=3))
|
|
108
|
+
|
|
109
|
+
# Succession (sequential in one play call)
|
|
110
|
+
self.play(Succession(FadeIn(title), Wait(0.5), Write(subtitle)))
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Updaters
|
|
114
|
+
|
|
115
|
+
```python
|
|
116
|
+
tracker = ValueTracker(0)
|
|
117
|
+
dot = Dot().add_updater(lambda m: m.move_to(axes.c2p(tracker.get_value(), 0)))
|
|
118
|
+
self.play(tracker.animate.set_value(5), run_time=3)
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Subtitles
|
|
122
|
+
|
|
123
|
+
```python
|
|
124
|
+
# Method 1: standalone
|
|
125
|
+
self.add_subcaption("Key insight", duration=2)
|
|
126
|
+
self.play(Write(equation), run_time=2.0)
|
|
127
|
+
|
|
128
|
+
# Method 2: inline
|
|
129
|
+
self.play(Write(equation), subcaption="Key insight", subcaption_duration=2)
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Manim auto-generates `.srt` subtitle files. Always add subcaptions for accessibility.
|
|
133
|
+
|
|
134
|
+
## Timing Patterns
|
|
135
|
+
|
|
136
|
+
```python
|
|
137
|
+
# Pause-after-reveal
|
|
138
|
+
self.play(Write(key_equation), run_time=2.0)
|
|
139
|
+
self.wait(2.0)
|
|
140
|
+
|
|
141
|
+
# Dim-and-focus
|
|
142
|
+
self.play(old_content.animate.set_opacity(0.3), FadeIn(new_content))
|
|
143
|
+
|
|
144
|
+
# Clean exit
|
|
145
|
+
self.play(FadeOut(Group(*self.mobjects)), run_time=0.5)
|
|
146
|
+
self.wait(0.3)
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Reactive Mobjects: always_redraw()
|
|
150
|
+
|
|
151
|
+
Rebuild a mobject from scratch every frame — essential when its geometry depends on other animated objects:
|
|
152
|
+
|
|
153
|
+
```python
|
|
154
|
+
# Brace that follows a resizing square
|
|
155
|
+
brace = always_redraw(lambda: Brace(square, UP))
|
|
156
|
+
self.add(brace)
|
|
157
|
+
self.play(square.animate.scale(2)) # brace auto-adjusts
|
|
158
|
+
|
|
159
|
+
# Horizontal line that tracks a moving dot
|
|
160
|
+
h_line = always_redraw(lambda: axes.get_h_line(dot.get_left()))
|
|
161
|
+
|
|
162
|
+
# Label that always stays next to another mobject
|
|
163
|
+
label = always_redraw(lambda: Text("here", font_size=20).next_to(dot, UP, buff=0.2))
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Note: `always_redraw` recreates the mobject every frame. For simple property tracking, use `add_updater` instead (cheaper):
|
|
167
|
+
```python
|
|
168
|
+
label.add_updater(lambda m: m.next_to(dot, UP))
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## TracedPath — Trajectory Tracing
|
|
172
|
+
|
|
173
|
+
Draw the path a point has traveled:
|
|
174
|
+
|
|
175
|
+
```python
|
|
176
|
+
dot = Dot(color=YELLOW)
|
|
177
|
+
path = TracedPath(dot.get_center, stroke_color=YELLOW, stroke_width=2)
|
|
178
|
+
self.add(dot, path)
|
|
179
|
+
self.play(dot.animate.shift(RIGHT * 3 + UP * 2), run_time=2)
|
|
180
|
+
# path shows the trail the dot left behind
|
|
181
|
+
|
|
182
|
+
# Fading trail (dissipates over time):
|
|
183
|
+
path = TracedPath(dot.get_center, dissipating_time=0.5, stroke_opacity=[0, 1])
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Use cases: gradient descent paths, planetary orbits, function tracing, particle trajectories.
|
|
187
|
+
|
|
188
|
+
## FadeTransform — Smoother Cross-Fades
|
|
189
|
+
|
|
190
|
+
`Transform` morphs shapes through ugly intermediate warping. `FadeTransform` cross-fades with position matching — use it when source and target look different:
|
|
191
|
+
|
|
192
|
+
```python
|
|
193
|
+
# UGLY: Transform warps circle into square through a blob
|
|
194
|
+
self.play(Transform(circle, square))
|
|
195
|
+
|
|
196
|
+
# SMOOTH: FadeTransform cross-fades cleanly
|
|
197
|
+
self.play(FadeTransform(circle, square))
|
|
198
|
+
|
|
199
|
+
# FadeTransformPieces: per-submobject FadeTransform
|
|
200
|
+
self.play(FadeTransformPieces(group1, group2))
|
|
201
|
+
|
|
202
|
+
# TransformFromCopy: animate a COPY while keeping the original visible
|
|
203
|
+
self.play(TransformFromCopy(source, target))
|
|
204
|
+
# source stays on screen, a copy morphs into target
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
**Recommendation:** Use `FadeTransform` as default for dissimilar shapes. Use `Transform`/`ReplacementTransform` only for similar shapes (circle→ellipse, equation→equation).
|
|
208
|
+
|
|
209
|
+
## ApplyMatrix — Linear Transformation Visualization
|
|
210
|
+
|
|
211
|
+
Animate a matrix transformation on mobjects:
|
|
212
|
+
|
|
213
|
+
```python
|
|
214
|
+
# Apply a 2x2 matrix to a grid
|
|
215
|
+
matrix = [[2, 1], [1, 1]]
|
|
216
|
+
self.play(ApplyMatrix(matrix, number_plane), run_time=2)
|
|
217
|
+
|
|
218
|
+
# Also works on individual mobjects
|
|
219
|
+
self.play(ApplyMatrix([[0, -1], [1, 0]], square)) # 90-degree rotation
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
Pairs with `LinearTransformationScene` — see `camera-and-3d.md`.
|
|
223
|
+
|
|
224
|
+
## squish_rate_func — Time-Window Staggering
|
|
225
|
+
|
|
226
|
+
Compress any rate function into a time window within an animation. Enables overlapping stagger without `LaggedStart`:
|
|
227
|
+
|
|
228
|
+
```python
|
|
229
|
+
self.play(
|
|
230
|
+
FadeIn(a, rate_func=squish_rate_func(smooth, 0, 0.5)), # 0% to 50%
|
|
231
|
+
FadeIn(b, rate_func=squish_rate_func(smooth, 0.25, 0.75)), # 25% to 75%
|
|
232
|
+
FadeIn(c, rate_func=squish_rate_func(smooth, 0.5, 1.0)), # 50% to 100%
|
|
233
|
+
run_time=2
|
|
234
|
+
)
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
More precise than `LaggedStart` when you need exact overlap control.
|
|
238
|
+
|
|
239
|
+
## Additional Rate Functions
|
|
240
|
+
|
|
241
|
+
```python
|
|
242
|
+
from manim import (
|
|
243
|
+
smooth, linear, rush_into, rush_from,
|
|
244
|
+
there_and_back, there_and_back_with_pause,
|
|
245
|
+
running_start, double_smooth, wiggle,
|
|
246
|
+
lingering, exponential_decay, not_quite_there,
|
|
247
|
+
squish_rate_func
|
|
248
|
+
)
|
|
249
|
+
|
|
250
|
+
# running_start: pulls back before going forward (anticipation)
|
|
251
|
+
self.play(FadeIn(mob, rate_func=running_start))
|
|
252
|
+
|
|
253
|
+
# there_and_back_with_pause: goes there, holds, comes back
|
|
254
|
+
self.play(mob.animate.shift(UP), rate_func=there_and_back_with_pause)
|
|
255
|
+
|
|
256
|
+
# not_quite_there: stops at a fraction of the full animation
|
|
257
|
+
self.play(FadeIn(mob, rate_func=not_quite_there(0.7)))
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
## ShowIncreasingSubsets / ShowSubmobjectsOneByOne
|
|
261
|
+
|
|
262
|
+
Reveal group members progressively — ideal for algorithm visualization:
|
|
263
|
+
|
|
264
|
+
```python
|
|
265
|
+
# Reveal array elements one at a time
|
|
266
|
+
array = Group(*[Square() for _ in range(8)]).arrange(RIGHT)
|
|
267
|
+
self.play(ShowIncreasingSubsets(array), run_time=3)
|
|
268
|
+
|
|
269
|
+
# Show submobjects with staggered appearance
|
|
270
|
+
self.play(ShowSubmobjectsOneByOne(code_lines), run_time=4)
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
## ShowPassingFlash
|
|
274
|
+
|
|
275
|
+
A flash of light travels along a path:
|
|
276
|
+
|
|
277
|
+
```python
|
|
278
|
+
# Flash traveling along a curve
|
|
279
|
+
self.play(ShowPassingFlash(curve.copy().set_color(YELLOW), time_width=0.3))
|
|
280
|
+
|
|
281
|
+
# Great for: data flow, electrical signals, network traffic
|
|
282
|
+
```
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Camera and 3D Reference
|
|
2
|
+
|
|
3
|
+
## MovingCameraScene (2D Camera Control)
|
|
4
|
+
|
|
5
|
+
```python
|
|
6
|
+
class ZoomExample(MovingCameraScene):
|
|
7
|
+
def construct(self):
|
|
8
|
+
circle = Circle(radius=2, color=BLUE)
|
|
9
|
+
self.play(Create(circle))
|
|
10
|
+
# Zoom in
|
|
11
|
+
self.play(self.camera.frame.animate.set(width=4).move_to(circle.get_top()), run_time=2)
|
|
12
|
+
self.wait(2)
|
|
13
|
+
# Zoom back out
|
|
14
|
+
self.play(self.camera.frame.animate.set(width=14.222).move_to(ORIGIN), run_time=2)
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### Camera Operations
|
|
18
|
+
|
|
19
|
+
```python
|
|
20
|
+
self.camera.frame.animate.set(width=6) # zoom in
|
|
21
|
+
self.camera.frame.animate.set(width=20) # zoom out
|
|
22
|
+
self.camera.frame.animate.move_to(target) # pan
|
|
23
|
+
self.camera.frame.save_state() # save
|
|
24
|
+
self.play(Restore(self.camera.frame)) # restore
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## ThreeDScene
|
|
28
|
+
|
|
29
|
+
```python
|
|
30
|
+
class ThreeDExample(ThreeDScene):
|
|
31
|
+
def construct(self):
|
|
32
|
+
self.set_camera_orientation(phi=60*DEGREES, theta=-45*DEGREES)
|
|
33
|
+
axes = ThreeDAxes()
|
|
34
|
+
surface = Surface(
|
|
35
|
+
lambda u, v: axes.c2p(u, v, np.sin(u) * np.cos(v)),
|
|
36
|
+
u_range=[-PI, PI], v_range=[-PI, PI], resolution=(30, 30)
|
|
37
|
+
)
|
|
38
|
+
surface.set_color_by_gradient(BLUE, GREEN, YELLOW)
|
|
39
|
+
self.play(Create(axes), Create(surface))
|
|
40
|
+
self.begin_ambient_camera_rotation(rate=0.2)
|
|
41
|
+
self.wait(5)
|
|
42
|
+
self.stop_ambient_camera_rotation()
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Camera Control in 3D
|
|
46
|
+
|
|
47
|
+
```python
|
|
48
|
+
self.set_camera_orientation(phi=70*DEGREES, theta=-45*DEGREES)
|
|
49
|
+
self.move_camera(phi=45*DEGREES, theta=30*DEGREES, run_time=2)
|
|
50
|
+
self.begin_ambient_camera_rotation(rate=0.2)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 3D Mobjects
|
|
54
|
+
|
|
55
|
+
```python
|
|
56
|
+
sphere = Sphere(radius=1).set_color(BLUE).set_opacity(0.7)
|
|
57
|
+
cube = Cube(side_length=2, fill_color=GREEN, fill_opacity=0.5)
|
|
58
|
+
arrow = Arrow3D(start=ORIGIN, end=[2, 1, 1], color=RED)
|
|
59
|
+
# 2D text facing camera:
|
|
60
|
+
label = Text("Label", font_size=30)
|
|
61
|
+
self.add_fixed_in_frame_mobjects(label)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Parametric Curves
|
|
65
|
+
|
|
66
|
+
```python
|
|
67
|
+
helix = ParametricFunction(
|
|
68
|
+
lambda t: [np.cos(t), np.sin(t), t / (2*PI)],
|
|
69
|
+
t_range=[0, 4*PI], color=YELLOW
|
|
70
|
+
)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## When to Use 3D
|
|
74
|
+
- Surfaces, vector fields, spatial geometry, 3D transforms
|
|
75
|
+
## When NOT to Use 3D
|
|
76
|
+
- 2D concepts, text-heavy scenes, flat data (bar charts, time series)
|
|
77
|
+
|
|
78
|
+
## ZoomedScene — Inset Zoom
|
|
79
|
+
|
|
80
|
+
Show a magnified inset of a detail while keeping the full view visible:
|
|
81
|
+
|
|
82
|
+
```python
|
|
83
|
+
class ZoomExample(ZoomedScene):
|
|
84
|
+
def __init__(self, **kwargs):
|
|
85
|
+
super().__init__(
|
|
86
|
+
zoom_factor=0.3, # how much of the scene the zoom box covers
|
|
87
|
+
zoomed_display_height=3, # size of the inset
|
|
88
|
+
zoomed_display_width=3,
|
|
89
|
+
zoomed_camera_frame_starting_position=ORIGIN,
|
|
90
|
+
**kwargs
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
def construct(self):
|
|
94
|
+
self.camera.background_color = BG
|
|
95
|
+
# ... create your scene content ...
|
|
96
|
+
|
|
97
|
+
# Activate the zoom
|
|
98
|
+
self.activate_zooming()
|
|
99
|
+
|
|
100
|
+
# Move the zoom frame to a point of interest
|
|
101
|
+
self.play(self.zoomed_camera.frame.animate.move_to(detail_point))
|
|
102
|
+
self.wait(2)
|
|
103
|
+
|
|
104
|
+
# Deactivate
|
|
105
|
+
self.play(self.get_zoomed_display_pop_out_animation(), rate_func=lambda t: smooth(1-t))
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Use cases: zooming into a specific term in an equation, showing fine detail in a diagram, magnifying a region of a plot.
|
|
109
|
+
|
|
110
|
+
## LinearTransformationScene — Linear Algebra
|
|
111
|
+
|
|
112
|
+
Pre-built scene with basis vectors and grid for visualizing matrix transformations:
|
|
113
|
+
|
|
114
|
+
```python
|
|
115
|
+
class LinearTransformExample(LinearTransformationScene):
|
|
116
|
+
def __init__(self, **kwargs):
|
|
117
|
+
super().__init__(
|
|
118
|
+
show_coordinates=True,
|
|
119
|
+
show_basis_vectors=True,
|
|
120
|
+
**kwargs
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
def construct(self):
|
|
124
|
+
matrix = [[2, 1], [1, 1]]
|
|
125
|
+
|
|
126
|
+
# Add a vector before applying the transform
|
|
127
|
+
vector = self.get_vector([1, 2], color=YELLOW)
|
|
128
|
+
self.add_vector(vector)
|
|
129
|
+
|
|
130
|
+
# Apply the transformation — grid, basis vectors, and your vector all transform
|
|
131
|
+
self.apply_matrix(matrix)
|
|
132
|
+
self.wait(2)
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
This produces the signature 3Blue1Brown "Essence of Linear Algebra" look — grid lines deforming, basis vectors stretching, determinant visualized through area change.
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# Decorations and Visual Polish
|
|
2
|
+
|
|
3
|
+
Decorations are mobjects that annotate, highlight, or frame other mobjects. They turn a technically correct animation into a visually polished one.
|
|
4
|
+
|
|
5
|
+
## SurroundingRectangle
|
|
6
|
+
|
|
7
|
+
Draws a rectangle around any mobject. The go-to for highlighting:
|
|
8
|
+
|
|
9
|
+
```python
|
|
10
|
+
highlight = SurroundingRectangle(
|
|
11
|
+
equation[2], # the term to highlight
|
|
12
|
+
color=YELLOW,
|
|
13
|
+
buff=0.15, # padding between content and border
|
|
14
|
+
corner_radius=0.1, # rounded corners
|
|
15
|
+
stroke_width=2
|
|
16
|
+
)
|
|
17
|
+
self.play(Create(highlight))
|
|
18
|
+
self.wait(1)
|
|
19
|
+
self.play(FadeOut(highlight))
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Around part of an equation
|
|
23
|
+
|
|
24
|
+
```python
|
|
25
|
+
eq = MathTex(r"E", r"=", r"m", r"c^2")
|
|
26
|
+
box = SurroundingRectangle(eq[2:], color=YELLOW, buff=0.1) # highlight "mc²"
|
|
27
|
+
label = Text("mass-energy", font_size=18, font="Menlo", color=YELLOW)
|
|
28
|
+
label.next_to(box, DOWN, buff=0.2)
|
|
29
|
+
self.play(Create(box), FadeIn(label))
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## BackgroundRectangle
|
|
33
|
+
|
|
34
|
+
Semi-transparent background behind text for readability over complex scenes:
|
|
35
|
+
|
|
36
|
+
```python
|
|
37
|
+
bg = BackgroundRectangle(equation, fill_opacity=0.7, buff=0.2, color=BLACK)
|
|
38
|
+
self.play(FadeIn(bg), Write(equation))
|
|
39
|
+
|
|
40
|
+
# Or using set_stroke for a "backdrop" effect on the text itself:
|
|
41
|
+
label.set_stroke(BLACK, width=5, background=True)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The `set_stroke(background=True)` approach is cleaner for text labels over graphs/diagrams.
|
|
45
|
+
|
|
46
|
+
## Brace and BraceLabel
|
|
47
|
+
|
|
48
|
+
Curly braces that annotate sections of a diagram or equation:
|
|
49
|
+
|
|
50
|
+
```python
|
|
51
|
+
brace = Brace(equation[2:4], DOWN, color=YELLOW)
|
|
52
|
+
brace_label = brace.get_text("these terms", font_size=20)
|
|
53
|
+
self.play(GrowFromCenter(brace), FadeIn(brace_label))
|
|
54
|
+
|
|
55
|
+
# Between two specific points
|
|
56
|
+
brace = BraceBetweenPoints(point_a, point_b, direction=UP)
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Brace placement
|
|
60
|
+
|
|
61
|
+
```python
|
|
62
|
+
# Below a group
|
|
63
|
+
Brace(group, DOWN)
|
|
64
|
+
# Above a group
|
|
65
|
+
Brace(group, UP)
|
|
66
|
+
# Left of a group
|
|
67
|
+
Brace(group, LEFT)
|
|
68
|
+
# Right of a group
|
|
69
|
+
Brace(group, RIGHT)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Arrows for Annotation
|
|
73
|
+
|
|
74
|
+
### Straight arrows pointing to mobjects
|
|
75
|
+
|
|
76
|
+
```python
|
|
77
|
+
arrow = Arrow(
|
|
78
|
+
start=label.get_bottom(),
|
|
79
|
+
end=target.get_top(),
|
|
80
|
+
color=YELLOW,
|
|
81
|
+
stroke_width=2,
|
|
82
|
+
buff=0.1, # gap between arrow tip and target
|
|
83
|
+
max_tip_length_to_length_ratio=0.15 # small arrowhead
|
|
84
|
+
)
|
|
85
|
+
self.play(GrowArrow(arrow), FadeIn(label))
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Curved arrows
|
|
89
|
+
|
|
90
|
+
```python
|
|
91
|
+
arrow = CurvedArrow(
|
|
92
|
+
start_point=source.get_right(),
|
|
93
|
+
end_point=target.get_left(),
|
|
94
|
+
angle=PI/4, # curve angle
|
|
95
|
+
color=PRIMARY
|
|
96
|
+
)
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Labeling with arrows
|
|
100
|
+
|
|
101
|
+
```python
|
|
102
|
+
# LabeledArrow: arrow with built-in text label
|
|
103
|
+
arr = LabeledArrow(
|
|
104
|
+
Text("gradient", font_size=16, font="Menlo"),
|
|
105
|
+
start=point_a, end=point_b, color=RED
|
|
106
|
+
)
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## DashedLine and DashedVMobject
|
|
110
|
+
|
|
111
|
+
```python
|
|
112
|
+
# Dashed line (for asymptotes, construction lines, implied connections)
|
|
113
|
+
asymptote = DashedLine(
|
|
114
|
+
axes.c2p(2, -3), axes.c2p(2, 3),
|
|
115
|
+
color=YELLOW, dash_length=0.15
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
# Make any VMobject dashed
|
|
119
|
+
dashed_circle = DashedVMobject(Circle(radius=2, color=BLUE), num_dashes=30)
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Angle and RightAngle Markers
|
|
123
|
+
|
|
124
|
+
```python
|
|
125
|
+
line1 = Line(ORIGIN, RIGHT * 2)
|
|
126
|
+
line2 = Line(ORIGIN, UP * 2 + RIGHT)
|
|
127
|
+
|
|
128
|
+
# Angle arc between two lines
|
|
129
|
+
angle = Angle(line1, line2, radius=0.5, color=YELLOW)
|
|
130
|
+
angle_value = angle.get_value() # radians
|
|
131
|
+
|
|
132
|
+
# Right angle marker (the small square)
|
|
133
|
+
right_angle = RightAngle(line1, Line(ORIGIN, UP * 2), length=0.3, color=WHITE)
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Cross (strikethrough)
|
|
137
|
+
|
|
138
|
+
Mark something as wrong or deprecated:
|
|
139
|
+
|
|
140
|
+
```python
|
|
141
|
+
cross = Cross(old_equation, color=RED, stroke_width=4)
|
|
142
|
+
self.play(Create(cross))
|
|
143
|
+
# Then show the correct version
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Underline
|
|
147
|
+
|
|
148
|
+
```python
|
|
149
|
+
underline = Underline(important_text, color=ACCENT, stroke_width=3)
|
|
150
|
+
self.play(Create(underline))
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Color Highlighting Workflow
|
|
154
|
+
|
|
155
|
+
### Method 1: At creation with t2c
|
|
156
|
+
|
|
157
|
+
```python
|
|
158
|
+
text = Text("The gradient is negative here", t2c={"gradient": BLUE, "negative": RED})
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Method 2: set_color_by_tex after creation
|
|
162
|
+
|
|
163
|
+
```python
|
|
164
|
+
eq = MathTex(r"\nabla L = -\frac{\partial L}{\partial w}")
|
|
165
|
+
eq.set_color_by_tex(r"\nabla", BLUE)
|
|
166
|
+
eq.set_color_by_tex(r"\partial", RED)
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Method 3: Index into submobjects
|
|
170
|
+
|
|
171
|
+
```python
|
|
172
|
+
eq = MathTex(r"a", r"+", r"b", r"=", r"c")
|
|
173
|
+
eq[0].set_color(RED) # "a"
|
|
174
|
+
eq[2].set_color(BLUE) # "b"
|
|
175
|
+
eq[4].set_color(GREEN) # "c"
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## Combining Annotations
|
|
179
|
+
|
|
180
|
+
Layer multiple annotations for emphasis:
|
|
181
|
+
|
|
182
|
+
```python
|
|
183
|
+
# Highlight a term, add a brace, and an arrow — in sequence
|
|
184
|
+
box = SurroundingRectangle(eq[2], color=YELLOW, buff=0.1)
|
|
185
|
+
brace = Brace(eq[2], DOWN, color=YELLOW)
|
|
186
|
+
label = brace.get_text("learning rate", font_size=18)
|
|
187
|
+
|
|
188
|
+
self.play(Create(box))
|
|
189
|
+
self.wait(0.5)
|
|
190
|
+
self.play(FadeOut(box), GrowFromCenter(brace), FadeIn(label))
|
|
191
|
+
self.wait(1.5)
|
|
192
|
+
self.play(FadeOut(brace), FadeOut(label))
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### The annotation lifecycle
|
|
196
|
+
|
|
197
|
+
Annotations should follow a rhythm:
|
|
198
|
+
1. **Appear** — draw attention (Create, GrowFromCenter)
|
|
199
|
+
2. **Hold** — viewer reads and understands (self.wait)
|
|
200
|
+
3. **Disappear** — clear the stage for the next thing (FadeOut)
|
|
201
|
+
|
|
202
|
+
Never leave annotations on screen indefinitely — they become visual noise once their purpose is served.
|