Home Creators Posts Import Register Favorites Logout

Downloads

Content

Extremely advanced lots of features image captioning Gradio APP developed by SECourses. 1-Click to install and run on Windows and Cloud

Patreon exclusive posts index to find our scripts easily, Patreon scripts updates history to see which updates arrived to which scripts and amazing Patreon special generative scripts list that you can use in any of your task.

Join discord to get help, chat, discuss and also tell me your discord username to get your special rank : SECourses Discord

Please also Star, Watch and Fork our Stable Diffusion & Generative AI  GitHub repository and join our Reddit subreddit and follow me on LinkedIn (my real profile)

=======

Latest Zip File : SECourses_Caption_Editor_Pro_v3.zip

JoyCaption > https://www.patreon.com/posts/110613301

CogVLM 2 > https://www.patreon.com/posts/120193330

2 March 2026 Update - v3

Massive amounts of new features added after you have requested

Please make new requests if you need

To install, download latest zip file and overwrite all previous files

Run Windows_Install.bat and then use with Windows_Start_App.bat as usual

3 October 2025 Update

Now supports Tag Analytics

Use this tab to evaluate how often tags repeat across your dataset, visualize group/category balance, and quickly preview/edit images by tag.

Provide your dataset folder. Captions must be alongside images as .txt files.

Delimiters define how tags are separated in caption files.

Optionally define Groups and Categories mappings as lines like: group_name: tag1, tag2|tag3.

Thresholds: Yellow ≥ percentage is a warning; Red ≥ percentage means over-repeated.

Just extract latest zip file and overwrite for update

15 May 2025 Update

Now supports latest Gradio - overwrite files in previous installation and run installer again

Now you can delete images from the interface - asks verification

Now it has a better more modern theme

20 September 2024 Update

A new amazing feature Token Counter added

You can give your folder and it will count every word and display number of times they appear in your entire dataset - 1 word is only counted only 1 time per image even if it has multiple times it

The generated n-grams of countings will be written into outputs folder

Useful to share and see your dataset captioning composition

3 September 2024 Update

An update to fix : Error adding status icon: cannot add non-opaque RGBA color to RGB palette

Number of images to display limited to 500

More bugs fixed and app made more robust and faster

Overwrite previous app file

Various bugs fixed and code made to be more robust, now all text operations are utf8

Features and How to Use

I was having hard time to edit captions of my training images so I developed this super easy and effective to use Gradio app.

Entire source code is available so you can edit and improve.

So easy to use. Put the folder path into Input Folder Path

It will list all the images inside it

Select image from Gallery and edit caption and save

If you want to display only unprocessed images change Filter Images to Processed

It will display all the images that you didn't save their caption yet

Also if you want batch options, select the Batch Edit Captions tab

In this tab you can add suffix or prefix to all captions in given folder

Also you can batch replace words as you wish

Match Case and Replace All Occurrences can be selected at the same time

Replace All Occurrences is wildcard search so replaces all

Do batch operations on a cloned folder to be sure that your original captions will be still backuped

Check Word tab makes you able to check out that all of your images contains activation token like ohwx man

Requirements

Tested on Python 3.10 but should work on all Pythons

How To Install

For windows run Windows_Install.bat and then run Windows_Start_App.bat

You need to have Python installed

Massed Compute (Recommend Cloud) :

Please register via this link : https://vm.massedcompute.com/signup?linkId=lp_034338&sourceId=secourses&tenantId=massed-compute

Use our coupon SECourses

Our coupon works on all GPUs now

H100 has amazing price and speed but you can use like RTX A6000 ADA as well

Full details here : https://www.patreon.com/posts/26671823

Then select our image SECourses from Creator dropdown

Then follow Massed_Compute_Instructions_READ.txt

Same as my any other Massed Compute installer script

Example tutorial for learn how to install and use Massed Compute

(Starts at 12:58) : https://youtu.be/KW-MHmoNcqo?si=G1WbG-Qw4ujWvOtG&t=778

RunPod (Cloud):

Please register via this link : https://get.runpod.io/955rkuppqv4h

Then follow Runpod_Instructions_READ.txt

Same as my any other RunPod installer script

Use the template written in Runpod_Instructions_READ.txt file

Example tutorial for learn how to install and use RunPod

(starts at 22:03) : https://youtu.be/KW-MHmoNcqo?si=QN8X8Sjn13ZYu-EU&t=1323

Screenshots of the App

Extremely advanced lots of features image captioning Gradio APP developed by SECourses. 1-Click to install and run on Windows and Cloud

Patreon exclusive posts index to find our scripts easily, Patreon scripts updates history to see which updates arrived to which scripts and amazing Patreon special generative scripts list that you can use in any of your task.

Join discord to get help, chat, discuss and also tell me your discord username to get your special rank : SECourses Discord

Please also Star, Watch and Fork our Stable Diffusion & Generative AI  GitHub repository and join our Reddit subreddit and follow me on LinkedIn (my real profile)

=======

Latest Zip File : SECourses_Caption_Editor_Pro_v1.zip

JoyCaption > https://www.patreon.com/posts/110613301

CogVLM 2 > https://www.patreon.com/posts/120193330

3 October 2025 Update

Now supports Tag Analytics

Use this tab to evaluate how often tags repeat across your dataset, visualize group/category balance, and quickly preview/edit images by tag.

Provide your dataset folder. Captions must be alongside images as .txt files.

Delimiters define how tags are separated in caption files.

Optionally define Groups and Categories mappings as lines like: group_name: tag1, tag2|tag3.

Thresholds: Yellow ≥ percentage is a warning; Red ≥ percentage means over-repeated.

Just extract latest zip file and overwrite for update

15 May 2025 Update

Now supports latest Gradio - overwrite files in previous installation and run installer again

Now you can delete images from the interface - asks verification

Now it has a better more modern theme

20 September 2024 Update

A new amazing feature Token Counter added

You can give your folder and it will count every word and display number of times they appear in your entire dataset - 1 word is only counted only 1 time per image even if it has multiple times it

The generated n-grams of countings will be written into outputs folder

Useful to share and see your dataset captioning composition

3 September 2024 Update

An update to fix : Error adding status icon: cannot add non-opaque RGBA color to RGB palette

Number of images to display limited to 500

More bugs fixed and app made more robust and faster

Overwrite previous app file

Various bugs fixed and code made to be more robust, now all text operations are utf8

Features and How to Use

I was having hard time to edit captions of my training images so I developed this super easy and effective to use Gradio app.

Entire source code is available so you can edit and improve.

So easy to use. Put the folder path into Input Folder Path

It will list all the images inside it

Select image from Gallery and edit caption and save

If you want to display only unprocessed images change Filter Images to Processed

It will display all the images that you didn't save their caption yet

Also if you want batch options, select the Batch Edit Captions tab

In this tab you can add suffix or prefix to all captions in given folder

Also you can batch replace words as you wish

Match Case and Replace All Occurrences can be selected at the same time

Replace All Occurrences is wildcard search so replaces all

Do batch operations on a cloned folder to be sure that your original captions will be still backuped

Check Word tab makes you able to check out that all of your images contains activation token like ohwx man

Requirements

Tested on Python 3.10 but should work on all Pythons

How To Install

For windows run Windows_Install.bat and then run Windows_Start_App.bat

You need to have Python installed

Massed Compute (Recommend Cloud) :

Please register via this link : https://vm.massedcompute.com/signup?linkId=lp_034338&sourceId=secourses&tenantId=massed-compute

Use our coupon SECourses

Our coupon works on all GPUs now

H100 has amazing price and speed but you can use like RTX A6000 ADA as well

Full details here : https://www.patreon.com/posts/26671823

Then select our image SECourses from Creator dropdown

Then follow Massed_Compute_Instructions_READ.txt

Same as my any other Massed Compute installer script

Example tutorial for learn how to install and use Massed Compute

(Starts at 12:58) : https://youtu.be/KW-MHmoNcqo?si=G1WbG-Qw4ujWvOtG&t=778

RunPod (Cloud):

Please register via this link : https://get.runpod.io/955rkuppqv4h

Then follow Runpod_Instructions_READ.txt

Same as my any other RunPod installer script

Use the template written in Runpod_Instructions_READ.txt file

Example tutorial for learn how to install and use RunPod

(starts at 22:03) : https://youtu.be/KW-MHmoNcqo?si=QN8X8Sjn13ZYu-EU&t=1323

Screenshots of the App

Files

Comments

Dmitry

What a Lion this Tiger is!:)

piXtar playz

Hi, I´m a little bit confused. Do I have to replace "man" with "triggerword" or do I have to replace "man" with "triggerword man". I am a man. And is it also usefull to write the "triggerword,.." at the start of every caption.txt? Thx a lot

Xavier Climent

gaves me the ERROR - Error adding status icon: color must be int or single-element tuple

Olga Povarchuk

I'm getting this error, and from png images: Error adding status icon: cannot add non-opaque RGBA color to RGB palette

Lukas

What about training a style in Flux? Should i use a triggerword ?

Olga Povarchuk

Hi, I uninstalled v3 and installed v5 and now I'm getting an error related to __get_pydantic_core_schema__ and a bunch of others. I should mention I did a fresh install of all the essentials based on your tutorial yesterday (Python 3.10.11, CUDA, C++, etc). I even checked for pip, fixed it, and then purged pip cache. Would you be willing to take a look at the error log?

Olga Povarchuk

Thanks! I just sent you the error but will send the install logs in a second

Torcello

My copy simply provides empty text files!!!

Torcello

I was attempting to make caption files ... so Imade a mistake ... as this is to edit captions already made! I attempted to make captions using JoyCaption v13 - but after the shards file is downloaded - my system just hangs?!

Federico Salmaso

Hi after i copied the folder with images and text files directory, the interface is showing an error on image caption and selected image pannels,

Larry Boles

Getting a lot of errors when grabbing and trying this out. Possibly a prereq got changed? ERROR: Exception in ASGI application Traceback (most recent call last): File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 403, in run_asgi result = await app( # type: ignore[func-returns-value] File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\uvicorn\middleware\proxy_headers.py", line 60, in __call__ return await self.app(scope, receive, send) File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\fastapi\applications.py", line 1054, in __call__ await super().__call__(scope, receive, send) File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\starlette\applications.py", line 112, in __call__ await self.middleware_stack(scope, receive, send) File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\starlette\middleware\errors.py", line 187, in __call__ raise exc File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\starlette\middleware\errors.py", line 165, in __call__ await self.app(scope, receive, _send) File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\gradio\route_utils.py", line 761, in __call__ await self.app(scope, receive, send) File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\starlette\middleware\exceptions.py", line 62, in __call__ await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app raise exc File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app await app(scope, receive, sender) File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\starlette\routing.py", line 714, in __call__ await self.middleware_stack(scope, receive, send) File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\starlette\routing.py", line 734, in app await route.handle(scope, receive, send) File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\starlette\routing.py", line 288, in handle await self.app(scope, receive, send) File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\starlette\routing.py", line 76, in app await wrap_app_handling_exceptions(app, request)(scope, receive, send) File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app raise exc File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app await app(scope, receive, sender) File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\starlette\routing.py", line 73, in app response = await f(request) File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\fastapi\routing.py", line 301, in app raw_response = await run_endpoint_function( File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\fastapi\routing.py", line 214, in run_endpoint_function return await run_in_threadpool(dependant.call, **values) File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\starlette\concurrency.py", line 37, in run_in_threadpool return await anyio.to_thread.run_sync(func) File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\anyio\to_thread.py", line 56, in run_sync return await get_async_backend().run_sync_in_worker_thread( File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\anyio\_backends\_asyncio.py", line 2470, in run_sync_in_worker_thread return await future File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\anyio\_backends\_asyncio.py", line 967, in run result = context.run(func, *args) File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\gradio\routes.py", line 431, in main gradio_api_info = api_info(False) File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\gradio\routes.py", line 460, in api_info app.api_info = app.get_blocks().get_api_info() File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\gradio\blocks.py", line 2852, in get_api_info python_type = client_utils.json_schema_to_python_type(info) File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\gradio_client\utils.py", line 893, in json_schema_to_python_type type_ = _json_schema_to_python_type(schema, schema.get("$defs")) File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\gradio_client\utils.py", line 938, in _json_schema_to_python_type elements = _json_schema_to_python_type(items, defs) File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\gradio_client\utils.py", line 908, in _json_schema_to_python_type return _json_schema_to_python_type(defs[schema["$ref"].split("/")[-1]], defs) File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\gradio_client\utils.py", line 947, in _json_schema_to_python_type des = [ File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\gradio_client\utils.py", line 948, in f"{n}: {_json_schema_to_python_type(v, defs)}{get_desc(v)}" File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\gradio_client\utils.py", line 908, in _json_schema_to_python_type return _json_schema_to_python_type(defs[schema["$ref"].split("/")[-1]], defs) File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\gradio_client\utils.py", line 947, in _json_schema_to_python_type des = [ File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\gradio_client\utils.py", line 948, in f"{n}: {_json_schema_to_python_type(v, defs)}{get_desc(v)}" File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\gradio_client\utils.py", line 955, in _json_schema_to_python_type f"str, {_json_schema_to_python_type(schema['additionalProperties'], defs)}" File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\gradio_client\utils.py", line 901, in _json_schema_to_python_type type_ = get_type(schema) File "S:\Image_Caption_Editor_v8\venv\lib\site-packages\gradio_client\utils.py", line 863, in get_type if "const" in schema: TypeError: argument of type 'bool' is not iterable

Richard Jones

Hi, I have an RTX 5070ti and need help installing the correct config and versions for my BASE setup (Python Cuda Torch etc.) Any other advise would be helpful as to installing apps like Foocus, FramePack, MagicQuill. Thanks.

Steve

hello, your latest zip file is missing the app.py file.

Steve

I see, you must install v1 first.