{"id":48908699,"url":"https://github.com/aojdevstudio/presentation-creator","last_synced_at":"2026-04-16T22:03:56.886Z","repository":{"id":285515397,"uuid":"958389436","full_name":"AojdevStudio/presentation-creator","owner":"AojdevStudio","description":null,"archived":false,"fork":false,"pushed_at":"2025-04-01T06:25:56.000Z","size":161,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-01T07:25:25.639Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AojdevStudio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-04-01T05:52:57.000Z","updated_at":"2025-04-01T06:26:00.000Z","dependencies_parsed_at":"2025-04-01T07:25:27.244Z","dependency_job_id":"380df468-b6a8-46c9-9768-df8f0a4c86aa","html_url":"https://github.com/AojdevStudio/presentation-creator","commit_stats":null,"previous_names":["aojdevstudio/presentation-creator"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/AojdevStudio/presentation-creator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AojdevStudio%2Fpresentation-creator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AojdevStudio%2Fpresentation-creator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AojdevStudio%2Fpresentation-creator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AojdevStudio%2Fpresentation-creator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AojdevStudio","download_url":"https://codeload.github.com/AojdevStudio/presentation-creator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AojdevStudio%2Fpresentation-creator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31905896,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T18:22:33.417Z","status":"ssl_error","status_checked_at":"2026-04-16T18:21:47.142Z","response_time":69,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-16T22:03:37.547Z","updated_at":"2026-04-16T22:03:56.868Z","avatar_url":"https://github.com/AojdevStudio.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PowerPoint Presentation Generator\n\nA Python-based tool that automatically generates PowerPoint presentations using OpenAI's GPT-4 for content generation and python-pptx for slide creation.\n\n## Features\n\n- Automatic slide content generation using OpenAI's GPT-4\n- Support for multiple slide types:\n  - Title slides\n  - Content slides with bullet points\n  - Section transition slides\n  - Summary slides\n- PowerPoint template support\n- Asynchronous content generation\n- Error handling and retries\n- Comprehensive logging\n- **Custom text input for slide generation:**\n  - Use your own content to create slides\n  - Support for plain text and markdown formats\n  - Automatic format detection\n  - Control over content density per slide\n- Quality assurance tools:\n  - Content validation (spelling, grammar, consistency checks)\n  - Terminology consistency validation\n  - Capitalization consistency checks\n\n## Installation\n\n1. Clone the repository:\n```bash\ngit clone https://github.com/yourusername/presentation-generator.git\ncd presentation-generator\n```\n\n2. Create a virtual environment:\n```bash\npython -m venv venv\nsource venv/bin/activate  # On Windows: venv\\Scripts\\activate\n```\n\n3. Install dependencies:\n```bash\npip install -r requirements.txt\n```\n\n4. Set up your OpenAI API key:\nCreate a `.env` file in the project root and add your API key:\n```\nOPENAI_API_KEY=your_api_key_here\n```\n\n## Using Your Own Text Content\n\n### Command Line Usage\n\nThe simplest way to generate slides from your own text is through the command line:\n\n```bash\n# From a text file in the current directory:\npython -m src.main text --file my_content.md --presenter \"John Doe\" --output \"my_presentation.pptx\"\n\n# From a text file in a specific directory (absolute path):\npython -m src.main text --file \"/path/to/your/documents/my_content.md\" --output \"my_presentation.pptx\"\n\n# From a text file in a relative directory:\npython -m src.main text --file \"../documents/my_content.md\" --output \"my_presentation.pptx\"\n\n# From direct text input:\npython -m src.main text --text \"# My Presentation\\n\\n## Introduction\\n- Point 1\\n- Point 2\" --format markdown\n```\n\n#### Available Command Line Options\n\n| Option | Description | Example |\n|--------|-------------|---------|\n| `--file` | Path to text file containing your content (absolute or relative) | `--file \"/path/to/my/notes.txt\"` |\n| `--text` | Direct text input (use quotes and \\n for line breaks) | `--text \"TITLE\\n\\n- Point 1\\n- Point 2\"` |\n| `--format` | Input format: \"text\", \"markdown\", or \"auto\" (default) | `--format markdown` |\n| `--presenter` | Presenter name for title slide | `--presenter \"Jane Smith\"` |\n| `--date` | Presentation date (YYYY-MM-DD) | `--date \"2024-04-01\"` |\n| `--density` | Content density: \"low\", \"medium\" (default), or \"high\" | `--density low` |\n| `--output` | Output file path for the presentation (absolute or relative) | `--output \"/path/to/output/my_slides.pptx\"` |\n\nYou must provide either `--file` OR `--text` but not both.\n\n### Python API Usage\n\nFor more control, you can use the Python API:\n\n```python\nimport asyncio\nfrom src.core.presentation_builder import PresentationBuilder\n\nasync def main():\n    builder = PresentationBuilder()\n    await builder.initialize()\n    \n    # Option 1: Use a text file\n    await builder.build_presentation_from_text_file(\n        file_path=\"my_content.md\",\n        presenter=\"John Doe\",\n        date=\"2024-04-01\",\n        format_type=\"markdown\",  # or None for auto-detection\n        content_density=\"medium\",  # \"low\", \"medium\", or \"high\"\n        output_path=\"output.pptx\"\n    )\n    \n    # Option 2: Use direct text input\n    my_text = \"\"\"\n    # My Custom Presentation\n    \n    ## Introduction\n    This is a presentation created from my own text content.\n    \n    - Point 1: Important information\n    - Point 2: Critical details\n    - Point 3: Key insights\n    \n    ## Second Section\n    More detailed information about the topic.\n    \n    1. First step in the process\n    2. Second step in the process\n    3. Final considerations\n    \"\"\"\n    \n    await builder.build_presentation_from_text(\n        text=my_text,\n        presenter=\"John Doe\",\n        date=\"2024-04-01\",\n        format_type=\"markdown\",  # or None for auto-detection\n        content_density=\"medium\",  # \"low\", \"medium\", or \"high\"\n        output_path=\"my_presentation.pptx\"\n    )\n\nif __name__ == \"__main__\":\n    asyncio.run(main())\n```\n\n## Text Format Guidelines\n\n### Markdown Format (Recommended)\n\nMarkdown is the recommended format as it provides clear structure:\n\n```markdown\n# Main Title\n\n## First Section\nThis is an introduction paragraph.\n\n- Bullet point 1\n- Bullet point 2\n- Bullet point 3\n\n## Second Section\n\n### Subsection\nThis becomes a subheading on the slide.\n\n1. Numbered item 1\n2. Numbered item 2\n\n## Conclusion\nSummary text goes here.\n\n- Key takeaway 1\n- Key takeaway 2\n```\n\n#### Markdown Formatting Rules:\n\n- **# Main Title** - Becomes the presentation title\n- **## Section Title** - Each becomes a new slide\n- **### Subheading** - Becomes a subheading on the current slide\n- **- Item** - Creates bullet points\n- **1. Item** - Creates numbered lists\n- **```code```** - Creates a code example slide\n- **Bold** with `**text**` and *italics* with `*text*` are preserved\n\n### Plain Text Format\n\nFor simple text files without markdown:\n\n```\nPRESENTATION TITLE\n\nSECTION ONE\nThis is an introduction paragraph.\n\n- This is a bullet point\n- Another bullet point\n- A third bullet point\n\nSECTION TWO\nMore content here.\n\n1. First numbered item\n2. Second numbered item\n```\n\n#### Plain Text Formatting Rules:\n\n- **LINES IN ALL CAPS** - Treated as slide titles\n- **Empty lines** - Separate content blocks\n- **Lines starting with - or •** - Treated as bullet points\n- **Lines starting with numbers and a period (1.)** - Treated as numbered lists\n- **Regular text** - Treated as paragraphs\n\n### Content Density Options\n\nControl how much content appears on each slide:\n\n- **Low density**: \n  - Max 4 bullet points per slide\n  - Shorter text blocks (300 characters max)\n  - More slides with less content each\n\n- **Medium density** (default):\n  - Max 6 bullet points per slide\n  - Medium text blocks (400 characters max)\n  - Balanced number of slides\n\n- **High density**:\n  - Max 8 bullet points per slide\n  - Longer text blocks (500 characters max)\n  - Fewer slides with more content each\n\n## Example Text Files\n\n### Example 1: Basic Markdown Presentation\n\n```markdown\n# Project Status Update\n\n## Introduction\nThis presentation provides an update on the current project status.\n\n- Project started on January 15, 2024\n- Currently in development phase\n- On track for May delivery\n\n## Current Progress\nThe team has completed several key milestones.\n\n- Backend API is 90% complete\n- Frontend components are 75% complete\n- Database migration is finished\n\n## Challenges\nSome issues have emerged during development.\n\n1. Integration with legacy systems\n2. Performance bottlenecks in data processing\n3. Resource constraints\n\n## Next Steps\n\n### Short-term\n- Complete API documentation\n- Finalize frontend design\n- Begin QA testing\n\n### Long-term\n- Plan for phase 2 features\n- Prepare training materials\n- Schedule deployment\n\n## Conclusion\nThe project is progressing well despite challenges.\n\n- We are on track for the deadline\n- Additional resources may be needed\n- Regular updates will continue\n```\n\n### Example 2: Plain Text Format\n\n```\nPROJECT STATUS UPDATE\n\nINTRODUCTION\nThis presentation provides an update on the current project status.\n\n- Project started on January 15, 2024\n- Currently in development phase\n- On track for May delivery\n\nCURRENT PROGRESS\nThe team has completed several key milestones.\n\n- Backend API is 90% complete\n- Frontend components are 75% complete\n- Database migration is finished\n\nCHALLENGES\nSome issues have emerged during development.\n\n1. Integration with legacy systems\n2. Performance bottlenecks in data processing\n3. Resource constraints\n\nNEXT STEPS\nThese are our upcoming priorities.\n\n- Complete API documentation\n- Finalize frontend design\n- Begin QA testing\n\nCONCLUSION\nThe project is progressing well despite challenges.\n\n- We are on track for the deadline\n- Additional resources may be needed\n- Regular updates will continue\n```\n\n## AI-Generated Content (Alternative Method)\n\nIf you prefer AI-generated content instead of your own text:\n\n```bash\npython -m src.main ai \"My Presentation Topic\" --style professional --num-slides 10 --presenter \"Your Name\" --company \"Your Company\"\n```\n\n## Quality Assurance Tools\n\nThe presentation generator includes powerful quality assurance tools to ensure your presentations are error-free and consistent.\n\n#### Validating Presentation Content\n\n```python\nfrom src.qa.content_validator import ContentValidator\n\n# Load your presentation data\npresentation_data = {\n    \"slides\": [\n        {\n            \"title\": \"Introduction\",\n            \"elements\": [\n                {\n                    \"type\": \"text\",\n                    \"content\": \"This is the introduction to our topic.\"\n                },\n                {\n                    \"type\": \"bullet_list\",\n                    \"content\": [\n                        \"First key point\",\n                        \"Second key point\",\n                        \"Third key point\"\n                    ]\n                }\n            ]\n        }\n    ]\n}\n\n# Create a validator\nvalidator = ContentValidator()\n\n# Optional: Add custom dictionary words\nvalidator = ContentValidator(custom_dictionary=\"my_custom_dictionary.txt\")\n\n# Run validation\nvalidation_issues = validator.validate_presentation(presentation_data)\n\n# Generate and print a report\nreport = validator.generate_validation_report(validation_issues, output_format=\"text\")\nprint(report)\n\n# Or get the report as JSON\njson_report = validator.generate_validation_report(validation_issues, output_format=\"json\")\n\n# Or generate an HTML report\nhtml_report = validator.generate_validation_report(validation_issues, output_format=\"html\")\nwith open(\"validation_report.html\", \"w\") as f:\n    f.write(html_report)\n```\n\n#### Adding Custom Dictionary Words\n\n1. Create a text file with one word per line:\n```\ncustomterm1\ncustomterm2\ntechnicalacryonym\n```\n\n2. Pass this file path when creating the validator:\n```python\nvalidator = ContentValidator(custom_dictionary=\"path/to/custom_dict.txt\")\n```\n\n#### Using with Command Line Validation\n\nThere's also a simple command-line interface for validation:\n\n```bash\npython -m src.qa.content_validator my_presentation.json --output report.html\n```\n\n## Testing\n\nRun the test suite:\n```bash\npytest tests/\n```\n\nRun tests with coverage:\n```bash\npytest tests/ --cov=src\n```\n\n## Project Structure\n\n```\npresentation-generator/\n├── src/\n│   ├── core/\n│   │   ├── __init__.py\n│   │   ├── slide_content_generator.py\n│   │   ├── slide_generator.py\n│   │   ├── presentation_builder.py\n│   │   ├── openai_client.py\n│   │   └── prompt_templates.py\n│   ├── utils/\n│   │   ├── __init__.py\n│   │   ├── text_parser.py\n│   │   └── content_mapper.py\n│   ├── qa/\n│   │   ├── __init__.py\n│   │   └── content_validator.py\n│   └── main.py\n├── tests/\n│   ├── __init__.py\n│   ├── test_slide_content_generator.py\n│   ├── test_slide_generator.py\n│   ├── test_presentation_builder.py\n│   └── test_content_validator.py\n├── templates/\n│   └── default.pptx\n├── requirements.txt\n└── README.md\n```\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Run tests\n5. Submit a pull request\n\n## License\n\nThis project is licensed under the MIT License - see the LICENSE file for details.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faojdevstudio%2Fpresentation-creator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faojdevstudio%2Fpresentation-creator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faojdevstudio%2Fpresentation-creator/lists"}