openjutsu
영상에서 원클릭으로 인물 교체, ComfyUI·MiniMax H3 기반 오픈소스 로컬 힉스필드 겐주츠 대안, FLUX.3 Klein 재조명 지원
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗OpenSummary turns your photos into two things you can post: a clean summary image showing the EXIF data (aperture, shutter speed, ISO, focal length, date, camera, lens), and a set of equal slices of the same photo for carousel posts.
It runs entirely in your browser. There is no server, no account and no upload: your photos are read and processed on your own device.
Live at opensummary.app.
<original>_summary.jpg and <original>_<n>of<total>.jpg.There is no build step, no framework and no package manager. The whole app is static files.
index.html The app: markup, CSS and JavaScript in one file
onboarding.html One-time intro page, shown on first visit
exif.js EXIF reader (fork of exif-js, see Credits)
icons/ SVG icons used on the summary image
huey.jpg Example photos used on the onboarding page
b747.jpg
Inside index.html, the script is organised roughly in this order:
Image.getExif reads the file with exif.js, a fork of exif-js. buildInfo formats the values and splits them into a top group (exposure settings and date) and a bottom group (camera, lens, copyright). Values that are missing or invalid are skipped rather than printed as NaN.drawSummary paints the blurred photo onto a canvas, then the icons and text. drawPiece crops slice i of n out of the original. All sizes are relative to the image's shorter side, so a preview and a full-resolution render look the same.render runs when the files or options change. It produces a small preview for the screen and defers the full-quality render until the user downloads, using the same parameters. Output is capped at 16 megapixels to stay within mobile canvas limits. Rapid slider changes are debounced, and a run counter cancels stale renders.Three small pieces of state are kept in localStorage: whether the onboarding page has been seen, the theme choice, and the last copyright text you typed (so it is autofilled next time). Nothing else is stored. Crawlers skip the onboarding redirect.
The only external request the app makes is for context-filter-polyfill, loaded from jsDelivr. It makes the canvas filter property (used for the blur) work on iOS, where it is not supported natively. Fonts and styles for the app itself are local.
Any static file server works. For example:
git clone https://github.com/LetsPlaySimi/OpenSummary.git
cd OpenSummary
python3 -m http.server 8000
Then open http://localhost:8000. Opening index.html directly from disk mostly works too, but a local server is more reliable.
The site is deployed at opensummary.app as plain static files. To host your own copy, upload the contents of the repository to any static host. No configuration is needed.
Issues and pull requests are welcome. Keep changes small and focused where you can, and test with a few real photos, including ones with missing EXIF data.
Vibecoding is 100% allowed. Code written with an AI assistant is welcome here, and you do not need to disclose it. The only standard is that the change works and you have run it yourself.
By contributing, you agree that your contribution is released under the same license as the project (see below).
OpenSummary builds on two open source libraries:
exif.js.ctx.filter (the canvas blur) work on iOS.Thanks to their authors and contributors.
OpenSummary is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0). In plain terms:
The full text is in LICENSE. The libraries listed under Credits are not covered by this license and keep their own.