SYMBOL INDEX (392 symbols across 55 files) FILE: document-skills/docx/ooxml/scripts/pack.py function main (line 19) | def main(): function pack_document (line 45) | def pack_document(input_dir, output_file, validate=False): function validate_document (line 90) | def validate_document(doc_path): function condense_xml (line 133) | def condense_xml(xml_file): FILE: document-skills/docx/ooxml/scripts/validate.py function main (line 16) | def main(): FILE: document-skills/docx/ooxml/scripts/validation/base.py class BaseSchemaValidator (line 11) | class BaseSchemaValidator: method __init__ (line 106) | def __init__(self, unpacked_dir, original_file, verbose=False): method validate (line 123) | def validate(self): method validate_xml (line 127) | def validate_xml(self): method validate_namespaces (line 156) | def validate_namespaces(self): method validate_unique_ids (line 186) | def validate_unique_ids(self): method validate_file_references (line 277) | def validate_file_references(self): method validate_all_relationship_ids (line 388) | def validate_all_relationship_ids(self): method _get_expected_relationship_type (line 486) | def _get_expected_relationship_type(self, element_name): method validate_content_types (line 522) | def validate_content_types(self): method validate_file_against_xsd (line 641) | def validate_file_against_xsd(self, xml_file, verbose=False): method validate_against_xsd (line 688) | def validate_against_xsd(self): method _get_schema_path (line 741) | def _get_schema_path(self, xml_file): method _clean_ignorable_namespaces (line 765) | def _clean_ignorable_namespaces(self, xml_doc): method _remove_ignorable_elements (line 791) | def _remove_ignorable_elements(self, root): method _preprocess_for_mc_ignorable (line 815) | def _preprocess_for_mc_ignorable(self, xml_doc): method _validate_single_file_xsd (line 826) | def _validate_single_file_xsd(self, xml_file, base_path): method _get_original_file_errors (line 869) | def _get_original_file_errors(self, xml_file): method _remove_template_tags_from_text_nodes (line 906) | def _remove_template_tags_from_text_nodes(self, xml_doc): FILE: document-skills/docx/ooxml/scripts/validation/docx.py class DOCXSchemaValidator (line 14) | class DOCXSchemaValidator(BaseSchemaValidator): method validate (line 24) | def validate(self): method validate_whitespace_preservation (line 72) | def validate_whitespace_preservation(self): method validate_deletions (line 124) | def validate_deletions(self): method count_paragraphs_in_unpacked (line 173) | def count_paragraphs_in_unpacked(self): method count_paragraphs_in_original (line 192) | def count_paragraphs_in_original(self): method validate_insertions (line 216) | def validate_insertions(self): method compare_paragraph_counts (line 263) | def compare_paragraph_counts(self): FILE: document-skills/docx/ooxml/scripts/validation/pptx.py class PPTXSchemaValidator (line 10) | class PPTXSchemaValidator(BaseSchemaValidator): method validate (line 28) | def validate(self): method validate_uuid_ids (line 77) | def validate_uuid_ids(self): method _looks_like_uuid (line 121) | def _looks_like_uuid(self, value): method validate_slide_layout_ids (line 128) | def validate_slide_layout_ids(self): method validate_no_duplicate_slide_layouts (line 203) | def validate_no_duplicate_slide_layouts(self): method validate_notes_slide_references (line 243) | def validate_notes_slide_references(self): FILE: document-skills/docx/ooxml/scripts/validation/redlining.py class RedliningValidator (line 11) | class RedliningValidator: method __init__ (line 14) | def __init__(self, unpacked_dir, original_docx, verbose=False): method validate (line 22) | def validate(self): method _generate_detailed_diff (line 114) | def _generate_detailed_diff(self, original_text, modified_text): method _get_git_word_diff (line 139) | def _get_git_word_diff(self, original_text, modified_text): method _remove_claude_tracked_changes (line 217) | def _remove_claude_tracked_changes(self, root): method _extract_text_content (line 254) | def _extract_text_content(self, root): FILE: document-skills/docx/scripts/document.py class DocxXMLEditor (line 47) | class DocxXMLEditor(XMLEditor): method __init__ (line 59) | def __init__( method _get_next_change_id (line 75) | def _get_next_change_id(self): method _ensure_w16du_namespace (line 89) | def _ensure_w16du_namespace(self): method _ensure_w16cex_namespace (line 98) | def _ensure_w16cex_namespace(self): method _ensure_w14_namespace (line 107) | def _ensure_w14_namespace(self): method _inject_attributes_to_nodes (line 116) | def _inject_attributes_to_nodes(self, nodes): method replace_node (line 240) | def replace_node(self, elem, new_content): method insert_after (line 246) | def insert_after(self, elem, xml_content): method insert_before (line 252) | def insert_before(self, elem, xml_content): method append_to (line 258) | def append_to(self, elem, xml_content): method revert_insertion (line 264) | def revert_insertion(self, elem): method revert_deletion (line 342) | def revert_deletion(self, elem): method suggest_paragraph (line 434) | def suggest_paragraph(xml_content: str) -> str: method suggest_deletion (line 482) | def suggest_deletion(self, elem): function _generate_hex_id (line 596) | def _generate_hex_id() -> str: function _generate_rsid (line 607) | def _generate_rsid() -> str: class Document (line 612) | class Document: method __init__ (line 615) | def __init__( method __getitem__ (line 680) | def __getitem__(self, xml_path: str) -> DocxXMLEditor: method add_comment (line 713) | def add_comment(self, start, end, text: str) -> int: method reply_to_comment (line 765) | def reply_to_comment( method __del__ (line 833) | def __del__(self): method validate (line 838) | def validate(self) -> None: method save (line 859) | def save(self, destination=None, validate=True) -> None: method _get_next_comment_id (line 888) | def _get_next_comment_id(self): method _load_existing_comments (line 904) | def _load_existing_comments(self): method _setup_tracking (line 933) | def _setup_tracking(self, track_revisions=False): method _update_people_xml (line 954) | def _update_people_xml(self, path): method _add_content_type_for_people (line 960) | def _add_content_type_for_people(self, path): method _add_relationship_for_people (line 972) | def _add_relationship_for_people(self, path): method _update_settings (line 988) | def _update_settings(self, path, track_revisions=False): method _add_to_comments_xml (line 1068) | def _add_to_comments_xml( method _add_to_comments_extended_xml (line 1091) | def _add_to_comments_extended_xml(self, para_id, parent_para_id): method _add_to_comments_ids_xml (line 1107) | def _add_to_comments_ids_xml(self, para_id, durable_id): method _add_to_comments_extensible_xml (line 1118) | def _add_to_comments_extensible_xml(self, durable_id): method _comment_range_start_xml (line 1133) | def _comment_range_start_xml(self, comment_id): method _comment_range_end_xml (line 1137) | def _comment_range_end_xml(self, comment_id): method _comment_ref_run_xml (line 1148) | def _comment_ref_run_xml(self, comment_id): method _has_relationship (line 1160) | def _has_relationship(self, editor, target): method _has_override (line 1167) | def _has_override(self, editor, part_name): method _has_author (line 1174) | def _has_author(self, editor, author): method _add_author_to_people (line 1181) | def _add_author_to_people(self, author): method _ensure_comment_relationships (line 1203) | def _ensure_comment_relationships(self): method _ensure_comment_content_types (line 1243) | def _ensure_comment_content_types(self): FILE: document-skills/docx/scripts/utilities.py class XMLEditor (line 41) | class XMLEditor: method __init__ (line 55) | def __init__(self, xml_path): method get_node (line 76) | def get_node( method _get_element_text (line 183) | def _get_element_text(self, elem): method replace_node (line 206) | def replace_node(self, elem, new_content): method insert_after (line 227) | def insert_after(self, elem, xml_content): method insert_before (line 251) | def insert_before(self, elem, xml_content): method append_to (line 271) | def append_to(self, elem, xml_content): method get_next_rid (line 290) | def get_next_rid(self): method save (line 302) | def save(self): method _parse_fragment (line 312) | def _parse_fragment(self, xml_content): function _create_line_tracking_parser (line 346) | def _create_line_tracking_parser(): FILE: document-skills/pdf/scripts/check_bounding_boxes.py class RectAndField (line 11) | class RectAndField: function get_bounding_box_messages (line 18) | def get_bounding_box_messages(fields_json_stream) -> list[str]: FILE: document-skills/pdf/scripts/check_bounding_boxes_test.py class TestGetBoundingBoxMessages (line 8) | class TestGetBoundingBoxMessages(unittest.TestCase): method create_json_stream (line 10) | def create_json_stream(self, data): method test_no_intersections (line 14) | def test_no_intersections(self): method test_label_entry_intersection_same_field (line 38) | def test_label_entry_intersection_same_field(self): method test_intersection_between_different_fields (line 56) | def test_intersection_between_different_fields(self): method test_different_pages_no_intersection (line 80) | def test_different_pages_no_intersection(self): method test_entry_height_too_small (line 104) | def test_entry_height_too_small(self): method test_entry_height_adequate (line 125) | def test_entry_height_adequate(self): method test_default_font_size (line 146) | def test_default_font_size(self): method test_no_entry_text (line 165) | def test_no_entry_text(self): method test_multiple_errors_limit (line 183) | def test_multiple_errors_limit(self): method test_edge_touching_boxes (line 206) | def test_edge_touching_boxes(self): FILE: document-skills/pdf/scripts/convert_pdf_to_images.py function convert (line 10) | def convert(pdf_path, output_dir, max_dim=1000): FILE: document-skills/pdf/scripts/create_validation_image.py function create_validation_image (line 11) | def create_validation_image(page_number, fields_json_path, input_path, o... FILE: document-skills/pdf/scripts/extract_form_field_info.py function get_full_annotation_field_id (line 12) | def get_full_annotation_field_id(annotation): function make_field_dict (line 22) | def make_field_dict(field, field_id): function get_field_info (line 62) | def get_field_info(reader: PdfReader): function write_field_info (line 140) | def write_field_info(pdf_path: str, json_output_path: str): FILE: document-skills/pdf/scripts/fill_fillable_fields.py function fill_pdf_fields (line 12) | def fill_pdf_fields(input_pdf_path: str, fields_json_path: str, output_p... function validation_error_for_field_value (line 59) | def validation_error_for_field_value(field_info, field_value): function monkeypatch_pydpf_method (line 90) | def monkeypatch_pydpf_method(): FILE: document-skills/pdf/scripts/fill_pdf_form_with_annotations.py function transform_coordinates (line 11) | def transform_coordinates(bbox, image_width, image_height, pdf_width, pd... function fill_pdf_form (line 28) | def fill_pdf_form(input_pdf_path, fields_json_path, output_pdf_path): FILE: document-skills/pptx/ooxml/scripts/pack.py function main (line 19) | def main(): function pack_document (line 45) | def pack_document(input_dir, output_file, validate=False): function validate_document (line 90) | def validate_document(doc_path): function condense_xml (line 133) | def condense_xml(xml_file): FILE: document-skills/pptx/ooxml/scripts/validate.py function main (line 16) | def main(): FILE: document-skills/pptx/ooxml/scripts/validation/base.py class BaseSchemaValidator (line 11) | class BaseSchemaValidator: method __init__ (line 106) | def __init__(self, unpacked_dir, original_file, verbose=False): method validate (line 123) | def validate(self): method validate_xml (line 127) | def validate_xml(self): method validate_namespaces (line 156) | def validate_namespaces(self): method validate_unique_ids (line 186) | def validate_unique_ids(self): method validate_file_references (line 277) | def validate_file_references(self): method validate_all_relationship_ids (line 388) | def validate_all_relationship_ids(self): method _get_expected_relationship_type (line 486) | def _get_expected_relationship_type(self, element_name): method validate_content_types (line 522) | def validate_content_types(self): method validate_file_against_xsd (line 641) | def validate_file_against_xsd(self, xml_file, verbose=False): method validate_against_xsd (line 688) | def validate_against_xsd(self): method _get_schema_path (line 741) | def _get_schema_path(self, xml_file): method _clean_ignorable_namespaces (line 765) | def _clean_ignorable_namespaces(self, xml_doc): method _remove_ignorable_elements (line 791) | def _remove_ignorable_elements(self, root): method _preprocess_for_mc_ignorable (line 815) | def _preprocess_for_mc_ignorable(self, xml_doc): method _validate_single_file_xsd (line 826) | def _validate_single_file_xsd(self, xml_file, base_path): method _get_original_file_errors (line 869) | def _get_original_file_errors(self, xml_file): method _remove_template_tags_from_text_nodes (line 906) | def _remove_template_tags_from_text_nodes(self, xml_doc): FILE: document-skills/pptx/ooxml/scripts/validation/docx.py class DOCXSchemaValidator (line 14) | class DOCXSchemaValidator(BaseSchemaValidator): method validate (line 24) | def validate(self): method validate_whitespace_preservation (line 72) | def validate_whitespace_preservation(self): method validate_deletions (line 124) | def validate_deletions(self): method count_paragraphs_in_unpacked (line 173) | def count_paragraphs_in_unpacked(self): method count_paragraphs_in_original (line 192) | def count_paragraphs_in_original(self): method validate_insertions (line 216) | def validate_insertions(self): method compare_paragraph_counts (line 263) | def compare_paragraph_counts(self): FILE: document-skills/pptx/ooxml/scripts/validation/pptx.py class PPTXSchemaValidator (line 10) | class PPTXSchemaValidator(BaseSchemaValidator): method validate (line 28) | def validate(self): method validate_uuid_ids (line 77) | def validate_uuid_ids(self): method _looks_like_uuid (line 121) | def _looks_like_uuid(self, value): method validate_slide_layout_ids (line 128) | def validate_slide_layout_ids(self): method validate_no_duplicate_slide_layouts (line 203) | def validate_no_duplicate_slide_layouts(self): method validate_notes_slide_references (line 243) | def validate_notes_slide_references(self): FILE: document-skills/pptx/ooxml/scripts/validation/redlining.py class RedliningValidator (line 11) | class RedliningValidator: method __init__ (line 14) | def __init__(self, unpacked_dir, original_docx, verbose=False): method validate (line 22) | def validate(self): method _generate_detailed_diff (line 114) | def _generate_detailed_diff(self, original_text, modified_text): method _get_git_word_diff (line 139) | def _get_git_word_diff(self, original_text, modified_text): method _remove_claude_tracked_changes (line 217) | def _remove_claude_tracked_changes(self, root): method _extract_text_content (line 254) | def _extract_text_content(self, root): FILE: document-skills/pptx/scripts/html2pptx.js constant PT_PER_PX (line 32) | const PT_PER_PX = 0.75; constant PX_PER_IN (line 33) | const PX_PER_IN = 96; constant EMU_PER_IN (line 34) | const EMU_PER_IN = 914400; function getBodyDimensions (line 37) | async function getBodyDimensions(page) { function validateDimensions (line 69) | function validateDimensions(bodyDimensions, pres) { function validateTextBoxPosition (line 88) | function validateTextBoxPosition(slideData, bodyDimensions) { function addBackground (line 121) | async function addBackground(slideData, targetSlide, tmpDir) { function addElements (line 133) | function addElements(slideData, targetSlide, pres) { function extractSlideData (line 244) | async function extractSlideData(page) { function html2pptx (line 896) | async function html2pptx(htmlFile, pres, options = {}) { FILE: document-skills/pptx/scripts/inventory.py function main (line 50) | def main(): class ShapeWithPosition (line 129) | class ShapeWithPosition: class ParagraphData (line 137) | class ParagraphData: method __init__ (line 140) | def __init__(self, paragraph: Any): method to_dict (line 231) | def to_dict(self) -> ParagraphDict: class ShapeData (line 266) | class ShapeData: method emu_to_inches (line 270) | def emu_to_inches(emu: int) -> float: method inches_to_pixels (line 275) | def inches_to_pixels(inches: float, dpi: int = 96) -> int: method get_font_path (line 280) | def get_font_path(font_name: str) -> Optional[str]: method get_slide_dimensions (line 346) | def get_slide_dimensions(slide: Any) -> tuple[Optional[int], Optional[... method get_default_font_size (line 362) | def get_default_font_size(shape: BaseShape, slide_layout: Any) -> Opti... method __init__ (line 388) | def __init__( method paragraphs (line 469) | def paragraphs(self) -> List[ParagraphData]: method _get_default_font_size (line 480) | def _get_default_font_size(self) -> int: method _get_usable_dimensions (line 509) | def _get_usable_dimensions(self, text_frame) -> Tuple[int, int]: method _wrap_text_line (line 534) | def _wrap_text_line(self, line: str, max_width_px: int, draw, font) ->... method _estimate_frame_overflow (line 562) | def _estimate_frame_overflow(self) -> None: method _calculate_slide_overflow (line 639) | def _calculate_slide_overflow(self) -> None: method _detect_bullet_issues (line 660) | def _detect_bullet_issues(self) -> None: method has_any_issues (line 682) | def has_any_issues(self) -> bool: method to_dict (line 692) | def to_dict(self) -> ShapeDict: function is_valid_shape (line 742) | def is_valid_shape(shape: BaseShape) -> bool: function collect_shapes_with_absolute_positions (line 766) | def collect_shapes_with_absolute_positions( function sort_shapes_by_position (line 819) | def sort_shapes_by_position(shapes: List[ShapeData]) -> List[ShapeData]: function calculate_overlap (line 849) | def calculate_overlap( function detect_overlaps (line 882) | def detect_overlaps(shapes: List[ShapeData]) -> None: function extract_text_inventory (line 914) | def extract_text_inventory( function get_inventory_as_dict (line 977) | def get_inventory_as_dict(pptx_path: Path, issues_only: bool = False) ->... function save_inventory (line 1003) | def save_inventory(inventory: InventoryData, output_path: Path) -> None: FILE: document-skills/pptx/scripts/rearrange.py function main (line 22) | def main(): function duplicate_slide (line 75) | def duplicate_slide(pres, index): function delete_slide (line 130) | def delete_slide(pres, index): function reorder_slides (line 137) | def reorder_slides(pres, slide_index, target_index): function rearrange_presentation (line 149) | def rearrange_presentation(template_path, output_path, slide_sequence): FILE: document-skills/pptx/scripts/replace.py function clear_paragraph_bullets (line 26) | def clear_paragraph_bullets(paragraph): function apply_paragraph_properties (line 43) | def apply_paragraph_properties(paragraph, para_data: Dict[str, Any]): function apply_font_properties (line 113) | def apply_font_properties(run, para_data: Dict[str, Any]): function detect_frame_overflow (line 143) | def detect_frame_overflow(inventory: InventoryData) -> Dict[str, Dict[st... function validate_replacements (line 162) | def validate_replacements(inventory: InventoryData, replacements: Dict) ... function check_duplicate_keys (line 204) | def check_duplicate_keys(pairs): function apply_replacements (line 214) | def apply_replacements(pptx_file: str, json_file: str, output_file: str): function main (line 356) | def main(): FILE: document-skills/pptx/scripts/thumbnail.py function main (line 67) | def main(): function create_hidden_slide_placeholder (line 149) | def create_hidden_slide_placeholder(size): function get_placeholder_regions (line 159) | def get_placeholder_regions(pptx_path): function convert_to_images (line 197) | def convert_to_images(pptx_path, temp_dir, dpi): function create_grids (line 274) | def create_grids( function create_grid (line 321) | def create_grid( FILE: document-skills/xlsx/recalc.py function setup_libreoffice_macro (line 16) | def setup_libreoffice_macro(): function recalc (line 53) | def recalc(filename, timeout=30): function main (line 158) | def main(): FILE: mcp-builder/scripts/connections.py class MCPConnection (line 13) | class MCPConnection(ABC): method __init__ (line 16) | def __init__(self): method _create_context (line 21) | def _create_context(self): method __aenter__ (line 24) | async def __aenter__(self): method __aexit__ (line 48) | async def __aexit__(self, exc_type, exc_val, exc_tb): method list_tools (line 55) | async def list_tools(self) -> list[dict[str, Any]]: method call_tool (line 67) | async def call_tool(self, tool_name: str, arguments: dict[str, Any]) -... class MCPConnectionStdio (line 73) | class MCPConnectionStdio(MCPConnection): method __init__ (line 76) | def __init__(self, command: str, args: list[str] = None, env: dict[str... method _create_context (line 82) | def _create_context(self): class MCPConnectionSSE (line 88) | class MCPConnectionSSE(MCPConnection): method __init__ (line 91) | def __init__(self, url: str, headers: dict[str, str] = None): method _create_context (line 96) | def _create_context(self): class MCPConnectionHTTP (line 100) | class MCPConnectionHTTP(MCPConnection): method __init__ (line 103) | def __init__(self, url: str, headers: dict[str, str] = None): method _create_context (line 108) | def _create_context(self): function create_connection (line 112) | def create_connection( FILE: mcp-builder/scripts/evaluation.py function parse_evaluation_file (line 56) | def parse_evaluation_file(file_path: Path) -> list[dict[str, Any]]: function extract_xml_content (line 79) | def extract_xml_content(text: str, tag: str) -> str | None: function agent_loop (line 86) | async def agent_loop( function evaluate_single_task (line 154) | async def evaluate_single_task( function run_evaluation (line 220) | async def run_evaluation( function parse_headers (line 275) | def parse_headers(header_list: list[str]) -> dict[str, str]: function parse_env_vars (line 290) | def parse_env_vars(env_list: list[str]) -> dict[str, str]: function main (line 305) | async def main(): FILE: skill-creator/scripts/init_skill.py function title_case_skill_name (line 189) | def title_case_skill_name(skill_name): function init_skill (line 194) | def init_skill(skill_name, path): function main (line 273) | def main(): FILE: skill-creator/scripts/package_skill.py function package_skill (line 19) | def package_skill(skill_path, output_dir=None): function main (line 85) | def main(): FILE: skill-creator/scripts/quick_validate.py function validate_skill (line 11) | def validate_skill(skill_path): FILE: slack-gif-creator/core/color_palettes.py function get_palette (line 108) | def get_palette(name: str = 'vibrant') -> dict: function get_text_color_for_background (line 121) | def get_text_color_for_background(bg_color: tuple[int, int, int]) -> tup... function get_complementary_color (line 141) | def get_complementary_color(color: tuple[int, int, int]) -> tuple[int, i... function lighten_color (line 163) | def lighten_color(color: tuple[int, int, int], amount: float = 0.3) -> t... function darken_color (line 181) | def darken_color(color: tuple[int, int, int], amount: float = 0.3) -> tu... function blend_colors (line 199) | def blend_colors(color1: tuple[int, int, int], color2: tuple[int, int, i... function create_gradient_colors (line 222) | def create_gradient_colors(start_color: tuple[int, int, int], function get_impact_color (line 256) | def get_impact_color(effect_type: str = 'flash') -> tuple[int, int, int]: function get_emoji_palette (line 292) | def get_emoji_palette(name: str = 'simple') -> list[tuple[int, int, int]]: FILE: slack-gif-creator/core/easing.py function linear (line 12) | def linear(t: float) -> float: function ease_in_quad (line 17) | def ease_in_quad(t: float) -> float: function ease_out_quad (line 22) | def ease_out_quad(t: float) -> float: function ease_in_out_quad (line 27) | def ease_in_out_quad(t: float) -> float: function ease_in_cubic (line 34) | def ease_in_cubic(t: float) -> float: function ease_out_cubic (line 39) | def ease_out_cubic(t: float) -> float: function ease_in_out_cubic (line 44) | def ease_in_out_cubic(t: float) -> float: function ease_in_bounce (line 51) | def ease_in_bounce(t: float) -> float: function ease_out_bounce (line 56) | def ease_out_bounce(t: float) -> float: function ease_in_out_bounce (line 71) | def ease_in_out_bounce(t: float) -> float: function ease_in_elastic (line 78) | def ease_in_elastic(t: float) -> float: function ease_out_elastic (line 85) | def ease_out_elastic(t: float) -> float: function ease_in_out_elastic (line 92) | def ease_in_out_elastic(t: float) -> float: function get_easing (line 117) | def get_easing(name: str = 'linear'): function interpolate (line 122) | def interpolate(start: float, end: float, t: float, easing: str = 'linea... function ease_back_in (line 140) | def ease_back_in(t: float) -> float: function ease_back_out (line 147) | def ease_back_out(t: float) -> float: function ease_back_in_out (line 154) | def ease_back_in_out(t: float) -> float: function apply_squash_stretch (line 163) | def apply_squash_stretch(base_scale: tuple[float, float], intensity: float, function calculate_arc_motion (line 194) | def calculate_arc_motion(start: tuple[float, float], end: tuple[float, f... FILE: slack-gif-creator/core/frame_composer.py function create_blank_frame (line 14) | def create_blank_frame(width: int, height: int, color: tuple[int, int, i... function draw_circle (line 29) | def draw_circle(frame: Image.Image, center: tuple[int, int], radius: int, function draw_rectangle (line 54) | def draw_rectangle(frame: Image.Image, top_left: tuple[int, int], bottom... function draw_line (line 77) | def draw_line(frame: Image.Image, start: tuple[int, int], end: tuple[int... function draw_text (line 97) | def draw_text(frame: Image.Image, text: str, position: tuple[int, int], function draw_emoji (line 134) | def draw_emoji(frame: Image.Image, emoji: str, position: tuple[int, int]... function composite_layers (line 160) | def composite_layers(base: Image.Image, overlay: Image.Image, function draw_stick_figure (line 190) | def draw_stick_figure(frame: Image.Image, position: tuple[int, int], sca... function create_gradient_background (line 235) | def create_gradient_background(width: int, height: int, function draw_emoji_enhanced (line 270) | def draw_emoji_enhanced(frame: Image.Image, emoji: str, position: tuple[... function draw_circle_with_shadow (line 323) | def draw_circle_with_shadow(frame: Image.Image, center: tuple[int, int],... function draw_rounded_rectangle (line 361) | def draw_rounded_rectangle(frame: Image.Image, top_left: tuple[int, int], function add_vignette (line 392) | def add_vignette(frame: Image.Image, strength: float = 0.5) -> Image.Image: function draw_star (line 435) | def draw_star(frame: Image.Image, center: tuple[int, int], size: int, FILE: slack-gif-creator/core/gif_builder.py class GIFBuilder (line 16) | class GIFBuilder: method __init__ (line 19) | def __init__(self, width: int = 480, height: int = 480, fps: int = 15): method add_frame (line 33) | def add_frame(self, frame: np.ndarray | Image.Image): method add_frames (line 51) | def add_frames(self, frames: list[np.ndarray | Image.Image]): method optimize_colors (line 56) | def optimize_colors(self, num_colors: int = 128, use_global_palette: b... method deduplicate_frames (line 113) | def deduplicate_frames(self, threshold: float = 0.995) -> int: method save (line 148) | def save(self, output_path: str | Path, num_colors: int = 128, method clear (line 244) | def clear(self): FILE: slack-gif-creator/core/typography.py function get_font (line 25) | def get_font(size: int, bold: bool = False) -> ImageFont.FreeTypeFont: function draw_text_with_outline (line 58) | def draw_text_with_outline( function draw_text_with_shadow (line 114) | def draw_text_with_shadow( function draw_text_with_glow (line 164) | def draw_text_with_glow( function draw_text_in_box (line 218) | def draw_text_in_box( function get_text_size (line 294) | def get_text_size(text: str, font_size: int, bold: bool = True) -> tuple... function get_optimal_font_size (line 316) | def get_optimal_font_size(text: str, max_width: int, max_height: int, function scale_font_for_frame (line 339) | def scale_font_for_frame(base_size: int, frame_width: int, frame_height:... FILE: slack-gif-creator/core/validators.py function check_slack_size (line 11) | def check_slack_size(gif_path: str | Path, is_emoji: bool = True) -> tup... function validate_dimensions (line 59) | def validate_dimensions(width: int, height: int, is_emoji: bool = True) ... function validate_gif (line 122) | def validate_gif(gif_path: str | Path, is_emoji: bool = True) -> tuple[b... function get_optimization_suggestions (line 200) | def get_optimization_suggestions(results: dict) -> list[str]: function is_slack_ready (line 241) | def is_slack_ready(gif_path: str | Path, is_emoji: bool = True, verbose:... FILE: slack-gif-creator/core/visual_effects.py class Particle (line 16) | class Particle: method __init__ (line 19) | def __init__(self, x: float, y: float, vx: float, vy: float, method update (line 45) | def update(self): method is_alive (line 59) | def is_alive(self) -> bool: method get_alpha (line 63) | def get_alpha(self) -> float: method render (line 67) | def render(self, frame: Image.Image): class ParticleSystem (line 106) | class ParticleSystem: method __init__ (line 109) | def __init__(self): method emit (line 113) | def emit(self, x: int, y: int, count: int = 10, method emit_confetti (line 143) | def emit_confetti(self, x: int, y: int, count: int = 20, method emit_sparkles (line 171) | def emit_sparkles(self, x: int, y: int, count: int = 15): method update (line 194) | def update(self): method render (line 203) | def render(self, frame: Image.Image): method get_particle_count (line 208) | def get_particle_count(self) -> int: function add_motion_blur (line 213) | def add_motion_blur(frame: Image.Image, prev_frame: Optional[Image.Image], function create_impact_flash (line 239) | def create_impact_flash(frame: Image.Image, position: tuple[int, int], function create_shockwave_rings (line 275) | def create_shockwave_rings(frame: Image.Image, position: tuple[int, int], function create_explosion_effect (line 301) | def create_explosion_effect(frame: Image.Image, position: tuple[int, int], function add_glow_effect (line 340) | def add_glow_effect(frame: Image.Image, mask_color: tuple[int, int, int], function add_drop_shadow (line 373) | def add_drop_shadow(frame: Image.Image, object_bounds: tuple[int, int, i... function create_speed_lines (line 410) | def create_speed_lines(frame: Image.Image, position: tuple[int, int], function create_screen_shake_offset (line 455) | def create_screen_shake_offset(intensity: int, frame_index: int) -> tupl... function apply_screen_shake (line 474) | def apply_screen_shake(frame: Image.Image, intensity: int, frame_index: ... FILE: slack-gif-creator/templates/bounce.py function create_bounce_animation (line 19) | def create_bounce_animation( FILE: slack-gif-creator/templates/explode.py function create_explode_animation (line 23) | def create_explode_animation( function create_particle_burst (line 240) | def create_particle_burst( FILE: slack-gif-creator/templates/fade.py function create_fade_animation (line 20) | def create_fade_animation( function apply_opacity (line 149) | def apply_opacity(image: Image.Image, opacity: float) -> Image.Image: function create_crossfade (line 175) | def create_crossfade( function create_fade_to_color (line 251) | def create_fade_to_color( FILE: slack-gif-creator/templates/flip.py function create_flip_animation (line 20) | def create_flip_animation( function create_quick_flip (line 195) | def create_quick_flip( function create_nope_flip (line 227) | def create_nope_flip( FILE: slack-gif-creator/templates/kaleidoscope.py function apply_kaleidoscope (line 18) | def apply_kaleidoscope(frame: Image.Image, segments: int = 8, function apply_simple_mirror (line 86) | def apply_simple_mirror(frame: Image.Image, mode: str = 'quad') -> Image... function create_kaleidoscope_animation (line 140) | def create_kaleidoscope_animation( FILE: slack-gif-creator/templates/morph.py function create_morph_animation (line 20) | def create_morph_animation( function create_reaction_morph (line 200) | def create_reaction_morph( function create_shape_morph (line 232) | def create_shape_morph( FILE: slack-gif-creator/templates/move.py function create_move_animation (line 19) | def create_move_animation( function create_path_from_points (line 160) | def create_path_from_points(points: list[tuple[int, int]], function apply_trail_effect (line 199) | def apply_trail_effect(frames: list, trail_length: int = 5, FILE: slack-gif-creator/templates/pulse.py function create_pulse_animation (line 20) | def create_pulse_animation( function create_attention_pulse (line 156) | def create_attention_pulse( function create_breathing_animation (line 188) | def create_breathing_animation( FILE: slack-gif-creator/templates/shake.py function create_shake_animation (line 19) | def create_shake_animation( FILE: slack-gif-creator/templates/slide.py function create_slide_animation (line 19) | def create_slide_animation( function create_multi_slide (line 140) | def create_multi_slide( FILE: slack-gif-creator/templates/spin.py function create_spin_animation (line 20) | def create_spin_animation( function create_loading_spinner (line 149) | def create_loading_spinner( FILE: slack-gif-creator/templates/wiggle.py function create_wiggle_animation (line 20) | def create_wiggle_animation( function create_excited_wiggle (line 233) | def create_excited_wiggle( FILE: slack-gif-creator/templates/zoom.py function create_zoom_animation (line 20) | def create_zoom_animation( function create_explosion_zoom (line 151) | def create_explosion_zoom( function create_mind_blown_zoom (line 221) | def create_mind_blown_zoom( FILE: video-downloader/scripts/download_video.py function check_yt_dlp (line 13) | def check_yt_dlp(): function get_video_info (line 22) | def get_video_info(url): function download_video (line 33) | def download_video(url, output_path="/mnt/user-data/outputs", quality="b... function main (line 103) | def main(): FILE: webapp-testing/examples/console_logging.py function handle_console_message (line 14) | def handle_console_message(msg): FILE: webapp-testing/scripts/with_server.py function is_server_ready (line 23) | def is_server_ready(port, timeout=30): function main (line 35) | def main():