appydave-tools 0.15.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +7 -0
  3. data/CLAUDE.md +113 -29
  4. data/README.md +262 -86
  5. data/bin/subtitle_manager.rb +18 -12
  6. data/bin/subtitle_processor.rb +158 -0
  7. data/docs/archive/codebase-audit-2025-01.md +424 -0
  8. data/docs/archive/documentation-framework-proposal.md +808 -0
  9. data/docs/archive/purpose-and-philosophy.md +110 -0
  10. data/docs/archive/test-coverage-quick-wins.md +342 -0
  11. data/docs/archive/tool-discovery.md +199 -0
  12. data/docs/archive/tool-documentation-analysis.md +592 -0
  13. data/docs/tools/bank-reconciliation.md +269 -0
  14. data/docs/tools/cli-actions.md +444 -0
  15. data/docs/tools/configuration.md +329 -0
  16. data/docs/{usage → tools}/gpt-context.md +118 -7
  17. data/docs/tools/index.md +324 -0
  18. data/docs/tools/move-images.md +295 -0
  19. data/docs/tools/name-manager.md +322 -0
  20. data/docs/tools/prompt-tools.md +209 -0
  21. data/docs/tools/subtitle-processor.md +242 -0
  22. data/docs/tools/youtube-automation.md +258 -0
  23. data/docs/tools/youtube-manager.md +248 -0
  24. data/lib/appydave/tools/{subtitle_manager → subtitle_processor}/clean.rb +1 -1
  25. data/lib/appydave/tools/{subtitle_manager → subtitle_processor}/join.rb +5 -2
  26. data/lib/appydave/tools/version.rb +1 -1
  27. data/lib/appydave/tools.rb +2 -4
  28. data/package.json +1 -1
  29. metadata +29 -12
  30. data/lib/mj-paste-test/main.rb +0 -35
  31. data/lib/mj-paste-test/prompts.txt +0 -18
  32. data/lib/mj-paste-test/readme-leonardo.md +0 -0
  33. /data/lib/appydave/tools/{subtitle_manager → subtitle_processor}/_doc-clean.md +0 -0
  34. /data/lib/appydave/tools/{subtitle_manager → subtitle_processor}/_doc-join.md +0 -0
  35. /data/lib/appydave/tools/{subtitle_manager → subtitle_processor}/_doc-todo.md +0 -0
@@ -0,0 +1,248 @@
1
+ # YouTube Manager
2
+
3
+ Retrieve and update YouTube video metadata, descriptions, tags, and other details at scale.
4
+
5
+ ## What It Does
6
+
7
+ **YouTube Manager** automates YouTube video metadata management. Instead of manually clicking through YouTube Studio, this tool:
8
+
9
+ - Retrieves video metadata (title, description, tags, category)
10
+ - Updates descriptions, titles, tags across multiple videos
11
+ - Fetches caption/subtitle information
12
+ - Handles YouTube API authentication
13
+ - Generates detailed video reports
14
+ - Supports batch operations for efficiency
15
+
16
+ ## How to Use
17
+
18
+ ### Authentication Setup
19
+
20
+ First time only - authenticate with Google:
21
+
22
+ ```bash
23
+ youtube_manager get -v dQw4w9WgXcQ
24
+ ```
25
+
26
+ This opens a browser to authorize the app with your YouTube account. The token is stored locally in `~/.config/appydave`.
27
+
28
+ ### Get Video Details
29
+
30
+ ```bash
31
+ # Get information about a specific video
32
+ youtube_manager get -v dQw4w9WgXcQ
33
+
34
+ # Output shows: title, description, tags, category, view count, etc.
35
+ ```
36
+
37
+ ### Update Video Metadata
38
+
39
+ ```bash
40
+ # Update title
41
+ youtube_manager update -v dQw4w9WgXcQ -t "New Video Title"
42
+
43
+ # Update description
44
+ youtube_manager update -v dQw4w9WgXcQ -d "New description here..."
45
+
46
+ # Update tags (comma-separated)
47
+ youtube_manager update -v dQw4w9WgXcQ -g "tag1,tag2,tag3"
48
+
49
+ # Update category (use category ID)
50
+ youtube_manager update -v dQw4w9WgXcQ -c "15"
51
+
52
+ # Combine multiple updates
53
+ youtube_manager update -v dQw4w9WgXcQ -t "New Title" -d "New desc" -g "tag1,tag2"
54
+ ```
55
+
56
+ ### Common YouTube Category IDs
57
+
58
+ | ID | Category |
59
+ |----|----------|
60
+ | 1 | Film & Animation |
61
+ | 2 | Autos & Vehicles |
62
+ | 10 | Music |
63
+ | 15 | Pets & Animals |
64
+ | 17 | Sports |
65
+ | 18 | Shorts |
66
+ | 19 | Travel & Events |
67
+ | 20 | Gaming |
68
+ | 21 | Videoblogging |
69
+ | 22 | People & Blogs |
70
+ | 23 | Comedy |
71
+ | 24 | Entertainment |
72
+ | 25 | News & Politics |
73
+ | 26 | Howto & Style |
74
+ | 27 | Education |
75
+ | 28 | Science & Technology |
76
+ | 29 | Nonprofits & Activism |
77
+
78
+ ## Use Cases for AI Agents
79
+
80
+ ### 1. Post-Rebrand Updates
81
+ ```bash
82
+ # Change channel name in all video descriptions (scenario)
83
+ # AI agent: Get all videos, identify descriptions containing old name
84
+ # Then update each with new branding
85
+ youtube_manager get -v VIDEO_ID_1
86
+ youtube_manager update -v VIDEO_ID_1 -d "Updated description with new brand name"
87
+ ```
88
+ **AI discovers**: Current naming patterns, branding consistency. Can identify all rebranding opportunities and execute bulk updates.
89
+
90
+ ### 2. Tag Standardization
91
+ ```bash
92
+ # Ensure consistent tagging across catalog
93
+ youtube_manager get -v VIDEO_ID_1 # Get current tags
94
+ # AI analyzes tag patterns, suggests standardized tags
95
+ youtube_manager update -v VIDEO_ID_1 -g "correct,standardized,tags"
96
+ ```
97
+ **AI discovers**: Tagging patterns, missing tags, inconsistent naming. Can standardize tags across entire catalog.
98
+
99
+ ### 3. Category Auditing & Correction
100
+ ```bash
101
+ # Get videos in wrong category
102
+ youtube_manager get -v VIDEO_ID_1 # Check category
103
+ # AI identifies misclassified videos
104
+ youtube_manager update -v VIDEO_ID_1 -c "15" # Move to correct category
105
+ ```
106
+ **AI discovers**: Category assignments, whether videos are properly categorized. Can suggest corrections based on content.
107
+
108
+ ### 4. Metadata Extraction for Analytics
109
+ ```bash
110
+ # Get video details for export
111
+ youtube_manager get -v VIDEO_ID_1
112
+ # AI collects metadata across multiple videos for analysis
113
+ ```
114
+ **AI discovers**: View counts, engagement metrics, description patterns. Can generate reports, identify top performers.
115
+
116
+ ### 5. Description Optimization
117
+ ```bash
118
+ # Get current description
119
+ youtube_manager get -v VIDEO_ID_1
120
+ # AI analyzes description for SEO, engagement, clarity
121
+ # Suggests improvements including keywords, CTAs, timestamps
122
+ youtube_manager update -v VIDEO_ID_1 -d "Optimized description with keywords and structure"
123
+ ```
124
+ **AI discovers**: Current SEO elements, call-to-actions, structure. Can improve descriptions for discoverability and engagement.
125
+
126
+ ### 6. Series/Playlist Linking
127
+ ```bash
128
+ # Get videos, identify series
129
+ youtube_manager get -v VIDEO_ID_1
130
+ # AI analyzes which videos belong to series
131
+ # Suggests adding series links to descriptions
132
+ youtube_manager update -v VIDEO_ID_1 -d "Optimized with series link in description"
133
+ ```
134
+ **AI discovers**: Video relationships, series structure. Can add linking information to improve viewer navigation.
135
+
136
+ ### 7. Bulk Correction Workflows
137
+ ```bash
138
+ # Scenario: Need to update 50 videos with new info
139
+ # AI agent orchestrates:
140
+ # 1. Get all video IDs in channel
141
+ # 2. For each: get metadata, analyze, suggest updates
142
+ # 3. Batch execute updates with youtube_manager
143
+ ```
144
+ **AI discovers**: What needs changing, patterns across videos. Can execute systematic bulk corrections.
145
+
146
+ ### 8. Caption/Subtitle Management (Future)
147
+ ```bash
148
+ # Plan AI workflow: get video captions, analyze, update
149
+ youtube_manager get -v VIDEO_ID_1
150
+ # Returns caption information when available
151
+ ```
152
+ **AI discovers**: Whether videos have captions, language availability. Can plan caption addition or updates.
153
+
154
+ ### 9. Content Audit & Compliance
155
+ ```bash
156
+ # Get descriptions to audit for compliance
157
+ youtube_manager get -v VIDEO_ID_1
158
+ # AI reviews descriptions for brand compliance, accuracy, links
159
+ # Suggests corrections for non-compliant videos
160
+ ```
161
+ **AI discovers**: Compliance issues, outdated links, inaccurate info. Can flag and correct systematically.
162
+
163
+ ### 10. Performance Metadata Analysis
164
+ ```bash
165
+ # Get metrics alongside descriptions
166
+ youtube_manager get -v VIDEO_ID_1
167
+ # AI correlates description length, tags, category with performance
168
+ # Suggests improvements based on high-performing patterns
169
+ ```
170
+ **AI discovers**: What metadata correlates with views/engagement. Can recommend optimizations based on data patterns.
171
+
172
+ ## Command Reference
173
+
174
+ ### Get Command
175
+ ```bash
176
+ youtube_manager get -v VIDEO_ID [options]
177
+ ```
178
+
179
+ | Option | Short | Long | Description |
180
+ |--------|-------|------|-------------|
181
+ | Video ID | `-v` | `--video-id ID` | YouTube Video ID (required) |
182
+ | Help | `-h` | `--help` | Show help message |
183
+
184
+ **Output includes**: Title, description, tags, category, view count, like count, upload date.
185
+
186
+ ### Update Command
187
+ ```bash
188
+ youtube_manager update -v VIDEO_ID [options]
189
+ ```
190
+
191
+ | Option | Short | Long | Description |
192
+ |--------|-------|------|-------------|
193
+ | Video ID | `-v` | `--video-id ID` | YouTube Video ID (required) |
194
+ | Title | `-t` | `--title TITLE` | New video title |
195
+ | Description | `-d` | `--description DESC` | New description |
196
+ | Tags | `-g` | `--tags TAGS` | Comma-separated tags |
197
+ | Category | `-c` | `--category-id ID` | YouTube category ID |
198
+ | Help | `-h` | `--help` | Show help message |
199
+
200
+ ## Finding Video IDs
201
+
202
+ Video ID is the part after `v=` in YouTube URLs:
203
+
204
+ ```
205
+ https://www.youtube.com/watch?v=dQw4w9WgXcQ
206
+ ^^^^^^^^^^^^^^ <- This is the video ID
207
+ ```
208
+
209
+ Or after `youtu.be/`:
210
+
211
+ ```
212
+ https://youtu.be/dQw4w9WgXcQ
213
+ ^^^^^^^^^^^^^^ <- This is the video ID
214
+ ```
215
+
216
+ ## Configuration
217
+
218
+ YouTube Manager uses Google OAuth 2.0 for authentication:
219
+
220
+ - **Config location**: `~/.config/appydave/channels.json`
221
+ - **Token storage**: `~/.config/appydave/` (auto-created on first auth)
222
+ - **No manual setup needed**: First command triggers authentication flow
223
+
224
+ ## Troubleshooting
225
+
226
+ | Issue | Solution |
227
+ |-------|----------|
228
+ | "Authentication failed" | Delete `~/.config/appydave` and run command again to re-authenticate |
229
+ | "Invalid video ID" | Verify video ID is correct (check YouTube URL) |
230
+ | "Permission denied" | Re-authenticate with account that owns the channel |
231
+ | "API quota exceeded" | Wait 24 hours or upgrade YouTube API quota in Google Cloud Console |
232
+
233
+ ## Tips & Tricks
234
+
235
+ 1. **Batch operations**: Create shell script to update multiple videos
236
+ 2. **Descriptions with newlines**: Use proper escaping for multi-line descriptions
237
+ 3. **Tag limits**: YouTube allows max 500 characters of tags total
238
+ 4. **Description limits**: Max 5000 characters for descriptions
239
+ 5. **Test first**: Use `get` to verify video before using `update`
240
+
241
+ ---
242
+
243
+ **Related Tools**:
244
+ - `gpt_context` - Gather context before planning metadata updates
245
+ - `youtube_automation` - Automate repetitive YouTube workflows
246
+ - `configuration` - Manage multiple YouTube channels
247
+
248
+ **References**: [YouTube Data API](https://developers.google.com/youtube/v3)
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Appydave
4
4
  module Tools
5
- module SubtitleMaster
5
+ module SubtitleProcessor
6
6
  # Clean and normalize subtitles
7
7
  class Clean
8
8
  attr_reader :content
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Appydave
4
4
  module Tools
5
- module SubtitleMaster
5
+ module SubtitleProcessor
6
6
  # Join multiple SRT files into one
7
7
  # - Supports folder, wildcards, sorting via FileResolver
8
8
  class Join
@@ -265,7 +265,10 @@ module Appydave
265
265
  end
266
266
  end
267
267
 
268
- def initialize(folder: './', files: '*.srt', sort: 'inferred', buffer: 100, output: 'merged.srt', log_level: :info)
268
+ # rubocop:disable Metrics/ParameterLists
269
+ def initialize(folder: './', files: '*.srt', sort: 'inferred', buffer: 100, output: 'merged.srt',
270
+ log_level: :info)
271
+ # rubocop:enable Metrics/ParameterLists
269
272
  @folder = folder
270
273
  @files = files
271
274
  @sort = sort
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Appydave
4
4
  module Tools
5
- VERSION = '0.15.0'
5
+ VERSION = '0.16.0'
6
6
  end
7
7
  end
@@ -16,8 +16,6 @@ require 'googleauth'
16
16
  require 'googleauth/stores/file_token_store'
17
17
  require 'webrick'
18
18
 
19
- require 'pry'
20
-
21
19
  require 'appydave/tools/version'
22
20
  require 'appydave/tools/debuggable'
23
21
  require 'appydave/tools/types/indifferent_access_hash'
@@ -50,8 +48,8 @@ require 'appydave/tools/name_manager/project_name'
50
48
 
51
49
  require 'appydave/tools/prompt_tools/prompt_completion'
52
50
 
53
- require 'appydave/tools/subtitle_manager/clean'
54
- require 'appydave/tools/subtitle_manager/join'
51
+ require 'appydave/tools/subtitle_processor/clean'
52
+ require 'appydave/tools/subtitle_processor/join'
55
53
 
56
54
  require 'appydave/tools/youtube_automation/gpt_agent'
57
55
 
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appydave-tools",
3
- "version": "0.15.0",
3
+ "version": "0.16.0",
4
4
  "description": "AppyDave YouTube Automation Tools",
5
5
  "scripts": {
6
6
  "release": "semantic-release"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appydave-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.0
4
+ version: 0.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cruwys
@@ -150,7 +150,10 @@ dependencies:
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
- description: " AppyDave YouTube Automation Tools\n"
153
+ description: |2
154
+ AppyDave Tools is a consolidated productivity toolkit for YouTube content creation workflow.
155
+ Includes single-purpose utilities for AI context gathering, subtitle processing, YouTube management, and more.
156
+ All tools in one codebase for easier maintenance, each operates independently.
154
157
  email:
155
158
  - david@ideasmen.com.au
156
159
  executables:
@@ -187,10 +190,27 @@ files:
187
190
  - bin/setup
188
191
  - bin/subtitle_manager-old.rb
189
192
  - bin/subtitle_manager.rb
193
+ - bin/subtitle_processor.rb
190
194
  - bin/youtube_automation.rb
191
195
  - bin/youtube_manager.rb
196
+ - docs/archive/codebase-audit-2025-01.md
197
+ - docs/archive/documentation-framework-proposal.md
198
+ - docs/archive/purpose-and-philosophy.md
199
+ - docs/archive/test-coverage-quick-wins.md
200
+ - docs/archive/tool-discovery.md
201
+ - docs/archive/tool-documentation-analysis.md
192
202
  - docs/dam/overview.md
193
- - docs/usage/gpt-context.md
203
+ - docs/tools/bank-reconciliation.md
204
+ - docs/tools/cli-actions.md
205
+ - docs/tools/configuration.md
206
+ - docs/tools/gpt-context.md
207
+ - docs/tools/index.md
208
+ - docs/tools/move-images.md
209
+ - docs/tools/name-manager.md
210
+ - docs/tools/prompt-tools.md
211
+ - docs/tools/subtitle-processor.md
212
+ - docs/tools/youtube-automation.md
213
+ - docs/tools/youtube-manager.md
194
214
  - exe/ad_config
195
215
  - exe/gpt_context
196
216
  - exe/prompt_tools
@@ -224,11 +244,11 @@ files:
224
244
  - lib/appydave/tools/name_manager/project_name.rb
225
245
  - lib/appydave/tools/prompt_tools/_doc.md
226
246
  - lib/appydave/tools/prompt_tools/prompt_completion.rb
227
- - lib/appydave/tools/subtitle_manager/_doc-clean.md
228
- - lib/appydave/tools/subtitle_manager/_doc-join.md
229
- - lib/appydave/tools/subtitle_manager/_doc-todo.md
230
- - lib/appydave/tools/subtitle_manager/clean.rb
231
- - lib/appydave/tools/subtitle_manager/join.rb
247
+ - lib/appydave/tools/subtitle_processor/_doc-clean.md
248
+ - lib/appydave/tools/subtitle_processor/_doc-join.md
249
+ - lib/appydave/tools/subtitle_processor/_doc-todo.md
250
+ - lib/appydave/tools/subtitle_processor/clean.rb
251
+ - lib/appydave/tools/subtitle_processor/join.rb
232
252
  - lib/appydave/tools/types/array_type.rb
233
253
  - lib/appydave/tools/types/base_model.rb
234
254
  - lib/appydave/tools/types/hash_type.rb
@@ -245,9 +265,6 @@ files:
245
265
  - lib/appydave/tools/youtube_manager/reports/video_details_report.rb
246
266
  - lib/appydave/tools/youtube_manager/update_video.rb
247
267
  - lib/appydave/tools/youtube_manager/youtube_base.rb
248
- - lib/mj-paste-test/main.rb
249
- - lib/mj-paste-test/prompts.txt
250
- - lib/mj-paste-test/readme-leonardo.md
251
268
  - package.json
252
269
  - sig/appydave/tools.rbs
253
270
  homepage: http://appydave.com/gems/appydave-tools
@@ -276,5 +293,5 @@ requirements: []
276
293
  rubygems_version: 3.4.20
277
294
  signing_key:
278
295
  specification_version: 4
279
- summary: AppyDave YouTube Automation Tools
296
+ summary: AppyDave productivity toolkit - CLI utilities for YouTube workflow automation
280
297
  test_files: []
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'io/console'
4
-
5
- # input_prompts_filename = 'prompts.txt'
6
- input_prompts_filename = '/Users/davidcruwys/dev/ai-prompts/midjourney/documentation/clean-prompts/input.txt'
7
- output_prompts_filename = '/Users/davidcruwys/dev/ai-prompts/midjourney/documentation/clean-prompts/processed.txt'
8
-
9
- count = 1
10
-
11
- File.readlines(input_prompts_filename).each do |line|
12
- raw_prompt = line.strip
13
-
14
- prompt = "/imagine prompt: #{raw_prompt}"
15
-
16
- display_prompt = "#{count} :: #{prompt}"
17
- puts display_prompt
18
-
19
- IO.popen('pbcopy', 'w') { |f| f << prompt }
20
- File.open(output_prompts_filename, 'a') { |f| f.puts raw_prompt }
21
-
22
- count += 1
23
-
24
- lines = File.readlines(input_prompts_filename)
25
- lines.delete_at(0)
26
- File.write(input_prompts_filename, lines.join)
27
-
28
- if (count % 8).zero?
29
- puts 'Press any key to continue...'
30
- $stdin.getch
31
- puts "\n"
32
- else
33
- sleep(5)
34
- end
35
- end
@@ -1,18 +0,0 @@
1
- 3D, software and app IT business, illustration, iphone, tablet, computer, graphs, datas, light green, white, grey --v 4
2
- Small and cute urban laboratory, 3d blender render, soft smooth lighting, rain background,100mm lens, 4k UHD, isometric, tilt – shift --v 5
3
- Small and cute urban laboratory, 3d blender render, soft smooth lighting, rain background,100mm lens, 4k UHD, isometric, tilt – shift --v 4
4
- clean gradient knolling 3D illustration design for professional saas software office automation, colored gradient blue white green and warm sunshine accents and neutral colors, with abstract lines, behance, dribbble --v 4
5
- ultra realistic tetris pattern , 5-Dimensional, Nonagon, Star Prism, Polygon, Happy Accidents, Refreshing, Strong, Binary, Hexadecimal, ray tracing, global illumination, octane render,metallic, shiny --v 4
6
- Tilt shift, depth of field, low poly, starry night, solid simple mobile game asset, diorama, tilt shift,depth of field, cute isometric clear view of cute [Marina Bay Sands], fairytale, orientalism, soft pastel colors, starry mystical night – time, volumetric lighting, dramatic lighting, vibrant colors,triadic color harmony, stars and moon on dark background, motes, dustlights, air particles,stardusts, vibrant vivid sharp clear, made with blender 3D, in the style of artstation and behance --v 5
7
- sustainability and blockchain theme, no text, showing crypto icons, information flow, mixing 3D and vector styles, images only, --v 4
8
- cryptocurrency data charts, white background, white, concept art. 3d rendering illustration. vivid colors, depth of field, dramatic lighting, sharp focus, epic composition, 8k, UHD, natural light, photo realistic, maximum texture, HDR, FStop 1.8, High octane render, Unreal engine 5, photoshoot, DSLR, cinematic lighting, highly detailed, ray tracing, Cinematic, Photoshoot, Dramatic, DSLR, Ultra-Wide Angle, 32k, Ultra-HD, Super-Resolution, Bokeh blue soft light background, Backlight, AMOLED, Cinematic Lighting, Volumetric Lighting --v 4
9
- pixel cubes vector svg, brain as brain cloud with colorful flashes social impact and with a total white background photo in Kodak Color 400, professional photography, insta style, photographic style, Unreal Engine, Cinematic, Color Grading, Editorial Photography, Photography, Photoshoot, White Balance, background white, 32k --v 5
10
- finance charts, white background, white, concept art. 3d rendering illustration. vivid colors, depth of field, dramatic lighting, sharp focus, epic composition, 8k, UHD, natural light, photo realistic, maximum texture, HDR, FStop 1.8, High octane render, Unreal engine 5, photoshoot, DSLR, cinematic lighting, highly detailed, ray tracing, Cinematic, Photoshoot, Dramatic, DSLR, Ultra-Wide Angle, 32k, Ultra-HD, Super-Resolution, Bokeh blue soft light background, Backlight, AMOLED, Cinematic Lighting, Volumetric Lighting --v 4
11
- facebook cover, marketing charts, only charts displayed on various screens of Apple devices, laptop, mobile, 4k --v 4
12
- cup of coffee over a table, table with charts, volumetric ligh --v 4
13
- color cube wide gamut pantone all colors color space --v 5
14
- block network graph universe parallel connections 3D --v 5
15
- Tilt-shift futuristic city, night, skylines, ciberpunk by Felipe Pantone --v 4
16
- make a pop art deco epic city, tilt shift, with trees and topiary, a river running through the city, Cinematography, ultra detailed, 8k, photorealistic,hd, octane render, digitally rendered, award-winning photograph, timeless beauty, cinematic lighting, sophisticated color palette, cinematic focus, symmetrical balance, glowing, octane render, trending on artstation, 3d rendered, 3d --v 4
17
- 3D isometric drawing, Asian restaurant, cyberpunk --v 4
18
- architect paper plan, on a desk, realistic picture, modern, design, 8k, --v 4
File without changes