Slack 봇으로 이미지/GIF/영상을 받아 Slack 커스텀 이모티콘 규격(128x128 px, 128 KB 이하) 에 맞게 변환해 답신해 주는 도구.
- 봇과의 DM에 이미지/영상/GIF 파일을 첨부해 전송 (별도 명령어 불필요)
- 봇이 파일을 받아 변환 (짧은 변에 맞춰 중앙 크롭 → 128x128 → ≤128KB)
- 변환된 파일을 같은 스레드로 답신
지원 입력 확장자: jpg, jpeg, png, gif, mp4, mov, webm, avi, mkv
Slack 워크스페이스에 이모티콘으로 등록하는 단계는 수동입니다. 봇이 답신한 파일을 다운로드해 슬랙 이모티콘 추가 페이지에서 등록하세요.
- Python 3.10 이상
- ffmpeg (시스템에 설치되어 PATH에 등록되어 있어야 함)
- Windows:
winget install -e --id Gyan.FFmpeg또는 https://ffmpeg.org/download.html - macOS:
brew install ffmpeg - Linux:
sudo apt install ffmpeg등
- Windows:
- Slack 워크스페이스 + 등록한 Slack App
- https://api.slack.com/apps 에서 Create New App → From scratch 선택. 이름과 워크스페이스 지정.
- Socket Mode 활성화
- 좌측 메뉴 Socket Mode → Enable Socket Mode
- App-Level Token 생성 (scope:
connections:write) → 토큰(xapp-...)을SLACK_APP_TOKEN으로 사용
- OAuth & Permissions → Bot Token Scopes 에 다음 추가
chat:write— 변환 결과/안내 메시지 전송files:read— 사용자가 보낸 파일 다운로드files:write— 변환된 파일 업로드im:history— DM 메시지 수신
- Event Subscriptions 활성화
- Subscribe to bot events 에
message.im추가
- Subscribe to bot events 에
- 좌측 Install App → 워크스페이스에 설치 → 발급된 Bot User OAuth Token (
xoxb-...)을SLACK_BOT_TOKEN으로 사용 - 슬랙 클라이언트에서 봇과 DM 시작 (검색에서 앱 이름으로 찾기)
# 1. 가상환경 생성 및 활성화
python -m venv .venv
# Windows (Git Bash 기준)
. .venv/Scripts/activate
# macOS / Linux
# source .venv/bin/activate
# 2. 의존성 설치
pip install -r requirements.txt
# 3. 토큰 설정
cp .env.example .env
# .env 파일을 편집해 SLACK_BOT_TOKEN, SLACK_APP_TOKEN 입력python app.pySlackGIFMaker 봇 시작 로그가 보이면 정상. 봇과의 DM에 이미지/GIF/영상 파일을 첨부해 보내면 변환됩니다.
- 이미지(jpg/png): Pillow로 중앙 크롭 + 리사이즈 → 무손실 PNG → 색상 양자화 → JPG fallback 단계로 ≤128KB 보장
- GIF: 모든 프레임을 동일하게 처리 + 색상 수(256→16) / 프레임 skip(1→5) 단계적 축소
- 영상: ffmpeg로 중앙 크롭 + 128x128 + 15fps GIF 생성 → 위 GIF 파이프라인에 위임. 영상 길이는 보존
.
├── app.py # Bolt 앱 + Socket Mode 진입점
├── config.py # 이모티콘 규격, 트리거 키워드, 지원 확장자
├── handlers/
│ └── generate.py # /generate 트리거 + 다운로드 + 응답 업로드
└── processors/
├── __init__.py # 확장자 → processor 라우팅
├── image.py # jpg/png 처리
├── gif.py # 애니메이션 GIF 처리
└── video.py # mp4 등 → GIF 변환
- 매우 길거나 색상이 풍부한 영상은 마지막 fallback(16색 + skip 5)에서도 128KB를 초과할 수 있음. 이 경우 명확한 에러 메시지를 응답
- DM 전용. 채널/멘션 시나리오는 미지원
- 슬랙 이모티콘 자동 등록은 미지원 (Slack 공식 API 제한)