Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,8 @@ demo/*.mp4
demo/*.wav
demo/*.srt
demo/narration.txt

# 다만 제출용 최종본 한 벌은 커밋한다 — 툴체인 없이도 바로 볼 수 있도록.
# 다시 렌더할 때마다 커밋하지 말 것 (1MB 바이너리가 이력에 계속 쌓인다).
!demo/xazz_demo.mp4
!demo/xazz_demo.srt
24 changes: 14 additions & 10 deletions demo/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,20 @@

## 결과물

| 파일 | 내용 |
|---|---|
| `xazz_demo.mp4` | 시연 영상 · 1920×1080 · 2분 45초 · 한국어 자막 새겨짐 |
| `xazz_demo.srt` | 자막 파일 (영상과 동일 타임코드, 30컷) |
| `narration.wav` | 나레이션 음성 (`make_voice.py` 가 생성) |
| `xazz_demo_voiced.mp4` | 음성까지 입힌 최종본 |
| `narration.txt` | 나레이션 평문 — 다른 TTS 에 붙여 넣는 용도 |
| `narration.json` | 대본 + 컷별 노출 시간 (타임라인의 원본) |

생성물은 `.gitignore` 로 제외돼 있다 — 아래 명령이면 언제든 다시 만들어진다.
| 파일 | 내용 | 커밋 |
|---|---|---|
| `xazz_demo.mp4` | 시연 영상 · 1920×1080 · 2분 45초 · 한국어 자막 새겨짐 | ✅ |
| `xazz_demo.srt` | 자막 파일 (영상과 동일 타임코드, 30컷) | ✅ |
| `narration.json` | 대본 + 컷별 노출 시간 (타임라인의 원본) | ✅ |
| `narration.wav` | 나레이션 음성 (`make_voice.py` 가 생성) | — |
| `xazz_demo_voiced.mp4` | **음성까지 입힌 제출용 최종본** | — |
| `narration.txt` | 나레이션 평문 — 다른 TTS 에 붙여 넣는 용도 | — |

영상과 자막은 툴체인(Rust·Playwright·ffmpeg) 없이도 바로 볼 수 있도록 한 벌 커밋해 뒀다.
나머지는 `.gitignore` 로 제외돼 있고, 아래 명령이면 언제든 다시 만들어진다.

> 다시 렌더했다고 해서 `xazz_demo.mp4` 를 매번 커밋하지는 말 것 —
> 1MB 바이너리가 이력에 계속 쌓인다. 대본이나 화면이 실제로 바뀌었을 때만 갱신한다.

---

Expand Down
Binary file added demo/xazz_demo.mp4
Binary file not shown.
119 changes: 119 additions & 0 deletions demo/xazz_demo.srt
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
1
00:00:00,000 --> 00:00:04,300
Xazz는 파이썬의 생산성은 그대로 두고,

2
00:00:04,300 --> 00:00:10,300
대규모 데이터 처리의 세 가지 문제를 컴파일러가 해결합니다.

3
00:00:10,300 --> 00:00:16,000
런타임 타입 에러, GPU 자원 낭비, 보안 검증 부재.

4
00:00:16,000 --> 00:00:21,500
Rust 기반 AI 파이프라인 DSL, Xazz입니다.

5
00:00:21,500 --> 00:00:28,200
겉모습은 스크립트지만, 실행 전에 컴파일러가 먼저 코드를 읽습니다.

6
00:00:28,200 --> 00:00:34,700
선언되지 않은 컬럼, 타입 불일치, 널 안전성을 전부 잡아냅니다.

7
00:00:34,700 --> 00:00:41,500
학습을 30분 돌린 뒤에 터지는 오류를, 0.1초 만에 잡는 겁니다.

8
00:00:41,500 --> 00:00:45,700
핵심은 이게 진짜 컴파일러라는 점입니다.

9
00:00:45,700 --> 00:00:53,900
이 스크립트가 Polars와 Burn 연산을 담은 실제 Rust 소스로 변환됩니다.

10
00:00:53,900 --> 00:00:58,900
렉서부터 코드 생성기까지 전부 직접 구현했습니다.

11
00:00:58,900 --> 00:01:02,400
실제 파이프라인을 돌려보겠습니다.

12
00:01:02,400 --> 00:01:09,100
서울 공기질 데이터를 Polars LazyFrame으로 전처리하고,

13
00:01:09,100 --> 00:01:14,600
결측치를 채운 뒤 자치구별 평균 미세먼지를 집계합니다.

14
00:01:14,600 --> 00:01:18,400
선언한 그대로, 한 번에 실행됩니다.

15
00:01:18,400 --> 00:01:21,600
여기서 한 걸음 더 나갑니다.

16
00:01:21,600 --> 00:01:30,600
model 블록으로 신경망을 선언하고, train 한 줄로 Burn 엔진이 학습을 돌립니다.

17
00:01:30,600 --> 00:01:34,800
에포크마다 손실이 줄어드는 게 보이시죠.

18
00:01:34,800 --> 00:01:41,100
전처리 결과가 텐서로 그대로 넘어갑니다. 중간 파일이 없습니다.

19
00:01:41,100 --> 00:01:45,100
그리고 이번에 새로 들어간 부분입니다.

20
00:01:45,100 --> 00:01:51,300
환자 데이터에서 이름과 환자번호를 그대로 조회하는 코드입니다.

21
00:01:51,300 --> 00:01:57,800
실행하면, 차단됩니다. Polars 엔진에 닿기도 전에 멈춥니다.

22
00:01:57,800 --> 00:02:04,500
무엇이 왜 막혔는지, 어떤 법 조항에 근거했는지까지 함께 나옵니다.

23
00:02:04,500 --> 00:02:07,300
차단으로 끝나지 않습니다.

24
00:02:07,300 --> 00:02:10,800
안전한 대체 코드를 만들어 주고,

25
00:02:10,800 --> 00:02:17,800
그 코드를 같은 정책 엔진으로 다시 검사해서 통과한 것만 보여 줍니다.

26
00:02:17,800 --> 00:02:22,800
통계를 낼 때는 차등 프라이버시 노이즈를 주입해,

27
00:02:22,800 --> 00:02:28,100
집계값만으로 특정 개인을 역추적할 수 없게 만듭니다.

28
00:02:28,100 --> 00:02:35,400
사용한 프라이버시 예산과 실행 이력은 SHA-256 감사 로그로 남습니다.

29
00:02:35,400 --> 00:02:39,200
전처리부터 딥러닝, 그리고 보안까지.

30
00:02:39,200 --> 00:02:44,700
스크립트 한 장으로 끝나는 파이프라인, Xazz입니다.
Loading