mirror of
				https://github.com/ulbwazhine/MockupEngineer.git
				synced 2025-10-31 07:47:34 +03:00 
			
		
		
		
	2022.02.21.8
This commit is contained in:
		
							parent
							
								
									2944496e47
								
							
						
					
					
						commit
						a705ab5785
					
				|  | @ -1,3 +1,3 @@ | ||||||
| global-include *.md *.png *.ini *.txt | global-include *.md *.png *.ini *.txt *.py | ||||||
| global-exclude ./generated | global-exclude ./generated | ||||||
| exclude deploy.py readme-template.md .gitignore | exclude deploy.py readme-template.md .gitignore | ||||||
|  | @ -7,7 +7,10 @@ from PIL import Image | ||||||
| 
 | 
 | ||||||
| from MockupEngineer import templates | from MockupEngineer import templates | ||||||
| from MockupEngineer.templates import Device, ALL_TEMPLATES | from MockupEngineer.templates import Device, ALL_TEMPLATES | ||||||
| from MockupEngineer.utils import random_string | from MockupEngineer.utils import random_string, get_title | ||||||
|  | from MockupEngineer.utils.about import author | ||||||
|  | 
 | ||||||
|  | __author__ = author() | ||||||
| 
 | 
 | ||||||
| generated_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'generated') | generated_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'generated') | ||||||
| if not os.path.exists(generated_path): | if not os.path.exists(generated_path): | ||||||
|  | @ -35,9 +38,12 @@ class MockupEngineerInstance: | ||||||
|         dicted = dict() |         dicted = dict() | ||||||
|         for template in self.templates: |         for template in self.templates: | ||||||
|             if template.type in dicted.keys(): |             if template.type in dicted.keys(): | ||||||
|                 dicted[template.type].append(template) |                 dicted[template.type]["templates"].append(template) | ||||||
|             else: |             else: | ||||||
|                 dicted[template.type] = [template] |                 dicted[template.type] = { | ||||||
|  |                     "title": get_title(template.type), | ||||||
|  |                     "templates": [template] | ||||||
|  |                 } | ||||||
|         return dicted |         return dicted | ||||||
| 
 | 
 | ||||||
|     def generate(self, template_id: str, |     def generate(self, template_id: str, | ||||||
|  |  | ||||||
|  | @ -1,29 +1,82 @@ | ||||||
|  | import os | ||||||
| import webbrowser | import webbrowser | ||||||
| 
 | 
 | ||||||
| from MockupEngineer import MockupEngineerInstance | from MockupEngineer import MockupEngineerInstance, Device | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def main(): | def cls(): | ||||||
|     mockup = MockupEngineerInstance() |     os.system('cls' if os.name == 'nt' else 'clear') | ||||||
| 
 | 
 | ||||||
|     i = 0 | 
 | ||||||
|     for template in mockup.templates: | class Main: | ||||||
|         print('[{}] {} {} [{}] ({})'.format(i, template.manufacturer, template.name, template.resolution, template.year)) |     def __init__(self): | ||||||
|         i += 1 |         print('Loading modules...') | ||||||
|     template = mockup.templates[int(input('Choose device: '))] |         self.mockup = MockupEngineerInstance() | ||||||
|     print('- - - - - - - - - -') |         cls() | ||||||
|     i = 0 |         self.select_category() | ||||||
|     for color in template.colors: | 
 | ||||||
|         print('[{}] {}'.format(i, color.color)) |     def exit(self): | ||||||
|         i += 1 |         cls() | ||||||
|     color = template.colors[int(input('Choose color: '))].color |         exit() | ||||||
|     print('- - - - - - - - - -') | 
 | ||||||
|     screenshot = input('Enter path to screenshot: ') |     def input(self, placeholder: str, func, args=()): | ||||||
|     print('- - - - - - - - - -\nWorking...') |         cls() | ||||||
|     mockup = mockup.generate(template.id, screenshot, color, external_storage=True) |         return func(input(placeholder), *args) | ||||||
|     print('- - - - - - - - - -\nSuccess: {}'.format(mockup)) | 
 | ||||||
|     webbrowser.open(mockup, new=0, autoraise=True) |     def menu(self, **variants): | ||||||
|  |         variants = {a.replace('var', ''): b for a, b in variants.items()} | ||||||
|  |         for a, (b, _, _) in variants.items(): | ||||||
|  |             print('    [{}] {}'.format(a, b)) | ||||||
|  |         val = input('Enter value: ') | ||||||
|  |         if val not in variants: | ||||||
|  |             cls() | ||||||
|  |             print('Invalid value, try again:') | ||||||
|  |             return self.menu(**variants) | ||||||
|  |         else: | ||||||
|  |             variants[val][1](*variants[val][2]) | ||||||
|  | 
 | ||||||
|  |     def select_category(self): | ||||||
|  |         cls() | ||||||
|  |         print('Select device category:') | ||||||
|  |         self.menu(**{str(num + 1): (a['title'], self.select_template, (b,)) for num, (b, a) in | ||||||
|  |                      enumerate(self.mockup.get_templates().items())}, | ||||||
|  |                   var0=('Exit', self.exit, ())) | ||||||
|  | 
 | ||||||
|  |     def select_template(self, category: str): | ||||||
|  |         cls() | ||||||
|  |         print('Choose a device:') | ||||||
|  |         self.menu(**{str(num + 1): ( | ||||||
|  |             '{} {} ({}) [{}]'.format(a.manufacturer, a.name, a.resolution, a.year), self.select_color, (a.id,)) for | ||||||
|  |             num, a | ||||||
|  |             in enumerate(self.mockup.get_templates()[category]['templates'])}, | ||||||
|  |                   var0=('Back', self.select_category, ())) | ||||||
|  | 
 | ||||||
|  |     def select_color(self, template_id): | ||||||
|  |         cls() | ||||||
|  |         print('Choose color:') | ||||||
|  |         template = self.mockup.get_template(template_id) | ||||||
|  |         self.menu( | ||||||
|  |             **{str(num + 1): (a.color, self.enter_path, (a.color, template)) for num, a in enumerate(template.colors)}, | ||||||
|  |             var0=('Back', self.select_template, (template.type,))) | ||||||
|  | 
 | ||||||
|  |     def enter_path(self, color: str, template: Device): | ||||||
|  |         self.input('Enter the path to the screenshot: ', self.generate, (color, template)) | ||||||
|  | 
 | ||||||
|  |     def generate(self, path: str, color: str, template: Device): | ||||||
|  |         if not os.path.isfile(path): | ||||||
|  |             return self.input('File does not exist, try again: ', self.generate, (color, template)) | ||||||
|  |         if not (path.lower().endswith('.png') or path.lower().endswith('.jpg') or path.lower().endswith('.jpeg')): | ||||||
|  |             return self.input('MockupEngineer supports .png and .jpeg screenshots, try again: ', self.generate, | ||||||
|  |                               (color, template)) | ||||||
|  |         cls() | ||||||
|  |         print('Generating...') | ||||||
|  |         url = self.mockup.generate(screenshot_path=path, template_id=template.id, color=color, external_storage=True) | ||||||
|  |         cls() | ||||||
|  |         print('Success: {}'.format(url)) | ||||||
|  |         webbrowser.open(url) | ||||||
|  |         self.menu(var1=('Back', self.select_category, ()), | ||||||
|  |                   var0=('Exit', self.exit, ())) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|     main() |     Main() | ||||||
|  |  | ||||||
|  | @ -1,11 +1,14 @@ | ||||||
|  | import datetime | ||||||
| import hashlib | import hashlib | ||||||
| import os | import os | ||||||
| 
 | 
 | ||||||
| from configparser import ConfigParser | from configparser import ConfigParser, NoOptionError, NoSectionError | ||||||
| from dataclasses import dataclass | from dataclasses import dataclass | ||||||
| from pathlib import Path | from pathlib import Path | ||||||
| from typing import Optional | from typing import Optional | ||||||
| 
 | 
 | ||||||
|  | from MockupEngineer.utils.about import author, author_url | ||||||
|  | 
 | ||||||
| templates_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'templates') | templates_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'templates') | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -36,6 +39,13 @@ class DeviceImage: | ||||||
|     rotate: bool |     rotate: bool | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @dataclass(frozen=False) | ||||||
|  | class About: | ||||||
|  |     author: str | ||||||
|  |     url: str | ||||||
|  |     created: str | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| @dataclass(frozen=False) | @dataclass(frozen=False) | ||||||
| class Device: | class Device: | ||||||
|     def __init__(self, path: str): |     def __init__(self, path: str): | ||||||
|  | @ -66,8 +76,45 @@ class Device: | ||||||
|             mask_path=os.path.join(templates_path, path, 'mask.png') if config.get('image', 'mask') == 'true' else None, |             mask_path=os.path.join(templates_path, path, 'mask.png') if config.get('image', 'mask') == 'true' else None, | ||||||
|             rotate=config.get('image', 'rotate') == 'true') |             rotate=config.get('image', 'rotate') == 'true') | ||||||
| 
 | 
 | ||||||
|  |         self.__path__ = path | ||||||
|  | 
 | ||||||
|  |         self.about = About( | ||||||
|  |             author=self.__get_author__(config), | ||||||
|  |             url=self.__get_url__(config), | ||||||
|  |             created=self.__get_creation_date__(config) | ||||||
|  |         ) | ||||||
|  | 
 | ||||||
|     def __str__(self): |     def __str__(self): | ||||||
|         return '<MockupEngineer.templates.Device {} {} {}>'.format(self.manufacturer, self.name, self.year) |         return '<MockupEngineer.templates.Device {} {} {}>'.format(self.manufacturer, self.name, self.year) | ||||||
| 
 | 
 | ||||||
|     def __post_init__(self): |     def __post_init__(self): | ||||||
|         self.colors = sorted(self.colors, key=lambda a: a.color) |         self.colors = sorted(self.colors, key=lambda a: a.color) | ||||||
|  | 
 | ||||||
|  |     def __write_config__(self, config: ConfigParser) -> None: | ||||||
|  |         with open(os.path.join(templates_path, self.__path__, 'config.ini'), 'w', encoding='utf8') as f: | ||||||
|  |             config.write(f) | ||||||
|  | 
 | ||||||
|  |     def __get_author__(self, config: ConfigParser) -> str: | ||||||
|  |         try: | ||||||
|  |             return config.get('about', 'author') | ||||||
|  |         except (NoOptionError, NoSectionError): | ||||||
|  |             if 'about' not in config.sections(): | ||||||
|  |                 config.add_section('about') | ||||||
|  |             config['about']['author'] = author() | ||||||
|  |             self.__write_config__(config) | ||||||
|  | 
 | ||||||
|  |     def __get_url__(self, config: ConfigParser) -> str: | ||||||
|  |         try: | ||||||
|  |             return config.get('about', 'url') | ||||||
|  |         except (NoOptionError, NoSectionError): | ||||||
|  |             if 'about' not in config.sections(): | ||||||
|  |                 config.add_section('about') | ||||||
|  |             config['about']['url'] = author_url() | ||||||
|  |             self.__write_config__(config) | ||||||
|  | 
 | ||||||
|  |     def __get_creation_date__(self, config: ConfigParser) -> str: | ||||||
|  |         dates = [os.path.getmtime(str(os.path.join(templates_path, self.__path__, item))) for _, item in config['colors'].items()] | ||||||
|  |         date = datetime.datetime.utcfromtimestamp(max(dates)) if dates else datetime.datetime.utcnow() | ||||||
|  |         config['about']['created'] = date.strftime('%d.%m.%Y') | ||||||
|  |         self.__write_config__(config) | ||||||
|  |         return config.get('about', 'created') | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Samsung | manufacturer = Samsung | ||||||
| name = Galaxy S20 | name = Galaxy S20 | ||||||
|  | @ -20,3 +18,9 @@ x = 200 | ||||||
| y = 200 | y = 200 | ||||||
| mask = true | mask = true | ||||||
| rotate = true | rotate = true | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 31.01.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Samsung | manufacturer = Samsung | ||||||
| name = Galaxy S20 Ultra | name = Galaxy S20 Ultra | ||||||
|  | @ -19,3 +17,9 @@ x = 200 | ||||||
| y = 200 | y = 200 | ||||||
| mask = true | mask = true | ||||||
| rotate = true | rotate = true | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 31.01.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = iMac 21" | name = iMac 21" | ||||||
|  | @ -18,3 +16,9 @@ x = 173 | ||||||
| y = 178 | y = 178 | ||||||
| mask = false | mask = false | ||||||
| rotate = false | rotate = false | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 31.01.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = iMac 24" | name = iMac 24" | ||||||
|  | @ -24,3 +22,9 @@ x = 235 | ||||||
| y = 217 | y = 217 | ||||||
| mask = false | mask = false | ||||||
| rotate = false | rotate = false | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 03.02.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = iPad 9 | name = iPad 9 | ||||||
|  | @ -20,3 +18,9 @@ x = 150 | ||||||
| y = 275 | y = 275 | ||||||
| mask = false | mask = false | ||||||
| rotate = true | rotate = true | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 31.01.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = iPad Air 4 | name = iPad Air 4 | ||||||
|  | @ -22,3 +20,9 @@ x = 150 | ||||||
| y = 150 | y = 150 | ||||||
| mask = false | mask = false | ||||||
| rotate = true | rotate = true | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 31.01.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = iPad Mini 5 | name = iPad Mini 5 | ||||||
|  | @ -20,3 +18,9 @@ x = 150 | ||||||
| y = 330 | y = 330 | ||||||
| mask = false | mask = false | ||||||
| rotate = true | rotate = true | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 31.01.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = iPad Pro 4 11" | name = iPad Pro 4 11" | ||||||
|  | @ -19,3 +17,9 @@ x = 200 | ||||||
| y = 200 | y = 200 | ||||||
| mask = false | mask = false | ||||||
| rotate = true | rotate = true | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 31.01.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = iPad Pro 4 12.9" | name = iPad Pro 4 12.9" | ||||||
|  | @ -19,3 +17,9 @@ x = 200 | ||||||
| y = 200 | y = 200 | ||||||
| mask = false | mask = false | ||||||
| rotate = true | rotate = true | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 31.01.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = iPhone 12 | name = iPhone 12 | ||||||
|  | @ -22,3 +20,9 @@ x = 180 | ||||||
| y = 180 | y = 180 | ||||||
| mask = false | mask = false | ||||||
| rotate = true | rotate = true | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 31.01.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = iPhone 12 Mini | name = iPhone 12 Mini | ||||||
|  | @ -22,3 +20,9 @@ x = 160 | ||||||
| y = 160 | y = 160 | ||||||
| mask = false | mask = false | ||||||
| rotate = true | rotate = true | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 31.01.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = iPhone 12 Pro | name = iPhone 12 Pro | ||||||
|  | @ -21,3 +19,9 @@ x = 180 | ||||||
| y = 180 | y = 180 | ||||||
| mask = false | mask = false | ||||||
| rotate = true | rotate = true | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 31.01.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = iPhone 12 Pro Max | name = iPhone 12 Pro Max | ||||||
|  | @ -21,3 +19,9 @@ x = 200 | ||||||
| y = 200 | y = 200 | ||||||
| mask = false | mask = false | ||||||
| rotate = true | rotate = true | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 31.01.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = iPhone 13 | name = iPhone 13 | ||||||
|  | @ -22,3 +20,9 @@ x = 200 | ||||||
| y = 200 | y = 200 | ||||||
| mask = false | mask = false | ||||||
| rotate = true | rotate = true | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 19.02.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = iPhone 13 Mini | name = iPhone 13 Mini | ||||||
|  | @ -22,3 +20,9 @@ x = 200 | ||||||
| y = 200 | y = 200 | ||||||
| mask = false | mask = false | ||||||
| rotate = true | rotate = true | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 19.02.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = iPhone 13 Pro | name = iPhone 13 Pro | ||||||
|  | @ -21,3 +19,9 @@ x = 200 | ||||||
| y = 200 | y = 200 | ||||||
| mask = false | mask = false | ||||||
| rotate = true | rotate = true | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 19.02.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = iPhone 13 Pro Max | name = iPhone 13 Pro Max | ||||||
|  | @ -21,3 +19,9 @@ x = 201 | ||||||
| y = 202 | y = 202 | ||||||
| mask = true | mask = true | ||||||
| rotate = true | rotate = true | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 19.02.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = iPhone SE | name = iPhone SE | ||||||
|  | @ -20,3 +18,9 @@ x = 150 | ||||||
| y = 300 | y = 300 | ||||||
| mask = false | mask = false | ||||||
| rotate = true | rotate = true | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 31.01.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = iPhone Xr | name = iPhone Xr | ||||||
|  | @ -22,4 +20,10 @@ height = 1792 | ||||||
| x = 110 | x = 110 | ||||||
| y = 110 | y = 110 | ||||||
| mask = false | mask = false | ||||||
| rotate = true | rotate = true | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 01.02.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = iPhone Xs | name = iPhone Xs | ||||||
|  | @ -20,3 +18,9 @@ x = 162 | ||||||
| y = 142 | y = 142 | ||||||
| mask = false | mask = false | ||||||
| rotate = true | rotate = true | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 01.02.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = iPhone Xs Max | name = iPhone Xs Max | ||||||
|  | @ -20,3 +18,9 @@ x = 182 | ||||||
| y = 172 | y = 172 | ||||||
| mask = false | mask = false | ||||||
| rotate = true | rotate = true | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 01.02.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = MacBook 12" | name = MacBook 12" | ||||||
|  | @ -18,4 +16,10 @@ height = 894 | ||||||
| x = 286 | x = 286 | ||||||
| y = 180 | y = 180 | ||||||
| mask = false | mask = false | ||||||
| rotate = false | rotate = false | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 01.02.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = MacBook Air (M1) | name = MacBook Air (M1) | ||||||
|  | @ -18,3 +16,9 @@ x = 252 | ||||||
| y = 142 | y = 142 | ||||||
| mask = false | mask = false | ||||||
| rotate = false | rotate = false | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 03.02.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = MacBook Pro 13" | name = MacBook Pro 13" | ||||||
|  | @ -17,4 +15,10 @@ height = 890 | ||||||
| x = 388 | x = 388 | ||||||
| y = 176 | y = 176 | ||||||
| mask = false | mask = false | ||||||
| rotate = false | rotate = false | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 01.02.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = MacBook Pro 15" | name = MacBook Pro 15" | ||||||
|  | @ -17,4 +15,10 @@ height = 906 | ||||||
| x = 328 | x = 328 | ||||||
| y = 167 | y = 167 | ||||||
| mask = false | mask = false | ||||||
| rotate = false | rotate = false | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 01.02.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = MacBook Pro 16" | name = MacBook Pro 16" | ||||||
|  | @ -17,4 +15,10 @@ height = 1147 | ||||||
| x = 340 | x = 340 | ||||||
| y = 224 | y = 224 | ||||||
| mask = false | mask = false | ||||||
| rotate = false | rotate = false | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 01.02.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = MacBook Pro 16" | name = MacBook Pro 16" | ||||||
|  | @ -19,3 +17,9 @@ x = 406 | ||||||
| y = 123 | y = 123 | ||||||
| mask = false | mask = false | ||||||
| rotate = false | rotate = false | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 01.02.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Google | manufacturer = Google | ||||||
| name = Pixel | name = Pixel | ||||||
|  | @ -19,4 +17,10 @@ height = 1656 | ||||||
| x = 149 | x = 149 | ||||||
| y = 317 | y = 317 | ||||||
| mask = false | mask = false | ||||||
| rotate = true | rotate = true | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 01.02.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Google | manufacturer = Google | ||||||
| name = Pixel 4 | name = Pixel 4 | ||||||
|  | @ -19,4 +17,10 @@ height = 2280 | ||||||
| x = 100 | x = 100 | ||||||
| y = 200 | y = 200 | ||||||
| mask = false | mask = false | ||||||
| rotate = true | rotate = true | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 01.02.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Google | manufacturer = Google | ||||||
| name = Pixel 4 XL | name = Pixel 4 XL | ||||||
|  | @ -19,4 +17,10 @@ height = 3040 | ||||||
| x = 100 | x = 100 | ||||||
| y = 250 | y = 250 | ||||||
| mask = false | mask = false | ||||||
| rotate = true | rotate = true | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 01.02.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Google | manufacturer = Google | ||||||
| name = Pixel 5 | name = Pixel 5 | ||||||
|  | @ -18,4 +16,10 @@ height = 2340 | ||||||
| x = 200 | x = 200 | ||||||
| y = 200 | y = 200 | ||||||
| mask = false | mask = false | ||||||
| rotate = true | rotate = true | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 01.02.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Google | manufacturer = Google | ||||||
| name = Pixelbook Go | name = Pixelbook Go | ||||||
|  | @ -18,3 +16,9 @@ x = 236 | ||||||
| y = 185 | y = 185 | ||||||
| mask = false | mask = false | ||||||
| rotate = false | rotate = false | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 01.02.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = Pro Display XDR | name = Pro Display XDR | ||||||
|  | @ -18,3 +16,9 @@ x = 140 | ||||||
| y = 133 | y = 133 | ||||||
| mask = false | mask = false | ||||||
| rotate = false | rotate = false | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 01.02.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| # https://github.com/ulbwazhine/MockupEngineer |  | ||||||
| 
 |  | ||||||
| [info] | [info] | ||||||
| manufacturer = Apple | manufacturer = Apple | ||||||
| name = Watch Series 6 44mm | name = Watch Series 6 44mm | ||||||
|  | @ -26,4 +24,10 @@ height = 448 | ||||||
| x = 129 | x = 129 | ||||||
| y = 241 | y = 241 | ||||||
| mask = false | mask = false | ||||||
| rotate = true | rotate = true | ||||||
|  | 
 | ||||||
|  | [about] | ||||||
|  | author = ulbwa | ||||||
|  | url = https://ulbwa.xyz | ||||||
|  | created = 01.02.2022 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -3,6 +3,9 @@ import functools | ||||||
| import random | import random | ||||||
| import string | import string | ||||||
| 
 | 
 | ||||||
|  | specified_keys = {"pc": 'Computers', | ||||||
|  |                   'wear': 'Wearable devices'} | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| def run_sync(func, *args, **kwargs): | def run_sync(func, *args, **kwargs): | ||||||
|     return asyncio.get_event_loop() \ |     return asyncio.get_event_loop() \ | ||||||
|  | @ -14,3 +17,7 @@ def run_sync(func, *args, **kwargs): | ||||||
| 
 | 
 | ||||||
| def random_string(n: int): | def random_string(n: int): | ||||||
|     return ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(n)) |     return ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(n)) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def get_title(a: str): | ||||||
|  |     return '{}s'.format(a.title()) if a not in specified_keys.keys() else specified_keys[a] | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								MockupEngineer/utils/about.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								MockupEngineer/utils/about.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,10 @@ | ||||||
|  | import os | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def author() -> str: | ||||||
|  |     return 'ulbwa' | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def author_url() -> str: | ||||||
|  |     return 'https://ulbwa.xyz' | ||||||
|  | 
 | ||||||
|  | @ -43,9 +43,7 @@ def create_readme(): | ||||||
|     mockup = MockupEngineerInstance() |     mockup = MockupEngineerInstance() | ||||||
| 
 | 
 | ||||||
|     with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'readme-template.md'), 'r') as f: |     with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'readme-template.md'), 'r') as f: | ||||||
|         data = Template(f.read()).render(templates=mockup.get_templates(), os=os, |         data = Template(f.read()).render(templates=mockup.get_templates(), os=os, enumerate=enumerate) | ||||||
|                                          specified_keys={"pc": 'Computers', |  | ||||||
|                                                          'wear': 'Wearable devices'}) |  | ||||||
| 
 | 
 | ||||||
|     with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'readme.md'), 'w') as f: |     with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'readme.md'), 'w') as f: | ||||||
|         f.write(data) |         f.write(data) | ||||||
|  | @ -78,7 +76,7 @@ def run_pypi(): | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|     # create_readme() |     create_readme() | ||||||
|     # create_examples() |     # create_examples() | ||||||
|     # bump_version() |     bump_version() | ||||||
|     run_pypi() |     run_pypi() | ||||||
|  |  | ||||||
|  | @ -63,7 +63,7 @@ from MockupEngineer import MockupEngineerInstance | ||||||
| 
 | 
 | ||||||
| mockup = MockupEngineerInstance() | mockup = MockupEngineerInstance() | ||||||
| 
 | 
 | ||||||
| mockup.generate(template=mockup.templates[0], | mockup.generate(template_id=mockup.templates[0].id, | ||||||
|                 screenshot_path='/path/to/screenshot', |                 screenshot_path='/path/to/screenshot', | ||||||
|                 color=mockup.templates[0].colors[0].color) |                 color=mockup.templates[0].colors[0].color) | ||||||
| ``` | ``` | ||||||
|  | @ -73,7 +73,7 @@ mockup.generate(template=mockup.templates[0], | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| #### `MockupEngineerInstance.generate` parameters: | #### `MockupEngineerInstance.generate` parameters: | ||||||
|    * `template`: *Template* — Device template model, must be passed from *MockupEngineerInstance.templates* or *MockupEngineerInstance.get_templates()*. |    * `template_id`: *int* — Device template id, must be passed from *MockupEngineerInstance.templates* or *MockupEngineerInstance.get_templates()*. | ||||||
|    * `screenshot_path`: *str* — Absolute path to the image in **JPG, PNG format**. |    * `screenshot_path`: *str* — Absolute path to the image in **JPG, PNG format**. | ||||||
|    * `color`: *Optional[str]* — Optional parameter, force device color. Must be passed according to *Template.colors[**n**].color*. |    * `color`: *Optional[str]* — Optional parameter, force device color. Must be passed according to *Template.colors[**n**].color*. | ||||||
|    * `orientation`: *str* — Optional parameter, force device orientation. Must be *landscape* or *portrait*. |    * `orientation`: *str* — Optional parameter, force device orientation. Must be *landscape* or *portrait*. | ||||||
|  | @ -83,10 +83,13 @@ mockup.generate(template=mockup.templates[0], | ||||||
| 
 | 
 | ||||||
| Full list of all currently supported mockups | Full list of all currently supported mockups | ||||||
| {% for a, b in templates.items() %} | {% for a, b in templates.items() %} | ||||||
| ### {{'{}s'.format(a.title()) if a not in specified_keys.keys() else specified_keys[a]}} | ### {{b.title}} | ||||||
| {% for c in b %} | {% for c in b.templates %} | ||||||
| * [{{c.manufacturer}} {{c.name}}](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/{{os.path.basename(os.path.dirname(c.preview))}}/preview.png) ({{c.year}}) [{{c.resolution}}]  | * [{{c.manufacturer}} {{c.name}}](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/{{os.path.basename(os.path.dirname(c.preview))}}/preview.png) ({{c.year}}) [{{c.resolution}}]    | ||||||
| {% for d in c.colors %}  * *{{d.color}}* |   * Author: [@{{c.about.author}}]({{c.about.url}}) [{{c.about.created}}] | ||||||
|  |   * ID: `{{c.id}}` | ||||||
|  |   * Colors: | ||||||
|  | {% for d in c.colors %}  * * *{{d.color}}* | ||||||
| {% endfor %}{% endfor %}{% endfor %} | {% endfor %}{% endfor %}{% endfor %} | ||||||
| You can help the project by adding support for new mockups by contributing on [GitHub](https://github.com/ulbwazhine/MockupEngineer). | You can help the project by adding support for new mockups by contributing on [GitHub](https://github.com/ulbwazhine/MockupEngineer). | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										394
									
								
								readme.md
									
									
									
									
									
								
							
							
						
						
									
										394
									
								
								readme.md
									
									
									
									
									
								
							|  | @ -63,7 +63,7 @@ from MockupEngineer import MockupEngineerInstance | ||||||
| 
 | 
 | ||||||
| mockup = MockupEngineerInstance() | mockup = MockupEngineerInstance() | ||||||
| 
 | 
 | ||||||
| mockup.generate(template=mockup.templates[0], | mockup.generate(template_id=mockup.templates[0].id, | ||||||
|                 screenshot_path='/path/to/screenshot', |                 screenshot_path='/path/to/screenshot', | ||||||
|                 color=mockup.templates[0].colors[0].color) |                 color=mockup.templates[0].colors[0].color) | ||||||
| ``` | ``` | ||||||
|  | @ -73,7 +73,7 @@ mockup.generate(template=mockup.templates[0], | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| #### `MockupEngineerInstance.generate` parameters: | #### `MockupEngineerInstance.generate` parameters: | ||||||
|    * `template`: *Template* — Device template model, must be passed from *MockupEngineerInstance.templates* or *MockupEngineerInstance.get_templates()*. |    * `template_id`: *int* — Device template id, must be passed from *MockupEngineerInstance.templates* or *MockupEngineerInstance.get_templates()*. | ||||||
|    * `screenshot_path`: *str* — Absolute path to the image in **JPG, PNG format**. |    * `screenshot_path`: *str* — Absolute path to the image in **JPG, PNG format**. | ||||||
|    * `color`: *Optional[str]* — Optional parameter, force device color. Must be passed according to *Template.colors[**n**].color*. |    * `color`: *Optional[str]* — Optional parameter, force device color. Must be passed according to *Template.colors[**n**].color*. | ||||||
|    * `orientation`: *str* — Optional parameter, force device orientation. Must be *landscape* or *portrait*. |    * `orientation`: *str* — Optional parameter, force device orientation. Must be *landscape* or *portrait*. | ||||||
|  | @ -85,189 +85,291 @@ Full list of all currently supported mockups | ||||||
| 
 | 
 | ||||||
| ### Phones | ### Phones | ||||||
| 
 | 
 | ||||||
| * [Samsung Galaxy S20](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/galaxys20/preview.png) (2020) [1440 x 3200]  | * [Samsung Galaxy S20](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/galaxys20/preview.png) (2020) [1440 x 3200]    | ||||||
|   * *Cloud Blue* |   * Author: [@ulbwa](https://ulbwa.xyz) [31.01.2022] | ||||||
|   * *Cosmic Grey* |   * ID: `84b30848f1af25c9a3bff6583bbbe75a` | ||||||
|   * *Pink* |   * Colors: | ||||||
|  |   * * *Cloud Blue* | ||||||
|  |   * * *Cosmic Grey* | ||||||
|  |   * * *Pink* | ||||||
| 
 | 
 | ||||||
| * [Samsung Galaxy S20 Ultra](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/galaxys20ultra/preview.png) (2020) [1440 x 3200]  | * [Samsung Galaxy S20 Ultra](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/galaxys20ultra/preview.png) (2020) [1440 x 3200]    | ||||||
|   * *Cosmic Black* |   * Author: [@ulbwa](https://ulbwa.xyz) [31.01.2022] | ||||||
|   * *Cosmic Grey* |   * ID: `c4168e005483c3579bef74898a4b0384` | ||||||
|  |   * Colors: | ||||||
|  |   * * *Cosmic Black* | ||||||
|  |   * * *Cosmic Grey* | ||||||
| 
 | 
 | ||||||
| * [Apple iPhone 12](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/iphone12/preview.png) (2020) [1170 x 2532]  | * [Apple iPhone 12](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/iphone12/preview.png) (2020) [1170 x 2532]    | ||||||
|   * *Black* |   * Author: [@ulbwa](https://ulbwa.xyz) [31.01.2022] | ||||||
|   * *Blue* |   * ID: `1648990cfee89db1d6cb744c998e783a` | ||||||
|   * *Green* |   * Colors: | ||||||
|   * *Product Red* |   * * *Black* | ||||||
|   * *White* |   * * *Blue* | ||||||
|  |   * * *Green* | ||||||
|  |   * * *Product Red* | ||||||
|  |   * * *White* | ||||||
| 
 | 
 | ||||||
| * [Apple iPhone 12 Mini](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/iphone12mini/preview.png) (2020) [1080 x 2340]  | * [Apple iPhone 12 Mini](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/iphone12mini/preview.png) (2020) [1080 x 2340]    | ||||||
|   * *Black* |   * Author: [@ulbwa](https://ulbwa.xyz) [31.01.2022] | ||||||
|   * *Blue* |   * ID: `aea792f252c0ba0847741c0a4a6dd3ca` | ||||||
|   * *Green* |   * Colors: | ||||||
|   * *Product Red* |   * * *Black* | ||||||
|   * *White* |   * * *Blue* | ||||||
|  |   * * *Green* | ||||||
|  |   * * *Product Red* | ||||||
|  |   * * *White* | ||||||
| 
 | 
 | ||||||
| * [Apple iPhone 12 Pro](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/iphone12pro/preview.png) (2020) [1170 x 2532]  | * [Apple iPhone 12 Pro](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/iphone12pro/preview.png) (2020) [1170 x 2532]    | ||||||
|   * *Gold* |   * Author: [@ulbwa](https://ulbwa.xyz) [31.01.2022] | ||||||
|   * *Graphite* |   * ID: `b25e4e76e2083e389761d3495a347e58` | ||||||
|   * *Pacific Blue* |   * Colors: | ||||||
|   * *Silver* |   * * *Gold* | ||||||
|  |   * * *Graphite* | ||||||
|  |   * * *Pacific Blue* | ||||||
|  |   * * *Silver* | ||||||
| 
 | 
 | ||||||
| * [Apple iPhone 12 Pro Max](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/iphone12promax/preview.png) (2020) [1284 x 2778]  | * [Apple iPhone 12 Pro Max](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/iphone12promax/preview.png) (2020) [1284 x 2778]    | ||||||
|   * *Gold* |   * Author: [@ulbwa](https://ulbwa.xyz) [31.01.2022] | ||||||
|   * *Graphite* |   * ID: `658c22b16917a70e5e1703f300ef98fe` | ||||||
|   * *Pacific Blue* |   * Colors: | ||||||
|   * *Silver* |   * * *Gold* | ||||||
|  |   * * *Graphite* | ||||||
|  |   * * *Pacific Blue* | ||||||
|  |   * * *Silver* | ||||||
| 
 | 
 | ||||||
| * [Apple iPhone 13](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/iphone13/preview.png) (2021) [1170 x 2532]  | * [Apple iPhone 13](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/iphone13/preview.png) (2021) [1170 x 2532]    | ||||||
|   * *Blue* |   * Author: [@ulbwa](https://ulbwa.xyz) [19.02.2022] | ||||||
|   * *Midnight* |   * ID: `e03132ca8b4b0483e9d8f4a1ec1be1f5` | ||||||
|   * *Pink* |   * Colors: | ||||||
|   * *Product Red* |   * * *Blue* | ||||||
|   * *Starlight* |   * * *Midnight* | ||||||
|  |   * * *Pink* | ||||||
|  |   * * *Product Red* | ||||||
|  |   * * *Starlight* | ||||||
| 
 | 
 | ||||||
| * [Apple iPhone 13 Mini](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/iphone13mini/preview.png) (2021) [1080 x 2340]  | * [Apple iPhone 13 Mini](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/iphone13mini/preview.png) (2021) [1080 x 2340]    | ||||||
|   * *Blue* |   * Author: [@ulbwa](https://ulbwa.xyz) [19.02.2022] | ||||||
|   * *Midnight* |   * ID: `d0346fb29c4c3de9ff70953a7ae3bfee` | ||||||
|   * *Pink* |   * Colors: | ||||||
|   * *Product Red* |   * * *Blue* | ||||||
|   * *Starlight* |   * * *Midnight* | ||||||
|  |   * * *Pink* | ||||||
|  |   * * *Product Red* | ||||||
|  |   * * *Starlight* | ||||||
| 
 | 
 | ||||||
| * [Apple iPhone 13 Pro](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/iphone13pro/preview.png) (2021) [1170 x 2532]  | * [Apple iPhone 13 Pro](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/iphone13pro/preview.png) (2021) [1170 x 2532]    | ||||||
|   * *Gold* |   * Author: [@ulbwa](https://ulbwa.xyz) [19.02.2022] | ||||||
|   * *Graphite* |   * ID: `1c6f40f0490c7e0cf35de1c96af5c720` | ||||||
|   * *Sierra Blue* |   * Colors: | ||||||
|   * *Silver* |   * * *Gold* | ||||||
|  |   * * *Graphite* | ||||||
|  |   * * *Sierra Blue* | ||||||
|  |   * * *Silver* | ||||||
| 
 | 
 | ||||||
| * [Apple iPhone 13 Pro Max](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/iphone13promax/preview.png) (2021) [1284 x 2778]  | * [Apple iPhone 13 Pro Max](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/iphone13promax/preview.png) (2021) [1284 x 2778]    | ||||||
|   * *Gold* |   * Author: [@ulbwa](https://ulbwa.xyz) [19.02.2022] | ||||||
|   * *Graphite* |   * ID: `edc57edf104fdba42fdf935986b09ab8` | ||||||
|   * *Sierra Blue* |   * Colors: | ||||||
|   * *Silver* |   * * *Gold* | ||||||
|  |   * * *Graphite* | ||||||
|  |   * * *Sierra Blue* | ||||||
|  |   * * *Silver* | ||||||
| 
 | 
 | ||||||
| * [Apple iPhone SE](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/iphonese2020/preview.png) (2020) [750 x 1334]  | * [Apple iPhone SE](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/iphonese2020/preview.png) (2020) [750 x 1334]    | ||||||
|   * *Black* |   * Author: [@ulbwa](https://ulbwa.xyz) [31.01.2022] | ||||||
|   * *Product Red* |   * ID: `7ed0bde8cf28335afb6bf7e8fc90806b` | ||||||
|   * *White* |   * Colors: | ||||||
|  |   * * *Black* | ||||||
|  |   * * *Product Red* | ||||||
|  |   * * *White* | ||||||
| 
 | 
 | ||||||
| * [Apple iPhone Xr](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/iphonexr/preview.png) (2018) [828 x 1792]  | * [Apple iPhone Xr](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/iphonexr/preview.png) (2018) [828 x 1792]    | ||||||
|   * *Blue* |   * Author: [@ulbwa](https://ulbwa.xyz) [01.02.2022] | ||||||
|   * *Coral* |   * ID: `5213bfd57a03c81ad4dc702952810ee6` | ||||||
|   * *Product Red* |   * Colors: | ||||||
|   * *Silver* |   * * *Blue* | ||||||
|   * *Space Gray* |   * * *Coral* | ||||||
|   * *Yellow* |   * * *Product Red* | ||||||
|  |   * * *Silver* | ||||||
|  |   * * *Space Gray* | ||||||
|  |   * * *Yellow* | ||||||
| 
 | 
 | ||||||
| * [Apple iPhone Xs](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/iphonexs/preview.png) (2019) [1125 x 2436]  | * [Apple iPhone Xs](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/iphonexs/preview.png) (2019) [1125 x 2436]    | ||||||
|   * *Gold* |   * Author: [@ulbwa](https://ulbwa.xyz) [01.02.2022] | ||||||
|   * *Silver* |   * ID: `4b17c9428565db596f647b448656b744` | ||||||
|   * *Space Gray* |   * Colors: | ||||||
|  |   * * *Gold* | ||||||
|  |   * * *Silver* | ||||||
|  |   * * *Space Gray* | ||||||
| 
 | 
 | ||||||
| * [Apple iPhone Xs Max](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/iphonexsmax/preview.png) (2019) [1242 x 2688]  | * [Apple iPhone Xs Max](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/iphonexsmax/preview.png) (2019) [1242 x 2688]    | ||||||
|   * *Gold* |   * Author: [@ulbwa](https://ulbwa.xyz) [01.02.2022] | ||||||
|   * *Silver* |   * ID: `2c9c1c6b8c0b598fe1c1aca4c1f334f8` | ||||||
|   * *Space Gray* |   * Colors: | ||||||
|  |   * * *Gold* | ||||||
|  |   * * *Silver* | ||||||
|  |   * * *Space Gray* | ||||||
| 
 | 
 | ||||||
| * [Google Pixel](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/pixel/preview.png) (2016) [1080 x 1920]  | * [Google Pixel](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/pixel/preview.png) (2016) [1080 x 1920]    | ||||||
|   * *Quite Black* |   * Author: [@ulbwa](https://ulbwa.xyz) [01.02.2022] | ||||||
|   * *Really Blue* |   * ID: `ede34489f377fcc7852a326dd79c2550` | ||||||
|   * *Very Silver* |   * Colors: | ||||||
|  |   * * *Quite Black* | ||||||
|  |   * * *Really Blue* | ||||||
|  |   * * *Very Silver* | ||||||
| 
 | 
 | ||||||
| * [Google Pixel 4](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/pixel4/preview.png) (2019) [1080 x 2280]  | * [Google Pixel 4](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/pixel4/preview.png) (2019) [1080 x 2280]    | ||||||
|   * *Just Black* |   * Author: [@ulbwa](https://ulbwa.xyz) [01.02.2022] | ||||||
|   * *Clearly White* |   * ID: `673398cd2adaadd60506fb0140b83ab9` | ||||||
|   * *Oh So Orange* |   * Colors: | ||||||
|  |   * * *Just Black* | ||||||
|  |   * * *Clearly White* | ||||||
|  |   * * *Oh So Orange* | ||||||
| 
 | 
 | ||||||
| * [Google Pixel 4 XL](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/pixel4xl/preview.png) (2019) [1440 x 3040]  | * [Google Pixel 4 XL](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/pixel4xl/preview.png) (2019) [1440 x 3040]    | ||||||
|   * *Just Black* |   * Author: [@ulbwa](https://ulbwa.xyz) [01.02.2022] | ||||||
|   * *Clearly White* |   * ID: `c55e7641f3ba76d7b777281b0ba4aa87` | ||||||
|   * *Oh So Orange* |   * Colors: | ||||||
|  |   * * *Just Black* | ||||||
|  |   * * *Clearly White* | ||||||
|  |   * * *Oh So Orange* | ||||||
| 
 | 
 | ||||||
| * [Google Pixel 5](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/pixel5/preview.png) (2020) [1080 x 2340]  | * [Google Pixel 5](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/pixel5/preview.png) (2020) [1080 x 2340]    | ||||||
|   * *Just Black* |   * Author: [@ulbwa](https://ulbwa.xyz) [01.02.2022] | ||||||
|   * *Sorta Sage* |   * ID: `870266635f047a49c2eae83f7d46e26e` | ||||||
|  |   * Colors: | ||||||
|  |   * * *Just Black* | ||||||
|  |   * * *Sorta Sage* | ||||||
| 
 | 
 | ||||||
| ### Computers | ### Computers | ||||||
| 
 | 
 | ||||||
| * [Apple iMac 21"](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/imac212015/preview.png) (2015) [4096 x 2304]  | * [Apple iMac 21"](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/imac212015/preview.png) (2015) [4096 x 2304]    | ||||||
|   * *Silver* |   * Author: [@ulbwa](https://ulbwa.xyz) [31.01.2022] | ||||||
|  |   * ID: `385eb0911d0edb6821c18a2193bdadaf` | ||||||
|  |   * Colors: | ||||||
|  |   * * *Silver* | ||||||
| 
 | 
 | ||||||
| * [Apple iMac 24"](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/imac242021/preview.png) (2021) [4480 x 2520]  | * [Apple iMac 24"](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/imac242021/preview.png) (2021) [4480 x 2520]    | ||||||
|   * *Green* |   * Author: [@ulbwa](https://ulbwa.xyz) [03.02.2022] | ||||||
|   * *Yellow* |   * ID: `40a349f85ca132c2d6c1444db0be9561` | ||||||
|   * *Orange* |   * Colors: | ||||||
|   * *Pink* |   * * *Green* | ||||||
|   * *Purple* |   * * *Yellow* | ||||||
|   * *Blue* |   * * *Orange* | ||||||
|   * *Silver* |   * * *Pink* | ||||||
|  |   * * *Purple* | ||||||
|  |   * * *Blue* | ||||||
|  |   * * *Silver* | ||||||
| 
 | 
 | ||||||
| * [Apple MacBook 12"](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/macbook122016/preview.png) (2016) [2304 x 1440]  | * [Apple MacBook 12"](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/macbook122016/preview.png) (2016) [2304 x 1440]    | ||||||
|   * *Space Gray* |   * Author: [@ulbwa](https://ulbwa.xyz) [01.02.2022] | ||||||
|   * *Gold* |   * ID: `f74ec99f02ed5fafbe1cb1767763ed91` | ||||||
|  |   * Colors: | ||||||
|  |   * * *Space Gray* | ||||||
|  |   * * *Gold* | ||||||
| 
 | 
 | ||||||
| * [Apple MacBook Air (M1)](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/macbookair2020/preview.png) (2020) [2560 x 1600]  | * [Apple MacBook Air (M1)](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/macbookair2020/preview.png) (2020) [2560 x 1600]    | ||||||
|   * *Silver* |   * Author: [@ulbwa](https://ulbwa.xyz) [03.02.2022] | ||||||
|  |   * ID: `1f3fe3fec5b92861b7958bc75f40fe95` | ||||||
|  |   * Colors: | ||||||
|  |   * * *Silver* | ||||||
| 
 | 
 | ||||||
| * [Apple MacBook Pro 13"](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/macbookpro132015/preview.png) (2015) [2560 x 1600]  | * [Apple MacBook Pro 13"](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/macbookpro132015/preview.png) (2015) [2560 x 1600]    | ||||||
|   * *Silver* |   * Author: [@ulbwa](https://ulbwa.xyz) [01.02.2022] | ||||||
|  |   * ID: `2f15fb3eb0dde3b76771f3090c6ddbb6` | ||||||
|  |   * Colors: | ||||||
|  |   * * *Silver* | ||||||
| 
 | 
 | ||||||
| * [Apple MacBook Pro 15"](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/macbookpro152015/preview.png) (2015) [2880 x 1800]  | * [Apple MacBook Pro 15"](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/macbookpro152015/preview.png) (2015) [2880 x 1800]    | ||||||
|   * *Silver* |   * Author: [@ulbwa](https://ulbwa.xyz) [01.02.2022] | ||||||
|  |   * ID: `ba492b242a78b7f49caa41f61b5b3418` | ||||||
|  |   * Colors: | ||||||
|  |   * * *Silver* | ||||||
| 
 | 
 | ||||||
| * [Apple MacBook Pro 16"](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/macbookpro162019/preview.png) (2019) [3072 x 1920]  | * [Apple MacBook Pro 16"](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/macbookpro162019/preview.png) (2019) [3072 x 1920]    | ||||||
|   * *Space Gray* |   * Author: [@ulbwa](https://ulbwa.xyz) [01.02.2022] | ||||||
|  |   * ID: `0bfe5c7d2a8a4e5398090c3027791ed1` | ||||||
|  |   * Colors: | ||||||
|  |   * * *Space Gray* | ||||||
| 
 | 
 | ||||||
| * [Apple MacBook Pro 16"](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/macbookpro162021/preview.png) (2021) [3456 x 2234]  | * [Apple MacBook Pro 16"](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/macbookpro162021/preview.png) (2021) [3456 x 2234]    | ||||||
|   * *Silver* |   * Author: [@ulbwa](https://ulbwa.xyz) [01.02.2022] | ||||||
|   * *Space Gray* |   * ID: `80467845e71272f0d8d2bd13490a73f3` | ||||||
|  |   * Colors: | ||||||
|  |   * * *Silver* | ||||||
|  |   * * *Space Gray* | ||||||
| 
 | 
 | ||||||
| * [Google Pixelbook Go](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/pixelbookgo/preview.png) (2019) [1920 x 1080]  | * [Google Pixelbook Go](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/pixelbookgo/preview.png) (2019) [1920 x 1080]    | ||||||
|   * *Just Black* |   * Author: [@ulbwa](https://ulbwa.xyz) [01.02.2022] | ||||||
|  |   * ID: `6911ed9934b1c877a0b01c3750c2b79e` | ||||||
|  |   * Colors: | ||||||
|  |   * * *Just Black* | ||||||
| 
 | 
 | ||||||
| * [Apple Pro Display XDR](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/prodisplayxdr/preview.png) (2019) [6016 x 3384]  | * [Apple Pro Display XDR](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/prodisplayxdr/preview.png) (2019) [6016 x 3384]    | ||||||
|   * *Silver* |   * Author: [@ulbwa](https://ulbwa.xyz) [01.02.2022] | ||||||
|  |   * ID: `8b728f1faab0389874db4bb0ae6244e5` | ||||||
|  |   * Colors: | ||||||
|  |   * * *Silver* | ||||||
| 
 | 
 | ||||||
| ### Tablets | ### Tablets | ||||||
| 
 | 
 | ||||||
| * [Apple iPad 9](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/ipad9/preview.png) (2021) [2160 x 1620]  | * [Apple iPad 9](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/ipad9/preview.png) (2021) [2160 x 1620]    | ||||||
|   * *Gold* |   * Author: [@ulbwa](https://ulbwa.xyz) [31.01.2022] | ||||||
|   * *Silver* |   * ID: `9c1f043b21ef803bd467135b83105f0b` | ||||||
|   * *Space Gray* |   * Colors: | ||||||
|  |   * * *Gold* | ||||||
|  |   * * *Silver* | ||||||
|  |   * * *Space Gray* | ||||||
| 
 | 
 | ||||||
| * [Apple iPad Air 4](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/ipadair4/preview.png) (2020) [2360 x 1640]  | * [Apple iPad Air 4](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/ipadair4/preview.png) (2020) [2360 x 1640]    | ||||||
|   * *Green* |   * Author: [@ulbwa](https://ulbwa.xyz) [31.01.2022] | ||||||
|   * *Rose Gold* |   * ID: `569262bc590b30cfb296471c3c8a4af8` | ||||||
|   * *Silver* |   * Colors: | ||||||
|   * *Sky Blue* |   * * *Green* | ||||||
|   * *Space Gray* |   * * *Rose Gold* | ||||||
|  |   * * *Silver* | ||||||
|  |   * * *Sky Blue* | ||||||
|  |   * * *Space Gray* | ||||||
| 
 | 
 | ||||||
| * [Apple iPad Mini 5](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/ipadmini5/preview.png) (2021) [2048 x 1536]  | * [Apple iPad Mini 5](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/ipadmini5/preview.png) (2021) [2048 x 1536]    | ||||||
|   * *Gold* |   * Author: [@ulbwa](https://ulbwa.xyz) [31.01.2022] | ||||||
|   * *Silver* |   * ID: `7a8b3c603fe34817d9233e5b6afed174` | ||||||
|   * *Space Gray* |   * Colors: | ||||||
|  |   * * *Gold* | ||||||
|  |   * * *Silver* | ||||||
|  |   * * *Space Gray* | ||||||
| 
 | 
 | ||||||
| * [Apple iPad Pro 4 11"](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/ipadpro114/preview.png) (2020) [2388 x 1668]  | * [Apple iPad Pro 4 11"](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/ipadpro114/preview.png) (2020) [2388 x 1668]    | ||||||
|   * *Silver* |   * Author: [@ulbwa](https://ulbwa.xyz) [31.01.2022] | ||||||
|   * *Space Gray* |   * ID: `e47f6e3bb880a034866f59f97f612abe` | ||||||
|  |   * Colors: | ||||||
|  |   * * *Silver* | ||||||
|  |   * * *Space Gray* | ||||||
| 
 | 
 | ||||||
| * [Apple iPad Pro 4 12.9"](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/ipadpro134/preview.png) (2020) [2732 x 2048]  | * [Apple iPad Pro 4 12.9"](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/ipadpro134/preview.png) (2020) [2732 x 2048]    | ||||||
|   * *Silver* |   * Author: [@ulbwa](https://ulbwa.xyz) [31.01.2022] | ||||||
|   * *Space Gray* |   * ID: `9a85db6aeb1d45c896daff67af785936` | ||||||
|  |   * Colors: | ||||||
|  |   * * *Silver* | ||||||
|  |   * * *Space Gray* | ||||||
| 
 | 
 | ||||||
| ### Wearable devices | ### Wearable devices | ||||||
| 
 | 
 | ||||||
| * [Apple Watch Series 6 44mm](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/watchseries644mm/preview.png) (2020) [368 x 448]  | * [Apple Watch Series 6 44mm](https://raw.githubusercontent.com/ulbwazhine/MockupEngineer/main/MockupEngineer/templates/watchseries644mm/preview.png) (2020) [368 x 448]    | ||||||
|   * *Aluminum Case - Blue* |   * Author: [@ulbwa](https://ulbwa.xyz) [01.02.2022] | ||||||
|   * *Aluminum Case - Gold* |   * ID: `e055638cf7325a856ed0369dc8d0dcb1` | ||||||
|   * *Aluminum Case - Space Gray* |   * Colors: | ||||||
|   * *Aluminum Case - Silver* |   * * *Aluminum Case - Blue* | ||||||
|   * *Aluminum Case - Product Red* |   * * *Aluminum Case - Gold* | ||||||
|   * *Titanium Case - Light* |   * * *Aluminum Case - Space Gray* | ||||||
|   * *Titanium Case - Dark* |   * * *Aluminum Case - Silver* | ||||||
|   * *Stainless Steel Case - Gold* |   * * *Aluminum Case - Product Red* | ||||||
|   * *Stainless Steel Case - Graphite* |   * * *Titanium Case - Light* | ||||||
|   * *Stainless Steel Case - Silver* |   * * *Titanium Case - Dark* | ||||||
|  |   * * *Stainless Steel Case - Gold* | ||||||
|  |   * * *Stainless Steel Case - Graphite* | ||||||
|  |   * * *Stainless Steel Case - Silver* | ||||||
| 
 | 
 | ||||||
| You can help the project by adding support for new mockups by contributing on [GitHub](https://github.com/ulbwazhine/MockupEngineer). | You can help the project by adding support for new mockups by contributing on [GitHub](https://github.com/ulbwazhine/MockupEngineer). | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								setup.py
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								setup.py
									
									
									
									
									
								
							|  | @ -3,7 +3,7 @@ from setuptools import setup, find_packages | ||||||
| 
 | 
 | ||||||
| setup( | setup( | ||||||
|     name='MockupEngineer', |     name='MockupEngineer', | ||||||
|     version='2022.02.19.1', |     version='2022.02.21.8', | ||||||
|     packages=find_packages(), |     packages=find_packages(), | ||||||
|     url='https://github.com/ulbwazhine/MockupEngineer', |     url='https://github.com/ulbwazhine/MockupEngineer', | ||||||
|     license='MIT', |     license='MIT', | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user