gitextract_oydoioei/ ├── .dockerignore ├── .githooks/ │ └── pre-commit.disabled ├── .github/ │ ├── CI_SETUP.md │ ├── ISSUE_TEMPLATE/ │ │ └── bug_report.yml │ ├── PULL_REQUEST_TEMPLATE.md │ └── workflows/ │ ├── build-sha-image.yml │ ├── ci-test.yml │ ├── docker-publish.yml │ ├── nightly.yml │ ├── pr-quick-check.yml │ └── translate-readme.yml ├── .gitignore ├── CLA.md ├── CONTRIBUTING.md ├── Dockerfile.allinone ├── LICENSE ├── README.md ├── backend/ │ ├── .gitignore │ ├── Dockerfile │ ├── README.md │ ├── alembic.ini │ ├── app.py │ ├── config.py │ ├── controllers/ │ │ ├── __init__.py │ │ ├── export_controller.py │ │ ├── file_controller.py │ │ ├── material_controller.py │ │ ├── page_controller.py │ │ ├── project_controller.py │ │ ├── reference_file_controller.py │ │ ├── settings_controller.py │ │ └── template_controller.py │ ├── migrations/ │ │ ├── env.py │ │ ├── script.py.mako │ │ └── versions/ │ │ ├── 001_baseline_schema.py │ │ ├── 002_create_settings_table.py │ │ ├── 003_add_model_and_mineru_settings.py │ │ ├── 004_add_template_style_to_projects.py │ │ ├── 005_add_pdf_image_path.py │ │ ├── 006_add_export_settings_to_projects.py │ │ ├── 007_add_enable_reasoning_to_settings.py │ │ ├── 008_add_baidu_ocr_api_key_to_settings.py │ │ ├── 009_split_reasoning_config.py │ │ ├── 010_add_cached_image_path.py │ │ ├── 011_add_user_template_thumb.py │ │ ├── 012_add_export_allow_partial_to_projects.py │ │ ├── 013_add_lazyllm_source_fields.py │ │ ├── 014_add_per_model_provider_config.py │ │ ├── 015_rename_baidu_ocr_api_key.py │ │ ├── 38292967f3ca_add_output_language_to_settings_table.py │ │ ├── 64ecc9f34de0_add_description_generation_mode_to_.py │ │ ├── 7acf21d5e41d_make_settings_columns_nullable_for_env_.py │ │ ├── 88054bda1ece_add_outline_and_description_.py │ │ ├── 9439faddcdd5_add_description_extra_fields_to_settings.py │ │ ├── 9ad736fec43d_add_image_prompt_extra_fields_to_.py │ │ ├── a912a64b7a86_add_mineru_token_to_settings_table.py │ │ └── ee22f1512027_add_image_aspect_ratio_to_project.py │ ├── models/ │ │ ├── __init__.py │ │ ├── material.py │ │ ├── page.py │ │ ├── page_image_version.py │ │ ├── project.py │ │ ├── reference_file.py │ │ ├── settings.py │ │ ├── task.py │ │ └── user_template.py │ ├── run.bat │ ├── run.sh │ ├── server.log │ ├── server_running.log │ ├── services/ │ │ ├── __init__.py │ │ ├── ai_providers/ │ │ │ ├── __init__.py │ │ │ ├── genai_client.py │ │ │ ├── image/ │ │ │ │ ├── __init__.py │ │ │ │ ├── baidu_inpainting_provider.py │ │ │ │ ├── base.py │ │ │ │ ├── gemini_inpainting_provider.py │ │ │ │ ├── genai_provider.py │ │ │ │ ├── lazyllm_provider.py │ │ │ │ ├── openai_provider.py │ │ │ │ └── volcengine_inpainting_provider.py │ │ │ ├── lazyllm_env.py │ │ │ ├── ocr/ │ │ │ │ ├── __init__.py │ │ │ │ ├── baidu_accurate_ocr_provider.py │ │ │ │ └── baidu_table_ocr_provider.py │ │ │ └── text/ │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── genai_provider.py │ │ │ ├── lazyllm_provider.py │ │ │ └── openai_provider.py │ │ ├── ai_service.py │ │ ├── ai_service_manager.py │ │ ├── export_service.py │ │ ├── file_parser_service.py │ │ ├── file_service.py │ │ ├── image_editability/ │ │ │ ├── __init__.py │ │ │ ├── coordinate_mapper.py │ │ │ ├── data_models.py │ │ │ ├── extractors.py │ │ │ ├── factories.py │ │ │ ├── helpers.py │ │ │ ├── hybrid_extractor.py │ │ │ ├── inpaint_providers.py │ │ │ ├── service.py │ │ │ └── text_attribute_extractors.py │ │ ├── inpainting_service.py │ │ ├── pdf_service.py │ │ ├── prompts.py │ │ └── task_manager.py │ ├── tests/ │ │ ├── conftest.py │ │ ├── integration/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── test_api_full_flow.py │ │ │ └── test_full_workflow.py │ │ ├── pytest.ini │ │ └── unit/ │ │ ├── __init__.py │ │ ├── test_ai_mock.py │ │ ├── test_api_health.py │ │ ├── test_api_material.py │ │ ├── test_api_project.py │ │ ├── test_api_settings_provider.py │ │ ├── test_editable_pptx_style_extraction.py │ │ ├── test_file_parser_service.py │ │ ├── test_image_prompt_ratio.py │ │ ├── test_lazyllm_image_content_type.py │ │ └── test_smart_merge.py │ └── utils/ │ ├── __init__.py │ ├── image_utils.py │ ├── latex_utils.py │ ├── mask_utils.py │ ├── page_utils.py │ ├── path_utils.py │ ├── pptx_builder.py │ ├── response.py │ └── validators.py ├── create-test-data.mjs ├── create-test-data.sh ├── docker/ │ ├── nginx-allinone.conf │ ├── start-backend.sh │ └── supervisord.conf ├── docker-compose.allinone.yml ├── docker-compose.prod.yml ├── docker-compose.yml ├── docs/ │ ├── configuration.mdx │ ├── docs.json │ ├── faq.mdx │ ├── features/ │ │ ├── creation.mdx │ │ ├── descriptions.mdx │ │ ├── editing.mdx │ │ ├── export.mdx │ │ ├── images.mdx │ │ ├── import-export.mdx │ │ ├── materials.mdx │ │ ├── outline.mdx │ │ └── overview.mdx │ ├── history.mdx │ ├── index.mdx │ ├── logo/ │ │ └── .gitkeep │ ├── quickstart.mdx │ └── zh/ │ ├── configuration.mdx │ ├── faq.mdx │ ├── features/ │ │ ├── creation.mdx │ │ ├── descriptions.mdx │ │ ├── editing.mdx │ │ ├── export.mdx │ │ ├── images.mdx │ │ ├── import-export.mdx │ │ ├── materials.mdx │ │ ├── outline.mdx │ │ └── overview.mdx │ ├── history.mdx │ ├── index.mdx │ └── quickstart.mdx ├── frontend/ │ ├── .eslintrc.cjs │ ├── .gitignore │ ├── Dockerfile │ ├── README.md │ ├── e2e/ │ │ ├── README.md │ │ ├── access-code.spec.ts │ │ ├── aspect-ratio-lock-integration.spec.ts │ │ ├── aspect-ratio-lock.spec.ts │ │ ├── attachment-sort-filter.spec.ts │ │ ├── badge-status-after-generation.spec.ts │ │ ├── desc-regeneration-skeleton.spec.ts │ │ ├── description-detail-level.spec.ts │ │ ├── description-no-flicker.spec.ts │ │ ├── editable-export-failure.spec.ts │ │ ├── export-aspect-ratio.spec.ts │ │ ├── export-images.spec.ts │ │ ├── extract-style-caption.spec.ts │ │ ├── failed-file-reselect.spec.ts │ │ ├── file-preview-scrollbar.spec.ts │ │ ├── generation-fail.spec.ts │ │ ├── generation-requirements.spec.ts │ │ ├── helpers/ │ │ │ └── seed-project.ts │ │ ├── history-pagination.spec.ts │ │ ├── image-prompt-ratio.spec.ts │ │ ├── image-queued-status.spec.ts │ │ ├── import-markdown.spec.ts │ │ ├── lazyllm-global-vendor.spec.ts │ │ ├── lazyllm-image-content-type.spec.ts │ │ ├── markdown-card-style.spec.ts │ │ ├── material-aspect-ratio.spec.ts │ │ ├── outline-autosave-blur.spec.ts │ │ ├── outline-null-crash.spec.ts │ │ ├── parsing-preview-toast.spec.ts │ │ ├── pdf-export-metadata.spec.ts │ │ ├── per-model-startup-creds.spec.ts │ │ ├── preset-capsules.spec.ts │ │ ├── preview-text-style-template.spec.ts │ │ ├── renovation-aspect-ratio.spec.ts │ │ ├── settings-api-clarity.spec.ts │ │ ├── settings-api-links.spec.ts │ │ ├── settings-back-to-top.spec.ts │ │ ├── settings-backfill.spec.ts │ │ ├── settings-env-fallback.spec.ts │ │ ├── settings-per-model-provider-integration.spec.ts │ │ ├── settings-per-model-provider.spec.ts │ │ ├── settings-read-only.spec.ts │ │ ├── settings-reset-fallback.spec.ts │ │ ├── settings-test-vendor-format.spec.ts │ │ ├── smart-merge.spec.ts │ │ ├── streaming-descriptions.spec.ts │ │ ├── streaming-outline.spec.ts │ │ ├── ui-full-flow-mocked.spec.ts │ │ ├── ui-full-flow.spec.ts │ │ ├── upload-folder-path.spec.ts │ │ ├── ux-polish-i18n.spec.ts │ │ └── visual-regression.spec.ts │ ├── index.html │ ├── nginx.conf │ ├── package.json │ ├── playwright.config.ts │ ├── postcss.config.js │ ├── src/ │ │ ├── App.tsx │ │ ├── api/ │ │ │ ├── client.ts │ │ │ └── endpoints.ts │ │ ├── components/ │ │ │ ├── history/ │ │ │ │ └── ProjectCard.tsx │ │ │ ├── outline/ │ │ │ │ └── OutlineCard.tsx │ │ │ ├── preview/ │ │ │ │ ├── DescriptionCard.tsx │ │ │ │ └── SlideCard.tsx │ │ │ └── shared/ │ │ │ ├── AccessCodeGuard.tsx │ │ │ ├── AiRefineInput.tsx │ │ │ ├── Button.tsx │ │ │ ├── Card.tsx │ │ │ ├── ConfirmDialog.tsx │ │ │ ├── ContextualStatusBadge.tsx │ │ │ ├── ExportTasksPanel.tsx │ │ │ ├── FilePreviewModal.tsx │ │ │ ├── Footer.tsx │ │ │ ├── GithubBadge.tsx │ │ │ ├── GithubRepoCard.tsx │ │ │ ├── HelpModal.tsx │ │ │ ├── ImagePreviewList.tsx │ │ │ ├── Input.tsx │ │ │ ├── Loading.tsx │ │ │ ├── Markdown.tsx │ │ │ ├── MarkdownTextarea.tsx │ │ │ ├── MaterialCenterModal.tsx │ │ │ ├── MaterialGeneratorModal.tsx │ │ │ ├── MaterialSelector.tsx │ │ │ ├── Modal.tsx │ │ │ ├── Pagination.tsx │ │ │ ├── PresetCapsules.tsx │ │ │ ├── ProjectResourcesList.tsx │ │ │ ├── ProjectSettingsModal.tsx │ │ │ ├── ReferenceFileCard.tsx │ │ │ ├── ReferenceFileList.tsx │ │ │ ├── ReferenceFileSelector.tsx │ │ │ ├── ShimmerOverlay.tsx │ │ │ ├── StatusBadge.tsx │ │ │ ├── TemplateSelector.tsx │ │ │ ├── TextStyleSelector.tsx │ │ │ ├── Textarea.tsx │ │ │ ├── Toast.tsx │ │ │ └── index.ts │ │ ├── config/ │ │ │ ├── aspectRatio.ts │ │ │ ├── presetStyles.ts │ │ │ └── presetStylesI18n.ts │ │ ├── hooks/ │ │ │ ├── useGeneratingState.ts │ │ │ ├── useImagePaste.ts │ │ │ ├── usePageStatus.ts │ │ │ ├── useT.ts │ │ │ └── useTheme.ts │ │ ├── i18n.ts │ │ ├── index.css │ │ ├── locales/ │ │ │ ├── en.json │ │ │ └── zh.json │ │ ├── main.tsx │ │ ├── pages/ │ │ │ ├── DetailEditor.tsx │ │ │ ├── History.tsx │ │ │ ├── Home.tsx │ │ │ ├── Landing.tsx │ │ │ ├── OutlineEditor.tsx │ │ │ ├── Settings.tsx │ │ │ └── SlidePreview.tsx │ │ ├── store/ │ │ │ ├── useExportTasksStore.ts │ │ │ └── useProjectStore.ts │ │ ├── tests/ │ │ │ ├── components/ │ │ │ │ ├── Button.test.tsx │ │ │ │ ├── DescriptionCard.test.tsx │ │ │ │ └── Markdown.test.tsx │ │ │ ├── setup.ts │ │ │ ├── store/ │ │ │ │ ├── useProjectStore.initializeProject.test.ts │ │ │ │ └── useProjectStore.test.ts │ │ │ └── utils.normalizeErrorMessage.test.ts │ │ ├── types/ │ │ │ └── index.ts │ │ ├── utils/ │ │ │ ├── i18nHelper.ts │ │ │ ├── index.ts │ │ │ ├── logger.ts │ │ │ └── projectUtils.ts │ │ └── vite-env.d.ts │ ├── start.bat │ ├── start.sh │ ├── tailwind.config.js │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── package.json ├── pyproject.toml ├── scripts/ │ ├── export_editable_pptx.py │ ├── pre-push-check.sh │ ├── run-local-ci.sh │ ├── setup-env-from-secrets.sh │ ├── setup_git_hooks.sh │ ├── test_docker_environment.sh │ ├── translate_readme.py │ ├── translate_readme_incremental.py │ ├── verify-e2e-refactoring.sh │ └── wait-for-health.sh ├── tests/ │ └── docker/ │ └── test_docker_environment.sh └── v0_demo/ ├── demo.py ├── gemini_genai.py └── lazyllm_genai.py