
Powerpoint Automation
- 1.8k installs
- 23 repo stars
- Updated August 4, 2026
- aktsmm/agent-skills
powerpoint-automation is an agent skill that generates and edits PPTX from content.json, web articles, templates, and COM Automation.
About
The powerpoint-automation skill automates PPTX generation with an Orchestrator-Workers pattern using content.json as the single source of truth across extract, translate, build, and review phases. Workflow phases are TRIAGE, PLAN, PREPARE_TEMPLATE, EXTRACT, TRANSLATE, BUILD, REVIEW, and DONE. Scripts include create_from_template.py for content.json to PPTX, reconstruct_analyzer.py for PPTX back to content.json, extract_images.py, validate_content.py schema checks, and validate_pptx.py overflow validation. Quick start examples cover web article to fifteen slides, PPTX translation to Japanese, and COM Automation edits on open decks with RefURL, notes, overflow, and hyperlink verification. content.json slide types include title and content with items arrays. PPTX Reviewer handles overflow, consistency, and quality gates. License CC BY-NC-SA 4.0. Use when creating PPTX, converting articles to slides, translating presentations, editing open PowerPoint via COM, or content.json driven deck workflows. The workflow follows the source SKILL.md contract with progressive reference loading, clear trigger phrases, and practical steps developers can apply directly in agent sessions.
- content.json SSOT across EXTRACT, BUILD, REVIEW phases.
- Scripts: create_from_template, reconstruct_analyzer, extract_images, validators.
- Workflow: TRIAGE through DONE with Orchestrator-Workers pattern.
- COM Automation path for editing open PowerPoint with RefURL and overflow checks.
- Web article, existing PPTX, and template-based generation entry points.
Powerpoint Automation by the numbers
- 1,847 all-time installs (skills.sh)
- +15 installs in the week ending Aug 5, 2026 (Skillselion tracking)
- Ranked #118 of 688 Office & Documents skills by installs in the Skillselion catalog
- Security screen: HIGH risk (skills.sh audit)
- Data as of Aug 5, 2026 (Skillselion catalog sync)
powerpoint-automation capabilities & compatibility
- Capabilities
- content.json ssot pipeline · create_from_template pptx build · pptx reconstruct and image extract · schema and overflow validation · com automation open deck editing
- Use cases
- presentations · documentation · translation
What powerpoint-automation says it does
Create and edit professional PowerPoint presentations from web articles, blog posts, existing PPTX files, or templates.
npx skills add https://github.com/aktsmm/agent-skills --skill powerpoint-automationAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1.8k |
|---|---|
| repo stars | ★ 23 |
| Security audit | 2 / 3 scanners passed |
| Last updated | August 4, 2026 |
| Repository | aktsmm/agent-skills ↗ |
How do I convert a web article or content.json into a validated PowerPoint deck with overflow review?
Create and edit PowerPoint decks from web articles, PPTX files, or templates using content.json SSOT, COM Automation, and overflow review.
Who is it for?
Developers automating PowerPoint creation, article-to-slide conversion, or COM deck editing on Windows.
Skip if: Skip for Google Slides-only workflows without PPTX or COM Automation requirements.
When should I use this skill?
Use when creating PPTX, converting articles to slides, translating presentations, or COM Automation deck edits.
What you get
PPTX output from content.json with schema validation, image extraction, and overflow review passed.
- Populated .pptx presentation files
By the numbers
- 17 slide layouts across 2 masters (11 + 6)
- 16:9 aspect ratio at 13.33×7.5 inches
Files
PowerPoint Automation
AI-powered PPTX generation using Orchestrator-Workers pattern.
When to Use
- Web 記事やブログをスライド化したいとき
- 既存 PPTX を翻訳・再構成したいとき
- 開いている PPTX を COM Automation で直接編集したいとき
- テンプレートベースで PPTX を生成したいとき
- content.json を SSOT にして、抽出・翻訳・生成・レビューを分離したいとき
Quick Start
From Web Article
Create a 15-slide presentation from: https://zenn.dev/example/articleFrom Existing PPTX
Translate this presentation to Japanese: input/presentation.pptxEdit Open PPTX with COM
Edit the currently open PowerPoint deck with COM Automation and verify RefURL, notes, overflow, and hyperlinks.Workflow
TRIAGE → PLAN → PREPARE_TEMPLATE → EXTRACT → TRANSLATE → BUILD → REVIEW → DONE| Phase | Main Actor | Purpose |
|---|---|---|
| EXTRACT | extract_images.py | Source -> content.json |
| BUILD | create_from_template.py | content.json -> PPTX |
| REVIEW | PPTX Reviewer | Overflow / consistency / quality |
Core Assets
Scripts
| Script | Purpose |
|---|---|
create_from_template.py | content.json から PPTX を生成するメインスクリプト |
reconstruct_analyzer.py | 既存 PPTX を content.json に戻す |
extract_images.py | PPTX / Web から画像を抽出する |
validate_content.py | content.json のスキーマ検証 |
validate_pptx.py | overflow などの検証 |
詳細は references/SCRIPTS.md を参照。
content.json
content.json はこの skill の SSOT。抽出、翻訳、生成、レビューの間は常にこれを基準にする。
{
"slides": [
{ "type": "title", "title": "Title", "subtitle": "Sub" },
{ "type": "content", "title": "Topic", "items": ["Point 1"] }
]
}スキーマ詳細は references/schemas/content.schema.json を参照。
Template
標準テンプレートは assets/template.pptx。レイアウトや用途の詳細は template 側で管理し、main SKILL には最小限だけ残す。
python scripts/create_from_template.py assets/template.pptx content.json output.pptx --config assets/template_layouts.jsonAgents
| Agent | Purpose |
|---|---|
| Orchestrator | Pipeline coordination |
| Localizer | Translation (EN <-> JA) |
| PPTX Reviewer | Final quality check |
定義詳細は references/agents/ を参照。
Operating Rules
- SSOT: content.json を正とする
- One phase, one purpose: 抽出・翻訳・生成・レビューを混ぜない
- Fail fast: 問題が出たら次フェーズへ無理に進めない
- Human in loop: PLAN でユーザー確認を入れる
- Technical content is verified content: Azure / Microsoft の内容は MCP で一次情報確認してから入れる
- PowerPoint lock first: 開いている PPTX に対して python-pptx で上書きしない
- COM for open decks: 開いている PPTX や既存 deck の直接編集は references/instructions/com-automation.instructions.md を参照する
- Operational text stays in notes: 運営メモはスライド面に出さない
- Customer-facing surface only: 顧客向け deck のスライド面には内部向け話法、避ける表現、作業メモ、検証メモ、ファイル用途ラベルを混ぜない。話者向け情報は speaker notes へ分離する
- Template means template: ユーザー指定テンプレートがある場合、特に表紙はテンプレートの既存プレースホルダー/レイアウトを使い、上から別図形を重ねて隠さない
- Rendered QA before handoff: COM で開いている deck を直接 touch-up した後も、対象 deck から実レンダー画像を書き出し、重なり・フォントばらつき・表の可読性を個別 slide で確認する
- Review like a critic, not a generator: ユーザーに見せる前に、レンダー画像で「スカスカ・文字が小さい・アイコンが雑・テンプレ踏襲不足・旧文言残り」を自分で探して直す。詳しくは references/instructions/deck-iteration-review.instructions.md
- Media restore gate: slide insertion/deletion/recovery after a user review must re-check expected slide count and embedded video/media positions before continuing
- Architecture diagrams use shapes: ASCII art ではなく図形で組む
- Appendix URLs use Title - URL: 参考 URL の表示形式は統一する
- Review content and visuals separately: 生成後は見た目レビューだけでなく、公式情報との正確性レビュー、URL hyperlink 数、notes 数、placeholder/internal wording を確認する
Reference Map
Frequently Needed
- references/SCRIPTS.md
- references/USE_CASES.md
- references/content-guidelines.md
- references/IMPLEMENTATION_PATTERNS.md
- references/instructions/com-automation.instructions.md
- references/instructions/template.instructions.md
- references/instructions/customer-facing-deck.instructions.md
- references/instructions/deck-iteration-review.instructions.md
Go to Implementation Patterns For
- technical content verification workflow
- shape-based architecture diagrams
- template-based slide XML editing order
- COM SlideMaster / CustomLayouts edits for reusable templates
- rendered-slide visual QA loop
- PptxGenJS hardening pitfalls
- hyperlink batch processing
- customer-facing deck surface / notes separation
- font theme token resolution
- section / layout XML manipulation
- hidden slide cleanup
- COM Automation editing rules
- RefURL placement and hyperlink auditing
- file-lock workaround and post-processing
- 16:9 centering issues
- template corruption recovery
- video embedding via ZIP direct manipulation
Done Criteria
- source と goal が固定されている
- content.json を正として各フェーズが分離されている
- template / layout の前提が確認できている
- technical content は一次情報確認が済んでいる
- operational text がスライド面に出ていない
- template 利用時は単調な同一レイアウト反復と余剰 placeholder を確認している
- visual QA はレンダー画像で行い、修正後に該当スライドを再確認している
- 表は本文 16pt 以上を原則とし、header は中央揃え・中段揃えで視認性を確認している
- build 後に overflow / consistency / hyperlink をレビューできている
# Binary files - prevent Git from modifying
*.pptx binary
*.xlsx binary
*.docx binary
*.pdf binary
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.zip binary
{
"template": "template.pptx",
"template_path": "./template.pptx",
"slide_width_inches": 13.33,
"slide_height_inches": 7.5,
"aspect_ratio": "16:9",
"masters": [
{
"index": 0,
"name": "Master_0",
"layout_count": 11
},
{
"index": 1,
"name": "Master_1",
"layout_count": 6
}
],
"layouts": [
{
"index": 0,
"name": "Title square photo 2",
"category": "photo",
"has_title": true,
"has_subtitle": false,
"has_body": true,
"has_content": false,
"has_picture": true,
"body_count": 1,
"placeholders": [
{
"idx": 0,
"type": "TITLE (1)"
},
{
"idx": 12,
"type": "BODY (2)"
},
{
"idx": 13,
"type": "PICTURE (18)"
},
{
"idx": 14,
"type": "FOOTER (15)"
},
{
"idx": 15,
"type": "SLIDE_NUMBER (13)"
}
]
},
{
"index": 1,
"name": "タイトルとコンテンツ",
"category": "content",
"has_title": true,
"has_subtitle": false,
"has_body": false,
"has_content": true,
"has_picture": false,
"body_count": 0,
"placeholders": [
{
"idx": 0,
"type": "TITLE (1)"
},
{
"idx": 10,
"type": "OBJECT (7)"
},
{
"idx": 14,
"type": "SLIDE_NUMBER (13)"
}
]
},
{
"index": 2,
"name": "Title Only - left side ",
"category": "title_only",
"has_title": true,
"has_subtitle": false,
"has_body": false,
"has_content": false,
"has_picture": false,
"body_count": 0,
"placeholders": [
{
"idx": 0,
"type": "TITLE (1)"
},
{
"idx": 14,
"type": "SLIDE_NUMBER (13)"
}
]
},
{
"index": 3,
"name": "Header Background Title and Content",
"category": "content",
"has_title": true,
"has_subtitle": false,
"has_body": false,
"has_content": true,
"has_picture": false,
"body_count": 0,
"placeholders": [
{
"idx": 0,
"type": "TITLE (1)"
},
{
"idx": 10,
"type": "OBJECT (7)"
},
{
"idx": 14,
"type": "SLIDE_NUMBER (13)"
}
]
},
{
"index": 4,
"name": "Header Line Title and Content",
"category": "content",
"has_title": true,
"has_subtitle": false,
"has_body": false,
"has_content": true,
"has_picture": false,
"body_count": 0,
"placeholders": [
{
"idx": 0,
"type": "TITLE (1)"
},
{
"idx": 10,
"type": "OBJECT (7)"
},
{
"idx": 14,
"type": "SLIDE_NUMBER (13)"
}
]
},
{
"index": 5,
"name": "Quote slide 2b",
"category": "quote",
"has_title": true,
"has_subtitle": false,
"has_body": true,
"has_content": false,
"has_picture": false,
"body_count": 2,
"placeholders": [
{
"idx": 18,
"type": "BODY (2)"
},
{
"idx": 20,
"type": "BODY (2)"
},
{
"idx": 0,
"type": "TITLE (1)"
}
]
},
{
"index": 6,
"name": "Demo slide 2",
"category": "content",
"has_title": true,
"has_subtitle": false,
"has_body": true,
"has_content": false,
"has_picture": false,
"body_count": 1,
"placeholders": [
{
"idx": 0,
"type": "TITLE (1)"
},
{
"idx": 12,
"type": "BODY (2)"
},
{
"idx": 14,
"type": "SLIDE_NUMBER (13)"
}
]
},
{
"index": 7,
"name": "Section Divider",
"category": "section",
"has_title": true,
"has_subtitle": false,
"has_body": true,
"has_content": false,
"has_picture": false,
"body_count": 1,
"placeholders": [
{
"idx": 0,
"type": "TITLE (1)"
},
{
"idx": 12,
"type": "BODY (2)"
}
]
},
{
"index": 8,
"name": "Section Divider 2",
"category": "section",
"has_title": true,
"has_subtitle": false,
"has_body": true,
"has_content": false,
"has_picture": false,
"body_count": 1,
"placeholders": [
{
"idx": 0,
"type": "TITLE (1)"
},
{
"idx": 12,
"type": "BODY (2)"
},
{
"idx": 14,
"type": "SLIDE_NUMBER (13)"
}
]
},
{
"index": 9,
"name": "Apendix Blue Bkg",
"category": "unknown",
"has_title": false,
"has_subtitle": false,
"has_body": true,
"has_content": false,
"has_picture": false,
"body_count": 1,
"placeholders": [
{
"idx": 10,
"type": "BODY (2)"
}
]
},
{
"index": 10,
"name": "Closing logo slide",
"category": "closing",
"has_title": false,
"has_subtitle": false,
"has_body": false,
"has_content": false,
"has_picture": false,
"body_count": 0,
"placeholders": []
}
],
"layout_mapping": {
"title": 0,
"content": 1,
"section": 7,
"agenda": 1,
"summary": 1,
"closing": 10,
"two_column": 3,
"code": 4,
"photo": 0,
"blank": 2,
"title_only": 2,
"quote": 5,
"demo": 6
}
}
PK!��/
[Content_Types].xml �(�̗]k�0���F�#V�}0F�2��v+��ު�q,�/��������sJ:����&p�s���s|,/��L6�0:#'�$��Ʌ^e�����[�xd:g�h��<9[>���Z�I��>#%�}G��%(�ScA���8�0�nE-�?�
��|��r�4�0j���#l-1�t.�$�'ɇ:1ze�Y+g��F��\f;�4TV9�ֿ �t�+�꾅[�D�%s����E�Ej�PW�V:�j�Bp�
_�P�vŔ�Sńn6q��=u�$���OF��Q
ho�@��'���_3���2\�`�#�
��)�����Ǥ
�o�:��L�>�2��Ɔj/��kO���5ޯ�4�O�������^>ƌ���6~���#��N��w|cT2���V�n%L����Irζ�qw���3Ij��e?�g?��gz��^�G�γ=���=ۿ�7H�cȬf\x�8x�]s���3;��:����xZ�!�w}n���5����=g� ���@P�m�%�^�E5ZGZ}�,��PK!wG�
0v_rels/.rels �(����J1���!供���H���� R`Lf��M&$Si�Xt�]{��̜9��LfkO�ɒ��(�@��X���m�8��"1xy����M//&��硴�!���S-���^���� ��NC��clU�-��,oU��!�=O17��ss%�b�oj���ʡ�W(\3z�fb��l�6b�E��!���IAE���0Qu:��m�CJS�a��bh|Έ���X��)w�!��#@��H�.4��2CU�����;H�f����;v�h���=m{s����9#ҫ���y��f��z�e���PK!����S�ppt/_rels/presentation.xml.rels �(���]K�0���CɽM���`�D Z��؞��&)��t���K�^�]��9�yx��b�-�h�p%s�� �@�����[�xqC"�LV�Ur�CV����m�ixg"�"MN��RS6 ��U��l��R״c�'��fI2��� ˑg��r�ו�_�:����lx ��H<2�v̳VvXT0]�d�b�F�q�YH��7�Ļ�6@��A�A�|4�Ai��o���(��2�}8٩��|4�iR�<$Mc����} ɓ*/\4+d-���9���*$�Tf�#�*�%A���D�_��^�ː��L�q�Q��6$֖���]�?:�q�?��PK!w��7�ppt/presentation.xml��n�6�������R�ie\������Z�� r�A�[�o ��9��%E�C}!~�)�%ۋ4p�S�d�3�~jg���,�Sڲ�����e���z�W����05]c�TsR�����Ov��j��4-e���V
�TlB�� ���4YvBK¶�V ;�ےp��sޒ`�,LDz<�$y�����쯏��&u�,�}o�������
[Yk>���wCb�,��i]qtt�,y=�K����_�`�[��`��{�8m���1~oE��Sݱ���������;���U�)���`�UF�m9�۫��ӫ�)O�Z�
�<�в3���!Ђ��Χ������A*��@j�6ƷZszL�?�g���tg�����V���ZAD"��xv ����݀NI�=q )�ą���!9:���'p�B�P�W��sy�"e*5xy���2.�(X�}�յ��.�.�y����,����N x�g�
����������������M2�䞀�^��{��
8�
�-���`���CQ|��ga�G@Q|���F������(@�P�>�@=�9N��v��SQ�� #������ �:��)*
P8�>��
����a���ƪ����l��҅��v��@^��:F;��V�:^����(�m<a4��X�6~�h�y�֬>�[Y]���l��m�\6-�շw�j)�h7������]��]��]��]��]���.��5q�|Êpl���0t �8v%V�k�F[�e�.k���:����������Oo�����8I��cy�bd``#�lX^���8ı�>�����)�����o0���'�V��؇sƉ�'2�$�f3?�#?�(���x&3��)p7v�(���L(5��F��KQ��qd[Q����]�s:N�1����N�d�.�Z��М�ͺ�е��f���J��� ����}Y!?
�]�>�G(R
�JE�������,;�G����������f�Hb��2��0�� �V�e?����עv��K@<��ި�}1�;@������?;���PK!��ȟL!ppt/slideLayouts/slideLayout5.xml�X͎�6��;�;֯�o`�']`���7��ma)Q�hg����z)���p(�^ǻ�$ͥ `��Ï����Ѿ|u�sg�d��b��/<�aiV�������s�J�"%\l��Y徺�������ً�r��d�n�*�vE7,'�Q��VB�D��\�SI>v�ہ�u�9�
��/�3_�VeA�9+����W���,Z��R�
`p�C����UŽ���O���� ˅S�,e8�\��wl�d�L�<=�pe6���>t���m_�l�Ƶ�'W�dLK��,�\�ovs �ڇzm
���;�'��V$������瀇p�{���:v�j������gl�fzƺmh-�we��r;���u�8s�fW�ߪ���r
���7�k,̞���8j_��P��!�x[)�ϥ�Ku�k&�pp�lt�^��v��t� z��E�W�Ӊ���(�A!f�f]�H9Pw�H�zt O�,*�������
������XI=`b4�*XH��
���Z�=g(�8��!���luM�����0�FpRq\���"���l������A-�P��mA1��\,Jj��s�L��=�бA�����5;�.�o�c0���;"�i������tܗ��-��:< YR�l0+��m�ڌT�g���%ͤ�|5�;�n�wc|=�BG��V�)cugR�Ċ�V���J��bf���ߜ�����_��������ӟ�S�BTڽ�K<�RG�`4St3#y��o��!�bp-?��)I~��:Zc�ւ97�'S��h�=Ys�&�&
�|����������:�.�u��5�B(Xb���{�~�~tI�9�l#xʤ����L�+Ѥ��-��I�������~���'�)��N
~=}5�D^!BV�p�0� BU�H��z®]ng�PGY;��'�Ёj��ѿ&�9~�g !�p�7���:��tr�A곔P��d�K�YT��`A�Gג�����=I��`�KZ��ZѤ�m�f��5��('��8���{=?Pɰ]�Lm��G_��yF���J��"�{�v)>0Y��V߫M̄�������?m��>�[�8Ѐ"7q�+)��0DZw ���%���r���.q�/��H�yj]�u�ցD(��Z���j��jB���&���jb��X
P�J: |��J�_��J�T[��`ā:���p�x��9�=0���lA�K8�e�3�����>��cC��;�~�����L�"P�U��x�P/�<��������H��D�kc�
0�1#�/ �5^C���ӈƼ�F������cH��5�'�VN�V��L[�n���t��:�.b�5�z� M��o�p`#�Q��~ ��m�G���p�E��SH�X�^6;KF���� J�{�DP�v�P����ƣq2{6hx�o��?���-�M�}�.P>:��h��+��?��PK!(�
�8&!ppt/slideLayouts/slideLayout3.xml�Z[o�F~���`�σ�c{lGl��VQ�5�җ��^��[mgI���nU�'�m���J���J����-П�3c;�BB�B Jw���r�\�3s���Ol��0��*γ�(âeA����x���Q�j?�$Ϣ��U��w�9^,UI��o��4�j��ú.�$�
�Q�W��"ʠo���_�ky^
K��N�`L�ԏ3��_�e~>�A���zeuC�����a\T�b/Ԋ2���=�R�Y�������#x��e�;XKB!�S���t��t��trm:�y��������_��||U�)��ղ��e�V���̩�j)�!#ے����_��H�M?�U���A��t#l�D0�&{J�-ڨ��if����6c����h�[@zfQ&U�܋�N�gu#0�qvV��cl��{�e�#��z*�Tl��rUyD1\�{6Q�6[�KAqc�;���C�qP�U>��y�"��XV[3f/���c,�h�E�1�#Kq=j(�F4|���ܕ\
�����GU����J�r�3oc���MYY[��q�D����Wf����*�B� e���6�eB���1��Ә����d��^�$Mk����z���M6��
xP��q�̙u%U�Vo&����;�:��z�B1�P`>�q�~*�N~,�uV��ߦ����d:�|���
:1�V��z�:z~' ��@;��*�{"� ���R'_��NjVF{pe�����i��b����6�>�`U��^��Q�ή52����w���P�����s�ɭ�?�������}�Vm0�pPpcvF�v}��*3��Ʉ���tr�g|Ln��'W7�:�n};���!�2����:���ۻ�w����_ŧMUU�>��U`�R�ֈ�y�>H�%���wy�l�F�h+���ʋ
��#��Nj���(��_��P���
h�����lE̯�<�Cv|����v?ϟg�1����;w��e^N��;���ni��P�EAk|Q�4@�����i@}+P��7�����j�?����~�c4��h���Kz�Ш,@\o�>��a��j�@����"?�~2`���I������87ow����A6�b�v\��H6u�D���Y�ch�,�)g_�T�_Gu�FM�e_0�����϶N4��1����-�,\�K����A��u����|{N�Z���ֵ��Z��l�Wj�6�(��eYXQUӦ
9x��A���~YGe�]�����%(?�D�WOo������R|�1u-B�PKC�C0�mׄ�Me���m�|TIxj=�"<�z�{��Wm�u5�̓�ͲQ{:��训���ԭ��J�0ʀ�ײ�=���GW�x�;�~d�k��+:�,A�b�q-�5�"��r��5��+�F�I��p�a[d��E�m�a[d��E�m�a[d�vɰ����fy�
�-ˤ�6,d�*\nSG}�%�4��ۖѷ��䅬��C��B�"��E��d�F�#�y*ŚNYi6^�[Wn��k��eR~��G\y�\�l�T�x�:�d��Z���PK!�ђ�7,ppt/slideLayouts/_rels/slideLayout5.xml.rels�Ͻ
�0�]���&���4u��E�����$��ۛт��}��\�M�xRb��ZV ț`��5ܮ��g���IÛ��r�\h�\�xp�EQ<kr�;��4!�ɗI҄���W�{R�ڨ�m@;3��jH'[���#�c��s��<&��G���Y:#gJ���S� �w�T��m������PK!�ђ�7,ppt/slideLayouts/_rels/slideLayout4.xml.rels�Ͻ
�0�]���&���4u��E�����$��ۛт��}��\�M�xRb��ZV ț`��5ܮ��g���IÛ��r�\h�\�xp�EQ<kr�;��4!�ɗI҄���W�{R�ڨ�m@;3��jH'[���#�c��s��<&��G���Y:#gJ���S� �w�T��m������PK!�ђ�7,ppt/slideLayouts/_rels/slideLayout3.xml.rels�Ͻ
�0�]���&���4u��E�����$��ۛт��}��\�M�xRb��ZV ț`��5ܮ��g���IÛ��r�\h�\�xp�EQ<kr�;��4!�ɗI҄���W�{R�ڨ�m@;3��jH'[���#�c��s��<&��G���Y:#gJ���S� �w�T��m������PK!�ђ�7,ppt/slideLayouts/_rels/slideLayout2.xml.rels�Ͻ
�0�]���&���4u��E�����$��ۛт��}��\�M�xRb��ZV ț`��5ܮ��g���IÛ��r�\h�\�xp�EQ<kr�;��4!�ɗI҄���W�{R�ڨ�m@;3��jH'[���#�c��s��<&��G���Y:#gJ���S� �w�T��m������PK!(��s��=!ppt/slideMasters/slideMaster1.xml�[[o��~/��@lz9��ma)Xr�T��
��ҷ����[�YEr��E��� m��h�^���@�6@���N�3zf�ܥdi��#{��-,ggΜ�}����o���r�U�g[tG�(Q��8;��<��vG�͆4ɳh�sU������E�J��ЊE�}dU�nuƌ�n�
�QJ�;yepo��)e�<�K���&]�if7�q֩�/Wy>��0��$�2&;)��2���E��V��[QFt#�>g�6�/�O��zp(?ߍFJ<</i
�=G^R*�4���Nw�n�V�[�᪸_Foe�o��~�W����'t�Q2��y�F�&�fǢѽ��aӤ��Q��+�G!�����e� SB)�p��Ktñ�v�����J��tp3���fg�M?�M��̦�̦Ofӯfg_Φ��h6}_�M�s�b�œ2���5����T��Du}��m[��u��42{a�@�@"�9�qX�U>bw�<��Ԁ�H
I>��5L|�Wu���0����r�ci�������E��G�&PU���G���Hw�6�c���C�$���M�XD�RӰ�)b�t���y0 �d#,�l�v�s�������Q�*���)���8�c��TmT�8��g�q�Ȼ\�m,z��͇�\���H;��8/u�d'��:"���bX���;����U����JX�������N9���b��4��3
�!�%�s4I�46&�'��T�����]�=���ґl{6�=2 ��엟��?�}�����ٳ��
����v�Z�&}�fg� �|x5����M�
�@�L�Qu�>vT�r0��C�����C��9�"�r�Mk�l������ڔ���X<+���Z��v
]4E�L�����0����.��}�}����-������y@%����x�������RҔү?�����+k���5���#�lS5,�T=��U3 ����a�_C�6��`&4յT$�k�R[�a�%j���sa��-�^Ka��v�K�|!�RN����}� NU��f;��ѻ ��D|�"$y�:��M&;��%gLJ��m�\Y~[��mF�+si�l��d�%ذ��n��U��J�ɡ��k�~�Ɓ�k��i0AY��4��]��J�2/�h6_P@ հ��]}��ߍ<��-)��u��M���Xw<�N�˔+rY�u�g��#�t]�
4P-۪a���[C�~�!�1�%��:o��}�5�����A"���8��z���HNsq�4���|�������/�d���5���sU��UC�cM
6ʁ��=��tB��3�J��&�e$���wiKI��W�u�輺;}�Y�o�P����Ku:�}jF@�ս�����������������..��{�ѪYﺎ�=�U]D��R��i����\��s��<�z���"/*�<�+�V_9�1mq���5�9���aR�C���ґ�W+��:���!�2�e�ˠE�0�hԍF��\Go$z#!��4����l$���I��3������'Rд�K
�/��4���a��D�6@�"��;6���%��P��%�NKW�B��%���+�%�����H�KtIKW�˦;)2NJ\2��:d538~W+���W���}z���NY2M��"����QMH$�W>$����$�/����PV�p/����-�N[��o�Ϋ�s�����^����:��#3υ�⣨��W͋�8m-1?��F4�4���\y0؛��cv��X����4�+��a�����܍Y8h'�Ȗ�1-���",o!/��#�Zc�8}��U=�K3�y���=������R,��q)����L����U�Zx
r����˘&|n����?��s��|^����!��<}�)�
�X�(6����rĊ&^�Ҵ
�����ڂr�Fo
J�����]�A��Rxp����C�F%i�(��T��hS�o�J��FkY��@��T�Tr(֨4[�4y]v;�;T�h&�(��^�y���[��;��~�7<�<�u��E�u�y6���σ^��i�߶��Z��t�'��Ϣ��qT�B�=��z��7I�Nk�����ᗟ㉗�g�v��xd�U�=t��|l���v���o���6Q,
6�ZqS�����[�lA��M�_y�n�&�/YW��w�����c"�{����PK!����!ppt/slideLayouts/slideLayout4.xml�ˏ�F���?X�y��x�Ȋ,�_-�V]��6�1�U� �EH�H-U�U�z껅Z�����.�����ބ�.�������x���7�y��OlǑ4�"L����AY
/���|O>{��,%M|�IГw�B>���dz�"�7�N:*%�FR�ў<,�l��)�a��X� {6H��6?��sz��G�։i��M�|���`z��z�8Hʺ�<�h���0+�ֲEZ��`͈��J*w2fmx�ԗ%Q0�,$�3۽�ȗ��j��\M�U�o��/O��l��յ[�\��Ƀ�����y��m����f.�>o�iF�4�b�6�D�o�ϷI��=�c~e~��{2����`���:ӛ�z�������;m��N�U�����֜j�{5���^��?J�gB�FQ��Fyؓ/�.6U�%�e)@�I��.p�b8Xw-�hWxm��yy u�o��9�<-�Ay�K�f������&�\�e�BN��!�Z��U @zW�,��%H����in�Ncvc�"�H�����,^<�u��J�1��l��2,��)W?������ C�C�"�iڳ1GPE��`bCź��=�u��Z�m���~�]Y(i�
S�㹺Ѩ(�ʝ(�q�E~0x�.>�ɬ'(��IL�a�1�̓Hg��j� d�Pa4�$-�C�� |�Ǟ��7tiF�6n���EP�d��јI��G��O$����9od�O8#g��8��8�
�#ʧ���)K4*7�}���[�
�z5�����LI��T��>����O���{��k=�j��^5��c��a9�����N�K��V5���-�o�~�W����b*�b[��`c����[�i��V4
.�W��)�7����<�[�B����=V)�������g�O�Z�SlQ��XƤa�H��w�(7<`��ҘFl�ڮ'uF{Y���U+�+\�ͷ�_� DϜNT��|;�.����r��\e&���Br�q�r��F.��E��-��%�J/��U����^[=�\d�W����K����"���^�(�v�z��F�1���.��Q��"��9����&o\���3���;꼢���N�Uo�H�]{r��?~~�>MY�s4D;H!��U��F�Ł�m/�旲�C
��Z=�ݰ�C�����h��|�_�1�>���6$��}���-M1�9�
����Oˠ�枃�<��".�(����:�X���2�)�I�M�S>����R���n
o7�!t���t]�tlvlELSA�}��ncu-����9(��G4/��%�G�ׄ�#B��6{�dž����ŧ��a�ƽC�PW������5��@(���J��$�����Z>E����_������'��8*P���M����Vt�Rt�v���U��g�����U���Y������KX�ĥ���P�j03ͮ�-�&"�`������WU�L�o)�,Cd?f,s1̲�R�gi(�� ؐ���5v��6��i&�#�����Q��N��0e}1,��q�뢳"������_��PK!*Y�I�-!ppt/slideLayouts/slideLayout1.xml�X[o�D~G�?X�yj�xƗ��j}CE��H�c{�n}Þ�&T�J���T���H�Z^@�P��R���`flw7d[ri�H��z<����}g��/mg�4��:)�/���a%��@�~��,�4ȣ -�x �ĵ|i���.�+u�;ńJ#�W��<��\Q�:�YP_(�8g�FE���V[JT�v�*HUu%�\��W��_�FI�E8�✶ U���_������à�U\31{�It�d�҄��,�aՔu@y�yn����hv�hv�nf�6��f�i3�N�&��*�y+��[��z%�_��WRq�GV��0q�OEC������l���_YX�������
����7_]26{KF+��¢ܫָ��ޝ}a�A�մ7lR%���#�x>>k������4�C�� M��gC}%�b�����p�%aU�ň^��K�9F/������7 �
K7��y��e��."&Q�i����l���s���.�f-������rD�)���Nc!�� ��L��1��R�!AXU[!D,T�~�-���PQCW��b�+t�.�>{�]�A�������%�pB�QB[�v��t�hOSX���V.<��x��?Ȅ$�x��"� dQ�/(]wכݟ��'�l�����.ȋ�=T�j�ܕ�{��p�Y�2�wsTuL2���B��J�hvh��)��W�"qs�%Yq#��|�����e8�&��\ߐ�(��<K�j3��o2,�fϤ�$k>y���{��������_��[������d���3Y�3y�у���%tNsX� t\��m��uu
�ր����CM#���p=�ls��3�D���L�Z/�e�uB6�в4͂jM��I�2(��Swsr��}������E�&��
q��Ƌ[Ѯ��u���%����\��x4�CC̀|�?2��^t�6Y�6��M86��96B�.�;6찍lkǡr?6��96>���9`�m-`�D��as�7U��W�_���Y�p_�^<���߿hf�ُliq����h�n�CS'��vى�Ǯ ��z�&����qgψ�B� �����+��x1ym�7BL#���z�9��w
�~���;�$���7*�1M��}m8�y�Ψ��A�pdB*��hs�1���h=��!G�q�J^���fɫD�ϩh
˲�빀86�������e ��1!x����j?���^��q�:�p�P���y�������{�J}�s���1u����W�}੬���9&��38��ѕI�T"����m�;��@�F���o���f����{[�&�l3��������w�����w6q�?d�|�V�:۶t�6�!�yE3��� ����c�CG��J���uNueq+��"���� o�ل�TDL���m�57�+f�dž]�����:�bk1u8���n�·p��Ϝ����PK!e�?���!ppt/slideLayouts/slideLayout2.xml�Y�o�F�W��`�����w���vE�BԐKo���՞]�"$�[U�� ���V�m��V��H�_p��}3���$��VE��̛7����=Ϟ<��&�$*�8�z�|�B�ygz��9��PQ?�$Ϣ��U����;Y,UI��o�c*��Z�{��bI��`�~u"/��y��^�RX���w�Hc]J�8���A���aD�<�QF&e���FqQu܊�p+ʨ6|�N��f���/�'*'�*�ˠw���B�0PO���?Գ�����;���z�_�痜�*ΕQ�z��òX+VK���d��1m��R;ђ��l�;�s�/t]icX���=�ɞ�6�4��|4�݃6�{PK��3�2��v�C:u����,��Y�h'ظ�{��#��z*�Tl��vUyD1]bxQ��l��/e�]u:� '�ܜ�A�W�����K;𰬶f�^�\��X6�t�k�����V\O7[#���d�Z��Ԫ�����*V��R%d9����q�6E�S��f4�I��5��37v�9��3˽8I�؈�Kt���MFt�fQp�i>�i�f>�Tt�n&�O��&����3��{��c�=�,���$�O*�V�����~=���_!P�,�`lc���٘#�O���1�����hOD21[��ǽ����دӚ���F��%X��8���b�c5���x�G������eh}�с.׳������Ca�q���??����}�vm �HPpgvN�~}q�)�X�q���V=ۂ���l��5&
Y�84l��၇lj����t�y�p�f@���8�07�$�� ?��<Ĉ����=�ؾ�贆����������x��L�5t�w���{�Y��`�=���pz����/O�ϋ�3����֖�c��j��y5�[^�0�^b ( ��b� d�X@Y �o��Y@{-8\��v���[?���7��ʂ�IJ=��C��k �ߖc� ��h�諚~�Ew��R�'����`�o�W�s�vم�p4���Vֈ�DL�D��Md)DA}U5m���,˺�]��>�h�Fͽš`&T)u��϶3�����9�@,�,\�K����U��X���i�͓��V]Pк�\۴���[��<�ȶm�����
9~�i٠���_Ҩ��*����5BC��#~��_?������Ň����cݵ ĵ���#�q-x8�l�v�׀�* ό�=!�+�#>۬����!�hR���>�P_1\G1�n�mU�Q�����ڃ]��O6�t7靿x�E�m[:qL�2d4u`�ﱴ�����f�Q\��BVw���"��E�d�o�zQ'�����n�5��Af�ڤ��/�N8�`3��Ç
�tN�t�~kY���PK!�ђ�7,ppt/slideLayouts/_rels/slideLayout1.xml.rels�Ͻ
�0�]���&���4u��E�����$��ۛт��}��\�M�xRb��ZV ț`��5ܮ��g���IÛ��r�\h�\�xp�EQ<kr�;��4!�ɗI҄���W�{R�ڨ�m@;3��jH'[���#�c��s��<&��G���Y:#gJ���S� �w�T��m������PK!�g��&,ppt/slideMasters/_rels/slideMaster1.xml.rels���j� �{�� s�&�ʲf/ea���}�I"MTtvi�R��z(�"8:��!�?|=�bL�; %/����X�Jx?���%RΨ�;�0b�C����^QnJ�
���$tDa'D�*q����AQ��V�?T��*����PO2��H�'�v�%�7�����e@GwF��[��j�ʱ*�H8��O.�x⾬ZRV���%e�l��2ʽ81}W~�Y�f�����K�ֿ21�����PK!��}��$0ppt/handoutMasters/_rels/handoutMaster1.xml.rels���
�0��;��m7Y����|��f]qkK[��]x�H���T�{�C4�r(i�t�X���]w' 1 ���,r�1BSo7�
G�r(�G�9)�3cQ8�H�G�7��H�
�y!B#�ő�o�IZ�!������]��'����K9�Ac�@�2Y�fX]��o���PK!Kae�%!ppt/notesMasters/notesMaster1.xml�X�r�6��j��=&��/R5rJ����RI���#DBc�'��'��y���6�<�<�6R�l�"{fv�̔�b� 4�_7���ۛ��
a<ɳ�a��"Y��I�����F` .pc�g�c�n|{���^�,�_`.C`%�m�1�B�f�Gk�b~�$�o˜�X�+[5c�_���6m���)N2��ώ�/�ID���:%��F�X�
�:)xe�8�Z�3��ޔNa�ь��X��)Y�$��Lӂ��,�>eh�i�X�,�y��Y6.%ٙsF����w���F��L���p
K�C�L�f%4�t_U"n�,Y*���>��ߦԑ�"��v�h=~�m�<кY
Ь
*W�'w9A����@� �Y�Tʭ�����<��8�rX��B�u�B �����c�|�1~��(Xv�픰����a�
�r��>�-���w$O�:#�PL��s.tӪ����h��^�ʖxJ�t���7���w��r]Z�5��X��b��nW@���[J����0]�SS5��,����YrU��>Sx.aw:ƌ�r�^�T$"Zq�P��q�5f���=%��i�6�B!��̰�bTH�x5+�
�
��aZ��f4� �xE���1�@�梔�k�����8�q�ҕ���h�9�=?�$��蛡��K:�ʗ` �0=L(���k���r�y(ʯ��] H��qk��g�+Z#�E`�cDBy��\����2+z
�\kuf�#j-ŝ��i�>1z>�ݥ��fK�(�y�����c�v��g)f簼��II�n��@���9��m�6Nj�5O3�8C�y�cWj$ g�\g2J�x�maw��vK�Z1�u�l����K+�n��e�(���@b�����ވG��x���{�Y��O��'�=L��8����"�X��@��9S�� �R�X�Z�d��6$>A��t<����`�.����{9
fߠ�?'������|48C�)�ͻ�W���_ߠ���h�r�F�����;�/A�h�d���\)O�$���#�6<�b���
�bQ����cN���-�sI���5}Z�X�g��:��7\���7]/t��yÁ�w���/F��@��$P��0���G��~q!��Bp�EC��M�!�Gv�sP�b�襬�>��kW|��U�>�E?��6�Σ�_�m�����_7�R;�e�� ���`�`I?�>�J��i]!�#'�7B�¥Q�@T�;���ã�H�g1�dC�U�~��|���
*�68̯�XmQ�g`1Y0�H_s�����tq'j�rP)�퇜�{��y�:fXe��m��Py]�,�y^'�1I���A\=�qf�8�������g��e��;�B\�+<�'�=s�U�����������}�#G=��7`�ʌ���Y"�}��0�a�=[����C�q�~/����/�.�r�#*�����bL�t�$���Y� 䦉������S%�o���~�0��f+}����(��Z�,(vd����
��ʖ:[�l� GHТ*�]i�m�J�T�Ҹ�ƫ4^��+�P*����9}�����z�/3����V���d��R���lk3X�r���j���f�"�A,�DB#/oV��a�Aw��'����qt�P�^�� $���[�]�ܹ%�m��rГq�sИ��3=�u�[F���g_�Y��
0�!�"���VٖʕW�x�2����.��y&jtY��p.���Q�����Z�9�A��䃳�cf˪������8�><��%��Tܠ������|�$(�����[�%��>7>H�|�k��x��I�A�P�Z��@W.����D��U��:�)��� �J PP�8LΘ/iTJ��@��r�O��?7�$*���V}V��������PK!"s-�>G%ppt/handoutMasters/handoutMaster1.xml�X�r�6�w��a���O���J�b��ψ�=B$$��Nf�:}���Gɓt�帙�If�^��bw������낢=aM^��:15DʤJ�r7�.�=�P�q�bZ�d�ݐF{v��wO�~���p� C`�l�x�e��}�h���9�jR�ܶb���vF��+�_P�6M�(p^j�>��j��rV%W)yk��9��dy�(k��X�i���>r�bLb��q�kWd���2e�HྴLF��=�m��4���� w�Pn�5#DP��9��z��
����M0���ca@Ntb��K¸��S$�_oY!FHa'oį!x䚣�e&n�-�M��҆Z������u��p|�9�)Ȓ�d�w�r��/��E��
��hc��h �:C���Yʠ6_��W�A v*��$N~ C�ey=�8Mvس���zPG9���5�9�
$���H�e9��E�[Q%"�i]���zX�7Br#�
z��������@-ׅ�����k�ݝ��p:����ц���I��"Lw��T����
X"m�!�N���X�eR�t�jX �~Kk��J�[�܁�]E��TCuΓl���B2�a�~����6[2M*=2c�����3��Qu�_��R~\\]�r�9A����P3���=�ʶ4�����xg�����Mݍ̞�#S�G^ϱ�h���7��%�{�$�˲{%
>����\|D .E �[���n~j�����h&&�ي��m�@5Ф�� ~��z_����@�=d?�?�l褣�z�gZ]9��:ʿ�B�L���hf������&~-�3�.z����#����N��*UbP�6�p�5��1�NrJ%�@B[�U�z���_��#��
Å��~PC�BzGz湭6jLIz葻�=�נ������s���?�,OX�T[�F�+&o�'(��|���,ۓ�ͦ��"^L�h�4��|�~�V�h����'h��r5���Ζ��Z�P��֗����'(��z���c4�O�Y��.�@k#�:��%��r�D�P�OL��U���A������`�!�@�I0�������2{v�8��������vs<
�ᙯ�vg{`��7}��d2�м=�Q%l��(�5��wo����ۿ��\���&�OR����0��Q0ԇ�;�ݳ�K��'�㺣a�����~D�i�^Ȗ���Pxs�TE��6�����{�2�G��g'4]/�|�
K��F�h���P6�5�W2�m^��p�{�fg�-x������ ��c+έ��8�⸊�*��8������N8堡mE�[��Z4ʶm�G~����PK!��jd�qppt/commentAuthors.xml���j1D���ѽ�R���@ zl?@x�Y�-KIӿ�IZhn�I#桙asJ��J���qՁ!�y
�w���{x#�<a�L�I`3��
��i{�%�wQ�(,=:XTKo����*�v�sM�m�{;U�j��S�=ۄ���_o��y�^�?$b�@*EԖ@�P�Vn��J�0g��K㿄&L�`S�ࢁ 4`����(�6��}��q
v�UQ���PK!�ga)"ppt/theme/theme1.xml�Z[�7~/�?��xf|�_�&�ɲ�Iɣ�g��$�)���B_
�����o}(��J�?f!�MD%�x<�5�n�@w
k]�s�霣�㱯\=��u)C$n��%Ƕ`<&>���}�`Xj�� �&1l���[~p\�!��%�cv�����r���0`���bnBh��Ҡ�Sp,�F��9N��V"���d���:;����������,�ŜɁ1��R=Ԥ֟��-XS��-����<ᶅ�b�m;��.o])gB�����/�K����h0�����~�|7h�W�O�x,v�p�c�Z�iz)6J�ݭ�[��9��M��zjxJ���=[�~M�+PҬm�;��mU4�%���:�4���W��x���7��z�� ���z�i�S�
U�EW"�X��!�CP��_�����'g�=���������6
B�3&��uEV/{)˃��$Cc�1$yYlLь��B��ҵ7它8��=��˿������?�ʌgy���>��/R�5Z_?z����o���LJx��Q~�"Ȭ[���#�ؠa8��'q����1�2���``�u�nǻT�
���P#��9G��0Ҁ;��.��=ݔk�0���t���pdZ�����|&��T�B������ �1䖜#S
b��캃Ɣ02��=du2����hZ ]G����DP�[���]�K�I}�Hq66��X3�50� 22�#�M$�t��q��bb
|ȘI�6]hto���n���HGR��&�6 $��i/����a����.�FD?!�/��Bw�EPs�������"g��t$ ���O4)��HK����ѝZhoC��1�!��|d�f����*ס�67���C-U�����0 |vk�g��"ͷ�z�FTFS���TK���Ck&q�E��
��@+�g�x]P��rƄ����ז���ms���*`��M�V�h�_�����F��~hWn(�?�_��oj�wV���S�Z֫�"�z��#�G����x�[�¹�p��N�y��k.ꚋ��_�kV��z0�|���D�ς&�}��p��"����Š�(����,�t9
P��%�c�����2�Z!`��Y3�D�����U6�v��>ٓu�z�)_�;�l\m<�7V�F3���ǯKR�uH��IT$����P;;-��T_�B��^�����Z5a$�M��/���/�{�.2��mϰ���z>��H��M'��P\������ʥ=i�M���L"k��z�:��R����D|��h&2���=橥�$��(�}����D�Cja�`���9r-qh�Wr�t��FN��'8�#���K�g�,;d.H���5�s���j
Wz�G�g���E�ʊk�*=�ڗB�3
�,镒�� \�3:�}(�����fF�t�[_�/Z˚7��6� ����9V�į�Jr�z�k-�]�5��7B��j1��dl�Vty�cE�[.͢K⼯����7IJ�T�����PD~_��s���X���.U�G�_�M̒S��i�p�'�OD�4'�B9Kb{�����V�S�*�d�I��P8�X�왰*�M
�I�r�O�e��R2�lXQ|������7I�jt��O�5��m��:՞W땜fmP�V�N�Y�TJ�Z��j���z�=Fn-q�D/��E���FD�,��$*�i����o#\��ۈ9o�Z���z�W���z����f��)��z��L^v��֑��~8�y�zO�N�V�t+�R�9�zCwP�;�:�$���-�Q����PK!d��"ppt/theme/theme3.xml�Y[��F~���0�;�N�\Y��ZXX��{b_4�쒷
+U�J��T�[��H ����m�Z*�:3�;cs��ki㱿�3����{>'��8�q^�
����;�nN'�z�H�
���K{t^`���A|4���B���2�χ
��yH}����
��S��FS�;
�@�9���L����� ��X\� =Ԩ !���?�*
N h\��N�=�c�o4]�i�����a%�9���K�Rgєrԝ��I����%��]�x<��5�@��3Ml�cۓ�ae�9Pr��=�M�]���[;��eYf����䴽����~������ܵ��;�%�����ﴋx �;h�udyH�(�=�e �A5rٕ��,�|x7������"4�6�
!�3��x�ܝ��\�@lS���iyEl /�����c��飳�O���z�����_�W`������?�}�~���_��q��ϟ���Wj ��}���'��}��_?>T��)���S�\G��(���
Ќ���ԃ8/��1��Q���+��� �
����EyP//�>�蒥!/�z~x��
�rNW������VN�y��'*���Og��z�`�!�!�.
�^�@H!v�_�M�8�3pb�K�xVȦ����T�x|spX!Qя�Iɫ%"7^�K}���'y�5�<���+j3i���*�tU0�*����_DR�*�5�y�(\=�GJ�q�屟����LiDX�1�q�Ai�oaTwum��n��M��;K���B�q�#����+Kb��ᶻ�0�~���.�C���C���{���[V�u;��ʥs�@�|~�jy� 9f+��Ų=��hg�/ʁZ/�#����
8�Byh�nc�{0�j���Sj7Q�-�����J�'/���f��!;��r+�I\�ȑ+7���� ����}3eF��͐��j[OY�M������x`t��j�1� G�=!����C{�Ai�ļw'bH��p�������o��N����%��I�2�M�D�n�# �#pʭ2��l
�9_M�S?�|�h@���@�Y:��bޞ�:-
�t����^"%oe�P���M�-��v&��F��h����
��-�ϑ�J�l��p�=��S0#Kz��"U�|�g��51��B�>*V~Z��j��$�`ړD�f3L��|m���[��lͩȒKSɧ�{6��|��r䦊/("GZH��.y؞P�p���]���0 ��Y؊N6}+�H���#��y�cE营� 3Ү�VFJ�����q���� "SQ�1
xY7I!q�A+�Sg�\Q����'I�W]l%�u��~�Q�3^�Q�t�uM���6� ��ƍ�M6��ixģ�+J��\������9��hT��2j����p�s�z���엫{}g�g_��H���n���Q�����/P��.�=��%aq�F��j�o�'y�����ɤ�tstM4!pCnPw��d�o���1�`�DHx��O6s��̛i�Kѷ8�U�b���r�����QM#,�T���ǝ���
��%��$)p�����㶇�2��~��c� �&\)x��ø#�*��)�*ٲ|�Z��m�J�K3qb��3�$
�;4*��٧�=�kVɪ�N�Q�J�,�z��1��|���Pw[⨒A�(!0uq��ڗ�Ȝ�L�#l/x�B{Q���3����X�~��J����-��tRG(�P7k3����m[�n-uF6ۭ}s\��,-[Vsl��)6��P>�����PK!d��"ppt/theme/theme2.xml�Y[��F~���0�;�N�\Y��ZXX��{b_4�쒷
+U�J��T�[��H ����m�Z*�:3�;cs��ki㱿�3����{>'��8�q^�
����;�nN'�z�H�
���K{t^`���A|4���B���2�χ
��yH}����
��S��FS�;
�@�9���L����� ��X\� =Ԩ !���?�*
N h\��N�=�c�o4]�i�����a%�9���K�Rgєrԝ��I����%��]�x<��5�@��3Ml�cۓ�ae�9Pr��=�M�]���[;��eYf����䴽����~������ܵ��;�%�����ﴋx �;h�udyH�(�=�e �A5rٕ��,�|x7������"4�6�
!�3��x�ܝ��\�@lS���iyEl /�����c��飳�O���z�����_�W`������?�}�~���_��q��ϟ���Wj ��}���'��}��_?>T��)���S�\G��(���
Ќ���ԃ8/��1��Q���+��� �
����EyP//�>�蒥!/�z~x��
�rNW������VN�y��'*���Og��z�`�!�!�.
�^�@H!v�_�M�8�3pb�K�xVȦ����T�x|spX!Qя�Iɫ%"7^�K}���'y�5�<���+j3i���*�tU0�*����_DR�*�5�y�(\=�GJ�q�屟����LiDX�1�q�Ai�oaTwum��n��M��;K���B�q�#����+Kb��ᶻ�0�~���.�C���C���{���[V�u;��ʥs�@�|~�jy� 9f+��Ų=��hg�/ʁZ/�#����
8�Byh�nc�{0�j���Sj7Q�-�����J�'/���f��!;��r+�I\�ȑ+7���� ����}3eF��͐��j[OY�M������x`t��j�1� G�=!����C{�Ai�ļw'bH��p�������o��N����%��I�2�M�D�n�# �#pʭ2��l
�9_M�S?�|�h@���@�Y:��bޞ�:-
�t����^"%oe�P���M�-��v&��F��h����
��-�ϑ�J�l��p�=��S0#Kz��"U�|�g��51��B�>*V~Z��j��$�`ړD�f3L��|m���[��lͩȒKSɧ�{6��|��r䦊/("GZH��.y؞P�p���]���0 ��Y؊N6}+�H���#��y�cE营� 3Ү�VFJ�����q���� "SQ�1
xY7I!q�A+�Sg�\Q����'I�W]l%�u��~�Q�3^�Q�t�uM���6� ��ƍ�M6��ixģ�+J��\������9��hT��2j����p�s�z���엫{}g�g_��H���n���Q�����/P��.�=��%aq�F��j�o�'y�����ɤ�tstM4!pCnPw��d�o���1�`�DHx��O6s��̛i�Kѷ8�U�b���r�����QM#,�T���ǝ���
��%��$)p�����㶇�2��~��c� �&\)x��ø#�*��)�*ٲ|�Z��m�J�K3qb��3�$
�;4*��٧�=�kVɪ�N�Q�J�,�z��1��|���Pw[⨒A�(!0uq��ڗ�Ȝ�L�#l/x�B{Q���3����X�~��J����-��tRG(�P7k3����m[�n-uF6ۭ}s\��,-[Vsl��)6��P>�����PK!��X�$,ppt/notesMasters/_rels/notesMaster1.xml.rels���
�0��;��m�Dd�."�*�J�uŭ-m��vq��K �R7�y"/�8ˡ�����j��z8�I�^N�"�#4b��o8ɔCq4>����aLɟ�j�YF�<ڼ\�e�m��K��YUG�
��=���%�n�����(�8��Ѧ'X�Y̠J��Z+�=`�f�����PK!�K!b�&ppt/tableStyles.xml�Y[��@~o��@x.�E�,n�H�d�[��\%���j���w@�#([S}�AϜ�w����*
�W���U���h
�.�x��?���T��سC��R�~��Ý}���;���QXK���*=Ghq˲�;������o>L"��d�z���ڣ�8n�FvӔ|��-� ���ȓɐ��蜨0�����2yc������o���;xs��юp,߀���\�@1�� FOL,�0S'$��銈e7>����[�t�0!�$EF�P�v��Nh�/4;�c��IXKy/|!�e�K�K�E|D>cj��$���-p�i<#�0<+��;�BTZڐb3u�G�= f�ͬ�#���J�܁��?3�� N|��Ԇ�|�ܷ�����R��6i��wP�ۈ|�{�W�+7�X�-����t��I
vۃ=�C�+�����_ͮ\��'�<���W��&��ʑi�Q�''�4��������ֹ���LmD����f�Y���l�~�x(��/]�c+`i%�>��>]O��R���P���)����p�Ȉ�f2�n���kK�Q���(�t��W�y����;�s������Q].Ŕ.�b���J1��+�|���RLN�te ���2#N,��8 �LNR8y�Y��M1��s^A1��b�����l]B!�]]\ò��|&|�U��W
{7�w�!�>�廩�̜�D�Ҹ�3ru�k/��M�D���vS���v�SCN�)j��ݔ5�c�5P�f�X��}H_�ov���g���a�Fp$8{���s�ٳ;,�ϧ�8y�����
@������R�S�{+��{+E
u�[�c
ۂ-N��c[�.���b�J�9�����R0%Mׅ!�O���h8F�F�H��2��{�|�����W������Dw��U�7Ԥ�
�oq� X��3�bU5��q��_��PK!d_�1�wppt/viewProps.xml�TMo� ����qo������Rm/]�R��#L$��i�_�;n�DUV��o>��gw�N������i~�Q"���2mM�-�\��@���Yӝz7��c檍��O� ����t�����k��������e��H�i6ɲ�u\:��K��j����⥓&�$^jpxX+{6w ���&u��9�gTWS��_�GH��DᓏI���y��@�
w8-&e���u)���(R���V���b��0�-�WMM�4�2��k�%Oq�`>�lIt3�)��<K�bxw&��>WY�Zeȶ��)��E�P4������M�W�[���g�������"�n�>�9"�����x� K�M��9X�'ѽ�#���b�$u?�ȝ\:9:��ר�8��q��&�ТIY�z4��;��G��Т���78�/|Nx��n��3����;��PK!��udppt/presProps.xml��]o� ��'�?D��l�5���Ҥm���0�$���������a�I�֕�����y����7�Z�Im��[{�
z+�U}�t������2Vt�P}'��oi�����C6hidg�uG��ԙL����C�����V��~��Ӷ�n�u�ί��w Z�c�ߊ�����-�����d�W���h�&�os�6�%��:.�6�H���]q��Uh=mr>M�|П���*5-]�\�͵p�u�՝PkO��s���a���l�Zt������HP�AHY(�s�YPƂ����F�1�\.
_�6��M��WU����C/��7�y���ѻ�gⲄn��$�jp��ظ,&0(NBr���ĜEI@8/z���"�F�V+�.�Gb4;<���_�t�#s��}X�vc�gB9Yp9�2�a����3!!�тPDi���ui�肐2wml�D'p
�?��J�$�iH�ABb�Rw��@A���{�nL%t��;���w�ҹ�^6\
��ua�S@�g�M"B0�<3ʭ8(;1C�x�
X/)-�9ap�&!a8`�MAx��j/��բ�律�喹�V�1���į�x�0.?���PK!
'r��O(customXml/itemProps1.xml �$(� d��j�0D����ݖG�l�6�!��@�B^�Kk$9���{ezJ{Zf��7l}�0Sr�5چ�,' X���׆\���$��bB
�H��C=�� ����$.t��!_�is䜕���t��*-Y���oO�?���&ID��2�0�)�r#|�3�h*tF�(ݕ�RZB�r1`�����%�ͻ�H����~���Zmq��h�У
�DC�(̨c���m���9]kxBۚ����� ���PK!hv���5docMetadata/LabelInfo.xmlT�Ij�0Ы�e
q�ec�ׁ�
Jm���RLB��#�]QP��k�}ƀ؋�i��cA2���X�GuDbT�JV��`�_P�m�M�a
JC��RQCR��傷Z���lU�7{.����H�s�L0��~
oP�UU�,�v�߮J��ȁ]I/�$�rN@ky�������8F������x�m|�����ԭ��q�s��ȕ&��2έ����qz�t�����/��PK!(��2�+docProps/core.xml �(�|��n�0��H�C�{�I�ۅ(���z�A�܌3ݚƱe;M�m77z!qD�!���q�k�dw�.��r�x>�'�;�w
J3Q�P8
�%9+�3�$;�� OR�%�P���o%T�T(x��ehϙJS9C���cM��=rD�GBqb\��XzB怣 ��ɉ!��r0��2��RV��9�P��h�B|�P\߸��\#93���Mr��4���G��G]�!~v��qU��]�(�4�il�) ��϶�a���jۏvyq����O�]|��7v��.�ョx��)���ov������_� 4�PW/_5i�<�* F�4s��8�N�0�7���N���ʵSlE�ASŤq��:`k�����M��|�Iw�'Iٛ��u��S�MU:�!L�O��rϵ6^=�&�t|�Av��(��~��4�xr7މ^t�m���u�7��A�,�Ɠ�x<�f�V����/��PK!t?9z�(customXml/_rels/item1.xml.rels �(��ϱ��0�����ho��P��K)t;J�GILc�Xji߾�+t�(���Q���E]1��h��jP
>N~��j����.�����G{��J ����D60��o���,W�0��H9X)c�t��l'�_u����ݓ���|P�=�;6��w�#w �E�v
���d*���yB1��ߪ�� �k�����PK!\�'"�(customXml/_rels/item2.xml.rels �(������0�����nS=�,M�,�7�.x
�
�dBf}{��<x���g��-�ꊙ=E����Q��h��/��Xl��L
ܑa�.���VJ�'�X%��I$}k�n�`����\��J�uvD�����
h_Lu�
�C���~b�0x�?�.������B��c�Ҩ:�G^0<W몘��F���>��PK!{���(customXml/_rels/item3.xml.rels �(������0�����nSY�zYo"]��i�Ʉ�(���=������?��naVW��)XU5(��zG?�~��bcog�h���v�ќp�RB<�Ī(�
L"�Kkv�%��2PVʘG����#�u]��߀��T��@>�+P�=�;6
�w�M�0ʋ
�.,�a>f*���yD1���jSt������PK!H}[okdocProps/app.xml �(��TAkA���e��nK
&[jBi��@6���/����23��[vE*z�G=���C
VT�cF,�gg�m�Q�s��{y��C� u� $���|��a��[+�]G*�bL9��;�nW����)E@:F�ɦ;R*mx��F�`Y3af".��)�Hm�O�)o����+`1�+i%薊���_јGE~r/��F/@!$)�
�]��+LC�@�fܕ�ns��G^ �f�RaeJtH$�����{�.�� Sț'��4 Yk����Xg�u�����������X���Ȧ0g�%1X�9B��*%@�$��]�.٨�iQ����^�)�L����t�@ۀ�9�b"s�c��$�$�]�.�PT�鎱 �)�����4�J߾������:{��o���Ξ�ܘG:���U\�%�1Y�-���K-�?����\Bu��Ώʞ::;��@��_|�5l�
�܉�(
rw`fC-h̵���ʶ���ع���]�}��G��:;�O�B�ON���4�҅�98��������̞��C;��!�
�x�b61�
�$��!o��|�/;Qo��fgTS_9ж����5�l��{��{��V�5��f��ϖZ���PK!��<
�docProps/custom.xml �(����n�0����C�;���
�������B�DDRV4�����{�e����p�#Z�l�RLw��P��uJ�۱�B��mTZ����C�����z��A�P&�gk��Ӟ�l�Υ���z��u�|"��Vp�^�P�0�g�^��қ�9��ŋ���t�mgޏ��,��W�K;t)��A�y�Ǫ��(����!+XYGy��Ѵ3�T#��V���ЗΩ������9�+8���/��A�C��!0NY�Y�S�*!����m垷�̾��PK!�M���(customXml/itemProps3.xml �$(� ��]K�0���%�i�&}9b��A�06o���9aMR�Գ1�ݗ�8�n2�^5O���yM�O��!��5-��%`���l[ts}������5�"c�����c�$���2�N↊���}�/�bū:�8.6�9kf������tS�?P]���-څ0��4������:�C4ݖؾWέ�4�@�,����{}����9�?A��sh�S-�<k@���`�qWv�mV
��<c�<!f���ʒcM�Y=���&%tM_f�I�}~��%)0g�I�������T�*�V�Yo��
��2Qm�@l'_F8��Pyߍ+n�vɆ�o#�ד5>�6Fl�uľ!utq�\Po�o�w�S�^�C�ގ<�fg5��]0�6�*�/$�w0�8�>�+9r�%����9��/�~�O�t�ENNn�>|^����ѭ�����'��PK!N�Ǵ4h7(customXml/item3.xml �$(� �[[s�6}ߙ���� Q�([�D�8V�z7�Z��-���5 2$hK�~?�~�xqv���1I����w?[z&~@]����L�îI��F�5Y�?������wG���=q�7�ndYrP���o�!y��Ё;է7ۍ<;�T���W��a�iq����-u}9Ӷ���j+]U�ۏU�3k�G[`�z<z|�ĉ�$F^$31dZ��c�#����8�$�j��,�V����]��Z�yi"��c����[+J�L�}7p->Ů���E1Q���BqG&�H)��9h���>�$��]q�S#�$�����w��\�dG�#�bRa2��H,�ua��ItiQb��������PWs���%���Ұ�j��d.K,Pc�a���2����3_^^�/��?
{T���ϱ捻���<���!
��'�KW��9L���J3.4!xy1�/����d��.�ni-f�� �F��ْ`M�`u�Ot]�9Q��r��
K���tS�s}.��]6Sig�d� |�Adxb��F.�6�=�De�N������2G�������).d�U�XY��-1)�'�38�m�"�}�8��g�q4�?���"�Bzۡ'���B��У���/�}|�G��`�"o�g��0�#��w�F!F�+9� �6�����^��������\�������H��`������($u�Z�EYw�M��XF�=�\��%��L�#�߰{��l4D)�q�{%̣{ {v]�!�AQfUo+�"���;[b�ІB�-Dv��w����7>_%�U�VV*=܍�2����K�����I�k�y�gy�d艪5���5�К2�6�sFm6)��Lx6:Ƌ�P���R�p�)�lV��#>Cv�����b��I��(�%��:��7��Bh�a���X!��z�c�z��
����,�+֎xg�zd�n�Ͽ��_=��,b��Y���V
�� �@�L��7�0�� ����Z=�i�O��(�jloG���$K�P��IFIU��S��|Z��&,��C�j娫�.J �v4����Z?9rx۸��.i�M���Zh�EA�ëhT�G�j��jՉzDU�v��vN�K�������F
跕~�g�F��9�L�C�:���fu.ΫS�
�m������T8dʕ�@��ڄ*5{!T?��7�JV23�b���F�����?�'澰ﱿ�t�����/���w�)��|p�pI�⢉�%$��$���~�+��'�~�I�;��I���*��`�!�
�ᆠ�9�M�6J��o������W���L �ъ;e�+3u�0~��Ŧ��UP6sU��wa?�����܍;��X*S4�s�͛ޜ��z�A� �#DY�=Aƪ}"�I�������OJ
BVhb�.~���l;I�h��E�7�Ppq��U���x�oG+�J��NU%o�V�zE@�$k�B9SR�U\#�b���m1}���fhؔ a#\b���7`]��LWfpN���i���}�U���BO��K��w_+2x!I%���R0��o�\�D%R[ޱ&��D�`XS��qu=-HE+|u�Ti��5.�� Hq��r�L�y/z��]�o�B�?���Z8�"�9��~�}�9U[ͱ{!)�d�G�?��%fK��{2�<�lYX2��(��wҥyzSj���� .���C&���kIz�{�/�FS� y�-b$P�=xFaq"A�B� lYȂH����l�l[\H>�(�����/-\3*�F�~)e9 툜sC �G��M�K�Q_f�ޔ��Z�57�}��6�ɹ���^��wL�
S�9<�.�J3�^LK�_k��fi(�����Ⲳ�ip���N���t^��w�����WA�b*�a�������N��s�Y�d}�dA��d�:�:C�'�M���M%��܆��f9s<[�ѷLx��U��
�d�JՑ���#}7��KX1G*���"��q8�)��C���|V�̇b�ߕ|�d�0���f�T�s=���ǀ�1���N�9�@w?+���0f3T�����+
rhl�F�EFvf{��o�����PK!(m�"��(customXml/itemProps2.xml �$(� �S]k�0|/�?����|g��Br� �@ -�U��w��d$]����W�\�4 +1�;�����T<�������r���}���
*B�v����!������!�
2�����H:�7�����b!.9��^b��
�b�c��5�%�W�/T��6ф�b�� jF���`��輑1�~K�8j�N�
�H8���)��7Z�z�w0��a.m�u�*IP\`�*�����~��WMۈ~dT �X��_ԵĠ���5`b�oƚ��'}��OG5�J���c�L���J�&`o�?�7Zy�K����GˇSn���c-$��g6e�(2��~�;I��,�.�/�g��v6z7�'s�I��I�C�Z����,շ��3�*m~����P�#���'�ڶ!V�2�<[�?Y��o��PK!����0\(customXml/item2.xml �$(� ��[k�@����{���!��J+D蛬��Hv����oR�Rh}���sf&]]�ft�L&�a$F`4�h��8q,�*OmbYp��G����f�f���^��*��y�8��J�*� 'Q4�-�*+�A7���;�뺰��䎃l,�7O�Wv�Ƴ2�TV��MEVq=��P�
�5v�x��%�S�7ʨ#S�n�D�w��p-
�Jgbv79��X���`�����$�@ì,ᰬ�H�!=&�L�;��y�G����5����LA
�k�e�?�r`�L�<�����^s��߭N~�����PK!��b#��(customXml/item1.xml �$(� l�=�0���2�R�S/B�F��(6?�=)���c���#��>�P���8��)�V�l^4G94�j���<Yi)��£�� d��'Q᱃oMk
�ڒ�`�����ݩ�9\��e�B�!oA�O>��\��7o��PK-!Π��/
[Content_Types].xmlPK-!wG�
0vI_rels/.relsPK-!����S��ppt/_rels/presentation.xml.relsPK-!w��7�B
ppt/presentation.xmlPK-!��ȟL!�ppt/slideLayouts/slideLayout5.xmlPK-!(�
�8&!�ppt/slideLayouts/slideLayout3.xmlPK-!�ђ�7,�ppt/slideLayouts/_rels/slideLayout5.xml.relsPK-!�ђ�7,�ppt/slideLayouts/_rels/slideLayout4.xml.relsPK-!�ђ�7,�ppt/slideLayouts/_rels/slideLayout3.xml.relsPK-!�ђ�7,�ppt/slideLayouts/_rels/slideLayout2.xml.relsPK-!(��s��=!�ppt/slideMasters/slideMaster1.xmlPK-!����!�'ppt/slideLayouts/slideLayout4.xmlPK-!*Y�I�-!-.ppt/slideLayouts/slideLayout1.xmlPK-!e�?���!44ppt/slideLayouts/slideLayout2.xmlPK-!�ђ�7,�9ppt/slideLayouts/_rels/slideLayout1.xml.relsPK-!�g��&,�:ppt/slideMasters/_rels/slideMaster1.xml.relsPK-!��}��$09<ppt/handoutMasters/_rels/handoutMaster1.xml.relsPK-!Kae�%!@=ppt/notesMasters/notesMaster1.xmlPK-!"s-�>G%Eppt/handoutMasters/handoutMaster1.xmlPK-!��jd�q�Jppt/commentAuthors.xmlPK-!�ga)"�Kppt/theme/theme1.xmlPK-!d��"�Rppt/theme/theme3.xmlPK-!d��".Zppt/theme/theme2.xmlPK-!��X�$,rappt/notesMasters/_rels/notesMaster1.xml.relsPK-!�K!b�&ubppt/tableStyles.xmlPK-!d_�1�wffppt/viewProps.xmlPK-!��udQhppt/presProps.xmlPK-!
'r��O�jcustomXml/itemProps1.xmlPK-!hv���56ldocMetadata/LabelInfo.xmlPK-!(��2�+YmdocProps/core.xmlPK-!t?9z�(hpcustomXml/_rels/item1.xml.relsPK-!\�'"�(nrcustomXml/_rels/item2.xml.relsPK-!{���(ttcustomXml/_rels/item3.xml.relsPK-!H}[ok{vdocProps/app.xmlPK-!��<
� zdocProps/custom.xmlPK-!�M���f|customXml/itemProps3.xmlPK-!N�Ǵ4h7�~customXml/item3.xmlPK-!(m�"���customXml/itemProps2.xmlPK-!����0\�customXml/item2.xmlPK-!��b#����customXml/item1.xmlPK((���# Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)
## English
Copyright (c) 2025 aktsmm
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
**Note**: All scripts in this repository are independently implemented based solely on official documentation from python-pptx and PptxGenJS. No third-party proprietary code is included.
You are free to:
- **Share** — copy and redistribute the material in any medium or format
- **Adapt** — remix, transform, and build upon the material
Under the following terms:
- **Attribution** — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
- **Required attribution format**: You must include the following in any use or derivative work:
- Original author and repository: aktsmm / https://github.com/aktsmm/Ag-ppt-create
- A statement indicating if changes were made
- **NonCommercial** — You may not use the material for commercial purposes. For commercial licensing, see Additional Restrictions below.
- **ShareAlike** — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
**Special Permissions:**
- **Personal Use**: Personal, non-commercial use is freely permitted.
- **Microsoft Employees**: Employees of Microsoft Corporation and its subsidiaries (including Microsoft Japan) may freely use this work for both business and personal purposes.
**Additional Restrictions:**
1. **AI Training Data**: This work may not be used to train artificial intelligence models or machine learning systems without explicit written permission.
2. **Repository URL Requirement**: Any distribution, publication, or derivative work must prominently display the original repository URL.
3. **Commercial Licensing**: Commercial use is prohibited by default. If you wish to use this work for commercial or business purposes, please contact us in advance.
- Contact: via [GitHub Profile](https://github.com/aktsmm)
Full license text: https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode
---
## 日本語
Copyright (c) 2025 aktsmm
この作品はクリエイティブ・コモンズ 表示-非営利-継承 4.0 国際ライセンスの下に提供されています。
**注記**: 本リポジトリのすべてのスクリプトは、python-pptx および PptxGenJS の公式ドキュメントのみを参考に独自実装しています。サードパーティの独自コードは含まれていません。
以下の条件に従う限り、あなたは自由に:
- **共有** — あらゆるメディアやフォーマットで本作品を複製・再配布することができます
- **翻案** — 本作品をリミックス、変形、加工することができます
以下の条件に従ってください:
- **表示** — あなたは適切なクレジットを表示し、ライセンスまたはこのレポジトリへのリンクを提供し、変更があったらその旨を示さなければなりません。これらは合理的であればどのような方法で行っても構いませんが、許諾者があなたやあなたの利用行為を支持していると示唆するような方法は除きます。
- **必須の表示形式**: 使用または派生物には以下を含める必要があります:
- 著作者およびリポジトリ: aktsmm / https://github.com/aktsmm/Ag-ppt-create
- 変更を加えた場合はその旨の記載
- **非営利** — 営利目的で本リポジトリを利用してはなりません。商用利用については下記「追加制限」を参照してください。
- **継承** — 本作品をリミックス、変形、または加工した場合、あなたの貢献部分を元の作品と同じライセンスの下で配布しなければなりません。
**特別許諾:**
- **個人利用**: 個人的・非商用目的での利用は自由です。
- **Microsoft 社員**: Microsoft Corporation およびその関連会社(日本マイクロソフト等)の社員は、業務・個人を問わず本作品を自由に利用できます。
**追加制限:**
1. **AI 学習データとしての使用禁止**: 明示的な書面による許可なしに、本作品を人工知能モデルや機械学習システムの学習データとして使用することはできません。
2. **リポジトリ URL 明記義務**: 配布、公開、派生物作成時には、元のリポジトリ URL を目立つ場所に明示する必要があります。
3. **商用ライセンス**: 商用利用は原則禁止です。商用利用や業務利用をご希望の場合は、事前にご連絡ください。
ライセンス全文: https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.ja
---
## Disclaimer / 免責事項
### English
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
### 日本語
本ソフトウェアは「現状のまま」で提供され、明示または黙示を問わず、商品性、特定目的への適合性、および権利非侵害についての保証を含むがこれに限定されない、いかなる種類の保証も伴いません。
**作者または著作権者は、契約行為、不法行為、またはそれ以外であろうと、ソフトウェアに起因または関連し、あるいはソフトウェアの使用またはその他の扱いによって生じる一切の請求、損害、その他の義務について何らの責任も負わないものとします。**
⚠️ **本ソフトウェアの使用は自己責任でお願いします。**
AGENTS
Agent definitions for PPTX automation pipeline.
Design Principles
| Principle | Description |
|---|---|
| SSOT | Each rule defined in one place only; others reference it |
| Agent vs Script | AI judgment needed → Agent; deterministic → Script |
| IR Separation | Agents communicate via JSON (content.json) loosely coupled |
| Fail Fast | Early error detection; escalate after 3 retries |
| Human in the Loop | User confirmation required for important decisions |
📖 See common.instructions.md for details.
---
Documentation SSOT Map
| Topic | Source (SSOT) |
|---|---|
| PLAN Phase Confirmation | instructions/plan-phase.instructions.md |
| Naming & Bullet Rules | instructions/common.instructions.md |
| Quality Guidelines | instructions/quality-guidelines.instructions.md |
| COM Automation Rules | instructions/com-automation.instructions.md |
| Tools & Workflow | instructions/tools-reference.instructions.md |
| IR Schema | schemas/content.schema.json |
| Error Recovery | `instructions/error-recovery.instructions.md` |
| Script Dependencies | `instructions/script-dependencies.instructions.md` |
| Speaker Notes Quality | `instructions/quality-guidelines.instructions.md` |
| content_with_image | `instructions/template-advanced.instructions.md` |
---
Agent List
| Agent | Manifest | Role |
|---|---|---|
| Brainstormer | agents/brainstormer.agent.md | Interactive ideation → proposal.json |
| Orchestrator | agents/orchestrator.agent.md | State management, planning, retry control |
| Localizer | agents/localizer.agent.md | Translation only (AI judgment) |
| Summarizer | agents/summarizer.agent.md | Summarization & restructuring (AI judgment) |
| JSON Reviewer | agents/json-reviewer.agent.md | content.json review (translation, structure) |
| PPTX Reviewer | agents/pptx-reviewer.agent.md | PPTX review (visual, notes, CTA quality) |
⚠️reviewer.agent.mdwas renamed and split intojson-reviewer.agent.md.
Script List
| Script | Purpose | Auto-Fix Features |
|---|---|---|
classify_input.py | Input classification | - |
validate_content.py | IR schema validation | - |
validate_pptx.py | PPTX validation | - |
review_pptx.py | PPTX content extraction for review | - |
create_from_template.py | PPTX generation | AutoFit disable, position adjust |
create_clean_template.py | Clean template from source PPTX | Vertical text fix, decoration trim |
diagnose_template.py | Template quality diagnosis | - |
clean_template.py | Template cleaning | Background removal, ref fix |
analyze_template.py | Layout analysis → layouts.json | - |
merge_slides.py | Merge diagram slides into template | - |
insert_diagram_slides.py | Insert diagram slides at position | Scaling, layout selection |
workflow_tracer.py | Trace log output | - |
📖 See script-dependencies.instructions.md for dependencies.
---
Standard Workflow
Main Flow (★ Always start from Orchestrator)
┌─────────────────────────────────────────┐
│ TRIAGE (Orchestrator decides) │
└──────────────┬──────────────────────────┘
│
┌──────────────────────────────┼──────────────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ A: Needs │ │ B: Input │ │ C: Resume │
│ Brainstorm │ │ Provided │ │ Workflow │
│ → BRAINSTORM │ │ → INIT │ │ → Target Phase │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
│ │ │
▼ │ │
proposal.json │ │
│ │ │
└──────────────────────────────┴──────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────────────────────┐
│ INIT → PLAN(confirm) → PREPARE_TEMPLATE → EXTRACT → [SUMMARIZE] │
│ → TRANSLATE → REVIEW(JSON) → BUILD → REVIEW(PPTX) → DONE │
│ │ │ │
│ └────(FAIL → fix, max 3×)─────────────┘ │
│ ↓ │
│ ESCALATE (>3 failures) │
└───────────────────────────────────────────────────────────────────────┘Phase Details
| Phase | Owner | Description |
|---|---|---|
| TRIAGE | Orchestrator | Input detection, workflow branching (★ first) |
| BRAINSTORM | Brainstormer | Interactive → proposal.json (optional) |
| INIT | classify_input.py | Input detection → classification.json |
| PLAN | Orchestrator | Present options, get user approval (★ required) |
| PREPARE_TEMPLATE | create_clean_template | Template diagnosis, cleaning, position fix |
| EXTRACT | Script group | Image extraction + content.json (parallelizable) |
| SUMMARIZE | Summarizer | Slide count reduction only: summarize |
| TRANSLATE | Localizer | content.json → content_ja.json |
| REVIEW(JSON) | JSON Reviewer | content.json quality check → pass/fail |
| BUILD | create_from_template.py | PPTX generation (auto position, AutoFit) |
| REVIEW(PPTX) | PPTX Reviewer | Visual, notes, CTA quality review → pass/fail |
| DONE | Orchestrator | Open PowerPoint (optional) |
| ESCALATE | workflow_tracer.py | Human escalation after 3 failures |
Auto-Fixes in PREPARE_TEMPLATE
| Detection | Fix Action | Related Issue |
|---|---|---|
| Off-slide shapes | Remove | #41 Vertical text |
| Left-edge decorations | Remove | #35 Title offset |
| Narrow placeholders | Widen | #39 Title line wrap |
Auto-Fixes in BUILD
| Detection | Fix Action | Related Issue |
|---|---|---|
| AutoFit text spacing | Disable | #42 Japanese text spacing |
| Title position (Section) | Fix at 35% | #43 Position issues |
| Subtitle position | Title + 0.15" | #37 Too far apart |
📖 See error-recovery.instructions.md for recovery details.
---
Common I/O Contract
| Type | Path |
|---|---|
| User Input | input/ |
| Intermediate | output_manifest/{base}_*.json |
| Images | images/{base}/ |
| Final Output | output_ppt/{base}.pptx |
Base naming convention: {YYYYMMDD}_{keyword}_{purpose}
---
Method Selection
| Use Case | Recommended Method | Rating |
|---|---|---|
| EN PPTX → Japanese | reconstruct + create_from_template | ⭐⭐⭐⭐⭐ |
| With Template | analyze_template + create_from_template | ⭐⭐⭐⭐⭐ |
| From scratch | create_ja_pptx.py | ⭐⭐⭐⭐ |
| Code-heavy content | pptxgenjs | ⭐⭐⭐⭐ |
---
Operational Rules
- Follow instructions documents within this skill
- Direct editing of templates/PPTX is prohibited
- Run
analyze_template.pywhen using new templates
---
Troubleshooting
Common issues and solutions:
- Template load error: Run
diagnose_template.pyto diagnose template - Image overlap: Add
content_with_imagemapping tolayouts.json - Text overflow: Detect with
validate_pptx.py, reduce item count - Translation quality: Auto-checked by JSON Reviewer, escalate after 3 retries
Brainstormer Agent
Collects and structures input information for slide creation through interactive dialogue. Transforms vague ideas into structured proposals.
Caller: Delegated by Orchestrator when TRIAGE determines brainstorming is needed.
Role
- Elicit user's ideas and objectives through dialogue
- Confirm target audience and presentation duration
- Propose slide structure (outline)
- Identify required materials (images, data, code examples)
- Generate proposal.json (handoff to Orchestrator)
🚫 Does NOT Do
- PPTX generation (Orchestrator → Builder responsibility)
- Translation (Localizer responsibility)
- Detailed content writing (content.json created after Orchestrator)
- Initiate workflow (Orchestrator responsibility)
Exit Criteria
- [ ] User has approved the outline
- [ ]
proposal.jsonhas been generated - [ ] Required items (theme, audience, duration) are confirmed
- [ ] Ready for handoff to Orchestrator
---
Workflow
After being called by Orchestrator, proceed through this flow:
GREET → UNDERSTAND → CLARIFY → OUTLINE → CONFIRM → HANDOFF → Return to OrchestratorPhase Details
| Phase | Processing | Output |
|---|---|---|
| GREET | Greeting and purpose confirmation | - |
| UNDERSTAND | Hear theme, background, goals | Initial understanding |
| CLARIFY | Deep dive with 5W1H (dialogue loop) | Organized requirements |
| OUTLINE | Propose slide structure | Outline draft |
| CONFIRM | Get user approval | Confirmed outline |
| HANDOFF | Generate proposal.json → Orchestrator | {base}_proposal.json |
---
Hearing Items (5W1H + α)
Required Items
| Item | Example Question | Purpose |
|---|---|---|
| What | What is the topic? Theme? | Identify subject |
| Who | Who is the audience? (role, tech level, size) | Adjust tone & depth |
| Why | Why this presentation? What's the goal? | Clarify conclusion |
| Where/When | Where/when presenting? (internal/external, time) | Determine format |
| How | How to convey? (demo? live coding?) | Decide on materials |
Additional Items (situational)
| Item | Example Question |
|---|---|
| Existing materials | Any images, diagrams, code to use? |
| Restrictions | Topics or competitors to avoid? |
| Tone | Casual? Formal? Energy level? |
| CTA | What action should audience take? |
| References | Any slides, articles, videos to reference? |
---
Outline Proposal Rules
Basic Structure Template
1. Title (catchy message)
2. Agenda (table of contents)
3. Background / Problem Statement (Why care?)
4. Main Content
- Section 1: [Topic]
- Section 2: [Topic]
- Section 3: [Topic]
5. Demo / Case Study (optional)
6. Summary / Next Steps
7. Q&A / Thank youSlide Count Guidelines by Duration
| Duration | Slide Count | Time per Slide |
|---|---|---|
| 5 min (LT) | 5-8 slides | 30-60 sec |
| 15 min | 12-18 slides | 50-75 sec |
| 30 min | 20-30 slides | 60-90 sec |
| 60 min | 30-50 slides | 60-120 sec |
💡 Follow "1 slide = 1 message" principle
---
Output: proposal.json
Schema
{
"metadata": {
"title": "Presentation Title",
"presenter": "Presenter Name",
"date": "2025-12-16",
"duration_minutes": 15,
"audience": {
"role": "Azure Operations / SIer",
"tech_level": "Intermediate",
"size": "~30 people"
},
"goal": "Drive Copilot adoption decision",
"cta": "Try VS Code + Copilot"
},
"outline": [
{
"section": 1,
"title": "Title",
"type": "title",
"key_message": "How GitHub Copilot Transforms Operations",
"notes": "Make it catchy. Capture audience interest"
},
{
"section": 2,
"title": "Agenda",
"type": "agenda",
"items": ["Background", "3 Benefits", "Demo", "Summary"]
}
],
"materials": {
"images": ["Architecture diagram", "Screenshots"],
"code_samples": ["Bicep example", "PowerShell example"],
"demos": ["Live coding in VS Code"]
}
}Output Path
output_manifest/{base}_proposal.json
---
Escalation
Before handing off to Orchestrator, confirm with user if:
- Outline not finalized (3+ revision loops)
- Materials are insufficient (no images/data)
- Duration and slide count don't balance
---
Coordination with Other Agents
| Target | Timing | Handoff |
|---|---|---|
| Orchestrator | HANDOFF phase | proposal.json |
| Summarizer | Need to summarize | Source + instructions |
| Localizer | Need multilingual | proposal.json + lang |
JSON Reviewer Agent
Agent responsible for content.json quality review. Functions as a quality gate after translation, before BUILD.
Separation of Concerns: PPTX review is handled by pptx-reviewer.agent.md. This agent handles JSON review only.Role
- Verify content.json schema compliance
- Evaluate translation quality (AI judgment)
- Check technical term appropriateness
- Check content consistency
- Pass/Fail determination (PASS / WARN / FAIL)
🚫 Does NOT Do
- PPTX review (PPTX Reviewer responsibility)
- Content modification/editing (only points out issues)
- PPTX regeneration (Builder script responsibility)
- Direct user confirmation (Orchestrator responsibility)
---
I/O Contract
| Type | Path | Description |
|---|---|---|
| Input | output_manifest/{base}_content_ja.json | Translated content.json |
| Output | Determination (PASS/WARN/FAIL) | Return to Orchestrator |
---
Review Process (★ Auto-validation → AI judgment)
Step 1: validate_content.py (auto-validation, required)
↓
Schema violation, empty slides, image paths → exit 1 = immediate FAIL
↓
Step 2: JSON Reviewer Agent (AI judgment)
↓
Check translation quality, technical terms, content consistency
↓
Final determination (PASS / WARN / FAIL)Commands
# Step 1: Auto-validation (required, run first)
python scripts/validate_content.py "output_manifest/{base}_content_ja.json"
# exit code: 0=PASS, 1=FAIL, 2=WARN
# Step 2: AI review (only after auto-validation PASS)
# → Call JSON Reviewer Agent---
Separation of Responsibilities
| Check Item | Owner | Reason |
|---|---|---|
| Schema compliance | validate_content.py | Deterministic (JSON Schema) |
| Empty slide detection | validate_content.py | Deterministic (field presence) |
| Image path existence | validate_content.py | Deterministic (file exists) |
| Items format | validate_content.py | Deterministic (array type) |
| Translation quality | JSON Reviewer | AI judgment (naturalness) |
| Term appropriateness | JSON Reviewer | AI judgment (domain knowledge) |
| Content consistency | JSON Reviewer | AI judgment (context) |
| Citation format | JSON Reviewer | AI judgment (integration) |
| Notes quality | JSON Reviewer | AI judgment (content eval) |
---
Check Items
Auto-Validation (validate_content.py)
| Item | Pass Criteria | Verdict |
|---|---|---|
| Schema compliance | validate_content.py exit 0 | FAIL if NG |
| Empty slides | type: "content" has items or image | FAIL if NG |
| Image paths | All image.path files exist | FAIL if NG |
| Agenda presence | type: "agenda" after title | WARN if missing |
| Summary presence | type: "summary" before closing | WARN if missing |
| Title length | 40 characters or less | WARN if over |
AI Judgment Items
| Item | Pass Criteria | Verdict |
|---|---|---|
| Translation complete | No English text remaining | FAIL if NG |
| Translation natural | No unnatural expressions | WARN if unnatural |
| Technical terms | Use industry-standard translations | WARN if inappropriate |
| Content consistency | No contradictions between slides | WARN if contradictory |
| Citations | Notes include source for PPTX-derived | WARN if missing |
| Notes quality | Includes explanations, not just citations | WARN if insufficient |
---
Pass/Fail Criteria
| Errors | Warnings | Verdict | Action |
|---|---|---|---|
| 0 | 0 | ✅ PASS | Proceed to BUILD |
| 0 | 1-3 | ⚠️ WARN | User confirm → BUILD |
| 0 | 4+ | ⚠️ WARN | Recommend fixes |
| 1+ | - | ❌ FAIL | Send back |
---
Output Format
## 📋 JSON Review Result
**Target**: output_manifest/{base}\_content_ja.json
**Verdict**: ✅ PASS / ⚠️ WARN / ❌ FAIL
### Summary
- Slide count: {N}
- Errors: {N}
- Warnings: {N}
### ❌ Errors (Must Fix)
1. [Empty content] slides[5]: content slide has no items
### ⚠️ Warnings (Recommended)
1. [Translation] slides[3]: "Data Security" not translated
2. [Notes] slides[7, 12]: Only citations, no explanations
### ✅ Verified
- Schema compliance: OK
- Image paths: All exist---
Fallback Policy
| Issue Type | Fallback To | Action |
|---|---|---|
| Schema violation | EXTRACT | Re-run reconstruct_analyzer |
| Empty slides | EXTRACT | Fix content.json |
| Image path missing | EXTRACT | Re-run extract_images |
| Translation error | TRANSLATE | Re-run Localizer |
| Notes insufficient | TRANSLATE | Ask Localizer to enrich notes |
| 3 failures | ESCALATE | Wait for human intervention |
---
When Called
EXTRACT → TRANSLATE → [JSON Reviewer] → BUILD → [PPTX Reviewer] → DONE
↑
Called hereCalled by Orchestrator:
- After TRANSLATE phase, before BUILD
---
References
- Quality Guidelines:
instructions/quality-guidelines.instructions.md - Orchestrator:
agents/orchestrator.agent.md - PPTX Review:
agents/pptx-reviewer.agent.md
Localizer Agent (Translator)
Specialized agent for translating English content to Japanese. Handles translation only (Single Responsibility Principle).
📝 Integrated: Notes Translator responsibilities absorbed. This agent also translates speaker notes.
Role (Single Responsibility: Translation)
- Translate each slide in content.json to Japanese when delegated by Orchestrator
- Keep product names and proper nouns in English (Microsoft Purview, Azure, Copilot, SharePoint, Teams, etc.)
- Speaker notes (notes) are also translation targets
- Output:
{base}_content_ja.json
🚫 Does NOT Do
- Summarization/restructuring (Summarizer Agent responsibility)
- PPTX generation (
create_from_template.pyscript responsibility) - Schema validation (
validate_content.pyscript responsibility) - Hearing (Orchestrator responsibility)
Exit Criteria
- [ ] All slide title, subtitle, items, notes are translated to Japanese
- [ ] Product names and proper nouns remain in English
- [ ]
{base}_content_ja.jsonhas been generated - [ ] Speaker notes contain specific explanations (not just citations)
I/O Contract
| Item | Path |
|---|---|
| Input | output_manifest/{base}_content.json or {base}_content_summary.json |
| Output | output_manifest/{base}_content_ja.json |
Translation Rules
1. Translation targets: title, subtitle, items, notes 2. Keep in English: Product names (Microsoft Purview, Azure, Copilot, SharePoint, Teams, OneDrive, Fabric, Sentinel, etc.) 3. Technical terms: Use standard Japanese translations 4. Bullet points: Keep concise 5. Speaker notes: Natural Japanese with specific explanations
📖 See quality-guidelines.instructions.md for speaker notes quality rules (SSOT).
Translation Example
// Input
{
"type": "content",
"title": "Top priorities for data security leaders",
"items": ["Protect sensitive data", "Ensure compliance"],
"notes": "In this slide, we discuss..."
}
// Output
{
"type": "content",
"title": "データセキュリティリーダーの最優先事項",
"items": ["機密データの保護", "コンプライアンスの確保"],
"notes": "このスライドでは..."
}Translation Method
Localizer agent directly translates each slide in content.json. No scripts used - the agent uses AI judgment for natural Japanese translation.
Self-Checklist
- [ ] Kept product names and proper nouns in English
- [ ] Translated speaker notes
- [ ] Did not manually add bullet characters (
itemsis string array)
References
- Naming/Bullets:
instructions/common.instructions.md - Quality Guidelines:
instructions/quality-guidelines.instructions.md - Validation Tool:
scripts/validate_content.py - If summarization needed: See
summarizer.agent.md
Orchestrator Agent
The single entry point for the presentation generation pipeline. Manages state, planning, retry control, and delegation to other agents.
Role
- TRIAGE: Evaluate input situation and select appropriate flow (★ Execute first)
- Input classification: Determine input_type/method/purpose/base (reference classification.json)
- Confirm mode, target slide count, and output method through hearing
- Checkpoint management: TRIAGE/BRAINSTORM/INIT/PLAN/PREPARE_TEMPLATE/EXTRACT/SUMMARIZE/TRANSLATE/VALIDATE/BUILD
- Retry/fallback control on failure (max 3 times)
- Delegation to Brainstormer/Localizer/Summarizer agents and result collection
🚫 Does NOT Do
- Content generation/translation (Localizer responsibility)
- Summarization/restructuring (Summarizer responsibility)
- Detailed brainstorming dialogue (Brainstormer responsibility)
- Validation (
validate_content.py,validate_pptx.pyscripts) - PPTX generation (
create_from_template.pyscript)
Exit Criteria
- [ ] Input type determined in TRIAGE
- [ ] User approval obtained in PLAN (method, slide count)
- [ ] Each phase completed successfully (PASS from validate\_\*.py)
- [ ]
output_ppt/{base}.pptxhas been generated - [ ] Reached DONE without escalation, or properly escalated
---
Main Flow (★ Always start from Orchestrator)
┌─────────────────────────────────────────┐
│ TRIAGE (Input Analysis) │
│ Analyze user input and determine path │
└──────────────┬──────────────────────────┘
│
┌──────────────────────────────┼──────────────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ A: Needs │ │ B: Input │ │ C: Resume │
│ Brainstorm │ │ Provided │ │ Workflow │
│ (idea stage) │ │ (PPTX/MD/URL) │ │ (interrupted) │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
│ │ │
▼ │ │
┌─────────────────┐ │ │
│ BRAINSTORM │ │ │
│ → Brainstormer │ │ │
│ → proposal.json │ │ │
└────────┬────────┘ │ │
│ │ │
└──────────────────────────────┼──────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────────────────────┐
│ INIT → PLAN(confirm) → PREPARE_TEMPLATE → EXTRACT → [SUMMARIZE] │
│ → TRANSLATE → REVIEW(JSON) → BUILD → REVIEW(PPTX) → DONE │
└───────────────────────────────────────────────────────────────────────┘---
TRIAGE Phase (★ Execute First)
Analyze user input and select the appropriate flow.
Decision Criteria
| Condition | Branch | Next Phase |
|---|---|---|
| No input file + vague idea | A: Brainstorm | → BRAINSTORM |
| Input file exists (PPTX/Markdown/URL) | B: Direct | → INIT |
| proposal.json exists (brainstormed) | B: Direct | → INIT |
| Intermediate files exist (interrupted) | C: Resume | → Target phase |
TRIAGE Example Questions
I'll help you create slides!
Let me check your input:
1. 📄 Do you have a file to convert? (PPTX / Markdown / URL)
2. 💡 Still at the idea stage? (Let's think through the structure together)
3. 🔄 Continuing from before? (Resume interrupted workflow)---
Phase Details
| Phase | Owner | Description |
|---|---|---|
| TRIAGE | Orchestrator | Input detection, workflow branching (★ first) |
| BRAINSTORM | Brainstormer | Interactive → proposal.json (optional) |
| INIT | classify_input.py | Input detection → classification.json |
| PLAN | Orchestrator | Present options, get user approval (★ required) |
| PREPARE_TEMPLATE | create_clean_template | Template diagnosis, cleaning, position fix |
| EXTRACT | Script group | Image extraction + content.json (parallelizable) |
| SUMMARIZE | Summarizer | Slide count reduction only: summarize |
| TRANSLATE | Localizer | content.json → content_ja.json |
| REVIEW(JSON) | JSON Reviewer | content.json quality check → pass/fail |
| BUILD | create_from_template.py | PPTX generation (auto position, AutoFit) |
| REVIEW(PPTX) | PPTX Reviewer | Visual, notes, CTA quality review → pass/fail |
| DONE | Orchestrator | Open PowerPoint (optional) |
| ESCALATE | workflow_tracer.py | Human escalation after 3 failures |
---
PLAN Phase (★ User Confirmation Required)
Present options to user and get approval before proceeding.
For PPTX Input
| Option | Slide Count | Compression | Description |
|---|---|---|---|
| 1 | {N} slides | As-is | Full version |
| 2 | {N×2/3} | 2/3 | Merge similar slides |
| 3 | {N×1/2} | 1/2 | Half compression |
| 4 | {N×1/4} | 1/4 | Focus on key points |
Method Selection
| Method | Description | Best For |
|---|---|---|
| A | Inherit from source PPTX (design preserved) | PPTX translation |
| B | pptxgenjs (code blocks, diagrams) | Technical content |
| C | create_ja_pptx (simple from scratch) | Minimal design |
| D+ | Use template from templates/ folder | General presentations |
---
Error Handling
Retry Policy
- Max 3 retries per phase
- On failure: Identify issue, attempt fix, retry
- After 3 failures: ESCALATE to human intervention
Fallback Matrix
| Phase | Failure Type | Fallback To | Action |
|---|---|---|---|
| REVIEW(JSON) | Schema violation | EXTRACT | Re-run reconstruct |
| REVIEW(JSON) | Empty slides | EXTRACT | Fix content.json |
| REVIEW(JSON) | Translation error | TRANSLATE | Re-run Localizer |
| REVIEW(PPTX) | Slide count mismatch | BUILD | Re-run create_from_template |
| BUILD | Template load error | PREPARE_TEMPLATE | Run diagnose_template |
| 3 failures | Any | ESCALATE | Human intervention |
---
State Management
Track workflow state with:
{
"base": "20251214_example_report",
"current_phase": "TRANSLATE",
"completed_phases": ["TRIAGE", "INIT", "PLAN", "EXTRACT"],
"retry_count": 0,
"errors": []
}---
References
- Error Recovery:
instructions/error-recovery.instructions.md - PLAN Phase:
instructions/plan-phase.instructions.md - Quality Guidelines:
instructions/quality-guidelines.instructions.md
PPTX Reviewer Agent
Agent that professionally reviews generated PPTX files. Evaluates visual issues, content quality, and presentation readiness.
Caller: Auto-called after Orchestrator's BUILD phase completes
Role
- Visual Review: Layout issues, overflow, image placement
- Content Review: Empty slides, insufficient content, structure problems
- Speaker Notes Review: Notes quality, citation format
- Presentation Quality: Improvement suggestions from audience perspective
- Pass/Fail: PASS / WARN / FAIL
🚫 Does NOT Do
- PPTX modification/editing (only points out issues)
- content.json modification (send back via Orchestrator)
- Subjective design evaluation (only objective issues)
---
Input
| File | Required | Description |
|---|---|---|
output_ppt/{base}.pptx | ✅ | PPTX to review |
output_manifest/{base}_content.json | ✅ | Original content.json (for slide count comparison) |
validate_pptx.py output | ✅ | Auto-validation result (exit code) |
Output
| File | Description |
|---|---|
output_manifest/{base}_review_report.md | Review report (Markdown) |
| Verdict | PASS / WARN / FAIL (return to Orchestrator) |
Exit Criteria
- [ ]
validate_pptx.pyauto-validation complete - [ ] All 6 review aspects checked
- [ ] Review report generated
- [ ] Verdict (PASS/WARN/FAIL) determined
---
Workflow
BUILD complete → validate_pptx.py(auto) → PPTX Reviewer(AI) → Verdict → Report to OrchestratorStep 1: Auto-Validation (Required, Run First)
python scripts/validate_pptx.py "output_ppt/{base}.pptx" "output_manifest/{base}_content.json"Auto-Detection Items:
| Item | Detection Method | Verdict |
|---|---|---|
| Slide count mismatch | JSON vs PPTX comparison | FAIL |
| Missing notes | notes_slide check | WARN |
| Citation-only notes | Regex pattern | WARN |
| Overflow | Character/paragraph count | WARN |
| Signature present | First/last slide notes | INFO |
Step 2: AI Review (After Auto-Validation PASS)
Additional items AI checks:
| Item | Check Content | Verdict |
|---|---|---|
| Layout issues | Text/image positioning | WARN/FAIL |
| Content consistency | Flow between slides | WARN |
| Technical terms | Translation appropriateness | WARN |
| Title clarity | 1 slide = 1 message | WARN |
---
Review Aspects
1. Visual Quality Check
| Check Item | Pass Criteria | Priority |
|---|---|---|
| Text overflow | Within slide area | 🔴 High |
| Image overflow | Within slide boundary | 🔴 High |
| Image/text overlap | No overlap | 🔴 High |
| Font size consistency | Unified at same level | 🟡 Medium |
| Empty placeholders | No "Click to add text" | 🟡 Medium |
2. Content Quality Check
| Check Item | Pass Criteria | Priority |
|---|---|---|
| Empty slides | Has content | 🔴 High |
| Page number only | Has body content | 🔴 High |
| Agenda present | After title | 🟡 Medium |
| Summary present | Before closing | 🟡 Medium |
| Section dividers | Appropriate placement | 🟢 Low |
3. Speaker Notes Check (★ Important)
| Check Item | Pass Criteria | Priority |
|---|---|---|
| Notes exist | All slides have notes | 🟡 Medium |
| Citation-only notes | Include explanations | 🟡 Medium |
| Section notes | 3+ lines | 🟡 Medium |
| Content notes | 5+ lines detail | 🟢 Low |
Citation-only notes example (NG):
[Source: Original slide #5]Good notes example (OK):
This slide explains the 3 evolution stages of GitHub Copilot.
Key points:
- Chat: Interactive code understanding support
- Agent: Autonomous research and suggestions
- Workflow: Multi-step automation
[Source: Original slide #5]4. Presentation Quality Check
| Check Item | Pass Criteria | Priority |
|---|---|---|
| 1 slide 1 message | No mixed topics | 🟡 Medium |
| Title clarity | Concise expression | 🟡 Medium |
| Visual balance | Not information-heavy | 🟢 Low |
| Flow/structure | Logical order | 🟢 Low |
5. Tech Presentation Check (★ Additional)
| Check Item | Pass Criteria | Priority |
|---|---|---|
| Code block readability | ≤10 lines, 14pt+ font | 🟡 Medium |
| Code explanation | Purpose/points in notes | 🟡 Medium |
| Diagram/screenshot explanation | "This shows..." in notes | 🟡 Medium |
| Demo slides | Explanation slides before/after | 🟢 Low |
6. CTA (Call to Action) Check (★ Additional)
| Check Item | Pass Criteria | Priority |
|---|---|---|
| Next action clear | Specific action in summary/closing | 🟡 Medium |
| Contact/resources | Reference URLs, contact info | 🟢 Low |
| Takeaways | Clear "what to start today" | 🟡 Medium |
---
Pass/Fail Criteria
| Errors | Warnings | Verdict | Action |
|---|---|---|---|
| 0 | 0 | ✅ PASS | Proceed to DONE |
| 0 | 1-3 | ⚠️ WARN (minor) | User confirm → DONE |
| 0 | 4+ | ⚠️ WARN (major) | Recommend fixes |
| 1+ | - | ❌ FAIL | Send back (redo BUILD) |
---
Error Handling
Retry Policy
- FAIL (after fix): Max 3 retries, then escalate via Orchestrator
- Auto-validation error: Immediate send back (to BUILD phase)
Fallback Flow
FAIL detected
↓
Identify issue type
↓
┌─────────────────┬─────────────────┬─────────────────┐
│ Content issue │ Layout issue │ Notes issue │
│ → Localizer │ → Redo BUILD │ → Localizer │
│ or Summarizer │ (fix layouts) │ │
└─────────────────┴─────────────────┴─────────────────┘
↓
After fix, run PPTX Reviewer again
↓
3 failures → Escalate to user via Orchestrator---
Command Examples
$base = "20251215_copilot_sier"
# Step 1: Auto-validation
python scripts/validate_pptx.py "output_ppt/${base}.pptx" "output_manifest/${base}_content.json"
# Step 2: Content check (for AI review)
python scripts/review_pptx.py "output_ppt/${base}.pptx"
# Step 3: Visual check in PowerPoint
Start-Process "output_ppt/${base}.pptx"---
Quick Review Checklist
Most important items AI checks during review:
- [ ] No empty slides
- [ ] No text overflow
- [ ] Images placed correctly
- [ ] Notes have content (not just citations)
- [ ] Has agenda and summary
- [ ] 1 slide = 1 message
- [ ] Code blocks ≤10 lines (tech presentations)
- [ ] Diagrams/screenshots explained in notes
- [ ] CTA is clear (what should audience do next)
Summarizer Agent
Summarizes large slide decks and generates executive summary version of content.json.
Role
- Significant slide count reduction (e.g., 160 → 30-40 slides)
- Content integration at section level
- Selection of representative screenshots
- Auto-add agenda and summary slides
🚫 Does NOT Do
- Translation (Localizer responsibility)
- PPTX generation (Builder script responsibility)
- Mechanical slide removal (loses context)
Exit Criteria
- [ ] Slide count is within target
- [ ] Contains title / agenda / summary / closing
- [ ] Each slide's notes contain specific explanations
- [ ]
{base}_content_summary.jsonhas been generated - [ ] Complies with schema (
schemas/content.schema.json)
I/O Contract
Input
| Item | Path | Description |
|---|---|---|
| Source content.json | output_manifest/{base}_content.json | Full slides IR |
| Analysis result | Output from summarize_content.py analyze | Section structure, recommended count |
Output
| Item | Path | Description |
|---|---|---|
| Summary IR | output_manifest/{base}_content_summary.json | Summarized slides |
🚨 Items Format (★ Critical Rule)
// ✅ OK: String array
{
"type": "content",
"title": "Data Security Priorities",
"items": [
"Move to integrated platform: 86%",
"AI-specific security controls: 73%",
"Leverage GenAI: 82%"
]
}
// ❌ NG: Object array (schema error)
{
"items": [
{"text": "Item 1", "bullet": true}
]
}⚠️ Do not confuse with replacements.json (preserve method).Summarization Rules
1. Required Slides
| Slide | Position | Required |
|---|---|---|
| Title | First | ✅ |
| Agenda | After title | ✅ |
| Summary | Before closing | ✅ |
| Thank you | Last | ✅ |
2. Slides to Exclude
type: "_empty"- Empty slides- Slides with only speaker notes, no body content
- Consecutive similar screenshots
3. Enriching Speaker Notes (★ Important)
📖 See "Speaker Notes Quality" section in quality-guidelines.instructions.md (SSOT).
Key point: Notes with only "Source: Original slide #XX" are NG. Include section purpose, detailed explanations, speaking hints.
4. Integration Rules
| Original State | After Summary |
|---|---|
| Multiple slides same topic | Integrate to 1 slide |
| Consecutive demo screenshots | Keep only 1-2 representative |
| Section header + content | Keep section, summarize content |
---
Summarization Process
1. Analyze section structure
python scripts/summarize_content.py analyze content.json
2. Determine target slide count
- User specified, or
- Based on duration (1 min = 1-2 slides)
3. Generate summary content.json
- Integrate by section
- Select key visuals
- Enrich notes
4. Validate
python scripts/validate_content.py content_summary.json---
Integration Examples
Before (3 slides)
[
{ "type": "content", "title": "Feature A Overview" },
{ "type": "content", "title": "Feature A Details" },
{ "type": "content", "title": "Feature A Demo" }
]After (1 slide)
[
{
"type": "content",
"title": "Feature A",
"items": ["Key capability", "Main benefit", "Demo available"],
"notes": "This slide covers Feature A...\n\n[Source: Original slides #5-7]"
}
]---
References
- Schema:
schemas/content.schema.json - Quality Guidelines:
instructions/quality-guidelines.instructions.md - Validation:
scripts/validate_content.py
Localize Instructions
Rules for localizing English PPTX to Japanese.
✅ Purpose: Optimize English presentations for Japanese-speaking audiences
---
Translation Scope
| Target | Include | Notes |
|---|---|---|
| Slide titles | ✅ | Keep concise |
| Bullet points | ✅ | Natural Japanese expressions |
| Speaker notes | ✅ | Include specific explanations |
| Product names | ❌ | Keep in English (Microsoft, Azure, etc.) |
| Technical terms | △ | Use industry-standard translations |
| Image alt text | ✅ | If present |
---
Translation Rules
1. Product Names (Keep in English)
Keep these in English:
- Microsoft, Azure, Copilot, GitHub
- SharePoint, Teams, OneDrive, Outlook
- Purview, Sentinel, Defender, Fabric
- Windows, Office, Power Platform
2. Technical Terms
Use standard Japanese translations:
| English | Japanese |
|---|---|
| Data security | データセキュリティ |
| Compliance | コンプライアンス |
| Machine learning | 機械学習 |
| Cloud | クラウド |
| On-premises | オンプレミス |
3. Bullet Point Style
- Keep sentences short and impactful
- End with verb forms (〜する、〜できる)
- Avoid passive voice when possible
- Maximum 40 characters per item
4. Speaker Notes
Required content:
- Explanation of the slide's key message
- Background context
- Speaking hints
Not acceptable:
- Only citation:
[Source: Slide #5] - Empty notes
---
Quality Checklist
- [ ] All visible text translated
- [ ] Product names in English
- [ ] Natural Japanese expressions
- [ ] No machine translation artifacts
- [ ] Speaker notes enriched
- [ ] Citations preserved with explanations
---
Common Mistakes
| Mistake | Correct |
|---|---|
| マイクロソフト | Microsoft |
| アズール | Azure |
| 彼/彼女 (pronoun ambiguity) | Reword to avoid |
| 〜されます (excessive passive) | 〜します (active) |
{
"name": "pptx-tools",
"version": "0.1.0",
"description": "Utilities for PPTX generation",
"main": "scripts/convert_html.js",
"scripts": {
"convert-html": "node scripts/convert_html.js"
},
"dependencies": {
"playwright": "^1.41.2",
"pptxgenjs": "^3.12.0",
"sharp": "^0.33.2"
}
}
python-pptx>=0.6.21
Pillow>=10.0.0
six>=1.16.0
jsonschema>=4.0.0
openai>=1.0.0Related skills
FAQ
Who is powerpoint-automation for?
Developers and software engineers automating PowerPoint creation, article-to-slide conversion, or COM deck editing on Windows.
When should I use powerpoint-automation?
When creating PPTX, converting articles to slides, translating presentations, or COM Automation deck edits.
Is powerpoint-automation safe to install?
Review the Security Audits panel on this page before installing in production.