Skip to main content

Python client for Ephoto360.com image generation effects.

Project description

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)
)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ephoto360-0.1.1.tar.gz (288.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ephoto360-0.1.1-py3-none-any.whl (305.7 kB view details)

Uploaded Python 3

File details

Details for the file ephoto360-0.1.1.tar.gz.

File metadata

  • Download URL: ephoto360-0.1.1.tar.gz
  • Upload date:
  • Size: 288.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.1

File hashes

Hashes for ephoto360-0.1.1.tar.gz
Algorithm Hash digest
SHA256 dafc2eecd49c8ef037a4c3dc0de5738ab840f1dbb4888e9d252fbf77c3f917f6
MD5 86fbd258bf4aca7b3961c5809f783e00
BLAKE2b-256 0ff06473f3ed0558ef97a6d042030cd6cb44651ae9c2e131b83acaaeeacae7e4

See more details on using hashes here.

File details

Details for the file ephoto360-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: ephoto360-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 305.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.1

File hashes

Hashes for ephoto360-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1ff515914907cebff5755d13931f0b6f5041addf39a464700bd0d604ac17a7df
MD5 cda89ddd7e0ce8a8a141226cb1ec2a8e
BLAKE2b-256 1de0a1b1b87766eaa53719331846154df3e5a5d7dbf2ae95130c83ec2e4261d1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page