~13 min · generative-art, provenance, acceptance-criteria, real-pixels
Level 0불 꺼진 작업장
0 XP0/35 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
모든 프레임 한가운데를 지나는 선
작업장은 생성 이미지를 화면에 올릴 수 있어. 그리고 그 전부를 직접 공급자 부르는 대신 가족 이미지 엔진을 거쳐 보내. 목소리랑 같은 소유권 규칙이야. 근데 흥미로운 제약은 이미지가 어디서 오냐가 아냐. 뭘 그려도 되냐야.
렌더의 모든 프레임은 세 범주 중 하나에 들어가고, 범주끼린 안 섞여. 사실을 담은 화면은 코드랑 데이터에서 렌더돼. 이름, 숫자, 구조, 시청자가 오해할 수 있는 건 전부. 앱 화면은 살아 있는 소프트웨어의 진짜 스크린샷이야. 목업은 절대 안 되고. 생성 이미지는 분위기랑 전환만 실어.
단단한 관문이 세 번째 범주에 앉아 있어. 읽히는 가짜 인터페이스 요소나 지어낸 앱 이름, 숫자가 자라난 아트 카드는 그 자리에서 거절이야. 완화도 없고, 라벨 붙이기도 없고, 거절하고 다시 생성. 논리는 이래. "이 화면 위의 사실은 전부 진짜"라는 주장은 쪼갤 수가 없거든. 경계 하나가 흐려지면 그 프레임 하나를 잃는 게 아니라 나머지 프레임 전부의 신뢰를 잃어. 시청자가 이제 하나하나를 의심해야 하니까.
자기를 안 속이면서 생성물 심사하기
생성 이미지엔 합격 기준이 필요해. "보기 좋나"는 판정 절차가 아니거든. 실제로 작동하는 계층형 버전은 이렇게 생겼어.
단단한 관문이 먼저고 협상이 안 돼. 글자는 전체 해상도에서 완벽해야 하고, 해부학은 뜯어봐도 버텨야 하고, 사실 오염이 없어야 해. 하나라도 걸리면 논의 없이 재생성이야. 시청자가 즉각 알아채는 실패들이거든.
측정 검사가 다음인데, 핵심 수는 전달 크기에서 판정하기야. 큰 화면에 전체 해상도로 띄워놓고 심사하는 카드는, 어떤 시청자도 겪지 않을 조건에서 심사받는 거야. 실제로 받는 크기랑 머무는 시간으로 줄여봐. 전체 크기에서 멀쩡하던 게 무너지고, 좀 거칠어 보이던 게 안 보이게 돼.
비교 선택이 마지막이고, 결과를 제일 많이 바꾸는 게 이거야. 절대 품질 판정은 못 믿어. "이거 좋아?"라고 물으면 네가 바라던 모양의 답이 나와. 상대 순위는 훨씬 튼튼하고. 그래서 자리마다 후보를 여러 장 만들고, 기준으로 순위를 매기고, 승자를 쓰고, 진 것들을 탈락 사유까지 붙여서 남겨. 그게 나중에 그 안목을 감사 가능하게 만들어.
Code
세 범주, 그리고 그 사이의 관문·text
FACTUAL rendered from code + data
names, quantities, structures, relationships
-> deterministic. same inputs, same pixels.
APPLICATION real screenshots of software that actually runs
-> never a mockup, never a redraw, never "close enough"
ART generated; mood, texture, transitions
-> HARD GATE: no readable interface elements,
no invented product names, no numbers,
no fake data of any kind
# The gate is absolute because the credibility claim is global:
# a viewer who catches ONE invented detail must now doubt all of them.
의견이 아니라 파이프라인으로서의 합격 판정·python
def accept(candidates: list[Card], slot: Slot) -> Card:
"""Layered acceptance. Hard gates first, ranking last."""
survivors = []
for c in candidates:
if not text_letter_perfect(c, at="full"):
log_rejection(c, "text malformed at full resolution")
continue
if has_factual_pollution(c): # fake UI, invented names, digits
log_rejection(c, "factual pollution: art may not assert facts")
continue
if not anatomy_ok(c):
log_rejection(c, "anatomy")
continue
survivors.append(c)
if not survivors:
raise NoAcceptableCandidate(slot) # regenerate; never "ship the least bad"
# judged at DELIVERY size, not authoring size
ranked = sorted(survivors, key=lambda c: score(c.downscaled(slot.display_size)))
winner = ranked[-1]
for loser in ranked[:-1]:
log_rejection(loser, f"ranked below winner: {compare(loser, winner)}")
return winner
진짜 데이터랑 예시용 내용이 섞여 있는 화면이나 문서를 하나 골라봐. 선을 대놓고 그어. 어떤 요소가 하중을 받는 사실이고 어떤 게 장식인지 적어. 그다음 확인해. 읽는 사람이 설명 없이 그 둘을 가려낼 수 있어? 못 하면 이 강의가 말한 문제랑 같은 걸 갖고 있는 거고, 해법은 아무도 안 읽는 캡션이 아니라 눈에 보이는 규칙이야.
Hint
데모의 자리 채우기 데이터가 전형적인 경우야. 지어냈지만 그럴싸한 숫자가 든 스크린샷이 문서에 재사용되고, 세 번째 재사용쯤엔 그게 가짜였다는 걸 아무도 기억 못 해. 지어낸 게 진짜로 오인될 수 있으면, 구조적으로 표시하든가 아예 그런 모양으로 안 만들든가 해.
Progress
Progress is local-only — sign in to sync across devices.