§11 · Reference
Полный справочник ключей и публичного API. Используется как чек-лист при
настройке стиля и сцены. Для узконаправленных объяснений — ссылки на
соответствующие главы.
JSON: style.*
| Путь | Тип | Default | → GeoStyle attr | Комментарий |
point_size.main | float | 6 | size_px | размер точки, px |
point_size.bold | float | — | — | опц. именован., import.point_size |
point_size.aux | float | — | — | то же |
line_width.main | float | 1.5 | stroke_width_px | толщина, px |
line_width.bold / aux | float | — | — | именованные варианты |
defaults.angle.stroke_width_px | float | 0.75 | stroke_width_px | толщина дуги, px |
defaults.angle.arc_size_px | float | 17 | arc_size_px | радиус дуги, px |
defaults.angle.arc_shift_px | float | 1.5 | arc_shift_px | расстояние между дугами, px |
defaults.angle.right_angle_size_px | float | 17 | right_angle_size_px | размер метки прямого угла, px |
tick.main.tick_width_px | float | 1.5 | tick_width_px | толщина штриха, px |
tick.main.tick_length_px | float | 9 | tick_length_px | длина штриха, px |
tick.main.tick_shift_px | float | 2 | tick_shift_px | расстояние между штрихами, px |
arrow.main.arrow_width_px | float | 7.5 | arrow_width_px | ширина наконечника, px |
arrow.main.arrow_length_px | float | 11 | arrow_length_px | длина наконечника, px |
color.main | hex | #000000 | col | основной цвет |
color.light | hex | #cccccc | col_light | светлый вариант |
color.accent | hex | #d05456 | col_accent | акцентный |
color.accent_light | hex | #f6e0db | col_accent_light | светлый акцент |
color.black/white/aux | hex | — | — | доп. именованные цвета |
font_size.main | float | 14 | font_size_px | размер шрифта, px |
JSON: rendering
| Ключ | Тип | Default | Эффект |
line_cap | enum | butt | окончания линий: butt / round / square |
right_angle_joint | enum | auto | auto / bevel / miter / round |
polygon_boundary_layer | enum | null | top = контур поверх заливки (z_index=10) |
dash_period_px | float | 10 | период пунктира (штрих + промежуток) в px стиля; перекрывается stroke_dash_period_px |
points_display | enum | auto | auto / only_labels / only_points |
label_anchor | enum | BC | сценовый дефолт: TL..BR |
scale_export | float | 1 | legacy-множитель px_size; для нового экспорта используйте export_size/export_fit |
overlay.angle_radius и overlay.label_placement — automation-слой,
а не rendering; см. следующие таблицы.
overlay.label_placement
| Ключ | Тип | Default | Эффект |
enabled | bool | false | автовызов autoPlaceLabels() в loadGGB |
distance_px | int | 6 | базовое anchor→центр подписи |
padding_px | int | 2 | зазор вокруг bbox при проверке перекрытий |
angle_gap_arc_px | int | 3 | зазор внешняя дуга → bbox подписи |
angle_gap_sides_px | int | 3 | зазор стороны угла → bbox (narrow-angle clamp) |
angle_gap_px | int | 3 | legacy fallback для обоих split-ключей |
w_anchor | float | 1.0 | штраф за направление |
w_label | float | 10.0 | штраф label×label |
w_geom | float | 8.0 | штраф label×geometry |
dynamic_angles | bool | false | per-frame пересчёт биссектрис нужен keyframes/tracker |
keyframe_snapshots | bool | false | раскладка на каждом keyframe + интерполяция |
canonicalize_anchor | bool | false | перевести в MC ломает snapshots |
interpolation | enum | linear | linear / smooth |
ema_alpha | float | 0.2 | вес свежего решателя (tracker) |
anchor_flip_frames | int | 6 | кадров подряд перед сменой якоря |
solver_every_n_frames | int | 2 | throttle решателя |
overlay.angle_radius
Авто-подбор радиуса дуги для узких углов: scale = (pivot_rad / angle) ** exp,
затем clamp в [min_px, max_arm_fraction × arm_length × ptUnit].
| Ключ | Тип | Default | Эффект |
enabled | bool | false | opt-in; меняет визуал всех углов |
exp | float | 0.25 | показатель; 0 = без скейлинга |
pivot_rad | float | π/2 | угол, при котором scale = 1.0 |
min_px | float | 12 | нижний порог радиуса, px |
max_arm_fraction | float | 0.65 | верхний порог как доля от длины короткой стороны |
apply_to_right | bool | false | применять ли clamps к метке прямого угла |
Per-element escape: elem.style['auto_radius'] = False — фиксирует
arc_size_px для конкретного угла, даже если глобальный флаг
включён.
JSON: import
| Ключ | Тип | Синонимы | Эффект |
import.enabled | bool | — | false: загрузить геометрию и сохранить ggb_raw, но взять visual baseline из defaults и пропустить остальные правила import |
import.colors | dict "#hex [opacity]" → "color_name|#hex [opacity]" | — | маппинг GGB-цветов на именованные / hex; цвет пишется как #rrggbb, target-opacity применяется отдельно и только если задана |
import.line_width | dict | line_width | маппинг GGB-толщины на именованную категорию |
import.point_size | dict | dot_size | маппинг GGB-размера точек |
import.policy | dict | — | декларативная политика импорта, см. §4 |
import.policy
См. §4 · ImportPolicy для деталей.
| Ключ | Тип | GGB-источник | elem.ggb_style target |
preset | enum | — | faithful / style_only |
size_px | scalar / DSL | <pointSize> | size_px |
stroke_width_px | scalar / DSL | <lineStyle thickness> | stroke_width_px |
arc_size_px | scalar / DSL | <arcSize> | arc_size_px |
label_offset_px | list / DSL | <labelOffset> | label_offset_px |
label_color | hex / DSL | obj_color.hex | label_color |
label_visible | bool / DSL | <show label> | label_visible |
visible | bool / DSL | <show object> | visible |
label_text | str / DSL | <caption> | label_text |
label_mode | enum / DSL | <labelMode> | label_mode |
label_value_precision | int / DSL | literal | label_value_precision |
label_angle_unit | enum / DSL | literal | label_angle_unit |
angle_range | enum / DSL | <angleStyle> | angle_range |
tick_count | int / DSL | <decoration type> | tick_count |
font_size_px | scalar / DSL | <gui><font size> | font_size_px |
stroke | hex / DSL | obj_color.hex | stroke |
fill | hex / DSL | obj_color.hex | fill |
fill_opacity | float / DSL | obj_color.opacity | fill_opacity |
point_shape | str / DSL | <pointStyle> | point_shape |
stroke_opacity | float / DSL | <lineStyle opacity> | stroke_opacity |
stroke_dash_ratio | float / DSL | <lineStyle type> | stroke_dash_ratio |
stroke_dash_period_px | float / DSL | — | stroke_dash_period_px |
stroke_linecap | str / DSL | — | stroke_linecap |
DSL-строки политики
"const:3" | фиксированное значение |
"scale:1.5" | умножить raw на 1.5 |
"quantize:[1,2,4]" | snap к ближайшему |
"remap:{'#f00':'#c00'}" | lookup, miss → raw |
"match_element" | sentinel |
"auto" | sentinel |
Per-element elem.style
Видимость
| Ключ | Тип | Default | Эффект |
elem.visible (атрибут) | bool | True | полностью скрывает mobject |
visible | bool | True | resolver-key для elem.visible; это состояние построения, не visual style |
label_visible | bool | зависит | отрисовать подпись |
Stroke
stroke | hex | style.strong | цвет контура |
stroke_width_px | float (px) | defaults.<type>.stroke_width_px | толщина; рендер: × 100 / ptUnit |
stroke_opacity | 0..1 | 1 | прозрачность |
stroke_dash_ratio | 0..1 / null | null | доля штриха в периоде (≤ 0 или ≥ 1 — сплошная) |
stroke_dash_period_px | float (px) | rendering.dash_period_px | период пунктира: штрих + промежуток |
stroke_linecap | enum | rendering.line_cap | butt/round/square |
Fill
fill | hex | style.background | цвет заливки |
fill_opacity | 0..1 | 1 | прозрачность заливки |
Точки
size_px | float (px) | defaults.point.size_px | диаметр = size_px / 2 / ptUnit |
point_shape | enum | circle | circle, square, diamond, cross, plus, треугольники |
Углы
arc_size_px | float (px) | — | базовый радиус; масштабируется overlay.angle_radius при включении |
arc_shift_px | float (px) | defaults.angle.arc_shift_px | расстояние между кратными дугами |
auto_radius | bool | true | escape: False — отключить overlay.angle_radius для этого угла |
angle_range | minor / reflex | minor | видимый диапазон угла |
right_angle_marker | bool / null | авто | квадратная метка |
tick_count | int | 1 | число кратных дуг / меток равенства углов |
Сегменты / векторы
tick_count | int | 0 | число штрихов на середине |
tick_style | line / wave | line | wave = волнистая метка |
tick_radius_px | float | 0.45 × tick_shift_px | радиус скругления wave-углов |
Подписи
label_text | TeX-строка | "$name$" | текст подписи |
label_mode | label/value/label_value | label | режим текста подписи |
label_color | hex | style.strong | цвет текста |
label_anchor | enum | rendering.label_anchor/BL | TL..BR |
label_offset_px | [x, y] (px) | [0, 0] | смещение после позиционирования |
font_size_px | float | defaults.<type>.font_size_px | per-element размер |
label_radial_offset_px | float | defaults.angle.label_radial_offset_px | радиальный отступ (углы) |
label_placement_locked | bool | false | защита от автораскладки |
Z-index
z_index | float | по типу элемента | перекрывает автоматику |
z_index_fill | float | Z_FILL | только для CircleSector |
Кривые (Conic / Function / ImplicitCurve)
Рендер читает те же ключи, что у линий, но с ограничениями — см.
§7.
| Ключ | Тип | Default | Применим к |
stroke | hex | style.strong | все |
stroke_width_px | float (px) | defaults.<type>.stroke_width_px | все |
stroke_opacity | 0..1 | 1 | все |
stroke_linecap | enum | rendering.line_cap | все |
stroke_dash_ratio | 0..1 | None | все |
stroke_dash_period_px | float (px) | rendering.dash_period_px | все |
fill | hex | style.background | только Conic(CIRCLE|ELLIPSE) |
fill_opacity | 0..1 | 1 | только Conic(CIRCLE|ELLIPSE) |
z_index | float | Z_LINE = 4 | все |
Константы сэмплирования (hard-coded, geo/curve_sampling.py)
| Параметр | Значение | Применяется в |
segment_mu | 3.0 / ptUnit | Conic (parabola/hyperbola), Function |
initial_samples | 32 | sample_parametric |
max_samples | 500 | sample_parametric — жёсткий cap |
grid_n | 128 | marching_squares (ImplicitCurve) |
viewport_pad | 0.1 MU | Liang–Barsky clipping |
GGB Graphics View
showAxes | bool | <evSettings axes>; включает фоновые оси |
showGrid | bool | <evSettings grid>; включает фоновую сетку |
gridIsBold | bool | <evSettings gridIsBold>; чуть плотнее линии сетки |
gridType | int | <evSettings gridType>; сохраняется, сейчас рендерится декартова сетка |
axesColor / gridColor | hex | <axesColor> / <gridColor> |
gridDistX / gridDistY | float | <grid distX distY>; шаг сетки |
axes.x / axes.y | dict | <axis id="0|1">: show, showNumbers, tickDistance, axisCross, positiveAxis |
Конструкторы и DSL
Conic(matrix) | 3×3 ndarray |
Conic.from_coeffs(a, b, c, d, e, f) | общее уравнение 2-й степени |
Conic.from_ggb_matrix(A0..A5) | GGB XML совместимо |
Conic("eq") / .from_string(eq) | строковый парсинг через sympy |
Function("y = ...") / .from_string(eq) | строковая форма |
Function(expr, var, domain=(a, b)) | Python-only, с ограничением x-диапазона |
f(x) = expr (DSL-сугар) | preprocessor → f = Function("y = expr") |
ImplicitCurve("F(x, y) = 0") | нормализуется к LHS − RHS = 0 |
scene.style.export
| Ключ | Тип | Default | Эффект |
ptUnit | float | 1 | пикселей на manim-единицу (текущая сцена) |
ptUnit_style | float | ptUnit | reference-масштаб для визуальных *_px значений |
ptUnit_ggb | float | — | оригинал ptUnit из .ggb |
ptWidth | int | config.pixel_width | ширина холста, px |
ptHeight | int | config.pixel_height | высота |
ptXZero | float | 0 | origin от левого края, px |
ptYZero | float | 0 | origin от верхнего края |
fontSize | int | — | GGB gui.font size, px |
referenceWidth/referenceHeight | float | — | эталонный холст нового export-layout |
contentScale | float | — | ptUnit / ptUnit_style, масштаб reference-холста в export-холст |
Scaling constants (animageo/constants.py)
| Константа | Значение | Использование |
STYLE_TO_INTERNAL | 0.02 | JSON style unit → internal |
LINE_WIDTH_SCALE | 2 | JSON line width → manim stroke |
FONT_SIZE_RATIO | 50 / 25.9 | JSON font size → manim font |
STROKE_WIDTH_SCALE | 100 | stroke_width_px → manim (/ active style scale: ptUnit legacy или ptUnit_style) |
GGB_FONT_SCALE | 100.0 | GGB font px → manim font_size (/ active style scale) |
Z-index constants
| Константа | Значение | Использование |
Z_FILL_INNER | 0.001 | зарезервированный нижний fill-слой |
Z_FILL | 0.01 | заливки полигонов / секторов |
Z_FILL_LABEL | 0.1 | подписи на fill-уровне |
Z_ANGLE | 3 | дуги углов |
Z_LINE | 4 | линии, окружности (без fill) |
Z_STROKE | 5 | сегменты, окружности (stroke), дуги |
Z_POINT | 50 | точки |
Z_LABEL | 50 | подписи на stroke-уровне |
GeoStyle attributes
| Атрибут | JSON-источник | Default | Эффект |
dot_size | point_size.main | 6 | совместимый scene-атрибут; renderer читает size_px |
line_width | line_width.main | 1.5 | совместимый scene-атрибут; renderer читает stroke_width_px |
ang_width | defaults.angle.stroke_width_px | 0.75 | толщина дуги |
ang_rdefault | defaults.angle.arc_size_px | 17 | совместимый scene-атрибут; renderer читает arc_size_px |
ang_rshift | defaults.angle.arc_shift_px | 1.5 | шаг между кратными дугами |
ang_right | defaults.angle.right_angle_size_px | 17 | размер метки прямого угла |
strich_width | tick.main.tick_width_px | 1.5 | |
strich_len | tick.main.tick_length_px | 9 | |
strich_rshift | tick.main.tick_shift_px | 2 | |
arrow_height | arrow.main.arrow_length_px | 11 | длина наконечника |
arrow_width | arrow.main.arrow_width_px | 7.5 | ширина |
label_r_offset | label_radial_offset_px | legacy input alias | мигрируется в px |
background / strong | — | WHITE / BLACK | фон сцены / основной foreground |
col / col_light / col_accent / col_accent_light | color.* | | палитра |
col_shade | — | #eeeeee | цвет ghosted-элементов (Shade/Restore) |
rendering | rendering | {} | dict с флагами |
ggb | import | {} | GGB-маппинги |
export | — | см. выше | canvas / scale |
AnimaGeoScene — публичное API
Загрузка
loadGGB(filepath, style_file=None, px_size=None, import_policy=None, debug=False, generate_stubs=True, strict=False, reference_size=None, export_size=None, export_fit='contain', export_source_rect='ggb_view', export_scale=None, export_anchor='center', export_offset=None, export_bounds_padding=0, export_infinite_policy='ignore') | загрузить .ggb; px_size — legacy размер холста, reference_size/export_size разделяют эталонный стиль-холст и физический export-холст; export_source_rect: ggb_view или rendered_bounds |
loadCode(filepath, debug=False, show=True) | загрузить Python-DSL из файла (exec-движок) |
putCode(code, debug=False, show=True) | исполнить строку DSL (exec-движок; циклы, def, kwargs, .field access) |
applyStyle(style_file=None, px_size=None, import_policy=None, reference_size=None, export_size=None, export_fit='contain', export_source_rect='ggb_view', export_scale=None, export_anchor='center', export_offset=None, export_bounds_padding=0, export_infinite_policy='ignore') | применить style.json и настроить viewport/export-layout; если export_size не передан в split-режиме, px_size используется только как fallback physical size; rendered_bounds измеряет видимые mobject-ы до финального fit |
reloadPolicy(import_policy) | пересобрать с другой политикой без повторного парсинга |
Переменные и анимация
addVar(name, value) | создать NamedValueTracker |
addUpdater(tracker) | привязать live-обновление |
clearUpdater(tracker) | отвязать |
animating(tracker) | context manager |
play_keyframes(keyframes_data) | воспроизвести keyframe-анимацию |
get_independent_elements() | список animatable-элементов (для UI) |
Видимость
Show / playShow(names, mode='Fade'|'Create') | показать |
Hide / playHide(names) | скрыть |
Update / playUpdate(names) | FadeOut → recreate → FadeIn |
Shade / playShade(names) | затенить |
Restore / playRestore(names) | восстановить |
ShowCreate(name) | смешанный режим по типу |
HideAll / ShowAll / UpdateAll | массовые варианты |
Стили
setElementStyle(names, **props) | массовая установка свойств |
setVisible(names, visible) | массовая видимость |
element(name) | получить Element |
mobject(name) | получить Manim Mobject |
Подписи
autoPlaceLabels(dynamic=False) | расставить подписи (one-shot / tracker) |
clearLabelTracker() | снять tracker |
Экспорт / утилиты
| Метод | Формат | Описание |
exportSVG(filepath) | SVG | векторный SVG через Cairo (без manim-рендерера) |
exportPDF(filepath, dpi=96) | PDF | векторный PDF (тот же Cairo-обход); dpi задаёт физический размер страницы |
exportEPS(filepath, dpi=96) | EPS | Encapsulated PostScript; предупреждает при полупрозрачности (EPS её не поддерживает) |
exportTikZ(filepath, *, options=None, standalone=False, **kwargs) | TikZ | семантический native TikZ для LaTeX; standalone=True — компилируемый документ |
exportJSXGraph(filepath, *, options=None, **kwargs) | HTML/JS/spec | интерактивная JSXGraph-доска; output ∈ html/js/spec/json/moodle |
exportStylePromptSummary(filepath=None) | JSON | компактная сводка конструкции для AI-генерации стиля |
addGrid(x_range, y_range) | — | ручная координатная сетка |
addCoordinateBackground() | — | фоновая сетка/оси из импортированного GGB euclidianView |
waitCut(msg) | — | пауза для видеомонтажа с меткой |
Внутренние (полезно знать)
_get_scene_bounds(padding=0.1) | границы камеры (used by Line/Ray clipping) |
CreateMObject(elem, z_auto=False) | создать manim VGroup из Element |
updateGeoElements(updates=None) | перерисовать элементы (full или подмножество) |
updateVar(tracker) | обновить переменную и пересобрать зависимости |
Construction — публичное API
element(name) / var(name) / objectByName(name) | поиск по имени |
add(obj) | добавить Element, Var или Command |
update(name, data) | обновить data элемента |
rebuild(debug=False, full=False) | пересчитать (full=True — все команды) |
rename(old_name, new_name) | переименовать + обновить ссылки в commands/state |
add_and_build(cmd) | инкрементально добавить команду и построить только её узел (eager для DSL) |
update_tparam(name, tparam) | обновить curve/locus-параметр constrained-точки |
get_independents() | dict independent-элементов (для keyframe UI) |
DSL-модуль — entry points
dsl.run(constr, code, debug=False, show=True) | прямой запуск exec-DSL без сцены |
with dsl.scope(constr): ... | ContextVar для direct factory use (файл-mode с IDE-подсказками) |
from animageo.dsl import * | super-module: все 74 фабрики + proxy-типы (Point, Circle, …) для IDE |
Export options — TikZOptions / JSXGraphOptions
TikZOptions (animageo.exporters.tikz.TikZOptions)
| Поле | По умолчанию | Смысл |
standalone | False | обернуть в компилируемый \documentclass{standalone} (иначе сниппет для \input{}) |
dpi | 96 | px → pt: единица картинки x=/y= повторяет физический размер SVG |
clip | True | обрезать по рамке viewport |
background | None | цвет фона \fill или None |
emit_font_size | True | выставлять размер шрифта подписей в pt |
precision | 3 | число знаков после запятой в координатах |
JSXGraphOptions (animageo.exporters.jsxgraph.JSXGraphOptions)
| Поле | По умолчанию | Смысл |
output | "html" | html (самодостаточная страница) · js (фрагмент) · spec (декларативный animageo-board/v1, без JS-строк) · json (legacy) · moodle |
boundingbox | None | (left, top, right, bottom) в math-units; None — из viewport сцены |
keepaspectratio | None | круги остаются круглыми; None зеркалит GGB-сцену |
axis / grid | None | оси/сетка; None зеркалит сцену (GGB-дефолты) |
background | None | цвет фона доски; "" — прозрачный (фон страницы) |
mathjax | True | подписи как LaTeX через MathJax |
shownavigation | True | навигационная панель JSXGraph |
jsxgraph_version | "1.10.1" | версия CDN для пина |
div_id | "agbox" | id контейнера <div> |
fallback | "static" | что делать с неживыми командами: static (заморозить) или skip |
coordinate_precision | 4 | знаков после запятой в координатах |
animageo-board/v1 — board spec
Декларативный, eval-free контракт между Python (exportJSXGraph(output="spec"))
и фреймворк-агностичным JS-рантаймом. JSON-схема:
animageo/exporters/jsxgraph/board.schema.json (поставляется в wheel,
доступна через animageo.exporters.jsxgraph.load_schema()).
| Ключ | Смысл |
format | всегда "animageo-board/v1" |
boundingbox | [left, top, right, bottom] в math-units |
size | [width, height] контейнера в px |
chrome | оси/сетка/фон/keep-aspect (импорт из GGB-вида) |
inputs[] | интерактивные входы: {name, kind, value/x/y, min/max/step, on, t}; kind ∈ point/number/angle/boolean/glider |
elements[] | элементы в топопорядке: {name, role, kind, engine, parents[], attrs, tracksDrag}; role ∈ input/live/static |
coverage[] | отчёт live-vs-static по каждому элементу |
Структурированные формы parents[]: {"ref": name} ·
число · [x, y] · [[xs],[ys]] (sampled polyline) ·
{"fn": body} (живая функция-координата) ·
{"js": expr} (escape-hatch).
BoardHandle (JS, @animageo/runtime)
| API | Что |
createBoard(spec, container, opts) | построить доску, вернуть handle |
on(signal, cb) | сигналы: ready · change (драг) · commit (конец драга) · viewchange · error |
getState() / setState(partial) | прочитать / задать состояние входов |
getValue/setValue/getElement/reset/setVisible/setStyle | точечные действия |
destroy() | снять слушатели, освободить доску |
CLI (python -m animageo)
| Флаг | Смысл |
-o FILE | выходной файл; формат выводится из расширения (.svg/.pdf/.eps/.tex/.html/.json/.png/.gif/.mp4/.webm/.mov) |
-f / --format FMT | явный формат: svg pdf eps tikz jsxgraph png gif mp4 webm mov |
--standalone | TikZ: компилируемый документ вместо сниппета |
--dpi N | PDF/EPS/TikZ: физический размер страницы (по умолчанию 96) |
--keyframes FILE | render-дорожка: keyframe-последовательность (иначе один кадр) |
--quality {l,m,h,p,k} | пресет разрешения/fps render-дорожки |
--fps N / --transparent | проброс в manim (GIF/WebM/MOV) |
-v/--verbose · -q/--quiet · --log-level LVL · --strict | логирование и строгий режим (unsupported → ошибка) |
Источники истины: animageo/style/schema.py,
animageo/constants.py, animageo/animageo.py,
animageo/geo/lib_conic.py, animageo/geo/lib_function.py,
animageo/geo/lib_implicit.py, animageo/geo/curve_sampling.py,
animageo/parsers/dsl/.
Актуально на 2026-05-30. Экспортёры: animageo/exporters/tikz/, animageo/exporters/jsxgraph/ (+ board.schema.json); CLI — animageo/__main__.py; Полный список имён полей —
docs/field_names.md, подробности про DSL —
docs/python_dsl.md.