diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000000000000000000000000000000000000..c97c607865c02a84d774df837144c47e26d8e74b --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,6 @@ +include src/slidedeckai/strings.json +recursive-include src/slidedeckai/prompts *.txt +recursive-include src/slidedeckai/pptx_templates *.pptx +recursive-include src/slidedeckai/icons *.png +recursive-include src/slidedeckai/icons *.txt +recursive-include src/slidedeckai/file_embeddings *.npy diff --git a/README.md b/README.md index c308ef0f374c8ff761e18e79b4a7599d6d3713bd..337289aeaefd910c2e061e562342a02221ac486f 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,34 @@ Clicking on the button will download the file. In addition, SlideDeck AI can also create a presentation based on PDF files. +## Python API Usage + +```python +from slidedeckai import SlideDeckAI + + +slide_generator = SlideDeckAI( + model='[gg]gemini-2.5-flash-lite', + topic='Make a slide deck on AI', + api_key='your-google-api-key', +) +pptx_path = slide_generator.generate() +print(f"Generated slide deck: {pptx_path}") +``` + +## CLI Usage + +Generate a new slide deck: +```bash +slidedeckai generate --model '[gg]gemini-2.5-flash-lite' --topic 'Make a slide deck on AI' --api-key 'your-google-api-key' +``` + +Launch the Streamlit app: +```bash +slidedeckai launch +``` + + ## Summary of the LLMs SlideDeck AI allows the use of different LLMs from several online providers—Azure OpenAI, Google, Cohere, Together AI, and OpenRouter. Most of these service providers offer generous free usage of relevant LLMs without requiring any billing information. diff --git a/app.py b/app.py index 2da869a100efad83810ebdc1cbe73fc43ee81f6d..ccd7176504226c6b20fa5da84fa98187313a1f72 100644 --- a/app.py +++ b/app.py @@ -6,6 +6,7 @@ import logging import os import pathlib import random +import sys import tempfile from typing import List, Union @@ -17,13 +18,35 @@ import requests import streamlit as st from dotenv import load_dotenv -import global_config as gcfg -import helpers.file_manager as filem -from global_config import GlobalConfig -from helpers import chat_helper, llm_helper, pptx_helper, text_helper +sys.path.insert(0, os.path.abspath('src')) +from slidedeckai.core import SlideDeckAI +from slidedeckai import global_config as gcfg +from slidedeckai.global_config import GlobalConfig +from slidedeckai.helpers import llm_helper, text_helper +import slidedeckai.helpers.file_manager as filem +from slidedeckai.helpers.chat_helper import ChatMessage, HumanMessage, AIMessage +from slidedeckai.helpers import chat_helper load_dotenv() +class StreamlitChatMessageHistory: + """Chat message history stored in Streamlit session state.""" + + def __init__(self, key: str): + self.key = key + if key not in st.session_state: + st.session_state[key] = [] + + @property + def messages(self): + return st.session_state[self.key] + + def add_user_message(self, content: str): + st.session_state[self.key].append(HumanMessage(content)) + + def add_ai_message(self, content: str): + st.session_state[self.key].append(AIMessage(content)) + RUN_IN_OFFLINE_MODE = os.getenv('RUN_IN_OFFLINE_MODE', 'False').lower() == 'true' @@ -309,7 +332,7 @@ def set_up_chat_ui(): st.info(APP_TEXT['like_feedback']) st.chat_message('ai').write(random.choice(APP_TEXT['ai_greetings'])) - history = chat_helper.StreamlitChatMessageHistory(key=CHAT_MESSAGES) + history = StreamlitChatMessageHistory(key=CHAT_MESSAGES) prompt_template = chat_helper.ChatPromptTemplate.from_template( _get_prompt_template( is_refinement=_is_it_refinement() @@ -363,104 +386,39 @@ def set_up_chat_ui(): f' {st.session_state["end_page"]} in {st.session_state["pdf_file"].name}' ) - # Get pdf contents - st.session_state[ADDITIONAL_INFO] = filem.get_pdf_contents( - st.session_state[PDF_FILE_KEY], - (st.session_state['start_page'], st.session_state['end_page']) - ) - provider, llm_name = llm_helper.get_provider_model( - llm_provider_to_use, - use_ollama=RUN_IN_OFFLINE_MODE - ) - - # Validate that provider and model were parsed successfully - if not provider or not llm_name: - handle_error( - f'Failed to parse provider and model from: "{llm_provider_to_use}". ' - f'Please select a valid LLM from the dropdown.', - True - ) - return - - user_key = api_key_token.strip() - az_deployment = azure_deployment.strip() - az_endpoint = azure_endpoint.strip() - api_ver = api_version.strip() - - if not are_all_inputs_valid( - prompt_text, provider, llm_name, user_key, - az_deployment, az_endpoint, api_ver - ): - return - - logger.info( - 'User input: %s | #characters: %d | LLM: %s', - prompt_text, len(prompt_text), llm_name - ) st.chat_message('user').write(prompt_text) - if _is_it_refinement(): - user_messages = _get_user_messages() - user_messages.append(prompt_text) - list_of_msgs = [ - f'{idx + 1}. {msg}' for idx, msg in enumerate(user_messages) - ] - formatted_template = prompt_template.format( - **{ - 'instructions': '\n'.join(list_of_msgs), - 'previous_content': _get_last_response(), - 'additional_info': st.session_state.get(ADDITIONAL_INFO, ''), - } - ) - else: - formatted_template = prompt_template.format( - **{ - 'question': prompt_text, - 'additional_info': st.session_state.get(ADDITIONAL_INFO, ''), - } - ) + slide_generator = SlideDeckAI( + model=llm_provider_to_use, + topic=prompt_text, + api_key=api_key_token.strip(), + template_idx=list(GlobalConfig.PPTX_TEMPLATE_FILES.keys()).index(pptx_template), + pdf_path_or_stream=st.session_state.get(PDF_FILE_KEY), + pdf_page_range=(st.session_state.get('start_page'), st.session_state.get('end_page')), + ) progress_bar = st.progress(0, 'Preparing to call LLM...') - response = '' + + def progress_callback(current_progress): + progress_bar.progress(min(current_progress / gcfg.get_max_output_tokens(llm_provider_to_use), 0.95), text='Streaming content...this might take a while...') try: - llm = llm_helper.get_litellm_llm( - provider=provider, - model=llm_name, - max_new_tokens=gcfg.get_max_output_tokens(llm_provider_to_use), - api_key=user_key, - azure_endpoint_url=az_endpoint, - azure_deployment_name=az_deployment, - azure_api_version=api_ver, - ) + if _is_it_refinement(): + path = slide_generator.revise(instructions=prompt_text, progress_callback=progress_callback) + else: + path = slide_generator.generate(progress_callback=progress_callback) - if not llm: - handle_error( - 'Failed to create an LLM instance! Make sure that you have selected the' - ' correct model from the dropdown list and have provided correct API key' - ' or access token.', - False - ) - return + progress_bar.progress(1.0, text='Done!') + + if path: + st.session_state[DOWNLOAD_FILE_KEY] = str(path) + history.add_user_message(prompt_text) + history.add_ai_message(slide_generator.last_response) + st.chat_message('ai').code(slide_generator.last_response, language='json') + _display_download_button(path) + else: + handle_error("Failed to generate slide deck.", True) - for chunk in llm.stream(formatted_template): - if isinstance(chunk, str): - response += chunk - else: - content = getattr(chunk, 'content', None) - if content is not None: - response += content - else: - response += str(chunk) - - # Update the progress bar with an approx progress percentage - progress_bar.progress( - min( - len(response) / gcfg.get_max_output_tokens(llm_provider_to_use), - 0.95 - ), - text='Streaming content...this might take a while...' - ) except (httpx.ConnectError, requests.exceptions.ConnectionError): handle_error( 'A connection error occurred while streaming content from the LLM endpoint.' @@ -469,22 +427,19 @@ def set_up_chat_ui(): ' using Ollama, make sure that Ollama is already running on your system.', True ) - return except huggingface_hub.errors.ValidationError as ve: handle_error( f'An error occurred while trying to generate the content: {ve}' '\nPlease try again with a significantly shorter input text.', True ) - return except ollama.ResponseError: handle_error( - f'The model `{llm_name}` is unavailable with Ollama on your system.' - f' Make sure that you have provided the correct LLM name or pull it using' - f' `ollama pull {llm_name}`. View LLMs available locally by running `ollama list`.', + f'The model is unavailable with Ollama on your system.' + f' Make sure that you have provided the correct LLM name or pull it.' + f' View LLMs available locally by running `ollama list`.', True ) - return except Exception as ex: _msg = str(ex) if 'payment required' in _msg.lower(): @@ -509,101 +464,6 @@ def set_up_chat_ui(): ' Read **[how to get free LLM API keys](https://github.com/barun-saha/slide-deck-ai?tab=readme-ov-file#summary-of-the-llms)**.', True ) - return - - history.add_user_message(prompt_text) - history.add_ai_message(response) - - # The content has been generated as JSON - # There maybe trailing ``` at the end of the response -- remove them - # To be careful: ``` may be part of the content as well when code is generated - response = text_helper.get_clean_json(response) - logger.info( - 'Cleaned JSON length: %d', len(response) - ) - - # Now create the PPT file - progress_bar.progress( - GlobalConfig.LLM_PROGRESS_MAX, - text='Finding photos online and generating the slide deck...' - ) - progress_bar.progress(1.0, text='Done!') - st.chat_message('ai').code(response, language='json') - - if path := generate_slide_deck(response): - _display_download_button(path) - - logger.info( - '#messages in history / 2: %d', - len(st.session_state[CHAT_MESSAGES]) / 2 - ) - - -def generate_slide_deck(json_str: str) -> Union[pathlib.Path, None]: - """ - Create a slide deck and return the file path. In case there is any error creating the slide - deck, the path may be to an empty file. - - :param json_str: The content in *valid* JSON format. - :return: The path to the .pptx file or `None` in case of error. - """ - - try: - parsed_data = json5.loads(json_str) - except ValueError: - handle_error( - 'Encountered error while parsing JSON...will fix it and retry', - True - ) - try: - parsed_data = json5.loads(text_helper.fix_malformed_json(json_str)) - except ValueError: - handle_error( - 'Encountered an error again while fixing JSON...' - 'the slide deck cannot be created, unfortunately ☹' - '\nPlease try again later.', - True - ) - return None - except RecursionError: - handle_error( - 'Encountered a recursion error while parsing JSON...' - 'the slide deck cannot be created, unfortunately ☹' - '\nPlease try again later.', - True - ) - return None - except Exception: - handle_error( - 'Encountered an error while parsing JSON...' - 'the slide deck cannot be created, unfortunately ☹' - '\nPlease try again later.', - True - ) - return None - - if DOWNLOAD_FILE_KEY in st.session_state: - path = pathlib.Path(st.session_state[DOWNLOAD_FILE_KEY]) - else: - temp = tempfile.NamedTemporaryFile(delete=False, suffix='.pptx') - path = pathlib.Path(temp.name) - st.session_state[DOWNLOAD_FILE_KEY] = str(path) - - if temp: - temp.close() - - try: - logger.debug('Creating PPTX file: %s...', st.session_state[DOWNLOAD_FILE_KEY]) - pptx_helper.generate_powerpoint_presentation( - parsed_data, - slides_template=pptx_template, - output_file_path=path - ) - except Exception as ex: - st.error(APP_TEXT['content_generation_error']) - logger.exception('Caught a generic exception: %s', str(ex)) - - return path def _is_it_refinement() -> bool: @@ -643,9 +503,6 @@ def _get_last_response() -> str: :return: The response text. """ - return st.session_state[CHAT_MESSAGES][-1].content - - def _display_messages_history(view_messages: st.expander): """ Display the history of messages. diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000000000000000000000000000000000000..bf24fa060a8a00e571e4b88be548fa10bd149f07 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,39 @@ +[build-system] +requires = ["setuptools>=77.0.3"] +build-backend = "setuptools.build_meta" + +[project] +name = "slidedeckai" +authors = [ + { name="Barun Saha", email="author@example.com" } +] +description = "A Python package to generate slide decks using AI." +readme = "README.md" +requires-python = ">=3.10" +classifiers = [ + "Programming Language :: Python :: 3", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent" +] +dynamic = ["dependencies", "version"] + +[tool.setuptools] +package-dir = {"" = "src"} +include-package-data = true + +[tool.setuptools.packages.find] +where = ["src"] + +[tool.setuptools.dynamic] +dependencies = {file = ["requirements.txt"]} +version = {attr = "slidedeckai._version.__version__"} + +[tool.setuptools.package-data] +slidedeckai = ["prompts/**/*.txt", "strings.json", "pptx_templates/*.pptx", "icons/png128/*.png", "icons/svg_repo.txt", "file_embeddings/*.npy"] + +[project.urls] +"Homepage" = "https://github.com/barun-saha/slide-deck-ai" +"Bug Tracker" = "https://github.com/barun-saha/slide-deck-ai/issues" + +[project.scripts] +slidedeckai = "slidedeckai.cli:main" diff --git a/helpers/__init__.py b/src/slidedeckai/__init__.py similarity index 100% rename from helpers/__init__.py rename to src/slidedeckai/__init__.py diff --git a/src/slidedeckai/_version.py b/src/slidedeckai/_version.py new file mode 100644 index 0000000000000000000000000000000000000000..73d4c8be5497b9ac6e87f45b471623e569cb73ac --- /dev/null +++ b/src/slidedeckai/_version.py @@ -0,0 +1 @@ +__version__ = "8.0.0" diff --git a/src/slidedeckai/cli.py b/src/slidedeckai/cli.py new file mode 100644 index 0000000000000000000000000000000000000000..ba17e1da664385adfcc4a4eb687a3190419aaa83 --- /dev/null +++ b/src/slidedeckai/cli.py @@ -0,0 +1,53 @@ +""" +Command-line interface for SlideDeckAI. +""" +import argparse +import subprocess +import sys +from .core import SlideDeckAI + +def main(): + """ + The main function for the CLI. + """ + parser = argparse.ArgumentParser(description='Generate slide decks with SlideDeckAI.') + subparsers = parser.add_subparsers(dest='command') + + # 'generate' command + parser_generate = subparsers.add_parser('generate', help='Generate a new slide deck.') + parser_generate.add_argument('--model', required=True, help='The name of the LLM model to use.') + parser_generate.add_argument('--topic', required=True, help='The topic of the slide deck.') + parser_generate.add_argument('--api-key', help='The API key for the LLM provider.') + parser_generate.add_argument('--template-id', type=int, default=0, help='The index of the PowerPoint template to use.') + parser_generate.add_argument('--output-path', help='The path to save the generated .pptx file.') + + # 'launch' command + subparsers.add_parser('launch', help='Launch the Streamlit app.') + + args = parser.parse_args() + + if args.command == 'generate': + slide_generator = SlideDeckAI( + model=args.model, + topic=args.topic, + api_key=args.api_key, + template_idx=args.template_id, + ) + + pptx_path = slide_generator.generate() + + if args.output_path: + import shutil + shutil.move(str(pptx_path), args.output_path) + print(f"Slide deck saved to {args.output_path}") + else: + print(f"Slide deck saved to {pptx_path}") + elif args.command == 'launch': + # Get the path to the app.py file + import os + import slidedeckai + app_path = os.path.join(os.path.dirname(slidedeckai.__file__), '..', '..', 'app.py') + subprocess.run([sys.executable, '-m', 'streamlit', 'run', app_path]) + +if __name__ == '__main__': + main() diff --git a/src/slidedeckai/core.py b/src/slidedeckai/core.py new file mode 100644 index 0000000000000000000000000000000000000000..1a75c0f5fa2250a9a5cdc9cca323cf05a21dc66d --- /dev/null +++ b/src/slidedeckai/core.py @@ -0,0 +1,208 @@ +""" +Core classes for SlideDeckAI. +""" +import logging +import os +import pathlib +import tempfile +from typing import Union + +import json5 +from dotenv import load_dotenv + +from . import global_config as gcfg +from .global_config import GlobalConfig +from .helpers import llm_helper, pptx_helper, text_helper +from .helpers.chat_helper import ChatMessageHistory + +load_dotenv() + +RUN_IN_OFFLINE_MODE = os.getenv('RUN_IN_OFFLINE_MODE', 'False').lower() == 'true' + +logger = logging.getLogger(__name__) + +from .helpers import file_manager as filem + +class SlideDeckAI: + """ + The main class for generating slide decks. + """ + + def __init__(self, model, topic, api_key=None, pdf_path_or_stream=None, pdf_page_range=None, template_idx=0): + """ + Initializes the SlideDeckAI object. + + :param model: The name of the LLM model to use. + :param topic: The topic of the slide deck. + :param api_key: The API key for the LLM provider. + :param pdf_path_or_stream: The path to a PDF file or a file-like object. + :param pdf_page_range: A tuple representing the page range to use from the PDF file. + :param template_idx: The index of the PowerPoint template to use. + """ + self.model = model + self.topic = topic + self.api_key = api_key + self.pdf_path_or_stream = pdf_path_or_stream + self.pdf_page_range = pdf_page_range + self.template_idx = template_idx + self.chat_history = ChatMessageHistory() + self.last_response = None + + def _get_prompt_template(self, is_refinement: bool) -> str: + """ + Return a prompt template. + + :param is_refinement: Whether this is the initial or refinement prompt. + :return: The prompt template as f-string. + """ + if is_refinement: + with open(GlobalConfig.REFINEMENT_PROMPT_TEMPLATE, 'r', encoding='utf-8') as in_file: + template = in_file.read() + else: + with open(GlobalConfig.INITIAL_PROMPT_TEMPLATE, 'r', encoding='utf-8') as in_file: + template = in_file.read() + return template + + def generate(self, progress_callback=None): + """ + Generates the initial slide deck. + :return: The path to the generated .pptx file. + """ + additional_info = '' + if self.pdf_path_or_stream: + additional_info = filem.get_pdf_contents(self.pdf_path_or_stream, self.pdf_page_range) + + self.chat_history.add_user_message(self.topic) + prompt_template = self._get_prompt_template(is_refinement=False) + formatted_template = prompt_template.format(question=self.topic, additional_info=additional_info) + + provider, llm_name = llm_helper.get_provider_model(self.model, use_ollama=RUN_IN_OFFLINE_MODE) + + llm = llm_helper.get_litellm_llm( + provider=provider, + model=llm_name, + max_new_tokens=gcfg.get_max_output_tokens(self.model), + api_key=self.api_key, + ) + + response = "" + for chunk in llm.stream(formatted_template): + if isinstance(chunk, str): + response += chunk + else: + content = getattr(chunk, 'content', None) + if content is not None: + response += content + else: + response += str(chunk) + if progress_callback: + progress_callback(len(response)) + + self.last_response = text_helper.get_clean_json(response) + self.chat_history.add_ai_message(self.last_response) + + return self._generate_slide_deck(self.last_response) + + def revise(self, instructions, progress_callback=None): + """ + Revises the slide deck with new instructions. + + :param instructions: The instructions for revising the slide deck. + :return: The path to the revised .pptx file. + """ + if not self.last_response: + raise ValueError("You must generate a slide deck before you can revise it.") + + if len(self.chat_history.messages) >= 16: + raise ValueError("Chat history is full. Please reset to continue.") + + self.chat_history.add_user_message(instructions) + + prompt_template = self._get_prompt_template(is_refinement=True) + + list_of_msgs = [f'{idx + 1}. {msg.content}' for idx, msg in enumerate(self.chat_history.messages) if msg.role == 'user'] + + additional_info = '' + if self.pdf_path_or_stream: + additional_info = filem.get_pdf_contents(self.pdf_path_or_stream, self.pdf_page_range) + + formatted_template = prompt_template.format( + instructions='\n'.join(list_of_msgs), + previous_content=self.last_response, + additional_info=additional_info, + ) + + provider, llm_name = llm_helper.get_provider_model(self.model, use_ollama=RUN_IN_OFFLINE_MODE) + + llm = llm_helper.get_litellm_llm( + provider=provider, + model=llm_name, + max_new_tokens=gcfg.get_max_output_tokens(self.model), + api_key=self.api_key, + ) + + response = "" + for chunk in llm.stream(formatted_template): + if isinstance(chunk, str): + response += chunk + else: + content = getattr(chunk, 'content', None) + if content is not None: + response += content + else: + response += str(chunk) + if progress_callback: + progress_callback(len(response)) + + self.last_response = text_helper.get_clean_json(response) + self.chat_history.add_ai_message(self.last_response) + + return self._generate_slide_deck(self.last_response) + + def _generate_slide_deck(self, json_str: str) -> Union[pathlib.Path, None]: + """ + Create a slide deck and return the file path. + + :param json_str: The content in *valid* JSON format. + :return: The path to the .pptx file or `None` in case of error. + """ + try: + parsed_data = json5.loads(json_str) + except (ValueError, RecursionError) as e: + logger.error("Error parsing JSON: %s", e) + try: + parsed_data = json5.loads(text_helper.fix_malformed_json(json_str)) + except (ValueError, RecursionError) as e2: + logger.error("Error parsing fixed JSON: %s", e2) + return None + + temp = tempfile.NamedTemporaryFile(delete=False, suffix='.pptx') + path = pathlib.Path(temp.name) + temp.close() + + try: + pptx_helper.generate_powerpoint_presentation( + parsed_data, + slides_template=list(GlobalConfig.PPTX_TEMPLATE_FILES.keys())[self.template_idx], + output_file_path=path + ) + except Exception as ex: + logger.exception('Caught a generic exception: %s', str(ex)) + return None + + return path + + def set_template(self, idx): + """ + Sets the PowerPoint template to use. + + :param idx: The index of the template to use. + """ + self.template_idx = idx + + def reset(self): + """ + Resets the chat history. + """ + self.chat_history = ChatMessageHistory() + self.last_response = None diff --git a/file_embeddings/embeddings.npy b/src/slidedeckai/file_embeddings/embeddings.npy similarity index 100% rename from file_embeddings/embeddings.npy rename to src/slidedeckai/file_embeddings/embeddings.npy diff --git a/file_embeddings/icons.npy b/src/slidedeckai/file_embeddings/icons.npy similarity index 100% rename from file_embeddings/icons.npy rename to src/slidedeckai/file_embeddings/icons.npy diff --git a/global_config.py b/src/slidedeckai/global_config.py similarity index 91% rename from global_config.py rename to src/slidedeckai/global_config.py index 0dda8960201523ee9f9be257f79775c13f442a1f..8d337d996e026d3fdfc83a24021717dc09b57fcb 100644 --- a/global_config.py +++ b/src/slidedeckai/global_config.py @@ -4,6 +4,7 @@ A set of configurations used by the app. import logging import os import re +from pathlib import Path from dataclasses import dataclass from dotenv import load_dotenv @@ -11,6 +12,7 @@ from dotenv import load_dotenv load_dotenv() +_SRC_DIR = Path(__file__).resolve().parent @dataclass(frozen=True) class GlobalConfig: @@ -128,32 +130,32 @@ class GlobalConfig: LOG_LEVEL = 'DEBUG' COUNT_TOKENS = False - APP_STRINGS_FILE = 'strings.json' - PRELOAD_DATA_FILE = 'examples/example_02.json' - INITIAL_PROMPT_TEMPLATE = 'prompts/initial_template_v4_two_cols_img.txt' - REFINEMENT_PROMPT_TEMPLATE = 'prompts/refinement_template_v4_two_cols_img.txt' + APP_STRINGS_FILE = _SRC_DIR / 'strings.json' + PRELOAD_DATA_FILE = _SRC_DIR / 'examples/example_02.json' + INITIAL_PROMPT_TEMPLATE = _SRC_DIR / 'prompts/initial_template_v4_two_cols_img.txt' + REFINEMENT_PROMPT_TEMPLATE = _SRC_DIR / 'prompts/refinement_template_v4_two_cols_img.txt' LLM_PROGRESS_MAX = 90 - ICONS_DIR = 'icons/png128/' + ICONS_DIR = _SRC_DIR / 'icons/png128/' TINY_BERT_MODEL = 'gaunernst/bert-mini-uncased' - EMBEDDINGS_FILE_NAME = 'file_embeddings/embeddings.npy' - ICONS_FILE_NAME = 'file_embeddings/icons.npy' + EMBEDDINGS_FILE_NAME = _SRC_DIR / 'file_embeddings/embeddings.npy' + ICONS_FILE_NAME = _SRC_DIR / 'file_embeddings/icons.npy' PPTX_TEMPLATE_FILES = { 'Basic': { - 'file': 'pptx_templates/Blank.pptx', + 'file': _SRC_DIR / 'pptx_templates/Blank.pptx', 'caption': 'A good start (Uses [photos](https://unsplash.com/photos/AFZ-qBPEceA) by [cetteup](https://unsplash.com/@cetteup?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash) on [Unsplash](https://unsplash.com/photos/a-foggy-forest-filled-with-lots-of-trees-d3ci37Gcgxg?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash)) 🟧' }, 'Ion Boardroom': { - 'file': 'pptx_templates/Ion_Boardroom.pptx', + 'file': _SRC_DIR / 'pptx_templates/Ion_Boardroom.pptx', 'caption': 'Make some bold decisions 🟥' }, 'Minimalist Sales Pitch': { - 'file': 'pptx_templates/Minimalist_sales_pitch.pptx', + 'file': _SRC_DIR / 'pptx_templates/Minimalist_sales_pitch.pptx', 'caption': 'In high contrast ⬛' }, 'Urban Monochrome': { - 'file': 'pptx_templates/Urban_monochrome.pptx', + 'file': _SRC_DIR / 'pptx_templates/Urban_monochrome.pptx', 'caption': 'Marvel in a monochrome dream ⬜' }, } diff --git a/src/slidedeckai/helpers/__init__.py b/src/slidedeckai/helpers/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/helpers/chat_helper.py b/src/slidedeckai/helpers/chat_helper.py similarity index 70% rename from helpers/chat_helper.py rename to src/slidedeckai/helpers/chat_helper.py index ec94a9c59a47dcc5f508e77b8385334c76151d81..eb94e8a49d7eabbb3a33cbd1a7f39c8bdc84f0c9 100644 --- a/helpers/chat_helper.py +++ b/src/slidedeckai/helpers/chat_helper.py @@ -27,24 +27,17 @@ class AIMessage(ChatMessage): super().__init__(content, 'ai') -class StreamlitChatMessageHistory: - """Chat message history stored in Streamlit session state.""" +class ChatMessageHistory: + """Chat message history stored in a list.""" - def __init__(self, key: str): - self.key = key - if key not in st.session_state: - st.session_state[key] = [] - - @property - def messages(self): - return st.session_state[self.key] + def __init__(self): + self.messages = [] def add_user_message(self, content: str): - st.session_state[self.key].append(HumanMessage(content)) + self.messages.append(HumanMessage(content)) def add_ai_message(self, content: str): - st.session_state[self.key].append(AIMessage(content)) - + self.messages.append(AIMessage(content)) class ChatPromptTemplate: """Template for chat prompts.""" diff --git a/helpers/file_manager.py b/src/slidedeckai/helpers/file_manager.py similarity index 95% rename from helpers/file_manager.py rename to src/slidedeckai/helpers/file_manager.py index c1b89b72e8d87bf94d2f6b9741858a0d3991859e..41b80c6729d4d74acf4c9ca7e019e4a8ce9cef28 100644 --- a/helpers/file_manager.py +++ b/src/slidedeckai/helpers/file_manager.py @@ -8,10 +8,7 @@ import sys import streamlit as st from pypdf import PdfReader -sys.path.append('..') -sys.path.append('../..') - -from global_config import GlobalConfig +from ..global_config import GlobalConfig logger = logging.getLogger(__name__) diff --git a/helpers/icons_embeddings.py b/src/slidedeckai/helpers/icons_embeddings.py similarity index 95% rename from helpers/icons_embeddings.py rename to src/slidedeckai/helpers/icons_embeddings.py index 048a921ba99056dfd1f84e3651c3b20203359547..5fa7fb0b9f82494e567e51d43b06407f79b7a0cf 100644 --- a/helpers/icons_embeddings.py +++ b/src/slidedeckai/helpers/icons_embeddings.py @@ -11,10 +11,7 @@ import numpy as np from sklearn.metrics.pairwise import cosine_similarity from transformers import BertTokenizer, BertModel -sys.path.append('..') -sys.path.append('../..') - -from global_config import GlobalConfig +from ..global_config import GlobalConfig tokenizer = BertTokenizer.from_pretrained(GlobalConfig.TINY_BERT_MODEL) @@ -28,9 +25,9 @@ def get_icons_list() -> List[str]: :return: The icons file names. """ - items = pathlib.Path('../' + GlobalConfig.ICONS_DIR).glob('*.png') + items = GlobalConfig.ICONS_DIR.glob('*.png') items = [ - os.path.basename(str(item)).removesuffix('.png') for item in items + item.stem for item in items ] return items diff --git a/helpers/image_search.py b/src/slidedeckai/helpers/image_search.py similarity index 100% rename from helpers/image_search.py rename to src/slidedeckai/helpers/image_search.py diff --git a/helpers/llm_helper.py b/src/slidedeckai/helpers/llm_helper.py similarity index 99% rename from helpers/llm_helper.py rename to src/slidedeckai/helpers/llm_helper.py index fd87843622872dbfc37ea76e9395b90069a27d79..fdfecc0cdb33dd00fbc22c44242d380e888163ac 100644 --- a/helpers/llm_helper.py +++ b/src/slidedeckai/helpers/llm_helper.py @@ -8,9 +8,7 @@ import urllib3 from typing import Tuple, Union, Iterator, Optional -sys.path.append('..') - -from global_config import GlobalConfig +from ..global_config import GlobalConfig try: import litellm diff --git a/helpers/pptx_helper.py b/src/slidedeckai/helpers/pptx_helper.py similarity index 99% rename from helpers/pptx_helper.py rename to src/slidedeckai/helpers/pptx_helper.py index d92243583d35e43803762420eb654d50b28be199..9d6f5135bf2e154e1e4b1b10f456a77a2c079b3f 100644 --- a/helpers/pptx_helper.py +++ b/src/slidedeckai/helpers/pptx_helper.py @@ -16,12 +16,9 @@ from dotenv import load_dotenv from pptx.enum.shapes import MSO_AUTO_SHAPE_TYPE from pptx.shapes.placeholder import PicturePlaceholder, SlidePlaceholder -sys.path.append('..') -sys.path.append('../..') - -import helpers.icons_embeddings as ice -import helpers.image_search as ims -from global_config import GlobalConfig +from . import icons_embeddings as ice +from . import image_search as ims +from ..global_config import GlobalConfig load_dotenv() diff --git a/helpers/text_helper.py b/src/slidedeckai/helpers/text_helper.py similarity index 100% rename from helpers/text_helper.py rename to src/slidedeckai/helpers/text_helper.py diff --git a/icons/png128/0-circle.png b/src/slidedeckai/icons/png128/0-circle.png similarity index 100% rename from icons/png128/0-circle.png rename to src/slidedeckai/icons/png128/0-circle.png diff --git a/icons/png128/1-circle.png b/src/slidedeckai/icons/png128/1-circle.png similarity index 100% rename from icons/png128/1-circle.png rename to src/slidedeckai/icons/png128/1-circle.png diff --git a/icons/png128/123.png b/src/slidedeckai/icons/png128/123.png similarity index 100% rename from icons/png128/123.png rename to src/slidedeckai/icons/png128/123.png diff --git a/icons/png128/2-circle.png b/src/slidedeckai/icons/png128/2-circle.png similarity index 100% rename from icons/png128/2-circle.png rename to src/slidedeckai/icons/png128/2-circle.png diff --git a/icons/png128/3-circle.png b/src/slidedeckai/icons/png128/3-circle.png similarity index 100% rename from icons/png128/3-circle.png rename to src/slidedeckai/icons/png128/3-circle.png diff --git a/icons/png128/4-circle.png b/src/slidedeckai/icons/png128/4-circle.png similarity index 100% rename from icons/png128/4-circle.png rename to src/slidedeckai/icons/png128/4-circle.png diff --git a/icons/png128/5-circle.png b/src/slidedeckai/icons/png128/5-circle.png similarity index 100% rename from icons/png128/5-circle.png rename to src/slidedeckai/icons/png128/5-circle.png diff --git a/icons/png128/6-circle.png b/src/slidedeckai/icons/png128/6-circle.png similarity index 100% rename from icons/png128/6-circle.png rename to src/slidedeckai/icons/png128/6-circle.png diff --git a/icons/png128/7-circle.png b/src/slidedeckai/icons/png128/7-circle.png similarity index 100% rename from icons/png128/7-circle.png rename to src/slidedeckai/icons/png128/7-circle.png diff --git a/icons/png128/8-circle.png b/src/slidedeckai/icons/png128/8-circle.png similarity index 100% rename from icons/png128/8-circle.png rename to src/slidedeckai/icons/png128/8-circle.png diff --git a/icons/png128/9-circle.png b/src/slidedeckai/icons/png128/9-circle.png similarity index 100% rename from icons/png128/9-circle.png rename to src/slidedeckai/icons/png128/9-circle.png diff --git a/icons/png128/activity.png b/src/slidedeckai/icons/png128/activity.png similarity index 100% rename from icons/png128/activity.png rename to src/slidedeckai/icons/png128/activity.png diff --git a/icons/png128/airplane.png b/src/slidedeckai/icons/png128/airplane.png similarity index 100% rename from icons/png128/airplane.png rename to src/slidedeckai/icons/png128/airplane.png diff --git a/icons/png128/alarm.png b/src/slidedeckai/icons/png128/alarm.png similarity index 100% rename from icons/png128/alarm.png rename to src/slidedeckai/icons/png128/alarm.png diff --git a/icons/png128/alien-head.png b/src/slidedeckai/icons/png128/alien-head.png similarity index 100% rename from icons/png128/alien-head.png rename to src/slidedeckai/icons/png128/alien-head.png diff --git a/icons/png128/alphabet.png b/src/slidedeckai/icons/png128/alphabet.png similarity index 100% rename from icons/png128/alphabet.png rename to src/slidedeckai/icons/png128/alphabet.png diff --git a/icons/png128/amazon.png b/src/slidedeckai/icons/png128/amazon.png similarity index 100% rename from icons/png128/amazon.png rename to src/slidedeckai/icons/png128/amazon.png diff --git a/icons/png128/amritsar-golden-temple.png b/src/slidedeckai/icons/png128/amritsar-golden-temple.png similarity index 100% rename from icons/png128/amritsar-golden-temple.png rename to src/slidedeckai/icons/png128/amritsar-golden-temple.png diff --git a/icons/png128/amsterdam-canal.png b/src/slidedeckai/icons/png128/amsterdam-canal.png similarity index 100% rename from icons/png128/amsterdam-canal.png rename to src/slidedeckai/icons/png128/amsterdam-canal.png diff --git a/icons/png128/amsterdam-windmill.png b/src/slidedeckai/icons/png128/amsterdam-windmill.png similarity index 100% rename from icons/png128/amsterdam-windmill.png rename to src/slidedeckai/icons/png128/amsterdam-windmill.png diff --git a/icons/png128/android.png b/src/slidedeckai/icons/png128/android.png similarity index 100% rename from icons/png128/android.png rename to src/slidedeckai/icons/png128/android.png diff --git a/icons/png128/angkor-wat.png b/src/slidedeckai/icons/png128/angkor-wat.png similarity index 100% rename from icons/png128/angkor-wat.png rename to src/slidedeckai/icons/png128/angkor-wat.png diff --git a/icons/png128/apple.png b/src/slidedeckai/icons/png128/apple.png similarity index 100% rename from icons/png128/apple.png rename to src/slidedeckai/icons/png128/apple.png diff --git a/icons/png128/archive.png b/src/slidedeckai/icons/png128/archive.png similarity index 100% rename from icons/png128/archive.png rename to src/slidedeckai/icons/png128/archive.png diff --git a/icons/png128/argentina-obelisk.png b/src/slidedeckai/icons/png128/argentina-obelisk.png similarity index 100% rename from icons/png128/argentina-obelisk.png rename to src/slidedeckai/icons/png128/argentina-obelisk.png diff --git a/icons/png128/artificial-intelligence-brain.png b/src/slidedeckai/icons/png128/artificial-intelligence-brain.png similarity index 100% rename from icons/png128/artificial-intelligence-brain.png rename to src/slidedeckai/icons/png128/artificial-intelligence-brain.png diff --git a/icons/png128/atlanta.png b/src/slidedeckai/icons/png128/atlanta.png similarity index 100% rename from icons/png128/atlanta.png rename to src/slidedeckai/icons/png128/atlanta.png diff --git a/icons/png128/austin.png b/src/slidedeckai/icons/png128/austin.png similarity index 100% rename from icons/png128/austin.png rename to src/slidedeckai/icons/png128/austin.png diff --git a/icons/png128/automation-decision.png b/src/slidedeckai/icons/png128/automation-decision.png similarity index 100% rename from icons/png128/automation-decision.png rename to src/slidedeckai/icons/png128/automation-decision.png diff --git a/icons/png128/award.png b/src/slidedeckai/icons/png128/award.png similarity index 100% rename from icons/png128/award.png rename to src/slidedeckai/icons/png128/award.png diff --git a/icons/png128/balloon.png b/src/slidedeckai/icons/png128/balloon.png similarity index 100% rename from icons/png128/balloon.png rename to src/slidedeckai/icons/png128/balloon.png diff --git a/icons/png128/ban.png b/src/slidedeckai/icons/png128/ban.png similarity index 100% rename from icons/png128/ban.png rename to src/slidedeckai/icons/png128/ban.png diff --git a/icons/png128/bandaid.png b/src/slidedeckai/icons/png128/bandaid.png similarity index 100% rename from icons/png128/bandaid.png rename to src/slidedeckai/icons/png128/bandaid.png diff --git a/icons/png128/bangalore.png b/src/slidedeckai/icons/png128/bangalore.png similarity index 100% rename from icons/png128/bangalore.png rename to src/slidedeckai/icons/png128/bangalore.png diff --git a/icons/png128/bank.png b/src/slidedeckai/icons/png128/bank.png similarity index 100% rename from icons/png128/bank.png rename to src/slidedeckai/icons/png128/bank.png diff --git a/icons/png128/bar-chart-line.png b/src/slidedeckai/icons/png128/bar-chart-line.png similarity index 100% rename from icons/png128/bar-chart-line.png rename to src/slidedeckai/icons/png128/bar-chart-line.png diff --git a/icons/png128/barcelona.png b/src/slidedeckai/icons/png128/barcelona.png similarity index 100% rename from icons/png128/barcelona.png rename to src/slidedeckai/icons/png128/barcelona.png diff --git a/icons/png128/basilica-of-the-sacred-heart.png b/src/slidedeckai/icons/png128/basilica-of-the-sacred-heart.png similarity index 100% rename from icons/png128/basilica-of-the-sacred-heart.png rename to src/slidedeckai/icons/png128/basilica-of-the-sacred-heart.png diff --git a/icons/png128/basket.png b/src/slidedeckai/icons/png128/basket.png similarity index 100% rename from icons/png128/basket.png rename to src/slidedeckai/icons/png128/basket.png diff --git a/icons/png128/battery-charging.png b/src/slidedeckai/icons/png128/battery-charging.png similarity index 100% rename from icons/png128/battery-charging.png rename to src/slidedeckai/icons/png128/battery-charging.png diff --git a/icons/png128/beijing-municipal.png b/src/slidedeckai/icons/png128/beijing-municipal.png similarity index 100% rename from icons/png128/beijing-municipal.png rename to src/slidedeckai/icons/png128/beijing-municipal.png diff --git a/icons/png128/beijing-tower.png b/src/slidedeckai/icons/png128/beijing-tower.png similarity index 100% rename from icons/png128/beijing-tower.png rename to src/slidedeckai/icons/png128/beijing-tower.png diff --git a/icons/png128/bell-slash.png b/src/slidedeckai/icons/png128/bell-slash.png similarity index 100% rename from icons/png128/bell-slash.png rename to src/slidedeckai/icons/png128/bell-slash.png diff --git a/icons/png128/bell.png b/src/slidedeckai/icons/png128/bell.png similarity index 100% rename from icons/png128/bell.png rename to src/slidedeckai/icons/png128/bell.png diff --git a/icons/png128/berlin-cathedral.png b/src/slidedeckai/icons/png128/berlin-cathedral.png similarity index 100% rename from icons/png128/berlin-cathedral.png rename to src/slidedeckai/icons/png128/berlin-cathedral.png diff --git a/icons/png128/berlin-tower.png b/src/slidedeckai/icons/png128/berlin-tower.png similarity index 100% rename from icons/png128/berlin-tower.png rename to src/slidedeckai/icons/png128/berlin-tower.png diff --git a/icons/png128/bicycle.png b/src/slidedeckai/icons/png128/bicycle.png similarity index 100% rename from icons/png128/bicycle.png rename to src/slidedeckai/icons/png128/bicycle.png diff --git a/icons/png128/bing.png b/src/slidedeckai/icons/png128/bing.png similarity index 100% rename from icons/png128/bing.png rename to src/slidedeckai/icons/png128/bing.png diff --git a/icons/png128/binoculars.png b/src/slidedeckai/icons/png128/binoculars.png similarity index 100% rename from icons/png128/binoculars.png rename to src/slidedeckai/icons/png128/binoculars.png diff --git a/icons/png128/blockchain.png b/src/slidedeckai/icons/png128/blockchain.png similarity index 100% rename from icons/png128/blockchain.png rename to src/slidedeckai/icons/png128/blockchain.png diff --git a/icons/png128/bluetooth.png b/src/slidedeckai/icons/png128/bluetooth.png similarity index 100% rename from icons/png128/bluetooth.png rename to src/slidedeckai/icons/png128/bluetooth.png diff --git a/icons/png128/book.png b/src/slidedeckai/icons/png128/book.png similarity index 100% rename from icons/png128/book.png rename to src/slidedeckai/icons/png128/book.png diff --git a/icons/png128/bookmark.png b/src/slidedeckai/icons/png128/bookmark.png similarity index 100% rename from icons/png128/bookmark.png rename to src/slidedeckai/icons/png128/bookmark.png diff --git a/icons/png128/bootstrap.png b/src/slidedeckai/icons/png128/bootstrap.png similarity index 100% rename from icons/png128/bootstrap.png rename to src/slidedeckai/icons/png128/bootstrap.png diff --git a/icons/png128/boston-zakim-bridge.png b/src/slidedeckai/icons/png128/boston-zakim-bridge.png similarity index 100% rename from icons/png128/boston-zakim-bridge.png rename to src/slidedeckai/icons/png128/boston-zakim-bridge.png diff --git a/icons/png128/brain.png b/src/slidedeckai/icons/png128/brain.png similarity index 100% rename from icons/png128/brain.png rename to src/slidedeckai/icons/png128/brain.png diff --git a/icons/png128/bread.png b/src/slidedeckai/icons/png128/bread.png similarity index 100% rename from icons/png128/bread.png rename to src/slidedeckai/icons/png128/bread.png diff --git a/icons/png128/briefcase.png b/src/slidedeckai/icons/png128/briefcase.png similarity index 100% rename from icons/png128/briefcase.png rename to src/slidedeckai/icons/png128/briefcase.png diff --git a/icons/png128/broadcast-pin.png b/src/slidedeckai/icons/png128/broadcast-pin.png similarity index 100% rename from icons/png128/broadcast-pin.png rename to src/slidedeckai/icons/png128/broadcast-pin.png diff --git a/icons/png128/browser-chrome.png b/src/slidedeckai/icons/png128/browser-chrome.png similarity index 100% rename from icons/png128/browser-chrome.png rename to src/slidedeckai/icons/png128/browser-chrome.png diff --git a/icons/png128/browser-edge.png b/src/slidedeckai/icons/png128/browser-edge.png similarity index 100% rename from icons/png128/browser-edge.png rename to src/slidedeckai/icons/png128/browser-edge.png diff --git a/icons/png128/browser-firefox.png b/src/slidedeckai/icons/png128/browser-firefox.png similarity index 100% rename from icons/png128/browser-firefox.png rename to src/slidedeckai/icons/png128/browser-firefox.png diff --git a/icons/png128/browser-safari.png b/src/slidedeckai/icons/png128/browser-safari.png similarity index 100% rename from icons/png128/browser-safari.png rename to src/slidedeckai/icons/png128/browser-safari.png diff --git a/icons/png128/brush.png b/src/slidedeckai/icons/png128/brush.png similarity index 100% rename from icons/png128/brush.png rename to src/slidedeckai/icons/png128/brush.png diff --git a/icons/png128/bucket.png b/src/slidedeckai/icons/png128/bucket.png similarity index 100% rename from icons/png128/bucket.png rename to src/slidedeckai/icons/png128/bucket.png diff --git a/icons/png128/budapest.png b/src/slidedeckai/icons/png128/budapest.png similarity index 100% rename from icons/png128/budapest.png rename to src/slidedeckai/icons/png128/budapest.png diff --git a/icons/png128/bug-fill.png b/src/slidedeckai/icons/png128/bug-fill.png similarity index 100% rename from icons/png128/bug-fill.png rename to src/slidedeckai/icons/png128/bug-fill.png diff --git a/icons/png128/bug.png b/src/slidedeckai/icons/png128/bug.png similarity index 100% rename from icons/png128/bug.png rename to src/slidedeckai/icons/png128/bug.png diff --git a/icons/png128/building.png b/src/slidedeckai/icons/png128/building.png similarity index 100% rename from icons/png128/building.png rename to src/slidedeckai/icons/png128/building.png diff --git a/icons/png128/bullseye.png b/src/slidedeckai/icons/png128/bullseye.png similarity index 100% rename from icons/png128/bullseye.png rename to src/slidedeckai/icons/png128/bullseye.png diff --git a/icons/png128/burger.png b/src/slidedeckai/icons/png128/burger.png similarity index 100% rename from icons/png128/burger.png rename to src/slidedeckai/icons/png128/burger.png diff --git a/icons/png128/bus-front.png b/src/slidedeckai/icons/png128/bus-front.png similarity index 100% rename from icons/png128/bus-front.png rename to src/slidedeckai/icons/png128/bus-front.png diff --git a/icons/png128/cafe.png b/src/slidedeckai/icons/png128/cafe.png similarity index 100% rename from icons/png128/cafe.png rename to src/slidedeckai/icons/png128/cafe.png diff --git a/icons/png128/cairo-giza-plateau.png b/src/slidedeckai/icons/png128/cairo-giza-plateau.png similarity index 100% rename from icons/png128/cairo-giza-plateau.png rename to src/slidedeckai/icons/png128/cairo-giza-plateau.png diff --git a/icons/png128/cake2.png b/src/slidedeckai/icons/png128/cake2.png similarity index 100% rename from icons/png128/cake2.png rename to src/slidedeckai/icons/png128/cake2.png diff --git a/icons/png128/calculator.png b/src/slidedeckai/icons/png128/calculator.png similarity index 100% rename from icons/png128/calculator.png rename to src/slidedeckai/icons/png128/calculator.png diff --git a/icons/png128/calendar.png b/src/slidedeckai/icons/png128/calendar.png similarity index 100% rename from icons/png128/calendar.png rename to src/slidedeckai/icons/png128/calendar.png diff --git a/icons/png128/camera.png b/src/slidedeckai/icons/png128/camera.png similarity index 100% rename from icons/png128/camera.png rename to src/slidedeckai/icons/png128/camera.png diff --git a/icons/png128/capitol.png b/src/slidedeckai/icons/png128/capitol.png similarity index 100% rename from icons/png128/capitol.png rename to src/slidedeckai/icons/png128/capitol.png diff --git a/icons/png128/card-image.png b/src/slidedeckai/icons/png128/card-image.png similarity index 100% rename from icons/png128/card-image.png rename to src/slidedeckai/icons/png128/card-image.png diff --git a/icons/png128/cardiogram.png b/src/slidedeckai/icons/png128/cardiogram.png similarity index 100% rename from icons/png128/cardiogram.png rename to src/slidedeckai/icons/png128/cardiogram.png diff --git a/icons/png128/cart.png b/src/slidedeckai/icons/png128/cart.png similarity index 100% rename from icons/png128/cart.png rename to src/slidedeckai/icons/png128/cart.png diff --git a/icons/png128/certificate.png b/src/slidedeckai/icons/png128/certificate.png similarity index 100% rename from icons/png128/certificate.png rename to src/slidedeckai/icons/png128/certificate.png diff --git a/icons/png128/christ-the-redeemer.png b/src/slidedeckai/icons/png128/christ-the-redeemer.png similarity index 100% rename from icons/png128/christ-the-redeemer.png rename to src/slidedeckai/icons/png128/christ-the-redeemer.png diff --git a/icons/png128/clipboard-check.png b/src/slidedeckai/icons/png128/clipboard-check.png similarity index 100% rename from icons/png128/clipboard-check.png rename to src/slidedeckai/icons/png128/clipboard-check.png diff --git a/icons/png128/clock.png b/src/slidedeckai/icons/png128/clock.png similarity index 100% rename from icons/png128/clock.png rename to src/slidedeckai/icons/png128/clock.png diff --git a/icons/png128/cloud-moon.png b/src/slidedeckai/icons/png128/cloud-moon.png similarity index 100% rename from icons/png128/cloud-moon.png rename to src/slidedeckai/icons/png128/cloud-moon.png diff --git a/icons/png128/cloud-sun.png b/src/slidedeckai/icons/png128/cloud-sun.png similarity index 100% rename from icons/png128/cloud-sun.png rename to src/slidedeckai/icons/png128/cloud-sun.png diff --git a/icons/png128/cloud.png b/src/slidedeckai/icons/png128/cloud.png similarity index 100% rename from icons/png128/cloud.png rename to src/slidedeckai/icons/png128/cloud.png diff --git a/icons/png128/clusters.png b/src/slidedeckai/icons/png128/clusters.png similarity index 100% rename from icons/png128/clusters.png rename to src/slidedeckai/icons/png128/clusters.png diff --git a/icons/png128/code.png b/src/slidedeckai/icons/png128/code.png similarity index 100% rename from icons/png128/code.png rename to src/slidedeckai/icons/png128/code.png diff --git a/icons/png128/compass.png b/src/slidedeckai/icons/png128/compass.png similarity index 100% rename from icons/png128/compass.png rename to src/slidedeckai/icons/png128/compass.png diff --git a/icons/png128/computer-tv.png b/src/slidedeckai/icons/png128/computer-tv.png similarity index 100% rename from icons/png128/computer-tv.png rename to src/slidedeckai/icons/png128/computer-tv.png diff --git a/icons/png128/cone-striped.png b/src/slidedeckai/icons/png128/cone-striped.png similarity index 100% rename from icons/png128/cone-striped.png rename to src/slidedeckai/icons/png128/cone-striped.png diff --git a/icons/png128/conversation.png b/src/slidedeckai/icons/png128/conversation.png similarity index 100% rename from icons/png128/conversation.png rename to src/slidedeckai/icons/png128/conversation.png diff --git a/icons/png128/cpu-fill.png b/src/slidedeckai/icons/png128/cpu-fill.png similarity index 100% rename from icons/png128/cpu-fill.png rename to src/slidedeckai/icons/png128/cpu-fill.png diff --git a/icons/png128/cpu.png b/src/slidedeckai/icons/png128/cpu.png similarity index 100% rename from icons/png128/cpu.png rename to src/slidedeckai/icons/png128/cpu.png diff --git a/icons/png128/credit-card.png b/src/slidedeckai/icons/png128/credit-card.png similarity index 100% rename from icons/png128/credit-card.png rename to src/slidedeckai/icons/png128/credit-card.png diff --git a/icons/png128/csv.png b/src/slidedeckai/icons/png128/csv.png similarity index 100% rename from icons/png128/csv.png rename to src/slidedeckai/icons/png128/csv.png diff --git a/icons/png128/cup.png b/src/slidedeckai/icons/png128/cup.png similarity index 100% rename from icons/png128/cup.png rename to src/slidedeckai/icons/png128/cup.png diff --git a/icons/png128/currency-bitcoin.png b/src/slidedeckai/icons/png128/currency-bitcoin.png similarity index 100% rename from icons/png128/currency-bitcoin.png rename to src/slidedeckai/icons/png128/currency-bitcoin.png diff --git a/icons/png128/currency-dollar.png b/src/slidedeckai/icons/png128/currency-dollar.png similarity index 100% rename from icons/png128/currency-dollar.png rename to src/slidedeckai/icons/png128/currency-dollar.png diff --git a/icons/png128/currency-euro.png b/src/slidedeckai/icons/png128/currency-euro.png similarity index 100% rename from icons/png128/currency-euro.png rename to src/slidedeckai/icons/png128/currency-euro.png diff --git a/icons/png128/currency-exchange.png b/src/slidedeckai/icons/png128/currency-exchange.png similarity index 100% rename from icons/png128/currency-exchange.png rename to src/slidedeckai/icons/png128/currency-exchange.png diff --git a/icons/png128/currency-pound.png b/src/slidedeckai/icons/png128/currency-pound.png similarity index 100% rename from icons/png128/currency-pound.png rename to src/slidedeckai/icons/png128/currency-pound.png diff --git a/icons/png128/currency-rupee.png b/src/slidedeckai/icons/png128/currency-rupee.png similarity index 100% rename from icons/png128/currency-rupee.png rename to src/slidedeckai/icons/png128/currency-rupee.png diff --git a/icons/png128/currency-yen.png b/src/slidedeckai/icons/png128/currency-yen.png similarity index 100% rename from icons/png128/currency-yen.png rename to src/slidedeckai/icons/png128/currency-yen.png diff --git a/icons/png128/dash-circle.png b/src/slidedeckai/icons/png128/dash-circle.png similarity index 100% rename from icons/png128/dash-circle.png rename to src/slidedeckai/icons/png128/dash-circle.png diff --git a/icons/png128/data-document.png b/src/slidedeckai/icons/png128/data-document.png similarity index 100% rename from icons/png128/data-document.png rename to src/slidedeckai/icons/png128/data-document.png diff --git a/icons/png128/database.png b/src/slidedeckai/icons/png128/database.png similarity index 100% rename from icons/png128/database.png rename to src/slidedeckai/icons/png128/database.png diff --git a/icons/png128/deep-learning.png b/src/slidedeckai/icons/png128/deep-learning.png similarity index 100% rename from icons/png128/deep-learning.png rename to src/slidedeckai/icons/png128/deep-learning.png diff --git a/icons/png128/delhi-humayun-tomb.png b/src/slidedeckai/icons/png128/delhi-humayun-tomb.png similarity index 100% rename from icons/png128/delhi-humayun-tomb.png rename to src/slidedeckai/icons/png128/delhi-humayun-tomb.png diff --git a/icons/png128/delhi-jama-masjid.png b/src/slidedeckai/icons/png128/delhi-jama-masjid.png similarity index 100% rename from icons/png128/delhi-jama-masjid.png rename to src/slidedeckai/icons/png128/delhi-jama-masjid.png diff --git a/icons/png128/delhi-jantar-mantar.png b/src/slidedeckai/icons/png128/delhi-jantar-mantar.png similarity index 100% rename from icons/png128/delhi-jantar-mantar.png rename to src/slidedeckai/icons/png128/delhi-jantar-mantar.png diff --git a/icons/png128/delhi-lotus-temple.png b/src/slidedeckai/icons/png128/delhi-lotus-temple.png similarity index 100% rename from icons/png128/delhi-lotus-temple.png rename to src/slidedeckai/icons/png128/delhi-lotus-temple.png diff --git a/icons/png128/delhi-red-fort.png b/src/slidedeckai/icons/png128/delhi-red-fort.png similarity index 100% rename from icons/png128/delhi-red-fort.png rename to src/slidedeckai/icons/png128/delhi-red-fort.png diff --git a/icons/png128/device-ssd.png b/src/slidedeckai/icons/png128/device-ssd.png similarity index 100% rename from icons/png128/device-ssd.png rename to src/slidedeckai/icons/png128/device-ssd.png diff --git a/icons/png128/display.png b/src/slidedeckai/icons/png128/display.png similarity index 100% rename from icons/png128/display.png rename to src/slidedeckai/icons/png128/display.png diff --git a/icons/png128/dna.png b/src/slidedeckai/icons/png128/dna.png similarity index 100% rename from icons/png128/dna.png rename to src/slidedeckai/icons/png128/dna.png diff --git a/icons/png128/doctor-patient.png b/src/slidedeckai/icons/png128/doctor-patient.png similarity index 100% rename from icons/png128/doctor-patient.png rename to src/slidedeckai/icons/png128/doctor-patient.png diff --git a/icons/png128/donut.png b/src/slidedeckai/icons/png128/donut.png similarity index 100% rename from icons/png128/donut.png rename to src/slidedeckai/icons/png128/donut.png diff --git a/icons/png128/drone.png b/src/slidedeckai/icons/png128/drone.png similarity index 100% rename from icons/png128/drone.png rename to src/slidedeckai/icons/png128/drone.png diff --git a/icons/png128/dublin-castle.png b/src/slidedeckai/icons/png128/dublin-castle.png similarity index 100% rename from icons/png128/dublin-castle.png rename to src/slidedeckai/icons/png128/dublin-castle.png diff --git a/icons/png128/ecuador-quito.png b/src/slidedeckai/icons/png128/ecuador-quito.png similarity index 100% rename from icons/png128/ecuador-quito.png rename to src/slidedeckai/icons/png128/ecuador-quito.png diff --git a/icons/png128/eiffel-tower-travel.png b/src/slidedeckai/icons/png128/eiffel-tower-travel.png similarity index 100% rename from icons/png128/eiffel-tower-travel.png rename to src/slidedeckai/icons/png128/eiffel-tower-travel.png diff --git a/icons/png128/envelope.png b/src/slidedeckai/icons/png128/envelope.png similarity index 100% rename from icons/png128/envelope.png rename to src/slidedeckai/icons/png128/envelope.png diff --git a/icons/png128/escalator-up.png b/src/slidedeckai/icons/png128/escalator-up.png similarity index 100% rename from icons/png128/escalator-up.png rename to src/slidedeckai/icons/png128/escalator-up.png diff --git a/icons/png128/ev-station.png b/src/slidedeckai/icons/png128/ev-station.png similarity index 100% rename from icons/png128/ev-station.png rename to src/slidedeckai/icons/png128/ev-station.png diff --git a/icons/png128/exclamation-triangle.png b/src/slidedeckai/icons/png128/exclamation-triangle.png similarity index 100% rename from icons/png128/exclamation-triangle.png rename to src/slidedeckai/icons/png128/exclamation-triangle.png diff --git a/icons/png128/eye.png b/src/slidedeckai/icons/png128/eye.png similarity index 100% rename from icons/png128/eye.png rename to src/slidedeckai/icons/png128/eye.png diff --git a/icons/png128/facebook.png b/src/slidedeckai/icons/png128/facebook.png similarity index 100% rename from icons/png128/facebook.png rename to src/slidedeckai/icons/png128/facebook.png diff --git a/icons/png128/fairness.png b/src/slidedeckai/icons/png128/fairness.png similarity index 100% rename from icons/png128/fairness.png rename to src/slidedeckai/icons/png128/fairness.png diff --git a/icons/png128/farmer.png b/src/slidedeckai/icons/png128/farmer.png similarity index 100% rename from icons/png128/farmer.png rename to src/slidedeckai/icons/png128/farmer.png diff --git a/icons/png128/feather.png b/src/slidedeckai/icons/png128/feather.png similarity index 100% rename from icons/png128/feather.png rename to src/slidedeckai/icons/png128/feather.png diff --git a/icons/png128/finance-strategy.png b/src/slidedeckai/icons/png128/finance-strategy.png similarity index 100% rename from icons/png128/finance-strategy.png rename to src/slidedeckai/icons/png128/finance-strategy.png diff --git a/icons/png128/fingerprint.png b/src/slidedeckai/icons/png128/fingerprint.png similarity index 100% rename from icons/png128/fingerprint.png rename to src/slidedeckai/icons/png128/fingerprint.png diff --git a/icons/png128/fire.png b/src/slidedeckai/icons/png128/fire.png similarity index 100% rename from icons/png128/fire.png rename to src/slidedeckai/icons/png128/fire.png diff --git a/icons/png128/flag.png b/src/slidedeckai/icons/png128/flag.png similarity index 100% rename from icons/png128/flag.png rename to src/slidedeckai/icons/png128/flag.png diff --git a/icons/png128/flask.png b/src/slidedeckai/icons/png128/flask.png similarity index 100% rename from icons/png128/flask.png rename to src/slidedeckai/icons/png128/flask.png diff --git a/icons/png128/floppy.png b/src/slidedeckai/icons/png128/floppy.png similarity index 100% rename from icons/png128/floppy.png rename to src/slidedeckai/icons/png128/floppy.png diff --git a/icons/png128/flower.png b/src/slidedeckai/icons/png128/flower.png similarity index 100% rename from icons/png128/flower.png rename to src/slidedeckai/icons/png128/flower.png diff --git a/icons/png128/folder.png b/src/slidedeckai/icons/png128/folder.png similarity index 100% rename from icons/png128/folder.png rename to src/slidedeckai/icons/png128/folder.png diff --git a/icons/png128/french.png b/src/slidedeckai/icons/png128/french.png similarity index 100% rename from icons/png128/french.png rename to src/slidedeckai/icons/png128/french.png diff --git a/icons/png128/fried.png b/src/slidedeckai/icons/png128/fried.png similarity index 100% rename from icons/png128/fried.png rename to src/slidedeckai/icons/png128/fried.png diff --git a/icons/png128/funnel.png b/src/slidedeckai/icons/png128/funnel.png similarity index 100% rename from icons/png128/funnel.png rename to src/slidedeckai/icons/png128/funnel.png diff --git a/icons/png128/game-controller.png b/src/slidedeckai/icons/png128/game-controller.png similarity index 100% rename from icons/png128/game-controller.png rename to src/slidedeckai/icons/png128/game-controller.png diff --git a/icons/png128/gate-of-india-mumbai.png b/src/slidedeckai/icons/png128/gate-of-india-mumbai.png similarity index 100% rename from icons/png128/gate-of-india-mumbai.png rename to src/slidedeckai/icons/png128/gate-of-india-mumbai.png diff --git a/icons/png128/gear-wide.png b/src/slidedeckai/icons/png128/gear-wide.png similarity index 100% rename from icons/png128/gear-wide.png rename to src/slidedeckai/icons/png128/gear-wide.png diff --git a/icons/png128/gem.png b/src/slidedeckai/icons/png128/gem.png similarity index 100% rename from icons/png128/gem.png rename to src/slidedeckai/icons/png128/gem.png diff --git a/icons/png128/geo-alt.png b/src/slidedeckai/icons/png128/geo-alt.png similarity index 100% rename from icons/png128/geo-alt.png rename to src/slidedeckai/icons/png128/geo-alt.png diff --git a/icons/png128/github.png b/src/slidedeckai/icons/png128/github.png similarity index 100% rename from icons/png128/github.png rename to src/slidedeckai/icons/png128/github.png diff --git a/icons/png128/glasses.png b/src/slidedeckai/icons/png128/glasses.png similarity index 100% rename from icons/png128/glasses.png rename to src/slidedeckai/icons/png128/glasses.png diff --git a/icons/png128/globe.png b/src/slidedeckai/icons/png128/globe.png similarity index 100% rename from icons/png128/globe.png rename to src/slidedeckai/icons/png128/globe.png diff --git a/icons/png128/gloves.png b/src/slidedeckai/icons/png128/gloves.png similarity index 100% rename from icons/png128/gloves.png rename to src/slidedeckai/icons/png128/gloves.png diff --git a/icons/png128/google.png b/src/slidedeckai/icons/png128/google.png similarity index 100% rename from icons/png128/google.png rename to src/slidedeckai/icons/png128/google.png diff --git a/icons/png128/graph-down-arrow.png b/src/slidedeckai/icons/png128/graph-down-arrow.png similarity index 100% rename from icons/png128/graph-down-arrow.png rename to src/slidedeckai/icons/png128/graph-down-arrow.png diff --git a/icons/png128/graph-up-arrow.png b/src/slidedeckai/icons/png128/graph-up-arrow.png similarity index 100% rename from icons/png128/graph-up-arrow.png rename to src/slidedeckai/icons/png128/graph-up-arrow.png diff --git a/icons/png128/graphene-carbon.png b/src/slidedeckai/icons/png128/graphene-carbon.png similarity index 100% rename from icons/png128/graphene-carbon.png rename to src/slidedeckai/icons/png128/graphene-carbon.png diff --git a/icons/png128/great-buddha-of-thailand-thailand.png b/src/slidedeckai/icons/png128/great-buddha-of-thailand-thailand.png similarity index 100% rename from icons/png128/great-buddha-of-thailand-thailand.png rename to src/slidedeckai/icons/png128/great-buddha-of-thailand-thailand.png diff --git a/icons/png128/great-wall-of-china.png b/src/slidedeckai/icons/png128/great-wall-of-china.png similarity index 100% rename from icons/png128/great-wall-of-china.png rename to src/slidedeckai/icons/png128/great-wall-of-china.png diff --git a/icons/png128/grid-3x3-gap.png b/src/slidedeckai/icons/png128/grid-3x3-gap.png similarity index 100% rename from icons/png128/grid-3x3-gap.png rename to src/slidedeckai/icons/png128/grid-3x3-gap.png diff --git a/icons/png128/hammer.png b/src/slidedeckai/icons/png128/hammer.png similarity index 100% rename from icons/png128/hammer.png rename to src/slidedeckai/icons/png128/hammer.png diff --git a/icons/png128/handbag.png b/src/slidedeckai/icons/png128/handbag.png similarity index 100% rename from icons/png128/handbag.png rename to src/slidedeckai/icons/png128/handbag.png diff --git a/icons/png128/handshake.png b/src/slidedeckai/icons/png128/handshake.png similarity index 100% rename from icons/png128/handshake.png rename to src/slidedeckai/icons/png128/handshake.png diff --git a/icons/png128/hassan-mosque-morocco.png b/src/slidedeckai/icons/png128/hassan-mosque-morocco.png similarity index 100% rename from icons/png128/hassan-mosque-morocco.png rename to src/slidedeckai/icons/png128/hassan-mosque-morocco.png diff --git a/icons/png128/headset.png b/src/slidedeckai/icons/png128/headset.png similarity index 100% rename from icons/png128/headset.png rename to src/slidedeckai/icons/png128/headset.png diff --git a/icons/png128/heart.png b/src/slidedeckai/icons/png128/heart.png similarity index 100% rename from icons/png128/heart.png rename to src/slidedeckai/icons/png128/heart.png diff --git a/icons/png128/heartbreak.png b/src/slidedeckai/icons/png128/heartbreak.png similarity index 100% rename from icons/png128/heartbreak.png rename to src/slidedeckai/icons/png128/heartbreak.png diff --git a/icons/png128/hong-kong.png b/src/slidedeckai/icons/png128/hong-kong.png similarity index 100% rename from icons/png128/hong-kong.png rename to src/slidedeckai/icons/png128/hong-kong.png diff --git a/icons/png128/hospital.png b/src/slidedeckai/icons/png128/hospital.png similarity index 100% rename from icons/png128/hospital.png rename to src/slidedeckai/icons/png128/hospital.png diff --git a/icons/png128/hotdog.png b/src/slidedeckai/icons/png128/hotdog.png similarity index 100% rename from icons/png128/hotdog.png rename to src/slidedeckai/icons/png128/hotdog.png diff --git a/icons/png128/hourglass-split.png b/src/slidedeckai/icons/png128/hourglass-split.png similarity index 100% rename from icons/png128/hourglass-split.png rename to src/slidedeckai/icons/png128/hourglass-split.png diff --git a/icons/png128/house.png b/src/slidedeckai/icons/png128/house.png similarity index 100% rename from icons/png128/house.png rename to src/slidedeckai/icons/png128/house.png diff --git a/icons/png128/html.png b/src/slidedeckai/icons/png128/html.png similarity index 100% rename from icons/png128/html.png rename to src/slidedeckai/icons/png128/html.png diff --git a/icons/png128/ice-cream.png b/src/slidedeckai/icons/png128/ice-cream.png similarity index 100% rename from icons/png128/ice-cream.png rename to src/slidedeckai/icons/png128/ice-cream.png diff --git a/icons/png128/image.png b/src/slidedeckai/icons/png128/image.png similarity index 100% rename from icons/png128/image.png rename to src/slidedeckai/icons/png128/image.png diff --git a/icons/png128/india-ganges.png b/src/slidedeckai/icons/png128/india-ganges.png similarity index 100% rename from icons/png128/india-ganges.png rename to src/slidedeckai/icons/png128/india-ganges.png diff --git a/icons/png128/jaipur-hawa-mahal.png b/src/slidedeckai/icons/png128/jaipur-hawa-mahal.png similarity index 100% rename from icons/png128/jaipur-hawa-mahal.png rename to src/slidedeckai/icons/png128/jaipur-hawa-mahal.png diff --git a/icons/png128/jelly-jar.png b/src/slidedeckai/icons/png128/jelly-jar.png similarity index 100% rename from icons/png128/jelly-jar.png rename to src/slidedeckai/icons/png128/jelly-jar.png diff --git a/icons/png128/journal-text.png b/src/slidedeckai/icons/png128/journal-text.png similarity index 100% rename from icons/png128/journal-text.png rename to src/slidedeckai/icons/png128/journal-text.png diff --git a/icons/png128/kebab.png b/src/slidedeckai/icons/png128/kebab.png similarity index 100% rename from icons/png128/kebab.png rename to src/slidedeckai/icons/png128/kebab.png diff --git a/icons/png128/key.png b/src/slidedeckai/icons/png128/key.png similarity index 100% rename from icons/png128/key.png rename to src/slidedeckai/icons/png128/key.png diff --git a/icons/png128/knowledge-graph.png b/src/slidedeckai/icons/png128/knowledge-graph.png similarity index 100% rename from icons/png128/knowledge-graph.png rename to src/slidedeckai/icons/png128/knowledge-graph.png diff --git a/icons/png128/kuala-lumpur.png b/src/slidedeckai/icons/png128/kuala-lumpur.png similarity index 100% rename from icons/png128/kuala-lumpur.png rename to src/slidedeckai/icons/png128/kuala-lumpur.png diff --git a/icons/png128/laptop.png b/src/slidedeckai/icons/png128/laptop.png similarity index 100% rename from icons/png128/laptop.png rename to src/slidedeckai/icons/png128/laptop.png diff --git a/icons/png128/leaning-tower-of-pisa.png b/src/slidedeckai/icons/png128/leaning-tower-of-pisa.png similarity index 100% rename from icons/png128/leaning-tower-of-pisa.png rename to src/slidedeckai/icons/png128/leaning-tower-of-pisa.png diff --git a/icons/png128/lightbulb.png b/src/slidedeckai/icons/png128/lightbulb.png similarity index 100% rename from icons/png128/lightbulb.png rename to src/slidedeckai/icons/png128/lightbulb.png diff --git a/icons/png128/lightning.png b/src/slidedeckai/icons/png128/lightning.png similarity index 100% rename from icons/png128/lightning.png rename to src/slidedeckai/icons/png128/lightning.png diff --git a/icons/png128/linkedin.png b/src/slidedeckai/icons/png128/linkedin.png similarity index 100% rename from icons/png128/linkedin.png rename to src/slidedeckai/icons/png128/linkedin.png diff --git a/icons/png128/lock.png b/src/slidedeckai/icons/png128/lock.png similarity index 100% rename from icons/png128/lock.png rename to src/slidedeckai/icons/png128/lock.png diff --git a/icons/png128/london-big-ben.png b/src/slidedeckai/icons/png128/london-big-ben.png similarity index 100% rename from icons/png128/london-big-ben.png rename to src/slidedeckai/icons/png128/london-big-ben.png diff --git a/icons/png128/machine-learning.png b/src/slidedeckai/icons/png128/machine-learning.png similarity index 100% rename from icons/png128/machine-learning.png rename to src/slidedeckai/icons/png128/machine-learning.png diff --git a/icons/png128/madrid-cathedral.png b/src/slidedeckai/icons/png128/madrid-cathedral.png similarity index 100% rename from icons/png128/madrid-cathedral.png rename to src/slidedeckai/icons/png128/madrid-cathedral.png diff --git a/icons/png128/magic.png b/src/slidedeckai/icons/png128/magic.png similarity index 100% rename from icons/png128/magic.png rename to src/slidedeckai/icons/png128/magic.png diff --git a/icons/png128/magnet.png b/src/slidedeckai/icons/png128/magnet.png similarity index 100% rename from icons/png128/magnet.png rename to src/slidedeckai/icons/png128/magnet.png diff --git a/icons/png128/map.png b/src/slidedeckai/icons/png128/map.png similarity index 100% rename from icons/png128/map.png rename to src/slidedeckai/icons/png128/map.png diff --git a/icons/png128/megaphone-loudspeaker.png b/src/slidedeckai/icons/png128/megaphone-loudspeaker.png similarity index 100% rename from icons/png128/megaphone-loudspeaker.png rename to src/slidedeckai/icons/png128/megaphone-loudspeaker.png diff --git a/icons/png128/meta.png b/src/slidedeckai/icons/png128/meta.png similarity index 100% rename from icons/png128/meta.png rename to src/slidedeckai/icons/png128/meta.png diff --git a/icons/png128/mexico-city-angel-of-independence.png b/src/slidedeckai/icons/png128/mexico-city-angel-of-independence.png similarity index 100% rename from icons/png128/mexico-city-angel-of-independence.png rename to src/slidedeckai/icons/png128/mexico-city-angel-of-independence.png diff --git a/icons/png128/microphone.png b/src/slidedeckai/icons/png128/microphone.png similarity index 100% rename from icons/png128/microphone.png rename to src/slidedeckai/icons/png128/microphone.png diff --git a/icons/png128/microscope.png b/src/slidedeckai/icons/png128/microscope.png similarity index 100% rename from icons/png128/microscope.png rename to src/slidedeckai/icons/png128/microscope.png diff --git a/icons/png128/microsoft.png b/src/slidedeckai/icons/png128/microsoft.png similarity index 100% rename from icons/png128/microsoft.png rename to src/slidedeckai/icons/png128/microsoft.png diff --git a/icons/png128/milan-duomo-di-milano.png b/src/slidedeckai/icons/png128/milan-duomo-di-milano.png similarity index 100% rename from icons/png128/milan-duomo-di-milano.png rename to src/slidedeckai/icons/png128/milan-duomo-di-milano.png diff --git a/icons/png128/milan-skyscrapers.png b/src/slidedeckai/icons/png128/milan-skyscrapers.png similarity index 100% rename from icons/png128/milan-skyscrapers.png rename to src/slidedeckai/icons/png128/milan-skyscrapers.png diff --git a/icons/png128/mobile-smartphone.png b/src/slidedeckai/icons/png128/mobile-smartphone.png similarity index 100% rename from icons/png128/mobile-smartphone.png rename to src/slidedeckai/icons/png128/mobile-smartphone.png diff --git a/icons/png128/modem.png b/src/slidedeckai/icons/png128/modem.png similarity index 100% rename from icons/png128/modem.png rename to src/slidedeckai/icons/png128/modem.png diff --git a/icons/png128/moon-stars.png b/src/slidedeckai/icons/png128/moon-stars.png similarity index 100% rename from icons/png128/moon-stars.png rename to src/slidedeckai/icons/png128/moon-stars.png diff --git a/icons/png128/moon.png b/src/slidedeckai/icons/png128/moon.png similarity index 100% rename from icons/png128/moon.png rename to src/slidedeckai/icons/png128/moon.png diff --git a/icons/png128/morse-code.png b/src/slidedeckai/icons/png128/morse-code.png similarity index 100% rename from icons/png128/morse-code.png rename to src/slidedeckai/icons/png128/morse-code.png diff --git a/icons/png128/mortarboard.png b/src/slidedeckai/icons/png128/mortarboard.png similarity index 100% rename from icons/png128/mortarboard.png rename to src/slidedeckai/icons/png128/mortarboard.png diff --git a/icons/png128/moscow.png b/src/slidedeckai/icons/png128/moscow.png similarity index 100% rename from icons/png128/moscow.png rename to src/slidedeckai/icons/png128/moscow.png diff --git a/icons/png128/motherboard.png b/src/slidedeckai/icons/png128/motherboard.png similarity index 100% rename from icons/png128/motherboard.png rename to src/slidedeckai/icons/png128/motherboard.png diff --git a/icons/png128/munich.png b/src/slidedeckai/icons/png128/munich.png similarity index 100% rename from icons/png128/munich.png rename to src/slidedeckai/icons/png128/munich.png diff --git a/icons/png128/music-note.png b/src/slidedeckai/icons/png128/music-note.png similarity index 100% rename from icons/png128/music-note.png rename to src/slidedeckai/icons/png128/music-note.png diff --git a/icons/png128/newspaper.png b/src/slidedeckai/icons/png128/newspaper.png similarity index 100% rename from icons/png128/newspaper.png rename to src/slidedeckai/icons/png128/newspaper.png diff --git a/icons/png128/no-smoking.png b/src/slidedeckai/icons/png128/no-smoking.png similarity index 100% rename from icons/png128/no-smoking.png rename to src/slidedeckai/icons/png128/no-smoking.png diff --git a/icons/png128/noodle.png b/src/slidedeckai/icons/png128/noodle.png similarity index 100% rename from icons/png128/noodle.png rename to src/slidedeckai/icons/png128/noodle.png diff --git a/icons/png128/nyc-brooklyn.png b/src/slidedeckai/icons/png128/nyc-brooklyn.png similarity index 100% rename from icons/png128/nyc-brooklyn.png rename to src/slidedeckai/icons/png128/nyc-brooklyn.png diff --git a/icons/png128/nyc-statue-of-liberty.png b/src/slidedeckai/icons/png128/nyc-statue-of-liberty.png similarity index 100% rename from icons/png128/nyc-statue-of-liberty.png rename to src/slidedeckai/icons/png128/nyc-statue-of-liberty.png diff --git a/icons/png128/nyc-world-trade-center.png b/src/slidedeckai/icons/png128/nyc-world-trade-center.png similarity index 100% rename from icons/png128/nyc-world-trade-center.png rename to src/slidedeckai/icons/png128/nyc-world-trade-center.png diff --git a/icons/png128/oil-pump.png b/src/slidedeckai/icons/png128/oil-pump.png similarity index 100% rename from icons/png128/oil-pump.png rename to src/slidedeckai/icons/png128/oil-pump.png diff --git a/icons/png128/oil-rig.png b/src/slidedeckai/icons/png128/oil-rig.png similarity index 100% rename from icons/png128/oil-rig.png rename to src/slidedeckai/icons/png128/oil-rig.png diff --git a/icons/png128/okinawa.png b/src/slidedeckai/icons/png128/okinawa.png similarity index 100% rename from icons/png128/okinawa.png rename to src/slidedeckai/icons/png128/okinawa.png diff --git a/icons/png128/onigiri.png b/src/slidedeckai/icons/png128/onigiri.png similarity index 100% rename from icons/png128/onigiri.png rename to src/slidedeckai/icons/png128/onigiri.png diff --git a/icons/png128/palette.png b/src/slidedeckai/icons/png128/palette.png similarity index 100% rename from icons/png128/palette.png rename to src/slidedeckai/icons/png128/palette.png diff --git a/icons/png128/pancake.png b/src/slidedeckai/icons/png128/pancake.png similarity index 100% rename from icons/png128/pancake.png rename to src/slidedeckai/icons/png128/pancake.png diff --git a/icons/png128/paperclip.png b/src/slidedeckai/icons/png128/paperclip.png similarity index 100% rename from icons/png128/paperclip.png rename to src/slidedeckai/icons/png128/paperclip.png diff --git a/icons/png128/paris-louvre.png b/src/slidedeckai/icons/png128/paris-louvre.png similarity index 100% rename from icons/png128/paris-louvre.png rename to src/slidedeckai/icons/png128/paris-louvre.png diff --git a/icons/png128/paris-notre-dame.png b/src/slidedeckai/icons/png128/paris-notre-dame.png similarity index 100% rename from icons/png128/paris-notre-dame.png rename to src/slidedeckai/icons/png128/paris-notre-dame.png diff --git a/icons/png128/parliament.png b/src/slidedeckai/icons/png128/parliament.png similarity index 100% rename from icons/png128/parliament.png rename to src/slidedeckai/icons/png128/parliament.png diff --git a/icons/png128/pencil.png b/src/slidedeckai/icons/png128/pencil.png similarity index 100% rename from icons/png128/pencil.png rename to src/slidedeckai/icons/png128/pencil.png diff --git a/icons/png128/people.png b/src/slidedeckai/icons/png128/people.png similarity index 100% rename from icons/png128/people.png rename to src/slidedeckai/icons/png128/people.png diff --git a/icons/png128/person.png b/src/slidedeckai/icons/png128/person.png similarity index 100% rename from icons/png128/person.png rename to src/slidedeckai/icons/png128/person.png diff --git a/icons/png128/peru-machu-picchu.png b/src/slidedeckai/icons/png128/peru-machu-picchu.png similarity index 100% rename from icons/png128/peru-machu-picchu.png rename to src/slidedeckai/icons/png128/peru-machu-picchu.png diff --git a/icons/png128/phone-vibrate.png b/src/slidedeckai/icons/png128/phone-vibrate.png similarity index 100% rename from icons/png128/phone-vibrate.png rename to src/slidedeckai/icons/png128/phone-vibrate.png diff --git a/icons/png128/piggy-bank.png b/src/slidedeckai/icons/png128/piggy-bank.png similarity index 100% rename from icons/png128/piggy-bank.png rename to src/slidedeckai/icons/png128/piggy-bank.png diff --git a/icons/png128/pin-angle.png b/src/slidedeckai/icons/png128/pin-angle.png similarity index 100% rename from icons/png128/pin-angle.png rename to src/slidedeckai/icons/png128/pin-angle.png diff --git a/icons/png128/pizza.png b/src/slidedeckai/icons/png128/pizza.png similarity index 100% rename from icons/png128/pizza.png rename to src/slidedeckai/icons/png128/pizza.png diff --git a/icons/png128/police.png b/src/slidedeckai/icons/png128/police.png similarity index 100% rename from icons/png128/police.png rename to src/slidedeckai/icons/png128/police.png diff --git a/icons/png128/popcorn.png b/src/slidedeckai/icons/png128/popcorn.png similarity index 100% rename from icons/png128/popcorn.png rename to src/slidedeckai/icons/png128/popcorn.png diff --git a/icons/png128/porcelain-tower-of-nanjing.png b/src/slidedeckai/icons/png128/porcelain-tower-of-nanjing.png similarity index 100% rename from icons/png128/porcelain-tower-of-nanjing.png rename to src/slidedeckai/icons/png128/porcelain-tower-of-nanjing.png diff --git a/icons/png128/prague-charles-bridge-tower.png b/src/slidedeckai/icons/png128/prague-charles-bridge-tower.png similarity index 100% rename from icons/png128/prague-charles-bridge-tower.png rename to src/slidedeckai/icons/png128/prague-charles-bridge-tower.png diff --git a/icons/png128/prescription.png b/src/slidedeckai/icons/png128/prescription.png similarity index 100% rename from icons/png128/prescription.png rename to src/slidedeckai/icons/png128/prescription.png diff --git a/icons/png128/printer.png b/src/slidedeckai/icons/png128/printer.png similarity index 100% rename from icons/png128/printer.png rename to src/slidedeckai/icons/png128/printer.png diff --git a/icons/png128/pulse.png b/src/slidedeckai/icons/png128/pulse.png similarity index 100% rename from icons/png128/pulse.png rename to src/slidedeckai/icons/png128/pulse.png diff --git a/icons/png128/python.png b/src/slidedeckai/icons/png128/python.png similarity index 100% rename from icons/png128/python.png rename to src/slidedeckai/icons/png128/python.png diff --git a/icons/png128/question.png b/src/slidedeckai/icons/png128/question.png similarity index 100% rename from icons/png128/question.png rename to src/slidedeckai/icons/png128/question.png diff --git a/icons/png128/qutb-minar.png b/src/slidedeckai/icons/png128/qutb-minar.png similarity index 100% rename from icons/png128/qutb-minar.png rename to src/slidedeckai/icons/png128/qutb-minar.png diff --git a/icons/png128/radioactive.png b/src/slidedeckai/icons/png128/radioactive.png similarity index 100% rename from icons/png128/radioactive.png rename to src/slidedeckai/icons/png128/radioactive.png diff --git a/icons/png128/recycle.png b/src/slidedeckai/icons/png128/recycle.png similarity index 100% rename from icons/png128/recycle.png rename to src/slidedeckai/icons/png128/recycle.png diff --git a/icons/png128/refinery.png b/src/slidedeckai/icons/png128/refinery.png similarity index 100% rename from icons/png128/refinery.png rename to src/slidedeckai/icons/png128/refinery.png diff --git a/icons/png128/restaurant-spoon.png b/src/slidedeckai/icons/png128/restaurant-spoon.png similarity index 100% rename from icons/png128/restaurant-spoon.png rename to src/slidedeckai/icons/png128/restaurant-spoon.png diff --git a/icons/png128/robot-ai.png b/src/slidedeckai/icons/png128/robot-ai.png similarity index 100% rename from icons/png128/robot-ai.png rename to src/slidedeckai/icons/png128/robot-ai.png diff --git a/icons/png128/robotics.png b/src/slidedeckai/icons/png128/robotics.png similarity index 100% rename from icons/png128/robotics.png rename to src/slidedeckai/icons/png128/robotics.png diff --git a/icons/png128/rocket-takeoff.png b/src/slidedeckai/icons/png128/rocket-takeoff.png similarity index 100% rename from icons/png128/rocket-takeoff.png rename to src/slidedeckai/icons/png128/rocket-takeoff.png diff --git a/icons/png128/rome.png b/src/slidedeckai/icons/png128/rome.png similarity index 100% rename from icons/png128/rome.png rename to src/slidedeckai/icons/png128/rome.png diff --git a/icons/png128/router.png b/src/slidedeckai/icons/png128/router.png similarity index 100% rename from icons/png128/router.png rename to src/slidedeckai/icons/png128/router.png diff --git a/icons/png128/salad.png b/src/slidedeckai/icons/png128/salad.png similarity index 100% rename from icons/png128/salad.png rename to src/slidedeckai/icons/png128/salad.png diff --git a/icons/png128/san-francisco-fog.png b/src/slidedeckai/icons/png128/san-francisco-fog.png similarity index 100% rename from icons/png128/san-francisco-fog.png rename to src/slidedeckai/icons/png128/san-francisco-fog.png diff --git a/icons/png128/sandwich.png b/src/slidedeckai/icons/png128/sandwich.png similarity index 100% rename from icons/png128/sandwich.png rename to src/slidedeckai/icons/png128/sandwich.png diff --git a/icons/png128/sao-paulo.png b/src/slidedeckai/icons/png128/sao-paulo.png similarity index 100% rename from icons/png128/sao-paulo.png rename to src/slidedeckai/icons/png128/sao-paulo.png diff --git a/icons/png128/satellite.png b/src/slidedeckai/icons/png128/satellite.png similarity index 100% rename from icons/png128/satellite.png rename to src/slidedeckai/icons/png128/satellite.png diff --git a/icons/png128/scissors.png b/src/slidedeckai/icons/png128/scissors.png similarity index 100% rename from icons/png128/scissors.png rename to src/slidedeckai/icons/png128/scissors.png diff --git a/icons/png128/screwdriver.png b/src/slidedeckai/icons/png128/screwdriver.png similarity index 100% rename from icons/png128/screwdriver.png rename to src/slidedeckai/icons/png128/screwdriver.png diff --git a/icons/png128/search.png b/src/slidedeckai/icons/png128/search.png similarity index 100% rename from icons/png128/search.png rename to src/slidedeckai/icons/png128/search.png diff --git a/icons/png128/seattle.png b/src/slidedeckai/icons/png128/seattle.png similarity index 100% rename from icons/png128/seattle.png rename to src/slidedeckai/icons/png128/seattle.png diff --git a/icons/png128/shield-check.png b/src/slidedeckai/icons/png128/shield-check.png similarity index 100% rename from icons/png128/shield-check.png rename to src/slidedeckai/icons/png128/shield-check.png diff --git a/icons/png128/shuffle.png b/src/slidedeckai/icons/png128/shuffle.png similarity index 100% rename from icons/png128/shuffle.png rename to src/slidedeckai/icons/png128/shuffle.png diff --git a/icons/png128/singapore.png b/src/slidedeckai/icons/png128/singapore.png similarity index 100% rename from icons/png128/singapore.png rename to src/slidedeckai/icons/png128/singapore.png diff --git a/icons/png128/solar-panel.png b/src/slidedeckai/icons/png128/solar-panel.png similarity index 100% rename from icons/png128/solar-panel.png rename to src/slidedeckai/icons/png128/solar-panel.png diff --git a/icons/png128/soundwave.png b/src/slidedeckai/icons/png128/soundwave.png similarity index 100% rename from icons/png128/soundwave.png rename to src/slidedeckai/icons/png128/soundwave.png diff --git a/icons/png128/speedometer.png b/src/slidedeckai/icons/png128/speedometer.png similarity index 100% rename from icons/png128/speedometer.png rename to src/slidedeckai/icons/png128/speedometer.png diff --git a/icons/png128/sphinx-monuments.png b/src/slidedeckai/icons/png128/sphinx-monuments.png similarity index 100% rename from icons/png128/sphinx-monuments.png rename to src/slidedeckai/icons/png128/sphinx-monuments.png diff --git a/icons/png128/stars.png b/src/slidedeckai/icons/png128/stars.png similarity index 100% rename from icons/png128/stars.png rename to src/slidedeckai/icons/png128/stars.png diff --git a/icons/png128/stethoscope.png b/src/slidedeckai/icons/png128/stethoscope.png similarity index 100% rename from icons/png128/stethoscope.png rename to src/slidedeckai/icons/png128/stethoscope.png diff --git a/icons/png128/stockholm.png b/src/slidedeckai/icons/png128/stockholm.png similarity index 100% rename from icons/png128/stockholm.png rename to src/slidedeckai/icons/png128/stockholm.png diff --git a/icons/png128/strategy.png b/src/slidedeckai/icons/png128/strategy.png similarity index 100% rename from icons/png128/strategy.png rename to src/slidedeckai/icons/png128/strategy.png diff --git a/icons/png128/suitcase.png b/src/slidedeckai/icons/png128/suitcase.png similarity index 100% rename from icons/png128/suitcase.png rename to src/slidedeckai/icons/png128/suitcase.png diff --git a/icons/png128/sushi.png b/src/slidedeckai/icons/png128/sushi.png similarity index 100% rename from icons/png128/sushi.png rename to src/slidedeckai/icons/png128/sushi.png diff --git a/icons/png128/sydney-opera-house.png b/src/slidedeckai/icons/png128/sydney-opera-house.png similarity index 100% rename from icons/png128/sydney-opera-house.png rename to src/slidedeckai/icons/png128/sydney-opera-house.png diff --git a/icons/png128/table.png b/src/slidedeckai/icons/png128/table.png similarity index 100% rename from icons/png128/table.png rename to src/slidedeckai/icons/png128/table.png diff --git a/icons/png128/taj-mahal.png b/src/slidedeckai/icons/png128/taj-mahal.png similarity index 100% rename from icons/png128/taj-mahal.png rename to src/slidedeckai/icons/png128/taj-mahal.png diff --git a/icons/png128/tap-hands-and-gestures.png b/src/slidedeckai/icons/png128/tap-hands-and-gestures.png similarity index 100% rename from icons/png128/tap-hands-and-gestures.png rename to src/slidedeckai/icons/png128/tap-hands-and-gestures.png diff --git a/icons/png128/taxi-front.png b/src/slidedeckai/icons/png128/taxi-front.png similarity index 100% rename from icons/png128/taxi-front.png rename to src/slidedeckai/icons/png128/taxi-front.png diff --git a/icons/png128/tea-coffee-cup.png b/src/slidedeckai/icons/png128/tea-coffee-cup.png similarity index 100% rename from icons/png128/tea-coffee-cup.png rename to src/slidedeckai/icons/png128/tea-coffee-cup.png diff --git a/icons/png128/telemarketer-customer-service.png b/src/slidedeckai/icons/png128/telemarketer-customer-service.png similarity index 100% rename from icons/png128/telemarketer-customer-service.png rename to src/slidedeckai/icons/png128/telemarketer-customer-service.png diff --git a/icons/png128/telephone.png b/src/slidedeckai/icons/png128/telephone.png similarity index 100% rename from icons/png128/telephone.png rename to src/slidedeckai/icons/png128/telephone.png diff --git a/icons/png128/temple-of-heaven-in-beijing.png b/src/slidedeckai/icons/png128/temple-of-heaven-in-beijing.png similarity index 100% rename from icons/png128/temple-of-heaven-in-beijing.png rename to src/slidedeckai/icons/png128/temple-of-heaven-in-beijing.png diff --git a/icons/png128/teotihuacan-aztec.png b/src/slidedeckai/icons/png128/teotihuacan-aztec.png similarity index 100% rename from icons/png128/teotihuacan-aztec.png rename to src/slidedeckai/icons/png128/teotihuacan-aztec.png diff --git a/icons/png128/thermometer.png b/src/slidedeckai/icons/png128/thermometer.png similarity index 100% rename from icons/png128/thermometer.png rename to src/slidedeckai/icons/png128/thermometer.png diff --git a/icons/png128/tokyo-gates.png b/src/slidedeckai/icons/png128/tokyo-gates.png similarity index 100% rename from icons/png128/tokyo-gates.png rename to src/slidedeckai/icons/png128/tokyo-gates.png diff --git a/icons/png128/tokyo-temple.png b/src/slidedeckai/icons/png128/tokyo-temple.png similarity index 100% rename from icons/png128/tokyo-temple.png rename to src/slidedeckai/icons/png128/tokyo-temple.png diff --git a/icons/png128/tools.png b/src/slidedeckai/icons/png128/tools.png similarity index 100% rename from icons/png128/tools.png rename to src/slidedeckai/icons/png128/tools.png diff --git a/icons/png128/toronto.png b/src/slidedeckai/icons/png128/toronto.png similarity index 100% rename from icons/png128/toronto.png rename to src/slidedeckai/icons/png128/toronto.png diff --git a/icons/png128/translate.png b/src/slidedeckai/icons/png128/translate.png similarity index 100% rename from icons/png128/translate.png rename to src/slidedeckai/icons/png128/translate.png diff --git a/icons/png128/trash.png b/src/slidedeckai/icons/png128/trash.png similarity index 100% rename from icons/png128/trash.png rename to src/slidedeckai/icons/png128/trash.png diff --git a/icons/png128/trophy.png b/src/slidedeckai/icons/png128/trophy.png similarity index 100% rename from icons/png128/trophy.png rename to src/slidedeckai/icons/png128/trophy.png diff --git a/icons/png128/truck.png b/src/slidedeckai/icons/png128/truck.png similarity index 100% rename from icons/png128/truck.png rename to src/slidedeckai/icons/png128/truck.png diff --git a/icons/png128/txt.png b/src/slidedeckai/icons/png128/txt.png similarity index 100% rename from icons/png128/txt.png rename to src/slidedeckai/icons/png128/txt.png diff --git a/icons/png128/ubuntu.png b/src/slidedeckai/icons/png128/ubuntu.png similarity index 100% rename from icons/png128/ubuntu.png rename to src/slidedeckai/icons/png128/ubuntu.png diff --git a/icons/png128/umbrella.png b/src/slidedeckai/icons/png128/umbrella.png similarity index 100% rename from icons/png128/umbrella.png rename to src/slidedeckai/icons/png128/umbrella.png diff --git a/icons/png128/unlock.png b/src/slidedeckai/icons/png128/unlock.png similarity index 100% rename from icons/png128/unlock.png rename to src/slidedeckai/icons/png128/unlock.png diff --git a/icons/png128/value.png b/src/slidedeckai/icons/png128/value.png similarity index 100% rename from icons/png128/value.png rename to src/slidedeckai/icons/png128/value.png diff --git a/icons/png128/venezuela-national-pantheon-of-venezuela.png b/src/slidedeckai/icons/png128/venezuela-national-pantheon-of-venezuela.png similarity index 100% rename from icons/png128/venezuela-national-pantheon-of-venezuela.png rename to src/slidedeckai/icons/png128/venezuela-national-pantheon-of-venezuela.png diff --git a/icons/png128/virus.png b/src/slidedeckai/icons/png128/virus.png similarity index 100% rename from icons/png128/virus.png rename to src/slidedeckai/icons/png128/virus.png diff --git a/icons/png128/wallet.png b/src/slidedeckai/icons/png128/wallet.png similarity index 100% rename from icons/png128/wallet.png rename to src/slidedeckai/icons/png128/wallet.png diff --git a/icons/png128/warehouse.png b/src/slidedeckai/icons/png128/warehouse.png similarity index 100% rename from icons/png128/warehouse.png rename to src/slidedeckai/icons/png128/warehouse.png diff --git a/icons/png128/washington-dc-capitol.png b/src/slidedeckai/icons/png128/washington-dc-capitol.png similarity index 100% rename from icons/png128/washington-dc-capitol.png rename to src/slidedeckai/icons/png128/washington-dc-capitol.png diff --git a/icons/png128/washington-dc-monument.png b/src/slidedeckai/icons/png128/washington-dc-monument.png similarity index 100% rename from icons/png128/washington-dc-monument.png rename to src/slidedeckai/icons/png128/washington-dc-monument.png diff --git a/icons/png128/watch.png b/src/slidedeckai/icons/png128/watch.png similarity index 100% rename from icons/png128/watch.png rename to src/slidedeckai/icons/png128/watch.png diff --git a/icons/png128/webcam-video-chat.png b/src/slidedeckai/icons/png128/webcam-video-chat.png similarity index 100% rename from icons/png128/webcam-video-chat.png rename to src/slidedeckai/icons/png128/webcam-video-chat.png diff --git a/icons/png128/whatsapp.png b/src/slidedeckai/icons/png128/whatsapp.png similarity index 100% rename from icons/png128/whatsapp.png rename to src/slidedeckai/icons/png128/whatsapp.png diff --git a/icons/png128/wifi.png b/src/slidedeckai/icons/png128/wifi.png similarity index 100% rename from icons/png128/wifi.png rename to src/slidedeckai/icons/png128/wifi.png diff --git a/icons/png128/windmill.png b/src/slidedeckai/icons/png128/windmill.png similarity index 100% rename from icons/png128/windmill.png rename to src/slidedeckai/icons/png128/windmill.png diff --git a/icons/png128/wrecking-ball.png b/src/slidedeckai/icons/png128/wrecking-ball.png similarity index 100% rename from icons/png128/wrecking-ball.png rename to src/slidedeckai/icons/png128/wrecking-ball.png diff --git a/icons/png128/xml.png b/src/slidedeckai/icons/png128/xml.png similarity index 100% rename from icons/png128/xml.png rename to src/slidedeckai/icons/png128/xml.png diff --git a/icons/png128/yin-yang.png b/src/slidedeckai/icons/png128/yin-yang.png similarity index 100% rename from icons/png128/yin-yang.png rename to src/slidedeckai/icons/png128/yin-yang.png diff --git a/icons/png128/yml.png b/src/slidedeckai/icons/png128/yml.png similarity index 100% rename from icons/png128/yml.png rename to src/slidedeckai/icons/png128/yml.png diff --git a/icons/png128/youtube.png b/src/slidedeckai/icons/png128/youtube.png similarity index 100% rename from icons/png128/youtube.png rename to src/slidedeckai/icons/png128/youtube.png diff --git a/icons/svg_repo.txt b/src/slidedeckai/icons/svg_repo.txt similarity index 100% rename from icons/svg_repo.txt rename to src/slidedeckai/icons/svg_repo.txt diff --git a/pptx_templates/Blank.pptx b/src/slidedeckai/pptx_templates/Blank.pptx similarity index 100% rename from pptx_templates/Blank.pptx rename to src/slidedeckai/pptx_templates/Blank.pptx diff --git a/pptx_templates/Ion_Boardroom.pptx b/src/slidedeckai/pptx_templates/Ion_Boardroom.pptx similarity index 100% rename from pptx_templates/Ion_Boardroom.pptx rename to src/slidedeckai/pptx_templates/Ion_Boardroom.pptx diff --git a/pptx_templates/Minimalist_sales_pitch.pptx b/src/slidedeckai/pptx_templates/Minimalist_sales_pitch.pptx similarity index 100% rename from pptx_templates/Minimalist_sales_pitch.pptx rename to src/slidedeckai/pptx_templates/Minimalist_sales_pitch.pptx diff --git a/pptx_templates/Urban_monochrome.pptx b/src/slidedeckai/pptx_templates/Urban_monochrome.pptx similarity index 100% rename from pptx_templates/Urban_monochrome.pptx rename to src/slidedeckai/pptx_templates/Urban_monochrome.pptx diff --git a/prompts/initial_template_v4_two_cols_img.txt b/src/slidedeckai/prompts/initial_template_v4_two_cols_img.txt similarity index 100% rename from prompts/initial_template_v4_two_cols_img.txt rename to src/slidedeckai/prompts/initial_template_v4_two_cols_img.txt diff --git a/prompts/refinement_template_v4_two_cols_img.txt b/src/slidedeckai/prompts/refinement_template_v4_two_cols_img.txt similarity index 100% rename from prompts/refinement_template_v4_two_cols_img.txt rename to src/slidedeckai/prompts/refinement_template_v4_two_cols_img.txt diff --git a/strings.json b/src/slidedeckai/strings.json similarity index 100% rename from strings.json rename to src/slidedeckai/strings.json