Skip to main content

Ephoto360

Python client for Ephoto360.com — scrapes and generates text/logo effect images. No API key needed.


I hope a STAR ⭐ from you 😊.

Installation

pip install Ephoto360 -U

Setup

Simple setup:

from Ephoto360 import Ephoto360

client = Ephoto360()

Use it as a context manager if you want the session cleaned up automatically:

with Ephoto360() as client:
    ...

Generating an image

result = client.create(
    slug="/create-a-blackpink-style-logo-with-members-signatures-810.html",
    texts=["My Band"],
)

if result.ok:
    print(result.url)          # image URL
    result.save("output.jpg")  # download
else:
    print(result.error)

Picking a style

Every effect has a radio0[radio] group (and sometimes radio1[radio] too and one has radio2[radio] too.). Pass a styles dict to pin specific ones:

result = client.create(
    slug="/create-a-blackpink-style-logo-with-members-signatures-810.html",
    texts=["My Band"],
    styles={"radio0[radio]": "Jennie"},
)

For effects with two radio groups & When an effect requires 3 texts ( as ["a", "b", "c"] ) but only one is given, so two other "?" will be appended to the texts list:

result = client.create(
    slug="/free-retro-neon-text-effect-online-538.html",
    texts=["RETRO"],
    styles={
        "radio0[radio]": "Bg 3",
        "radio1[radio]": "Style 2",
    },
)

Leave styles out and the first available option is used. Pass random_style=True if you want a random pick instead:

result = client.create(slug, ["Hello"], random_style=True)

Browsing the catalogue

# all effects, alphabetically
for effect in client.list_effects():
    print(effect.slug)
    print(effect.name)
    print(effect.text_count, "text field(s)")
    print(effect.radio_keys)   # e.g. ['radio0[radio]', 'radio1[radio]']

# search by name or slug
results = client.search("neon")
results = client.search("blackpink")

# grab one directly — full slug or just the numeric tail works
info = client.get_effect("/create-a-blackpink-style-logo-with-members-signatures-810.html")
info = client.get_effect("810")   # same thing

# random effect
effect = client.random_effect(require_radio=True)

Inspecting an effect

info = client.get_effect("810")

print(info.name)           # "Create A Blackpink Style Logo With Members Signatures"
print(info.text_labels)    # ['Your text*']
print(info.style_labels)   # ['Jennie', 'Jisoo', 'Lisa', 'Rose']

# all options for a specific radio group
for style in info.options_for("radio0[radio]"):
    print(style.label, style.thumb)

# lookup by label (case-insensitive)
style = info.option_by_label("radio0[radio]", "lisa")

# lookup by position
style = info.option_by_index("radio0[radio]", 2)   # third option

Generating all styles

Iterates every radio0 option and returns one result per style. Good for previewing what an effect looks like across all variants.

results = client.create_all_styles(
    slug="/create-a-blackpink-style-logo-with-members-signatures-810.html",
    texts=["My Band"],
)

for r in results:
    if r.ok:
        r.save(f"{r.style}.jpg")

Some effects have a lot of options (the LoL one has 322) LOL. Use limit to avoid firing hundreds of requests:

results = client.create_all_styles(slug, ["My Band"], limit=10)

If the effect also has radio1, pin it while iterating radio0:

results = client.create_all_styles(
    slug="/free-retro-neon-text-effect-online-538.html",
    texts=["RETRO"],
    radio1_label="Style 2",
    limit=6,
)

Batch

results = client.batch_create([
    {
        "slug": "/create-a-blackpink-style-logo-with-members-signatures-810.html",
        "texts": ["Alice"],
        "styles": {"radio0[radio]": "Jennie"},
    },
    {
        "slug": "/free-retro-neon-text-effect-online-538.html",
        "texts": ["RETRO"],
        "random_style": True,
    },
])

Runs sequentially. No concurrency — the site rate-limits aggressively enough that threading causes more problems than it solves.


CreationResult fields

Field Type Notes
ok bool False means something went wrong
url str Remote image URL (only when ok is True)
styles dict[str,str] Maps radio key → label that was applied
style str Shorthand for styles["radio0[radio]"]
slug str Effect slug used
error str Populated only when ok is False

Retry and timeout settings

client = Ephoto360(
    retry_count=5,    # attempts before giving up (default 3)
    retry_delay=2.0,  # seconds between retries (default 1.5)
    timeout=60.0,     # per-request timeout in seconds (default 30)
)

Metadata

Release files for Ephoto360 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for Ephoto360 0.1.1
File Size Uploaded
ephoto360-0.1.1.tar.gz 288.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for Ephoto360 0.1.1
File Interpreter ABI Platform
ephoto360-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 594.2 kB

Release files / ephoto360-0.1.1.tar.gz

Download URL ephoto360-0.1.1.tar.gz
Size 288.5 kB
Tags Source
SHA-256 checksum
How to use checksums
dafc2eecd49c8ef037a4c3dc0de5738ab840f1dbb4888e9d252fbf77c3f917f6
BLAKE2b-256 checksum
How to use checksums
0ff06473f3ed0558ef97a6d042030cd6cb44651ae9c2e131b83acaaeeacae7e4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.1

Release files / ephoto360-0.1.1-py3-none-any.whl

Download URL ephoto360-0.1.1-py3-none-any.whl
Size 305.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1ff515914907cebff5755d13931f0b6f5041addf39a464700bd0d604ac17a7df
BLAKE2b-256 checksum
How to use checksums
1de0a1b1b87766eaa53719331846154df3e5a5d7dbf2ae95130c83ec2e4261d1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.1

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page