256바이트 코드 단편영화 ‘Bitwise Liminal’
(killedbyapixel.github.io)- Bitwise Liminal은 256바이트 코드로 만든 웹 기반 단편영화로, Lovebyte Party 2024에서 선보인 작품임
- 이야기는 마당 세일에서 발견한 오래된 VHS 테이프에 “Bitwise Liminal”이라는 라벨이 붙어 있는 설정으로 시작함
- 재생된 테이프에는 정적 노이즈만 보이지만, 이후 화자는 불안한 꿈과 테이프에 대한 집착을 겪게 됨
- 조사 끝에 테이프가 디지털 백업이라는 사실이 드러나고, 특수 소프트웨어로 복구한 데이터는 256바이트 프로그램이었음
- 웹 브라우저에서 프로그램을 열자 꿈과 닮은 장면이 나타나며, 화자는 더 이상 잠들지 않고 계속 그것을 바라보게 됨
256바이트 코드로 만든 단편영화
- Bitwise Liminal은 “A Short Film in 256 Bytes of Code”라는 부제를 가진 짧은 코드 기반 작품임
- Lovebyte Party 2024에서 선보인 항목으로 표시되어 있음
- 오래된 VHS 테이프를 발견한 뒤, 그 안에 숨겨진 데이터를 복구해 웹 브라우저에서 실행하는 이야기 형식을 취함
VHS 테이프에서 브라우저까지 이어지는 서사
- 화자는 마당 세일에서 “Bitwise Liminal”이라고 샤피로 적힌 오래된 VHS 테이프를 발견함
- 테이프를 재생했을 때 화면에는 정적 노이즈만 나옴
- 이후 생생하고 불안한 꿈을 꾸기 시작하고, 이상한 VHS 테이프를 계속 떠올림
- 조사 결과 테이프가 디지털 백업임을 알게 되고, 특수 소프트웨어로 데이터를 복구함
- 복구된 데이터는 256바이트 프로그램이었고, 화자는 떨리는 손으로 이를 웹 브라우저에서 엶
- 브라우저에서 본 장면은 화자가 꾸던 꿈을 떠올리게 하며, 마지막에는 더 이상 잠들 필요가 없고 계속 보고만 있는 상태로 끝남
댓글과 토론
Hacker News 의견들
-
이건 인상적이고 실제 영화 장면처럼 보임. 그런데 이게 256바이트에 들어간다는 걸 생각하면, 우리가 매일 쓰는 것들이 얼마나 비대해졌는지와 현재 브라우저가 얼마나 강력한지 다시 보게 됨
그래도 최근 HN에 공유된 "the Sheep and the Flower" 같은 8K 데모 https://news.ycombinator.com/item?id=39121101나, 실제 YouTube 영상 https://www.youtube.com/watch?v=R1NagZN2kjY을 리메이크한 "One of those days" https://www.pouet.net/prod.php?which=75790 / YouTube 영상 https://youtu.be/8T_Um-cw0Wc 쪽이 더 놀라웠음
256바이트 영화보다는 훨씬 크지만, 그래픽과 이야기를 훨씬 많이 전달함 -
우리 같은 보통 사람들을 위해 각 부분을 풀어 설명한 주석 달린 버전이 있을까?
- 코드를 손으로 풀어보고, 가능한 곳에는 주석과 의미 있는 변수명을 붙여봤음. 그래도 안에 들어 있는 수학은 아직 이해 못 함
https://github.com/callumlocke/bitwise-liminal-expanded
- 코드를 손으로 풀어보고, 가능한 곳에는 주석과 의미 있는 변수명을 붙여봤음. 그래도 안에 들어 있는 수학은 아직 이해 못 함
-
최근 관련 글: Cross My Heart – A Frogger Demake in 256 Bytes of HTML/JS - https://news.ycombinator.com/item?id=39336677 - 2024년 2월, 댓글 44개
보통 후속 제출은 가중치를 낮추지만(https://hn.algolia.com/?dateRange=all&page=0&prefix=true&query=follow-up%20downweight&sort=byDate&type=comment), 이번에는 (a) 제출자가 저자이고 (b) 작업물이 훌륭해서 https://news.ycombinator.com/showhn.html 기준에 따라 Show HN으로 바꾸고 그대로 두었음 -
이게 “단편 영화”라면, 방금 내 새 소설을 읽은 셈임
t+=.1을t+=.01로 바꾸고9986을9e3으로 바꾸면, 여전히 256바이트 안에서 약 45초 루프를 만들 수 있음. 다만 화면 아래쪽 일부가 잘릴 것임
-
사소한 점이지만,
onload이벤트만 쓰려고 canvas 안에 svg를 임베드한 건 처음 봄. 이 맥락에서는 canvas가 bare id로 참조되는데, 이상하면서도 멋짐- 알고 보니
script태그를 쓰는 것보다 svg onload에 넣는 쪽이 아주 조금 더 작음
canvas onclick이벤트에 넣으면 공간을 조금 더 아낄 수도 있음 - 왜 그게 허용되는지 궁금함. JavaScript에서 그렇게 할 수 있는 줄 몰랐음
- 알고 보니
-
일반적인 1KB 게임잼처럼 zip, gzip, 접미 처리까지 한 결과를 제출하고 에셋은 기준에서 빼는 방식이 아니라, 정말 순수 256바이트라는 점이 너무 대단함. 경의를 표함
- 이것도 멋짐: https://linusakesson.net/scene/a-mind-is-born/
- 거의 불가능에 가까운 미친 도전이고, 실제로 동작하면 마법처럼 보이는 작업임
- 압축 해제기를 엔트리에 포함하는 건 언제나 가능함. PNG 부트스트랩은 JavaScript 데모씬에서 오래전부터 꽤 인기 있었고, 1KB 이상 데모에서는 효과가 나기 시작함
더 작은 크기에는 다른 대안도 있지만, 256바이트 데모는 일반적으로 압축 해제기를 넣기엔 너무 작음. 다만 에셋을 기준에서 빼는 부분에는 동의함 - 그런 대회에서
import gameassets도 허용되나?
덧붙이면 Python에서는import GOTO가 동작함 :)
-
이 사람 작업은 늘 입이 벌어짐. 사용하는 도구 설명은 여기 있음: https://frankforce.com/tools/
마이크로 애니메이션 블로그 Dwitter 작업은 여기: https://www.dwitter.net/u/KilledByAPixel
YouTube 설명: https://www.youtube.com/watch?v=HV7Dmo277Rs- 그 “YouTube 설명”은 실제로 Dweet들이 어떻게 동작하는지 설명하지는 않음. 작업 자체는 놀랍고 보는 것도 좋았고, 직접 보여주는 걸 듣는 것도 기대되지만, 상세한 작동 원리 해설을 찾는 사람에게는 그 영상이 실망스러울 것임
-
이런 걸 보면 생명 전체가 정말 DNA에 인코딩될 수 있다는 생각이 듦. 인간 유전체를 gzip으로 압축하면 약 4MB 정도라는 글을 읽었는데, 직관적으로는 인간을 표현하기엔 너무 작아 보였음
하지만 256바이트에서 이런 동작이 나온다면, 내 직관이 틀린 게 분명함- 4MB면
2^(3.2 * 10^7)개의 가능한 상태를 구분하기에 충분함. 그 상태들 중 극히 일부의 극히 일부의 극히 일부의 극히 일부만 기능하는 생명체로 해석할 수 있는 압축 해제기가 있다고 해보자
지구에는 약 1조 종이 있고https://www.nsf.gov/news/news_summ.jsp?cntn_id=138446, 현재 존재하지 않는 잠재 종이 그보다 1조 배 더 많고 각 종마다 1조 가지 변이가 있다고 치자. 여기에 넉넉히 또 1조를 곱해도, Wolfram Alpha 기준https://www.wolframalpha.com/input?i2d=true&i=Divide%5BPower%5B2%2C3.2Power%5B10%2C7%5D%5D%2Ca+trillion+trillion+trillion+trillion%5D++a+percent+of+a+percent+of+a+percent+of+a+percent 대략 10의 1천만 제곱 정도의 오차 여유가 남음
여기서 “대략”은 산맥이 거친 사포와 대략 비슷하다는 식의 의미지만, 너무 둥글어서 반올림하지 않을 수 없다는 뜻임 - DNA만으로 생명체를 복제할 수 있다는 건 오해임. 새 생명체가 형성되려면 부모에게서 전달되는 배아의 생물학적 기반, 즉 생물학적 인프라도 필요함
- 며칠 전 HN에 올라온 글 중에 DNA를 코드로, 세포를 컴퓨터나 기계로 보는 관점에 반대하는 글이 있었음
https://www.nature.com/articles/d41586-024-00327-x - 진공 속에서 DNA만으로 생성된 생명은 아마 꽤 지루할 것임. 생명 전체에는 상호작용할 환경이 필요하고, 현재로서는 그런 환경이 하나뿐인데, 단일한 것은 잘 압축되지 않음
또 Mandelbrot 집합을 다시 보면, 꽤 단순한 과정 안에도 엄청난 정보가 들어 있음
마지막으로 이 256바이트의 인상을 조금 낮춰 보자면, 이를 지원하는 하드웨어와 소프트웨어가 필요하다는 점도 고려해야 함. 이 256바이트가 C64에서 같은 환상을 만들어내지는 못할 것임 - 4MB짜리 난수 생성기 시드일 수도 있음
- 4MB면
-
이걸 보니 내 5560U의 시스템 팬이 100%까지 올라감 :-)
-
이 단편 영화에서 뭘 보고 있는 건지 설명해줄 수 있을까? 흑백 애니메이션에 상자들이 움직이고 잡음 섞인 선들이 보이긴 하는데, 의미를 잘 모르겠음
- 그게 바로 영화임
놀라운 점은 파일 크기가 얼마나 작은가임. 256바이트임
얼마나 대단한지 설명하자면, 영화 전체가 첫 프레임 스크린샷보다 약 58배 작음. 1.44MB 플로피 디스크 하나에 이 영화 전체를 5,000번 넘게 넣고도 공간이 남음
보통 영상은 여러 이미지와, 이미지의 어느 부분이 어디로 가는지 알려주는 정보로 구성됨
하지만 이 영화에는 이미지 데이터가 없음. 시간에 따라 서로 다른 밝기의 상자들을 그리는 약간의 수학만 들어 있음
- 그게 바로 영화임