araboja-shorts 0.2.0__tar.gz
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.
- araboja_shorts-0.2.0/LICENSE +21 -0
- araboja_shorts-0.2.0/PKG-INFO +216 -0
- araboja_shorts-0.2.0/README.md +172 -0
- araboja_shorts-0.2.0/araboja_shorts.egg-info/PKG-INFO +216 -0
- araboja_shorts-0.2.0/araboja_shorts.egg-info/SOURCES.txt +17 -0
- araboja_shorts-0.2.0/araboja_shorts.egg-info/dependency_links.txt +1 -0
- araboja_shorts-0.2.0/araboja_shorts.egg-info/entry_points.txt +2 -0
- araboja_shorts-0.2.0/araboja_shorts.egg-info/requires.txt +4 -0
- araboja_shorts-0.2.0/araboja_shorts.egg-info/top_level.txt +3 -0
- araboja_shorts-0.2.0/main_gpt.py +1716 -0
- araboja_shorts-0.2.0/pyproject.toml +36 -0
- araboja_shorts-0.2.0/setup.cfg +4 -0
- araboja_shorts-0.2.0/shorts_media.py +111 -0
- araboja_shorts-0.2.0/shorts_rendering.py +54 -0
- araboja_shorts-0.2.0/tests/test_doctor.py +37 -0
- araboja_shorts-0.2.0/tests/test_helpers.py +34 -0
- araboja_shorts-0.2.0/tests/test_media_metadata.py +63 -0
- araboja_shorts-0.2.0/tests/test_module_boundaries.py +13 -0
- araboja_shorts-0.2.0/tests/test_subtitles.py +55 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Kim hyosung
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: araboja-shorts
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Automated Korean short-form history videos: topic selection, Korean narration, TTS, and 1080x1920 ffmpeg rendering.
|
|
5
|
+
Author-email: Kim hyosung <drchamchi2@gmail.com>
|
|
6
|
+
License: MIT License
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2026 Kim hyosung
|
|
9
|
+
|
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
+
in the Software without restriction, including without limitation the rights
|
|
13
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
+
furnished to do so, subject to the following conditions:
|
|
16
|
+
|
|
17
|
+
The above copyright notice and this permission notice shall be included in all
|
|
18
|
+
copies or substantial portions of the Software.
|
|
19
|
+
|
|
20
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
+
SOFTWARE.
|
|
27
|
+
|
|
28
|
+
Project-URL: Homepage, https://github.com/drchamchi2-oss/araboja-shorts
|
|
29
|
+
Project-URL: Issues, https://github.com/drchamchi2-oss/araboja-shorts/issues
|
|
30
|
+
Project-URL: Changelog, https://github.com/drchamchi2-oss/araboja-shorts/blob/main/CHANGELOG.md
|
|
31
|
+
Keywords: shorts,video,tts,ffmpeg,korean,youtube,automation
|
|
32
|
+
Classifier: Development Status :: 3 - Alpha
|
|
33
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
34
|
+
Classifier: Programming Language :: Python :: 3
|
|
35
|
+
Classifier: Topic :: Multimedia :: Video
|
|
36
|
+
Requires-Python: >=3.10
|
|
37
|
+
Description-Content-Type: text/markdown
|
|
38
|
+
License-File: LICENSE
|
|
39
|
+
Requires-Dist: openai>=1.0.0
|
|
40
|
+
Requires-Dist: Pillow>=12.2.0
|
|
41
|
+
Requires-Dist: python-dotenv>=1.2.2
|
|
42
|
+
Requires-Dist: requests>=2.31.0
|
|
43
|
+
Dynamic: license-file
|
|
44
|
+
|
|
45
|
+
# araboja-shorts (아라보자 쇼츠)
|
|
46
|
+
|
|
47
|
+
[](https://github.com/drchamchi2-oss/araboja-shorts/actions/workflows/python-ci.yml)
|
|
48
|
+
[](https://github.com/drchamchi2-oss/araboja-shorts/actions/workflows/codeql.yml)
|
|
49
|
+
[](LICENSE)
|
|
50
|
+
[](https://github.com/drchamchi2-oss/araboja-shorts/releases)
|
|
51
|
+
|
|
52
|
+
`araboja-shorts` is a Python pipeline for generating Korean short-form videos about ancient artifacts, archaeological sites, and ancient-civilization mysteries — from topic selection to a finished, subtitled 1080x1920 video.
|
|
53
|
+
|
|
54
|
+
> Formerly published as `shorts_test`. Renamed after the original araboja shorts project it grew out of; old links redirect here.
|
|
55
|
+
|
|
56
|
+
The script builds a roughly 60-second vertical video by selecting a topic from public web sources, drafting a Korean narration with OpenAI, collecting public-source imagery, generating TTS audio, rendering scenes with ffmpeg, burning subtitles, and cleaning intermediate files.
|
|
57
|
+
|
|
58
|
+
```mermaid
|
|
59
|
+
flowchart LR
|
|
60
|
+
A[Topic selection<br/>Wikipedia / trends] --> B[Korean script<br/>OpenAI]
|
|
61
|
+
B --> C[Images<br/>Wikimedia Commons]
|
|
62
|
+
B --> D[TTS narration<br/>OpenAI]
|
|
63
|
+
C --> E[ffmpeg render<br/>1080x1920 + subtitles + BGM]
|
|
64
|
+
D --> E
|
|
65
|
+
E --> F[final.mp4<br/>+ attribution metadata]
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Demo
|
|
69
|
+
|
|
70
|
+
A sample araboja shorts video, in the format this pipeline produces:
|
|
71
|
+
|
|
72
|
+
[](https://youtube.com/shorts/irgscHEXidA)
|
|
73
|
+
|
|
74
|
+
## What It Does
|
|
75
|
+
|
|
76
|
+
- Selects archaeology and ancient-mystery topics from Wikipedia and trend sources.
|
|
77
|
+
- Generates a Korean short-form script with scene-level narration.
|
|
78
|
+
- Collects images from Wikimedia Commons, with optional Pexels and Pixabay fallback.
|
|
79
|
+
- Creates OpenAI TTS narration.
|
|
80
|
+
- Renders 1080x1920 video scenes with title overlays, zoom/pan motion, subtitles, and BGM.
|
|
81
|
+
- Keeps the final output, generated script, and source images while cleaning temporary media files.
|
|
82
|
+
|
|
83
|
+
## Requirements
|
|
84
|
+
|
|
85
|
+
- Python 3.10+
|
|
86
|
+
- ffmpeg and ffprobe available on `PATH`, or pass `--ffmpeg_path`
|
|
87
|
+
- An OpenAI API key
|
|
88
|
+
- A local BGM file at `bgm_no_attrib/mystery.mp3`
|
|
89
|
+
- Optional API keys for Pexels and Pixabay image fallback
|
|
90
|
+
|
|
91
|
+
Install as a package (provides the `araboja-shorts` command):
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
python -m pip install git+https://github.com/drchamchi2-oss/araboja-shorts
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Or from a local checkout:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
python -m pip install .
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Or install only the runtime dependencies:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
python -m pip install -r requirements.txt
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
For development and CI-equivalent checks:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
python -m pip install -r requirements-dev.txt
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Create a local `.env` file from the example:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
copy .env.example .env
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Then edit `.env` and add your own keys. Do not commit `.env`.
|
|
122
|
+
|
|
123
|
+
## Usage
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
araboja-shorts run --verbose
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Or run the module directly from a source checkout:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
python main_gpt.py run --verbose
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
To check topic and script generation without rendering video, audio, or images:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
python main_gpt.py run --dry_run --verbose
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
If ffmpeg is not on `PATH`:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
python main_gpt.py run --ffmpeg_path C:\ffmpeg\bin\ffmpeg.exe --verbose
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Generated files are written under `out_araboza/`. Full runs write `final.mp4`, `script.json`, `media_attribution.json`, and selected source images. Dry runs write `script.json` and `media_attribution.json`.
|
|
148
|
+
|
|
149
|
+
## Development Checks
|
|
150
|
+
|
|
151
|
+
Run the local checks before opening a pull request:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
python -m py_compile main_gpt.py shorts_media.py shorts_rendering.py scripts/doctor.py
|
|
155
|
+
python -m pytest
|
|
156
|
+
python -m bandit -r main_gpt.py shorts_media.py shorts_rendering.py scripts -x tests -ll
|
|
157
|
+
python -m pip_audit -r requirements.txt
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
The GitHub Actions workflow runs the same syntax, test, static security, and dependency-audit checks on pull requests and pushes to `main`.
|
|
161
|
+
|
|
162
|
+
To check local runtime prerequisites before generating a video:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
python scripts/doctor.py
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## Configuration
|
|
169
|
+
|
|
170
|
+
Required environment variable:
|
|
171
|
+
|
|
172
|
+
```text
|
|
173
|
+
OPENAI_API_KEY=your_openai_api_key
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Optional environment variables:
|
|
177
|
+
|
|
178
|
+
```text
|
|
179
|
+
PEXELS_API_KEY=your_pexels_api_key
|
|
180
|
+
PIXABAY_API_KEY=your_pixabay_api_key
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
The repository intentionally does not include private keys, generated videos, local cache files, or BGM assets. Use only media that you are allowed to use and redistribute.
|
|
184
|
+
|
|
185
|
+
## Media And Licensing
|
|
186
|
+
|
|
187
|
+
Review `docs/media-and-licensing.md` before publishing generated videos or adding new media providers.
|
|
188
|
+
|
|
189
|
+
## Releases
|
|
190
|
+
|
|
191
|
+
Use `docs/release-checklist.md` before tagging a public release.
|
|
192
|
+
|
|
193
|
+
## Project Status
|
|
194
|
+
|
|
195
|
+
This project is early-stage OSS. The current goal is to make the single-file workflow reproducible, inspectable, and easier to maintain.
|
|
196
|
+
|
|
197
|
+
See `ROADMAP.md` for the current maintenance plan and near-term issues.
|
|
198
|
+
|
|
199
|
+
Known limitations:
|
|
200
|
+
|
|
201
|
+
- The script depends on live web APIs and external media sources.
|
|
202
|
+
- Output quality depends on available images, API responses, and local ffmpeg setup.
|
|
203
|
+
- BGM licensing is the user's responsibility.
|
|
204
|
+
- The generated script should be reviewed before publishing videos publicly.
|
|
205
|
+
|
|
206
|
+
## Security
|
|
207
|
+
|
|
208
|
+
Never commit API keys, `.env`, generated credentials, private logs, private datasets, or paid/proprietary media assets. See `SECURITY.md` for reporting guidance.
|
|
209
|
+
|
|
210
|
+
## Contributing
|
|
211
|
+
|
|
212
|
+
Focused issues and pull requests are welcome. See `CONTRIBUTING.md` before opening a PR.
|
|
213
|
+
|
|
214
|
+
## License
|
|
215
|
+
|
|
216
|
+
MIT. See `LICENSE`.
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# araboja-shorts (아라보자 쇼츠)
|
|
2
|
+
|
|
3
|
+
[](https://github.com/drchamchi2-oss/araboja-shorts/actions/workflows/python-ci.yml)
|
|
4
|
+
[](https://github.com/drchamchi2-oss/araboja-shorts/actions/workflows/codeql.yml)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
[](https://github.com/drchamchi2-oss/araboja-shorts/releases)
|
|
7
|
+
|
|
8
|
+
`araboja-shorts` is a Python pipeline for generating Korean short-form videos about ancient artifacts, archaeological sites, and ancient-civilization mysteries — from topic selection to a finished, subtitled 1080x1920 video.
|
|
9
|
+
|
|
10
|
+
> Formerly published as `shorts_test`. Renamed after the original araboja shorts project it grew out of; old links redirect here.
|
|
11
|
+
|
|
12
|
+
The script builds a roughly 60-second vertical video by selecting a topic from public web sources, drafting a Korean narration with OpenAI, collecting public-source imagery, generating TTS audio, rendering scenes with ffmpeg, burning subtitles, and cleaning intermediate files.
|
|
13
|
+
|
|
14
|
+
```mermaid
|
|
15
|
+
flowchart LR
|
|
16
|
+
A[Topic selection<br/>Wikipedia / trends] --> B[Korean script<br/>OpenAI]
|
|
17
|
+
B --> C[Images<br/>Wikimedia Commons]
|
|
18
|
+
B --> D[TTS narration<br/>OpenAI]
|
|
19
|
+
C --> E[ffmpeg render<br/>1080x1920 + subtitles + BGM]
|
|
20
|
+
D --> E
|
|
21
|
+
E --> F[final.mp4<br/>+ attribution metadata]
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Demo
|
|
25
|
+
|
|
26
|
+
A sample araboja shorts video, in the format this pipeline produces:
|
|
27
|
+
|
|
28
|
+
[](https://youtube.com/shorts/irgscHEXidA)
|
|
29
|
+
|
|
30
|
+
## What It Does
|
|
31
|
+
|
|
32
|
+
- Selects archaeology and ancient-mystery topics from Wikipedia and trend sources.
|
|
33
|
+
- Generates a Korean short-form script with scene-level narration.
|
|
34
|
+
- Collects images from Wikimedia Commons, with optional Pexels and Pixabay fallback.
|
|
35
|
+
- Creates OpenAI TTS narration.
|
|
36
|
+
- Renders 1080x1920 video scenes with title overlays, zoom/pan motion, subtitles, and BGM.
|
|
37
|
+
- Keeps the final output, generated script, and source images while cleaning temporary media files.
|
|
38
|
+
|
|
39
|
+
## Requirements
|
|
40
|
+
|
|
41
|
+
- Python 3.10+
|
|
42
|
+
- ffmpeg and ffprobe available on `PATH`, or pass `--ffmpeg_path`
|
|
43
|
+
- An OpenAI API key
|
|
44
|
+
- A local BGM file at `bgm_no_attrib/mystery.mp3`
|
|
45
|
+
- Optional API keys for Pexels and Pixabay image fallback
|
|
46
|
+
|
|
47
|
+
Install as a package (provides the `araboja-shorts` command):
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
python -m pip install git+https://github.com/drchamchi2-oss/araboja-shorts
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Or from a local checkout:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
python -m pip install .
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Or install only the runtime dependencies:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
python -m pip install -r requirements.txt
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
For development and CI-equivalent checks:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
python -m pip install -r requirements-dev.txt
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Create a local `.env` file from the example:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
copy .env.example .env
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Then edit `.env` and add your own keys. Do not commit `.env`.
|
|
78
|
+
|
|
79
|
+
## Usage
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
araboja-shorts run --verbose
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Or run the module directly from a source checkout:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
python main_gpt.py run --verbose
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
To check topic and script generation without rendering video, audio, or images:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
python main_gpt.py run --dry_run --verbose
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
If ffmpeg is not on `PATH`:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
python main_gpt.py run --ffmpeg_path C:\ffmpeg\bin\ffmpeg.exe --verbose
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Generated files are written under `out_araboza/`. Full runs write `final.mp4`, `script.json`, `media_attribution.json`, and selected source images. Dry runs write `script.json` and `media_attribution.json`.
|
|
104
|
+
|
|
105
|
+
## Development Checks
|
|
106
|
+
|
|
107
|
+
Run the local checks before opening a pull request:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
python -m py_compile main_gpt.py shorts_media.py shorts_rendering.py scripts/doctor.py
|
|
111
|
+
python -m pytest
|
|
112
|
+
python -m bandit -r main_gpt.py shorts_media.py shorts_rendering.py scripts -x tests -ll
|
|
113
|
+
python -m pip_audit -r requirements.txt
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
The GitHub Actions workflow runs the same syntax, test, static security, and dependency-audit checks on pull requests and pushes to `main`.
|
|
117
|
+
|
|
118
|
+
To check local runtime prerequisites before generating a video:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
python scripts/doctor.py
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Configuration
|
|
125
|
+
|
|
126
|
+
Required environment variable:
|
|
127
|
+
|
|
128
|
+
```text
|
|
129
|
+
OPENAI_API_KEY=your_openai_api_key
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Optional environment variables:
|
|
133
|
+
|
|
134
|
+
```text
|
|
135
|
+
PEXELS_API_KEY=your_pexels_api_key
|
|
136
|
+
PIXABAY_API_KEY=your_pixabay_api_key
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
The repository intentionally does not include private keys, generated videos, local cache files, or BGM assets. Use only media that you are allowed to use and redistribute.
|
|
140
|
+
|
|
141
|
+
## Media And Licensing
|
|
142
|
+
|
|
143
|
+
Review `docs/media-and-licensing.md` before publishing generated videos or adding new media providers.
|
|
144
|
+
|
|
145
|
+
## Releases
|
|
146
|
+
|
|
147
|
+
Use `docs/release-checklist.md` before tagging a public release.
|
|
148
|
+
|
|
149
|
+
## Project Status
|
|
150
|
+
|
|
151
|
+
This project is early-stage OSS. The current goal is to make the single-file workflow reproducible, inspectable, and easier to maintain.
|
|
152
|
+
|
|
153
|
+
See `ROADMAP.md` for the current maintenance plan and near-term issues.
|
|
154
|
+
|
|
155
|
+
Known limitations:
|
|
156
|
+
|
|
157
|
+
- The script depends on live web APIs and external media sources.
|
|
158
|
+
- Output quality depends on available images, API responses, and local ffmpeg setup.
|
|
159
|
+
- BGM licensing is the user's responsibility.
|
|
160
|
+
- The generated script should be reviewed before publishing videos publicly.
|
|
161
|
+
|
|
162
|
+
## Security
|
|
163
|
+
|
|
164
|
+
Never commit API keys, `.env`, generated credentials, private logs, private datasets, or paid/proprietary media assets. See `SECURITY.md` for reporting guidance.
|
|
165
|
+
|
|
166
|
+
## Contributing
|
|
167
|
+
|
|
168
|
+
Focused issues and pull requests are welcome. See `CONTRIBUTING.md` before opening a PR.
|
|
169
|
+
|
|
170
|
+
## License
|
|
171
|
+
|
|
172
|
+
MIT. See `LICENSE`.
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: araboja-shorts
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Automated Korean short-form history videos: topic selection, Korean narration, TTS, and 1080x1920 ffmpeg rendering.
|
|
5
|
+
Author-email: Kim hyosung <drchamchi2@gmail.com>
|
|
6
|
+
License: MIT License
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2026 Kim hyosung
|
|
9
|
+
|
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
+
in the Software without restriction, including without limitation the rights
|
|
13
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
+
furnished to do so, subject to the following conditions:
|
|
16
|
+
|
|
17
|
+
The above copyright notice and this permission notice shall be included in all
|
|
18
|
+
copies or substantial portions of the Software.
|
|
19
|
+
|
|
20
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
+
SOFTWARE.
|
|
27
|
+
|
|
28
|
+
Project-URL: Homepage, https://github.com/drchamchi2-oss/araboja-shorts
|
|
29
|
+
Project-URL: Issues, https://github.com/drchamchi2-oss/araboja-shorts/issues
|
|
30
|
+
Project-URL: Changelog, https://github.com/drchamchi2-oss/araboja-shorts/blob/main/CHANGELOG.md
|
|
31
|
+
Keywords: shorts,video,tts,ffmpeg,korean,youtube,automation
|
|
32
|
+
Classifier: Development Status :: 3 - Alpha
|
|
33
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
34
|
+
Classifier: Programming Language :: Python :: 3
|
|
35
|
+
Classifier: Topic :: Multimedia :: Video
|
|
36
|
+
Requires-Python: >=3.10
|
|
37
|
+
Description-Content-Type: text/markdown
|
|
38
|
+
License-File: LICENSE
|
|
39
|
+
Requires-Dist: openai>=1.0.0
|
|
40
|
+
Requires-Dist: Pillow>=12.2.0
|
|
41
|
+
Requires-Dist: python-dotenv>=1.2.2
|
|
42
|
+
Requires-Dist: requests>=2.31.0
|
|
43
|
+
Dynamic: license-file
|
|
44
|
+
|
|
45
|
+
# araboja-shorts (아라보자 쇼츠)
|
|
46
|
+
|
|
47
|
+
[](https://github.com/drchamchi2-oss/araboja-shorts/actions/workflows/python-ci.yml)
|
|
48
|
+
[](https://github.com/drchamchi2-oss/araboja-shorts/actions/workflows/codeql.yml)
|
|
49
|
+
[](LICENSE)
|
|
50
|
+
[](https://github.com/drchamchi2-oss/araboja-shorts/releases)
|
|
51
|
+
|
|
52
|
+
`araboja-shorts` is a Python pipeline for generating Korean short-form videos about ancient artifacts, archaeological sites, and ancient-civilization mysteries — from topic selection to a finished, subtitled 1080x1920 video.
|
|
53
|
+
|
|
54
|
+
> Formerly published as `shorts_test`. Renamed after the original araboja shorts project it grew out of; old links redirect here.
|
|
55
|
+
|
|
56
|
+
The script builds a roughly 60-second vertical video by selecting a topic from public web sources, drafting a Korean narration with OpenAI, collecting public-source imagery, generating TTS audio, rendering scenes with ffmpeg, burning subtitles, and cleaning intermediate files.
|
|
57
|
+
|
|
58
|
+
```mermaid
|
|
59
|
+
flowchart LR
|
|
60
|
+
A[Topic selection<br/>Wikipedia / trends] --> B[Korean script<br/>OpenAI]
|
|
61
|
+
B --> C[Images<br/>Wikimedia Commons]
|
|
62
|
+
B --> D[TTS narration<br/>OpenAI]
|
|
63
|
+
C --> E[ffmpeg render<br/>1080x1920 + subtitles + BGM]
|
|
64
|
+
D --> E
|
|
65
|
+
E --> F[final.mp4<br/>+ attribution metadata]
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Demo
|
|
69
|
+
|
|
70
|
+
A sample araboja shorts video, in the format this pipeline produces:
|
|
71
|
+
|
|
72
|
+
[](https://youtube.com/shorts/irgscHEXidA)
|
|
73
|
+
|
|
74
|
+
## What It Does
|
|
75
|
+
|
|
76
|
+
- Selects archaeology and ancient-mystery topics from Wikipedia and trend sources.
|
|
77
|
+
- Generates a Korean short-form script with scene-level narration.
|
|
78
|
+
- Collects images from Wikimedia Commons, with optional Pexels and Pixabay fallback.
|
|
79
|
+
- Creates OpenAI TTS narration.
|
|
80
|
+
- Renders 1080x1920 video scenes with title overlays, zoom/pan motion, subtitles, and BGM.
|
|
81
|
+
- Keeps the final output, generated script, and source images while cleaning temporary media files.
|
|
82
|
+
|
|
83
|
+
## Requirements
|
|
84
|
+
|
|
85
|
+
- Python 3.10+
|
|
86
|
+
- ffmpeg and ffprobe available on `PATH`, or pass `--ffmpeg_path`
|
|
87
|
+
- An OpenAI API key
|
|
88
|
+
- A local BGM file at `bgm_no_attrib/mystery.mp3`
|
|
89
|
+
- Optional API keys for Pexels and Pixabay image fallback
|
|
90
|
+
|
|
91
|
+
Install as a package (provides the `araboja-shorts` command):
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
python -m pip install git+https://github.com/drchamchi2-oss/araboja-shorts
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Or from a local checkout:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
python -m pip install .
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Or install only the runtime dependencies:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
python -m pip install -r requirements.txt
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
For development and CI-equivalent checks:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
python -m pip install -r requirements-dev.txt
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Create a local `.env` file from the example:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
copy .env.example .env
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Then edit `.env` and add your own keys. Do not commit `.env`.
|
|
122
|
+
|
|
123
|
+
## Usage
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
araboja-shorts run --verbose
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Or run the module directly from a source checkout:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
python main_gpt.py run --verbose
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
To check topic and script generation without rendering video, audio, or images:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
python main_gpt.py run --dry_run --verbose
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
If ffmpeg is not on `PATH`:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
python main_gpt.py run --ffmpeg_path C:\ffmpeg\bin\ffmpeg.exe --verbose
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Generated files are written under `out_araboza/`. Full runs write `final.mp4`, `script.json`, `media_attribution.json`, and selected source images. Dry runs write `script.json` and `media_attribution.json`.
|
|
148
|
+
|
|
149
|
+
## Development Checks
|
|
150
|
+
|
|
151
|
+
Run the local checks before opening a pull request:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
python -m py_compile main_gpt.py shorts_media.py shorts_rendering.py scripts/doctor.py
|
|
155
|
+
python -m pytest
|
|
156
|
+
python -m bandit -r main_gpt.py shorts_media.py shorts_rendering.py scripts -x tests -ll
|
|
157
|
+
python -m pip_audit -r requirements.txt
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
The GitHub Actions workflow runs the same syntax, test, static security, and dependency-audit checks on pull requests and pushes to `main`.
|
|
161
|
+
|
|
162
|
+
To check local runtime prerequisites before generating a video:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
python scripts/doctor.py
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## Configuration
|
|
169
|
+
|
|
170
|
+
Required environment variable:
|
|
171
|
+
|
|
172
|
+
```text
|
|
173
|
+
OPENAI_API_KEY=your_openai_api_key
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Optional environment variables:
|
|
177
|
+
|
|
178
|
+
```text
|
|
179
|
+
PEXELS_API_KEY=your_pexels_api_key
|
|
180
|
+
PIXABAY_API_KEY=your_pixabay_api_key
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
The repository intentionally does not include private keys, generated videos, local cache files, or BGM assets. Use only media that you are allowed to use and redistribute.
|
|
184
|
+
|
|
185
|
+
## Media And Licensing
|
|
186
|
+
|
|
187
|
+
Review `docs/media-and-licensing.md` before publishing generated videos or adding new media providers.
|
|
188
|
+
|
|
189
|
+
## Releases
|
|
190
|
+
|
|
191
|
+
Use `docs/release-checklist.md` before tagging a public release.
|
|
192
|
+
|
|
193
|
+
## Project Status
|
|
194
|
+
|
|
195
|
+
This project is early-stage OSS. The current goal is to make the single-file workflow reproducible, inspectable, and easier to maintain.
|
|
196
|
+
|
|
197
|
+
See `ROADMAP.md` for the current maintenance plan and near-term issues.
|
|
198
|
+
|
|
199
|
+
Known limitations:
|
|
200
|
+
|
|
201
|
+
- The script depends on live web APIs and external media sources.
|
|
202
|
+
- Output quality depends on available images, API responses, and local ffmpeg setup.
|
|
203
|
+
- BGM licensing is the user's responsibility.
|
|
204
|
+
- The generated script should be reviewed before publishing videos publicly.
|
|
205
|
+
|
|
206
|
+
## Security
|
|
207
|
+
|
|
208
|
+
Never commit API keys, `.env`, generated credentials, private logs, private datasets, or paid/proprietary media assets. See `SECURITY.md` for reporting guidance.
|
|
209
|
+
|
|
210
|
+
## Contributing
|
|
211
|
+
|
|
212
|
+
Focused issues and pull requests are welcome. See `CONTRIBUTING.md` before opening a PR.
|
|
213
|
+
|
|
214
|
+
## License
|
|
215
|
+
|
|
216
|
+
MIT. See `LICENSE`.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
README.md
|
|
3
|
+
main_gpt.py
|
|
4
|
+
pyproject.toml
|
|
5
|
+
shorts_media.py
|
|
6
|
+
shorts_rendering.py
|
|
7
|
+
araboja_shorts.egg-info/PKG-INFO
|
|
8
|
+
araboja_shorts.egg-info/SOURCES.txt
|
|
9
|
+
araboja_shorts.egg-info/dependency_links.txt
|
|
10
|
+
araboja_shorts.egg-info/entry_points.txt
|
|
11
|
+
araboja_shorts.egg-info/requires.txt
|
|
12
|
+
araboja_shorts.egg-info/top_level.txt
|
|
13
|
+
tests/test_doctor.py
|
|
14
|
+
tests/test_helpers.py
|
|
15
|
+
tests/test_media_metadata.py
|
|
16
|
+
tests/test_module_boundaries.py
|
|
17
|
+
tests/test_subtitles.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|