
lila-gif는 체스 포지션과 게임을 GIF로 렌더링하고 프레임 단위로 스트리밍하는 웹 서비스다. 저장소 예시 GIF는 363 KiB이며, 렌더링 시간은 약 60ms, 프레임 수는 93개, 색상 수는 255개, 크기는 720×840픽셀이다.
서비스는 기본적으로 127.0.0.1:6175에서 요청을 받는다. 실행 옵션은 다음과 같다.
lila-gif USAGE: lila-gif [OPTIONS] OPTIONS: --bind <BIND> Listen on this address [default: 127.0.0.1:6175] -h, --help Print help information
GET /image.gif 요청에는 FEN 포지션을 전달해 정지 이미지를 만들 수 있다.
curl "http://localhost:6175/image.gif?fen=4k3/6KP/8/8/8/8/7p/8" --output image.gif
FEN은 보드 정보만으로 지정할 수 있으며, 기본값은 시작 포지션이다. 흰색·검은색 선수 이름은 각각 100바이트까지 전달할 수 있고, 알려진 체스 타이틀은 강조 표시된다. GIF 메타데이터에 넣을 설명은 255바이트까지 지원한다. 그 밖에 UCI 표기법의 마지막 수, 체크 상태인 왕의 칸, 보드 방향, 테마와 기물 세트를 지정할 수 있다. 방향은 기본값이 white이며 black을 전달하면 보드를 뒤집는다. 테마 기본값은 brown이고 blue, brown, green, ic, pink, purple을 선택할 수 있다. 기물 세트는 목록에서 고른다.
POST /game.gif에는 게임 프레임과 표시 옵션을 전달해 애니메이션 GIF를 만들 수 있다. 기본 프레임 지연 시간은 50센티초이며 프레임마다 별도로 바꿀 수 있다. 각 프레임에는 FEN을 지정하고 마지막 수나 체크 상태인 왕을 강조할 수 있다.
{
"white": "Molinari", // optional
"black": "Bordais", // optional
"comment": "https://www.chessgames.com/perl/chessgame?gid=1251038", // optional
"orientation": "white", // default
"theme": "brown", // default
"piece": "cburnett", // default
"delay": 50, // default frame delay in centiseconds
"frames": [
// [...]
{
"fen": "r1bqkb1r/pp1ppppp/5n2/2p5/2P1P3/2Nn2P1/PP1PNP1P/R1BQKB1R w KQkq - 1 6",
"delay": 500, // optionally overwrite default delay
"lastMove": "b4d3", // optionally highlight last move
"check": "e1" // optionally highlight king
}
]
}
GET /example.gif은 예시 게임을 렌더링한다. 구현 방식은 실행 시 벡터 그래픽을 그리는 대신, 가능한 배경색마다 기물 이미지를 미리 렌더링하는 것이다. 제작자는 이 방식으로 색상 팔레트를 미리 준비하며, 기물에는 배경별 안티앨리어싱을 위한 색도 필요하다고 설명한다. 실행 중에는 스프라이트를 복사하고 GIF로 인코딩하며, 렌더링 시간의 95% 이상이 LZW 압축에 쓰인다고 밝힌다. 애니메이션 프레임에는 바뀐 칸만 투명한 배경으로 담긴다.
lila-gif는 GNU Affero General Public License 버전 3 또는 이후 버전으로 제공된다. 생성 이미지에는 Apache License 2.0의 Noto Sans 글꼴과 여러 라이선스가 적용되는 기물 세트가 포함된다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요