Sylvatica.

Back to Library

ephoto

js 1/27/2026
10
const axios = require("axios");
const FormData = require("form-data");
const cheerio = require("cheerio");

const EFFECT_URLS = {
    glitchtext: 'https://en.ephoto360.com/create-digital-glitch-text-effects-online-767.html',
    writetext: 'https://en.ephoto360.com/write-text-on-wet-glass-online-589.html',
    advancedglow: 'https://en.ephoto360.com/advanced-glow-effects-74.html',
    typographytext: 'https://en.ephoto360.com/create-typography-text-effect-on-pavement-online-774.html',
    pixelglitch: 'https://en.ephoto360.com/create-pixel-glitch-text-effect-online-769.html',
    neonglitch: 'https://en.ephoto360.com/create-impressive-neon-glitch-text-effects-online-768.html',
    flagtext: 'https://en.ephoto360.com/nigeria-3d-flag-text-effect-online-free-753.html',
    flag3dtext: 'https://en.ephoto360.com/free-online-american-flag-3d-text-effect-generator-725.html',
    deletingtext: 'https://en.ephoto360.com/create-eraser-deleting-text-effect-online-717.html',
    blackpinkstyle: 'https://en.ephoto360.com/online-blackpink-style-logo-maker-effect-711.html',
    glowingtext: 'https://en.ephoto360.com/create-glowing-text-effects-online-706.html',
    underwatertext: 'https://en.ephoto360.com/3d-underwater-text-effect-online-682.html',
    logomaker: 'https://en.ephoto360.com/free-bear-logo-maker-online-673.html',
    cartoonstyle: 'https://en.ephoto360.com/create-a-cartoon-style-graffiti-text-effect-online-668.html',
    papercutstyle: 'https://en.ephoto360.com/multicolor-3d-paper-cut-style-text-effect-658.html',
    watercolortext: 'https://en.ephoto360.com/create-a-watercolor-text-effect-online-655.html',
    effectclouds: 'https://en.ephoto360.com/write-text-effect-clouds-in-the-sky-online-619.html',
    blackpinklogo: 'https://en.ephoto360.com/create-blackpink-logo-online-free-607.html',
    gradienttext: 'https://en.ephoto360.com/create-3d-gradient-text-effect-online-600.html',
    summerbeach: 'https://en.ephoto360.com/write-in-sand-summer-beach-online-free-595.html',
    luxurygold: 'https://en.ephoto360.com/create-a-luxury-gold-text-effect-online-594.html',
    multicoloredneon: 'https://en.ephoto360.com/create-multicolored-neon-light-signatures-591.html',
    sandsummer: 'https://en.ephoto360.com/write-in-sand-summer-beach-online-576.html',
    galaxywallpaper: 'https://en.ephoto360.com/create-galaxy-wallpaper-mobile-online-528.html',
    '1917style': 'https://en.ephoto360.com/1917-style-text-effect-523.html',
    makingneon: 'https://en.ephoto360.com/making-neon-light-text-effect-with-galaxy-style-521.html',
    royaltext: 'https://en.ephoto360.com/royal-text-effect-online-free-471.html',
    freecreate: 'https://en.ephoto360.com/free-create-a-3d-hologram-text-effect-441.html',
    galaxystyle: 'https://en.ephoto360.com/create-galaxy-style-free-name-logo-438.html',
    amongustext: 'https://en.ephoto360.com/create-a-cover-image-for-the-game-among-us-online-762.html',
    rainytext: 'https://en.ephoto360.com/foggy-rainy-text-effect-75.html',
    lighteffects: 'https://en.ephoto360.com/light-effects-74.html'
};

class Ephoto {
    getStyles() {
        return Object.keys(EFFECT_URLS);
    }

    async create(style, text) {
        try {
            const url = EFFECT_URLS[style];
            if (!url) {
                return {
                    status: false,
                    message: "Style tidak ditemukan."
                };
            }

            const formData = new FormData();
            const UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36";

            const initialResponse = await axios.get(url, {
                headers: { 'user-agent': UA }
            });

            const $ = cheerio.load(initialResponse.data);
            const token = $('input[name=token]').val();
            const buildServer = $('input[name=build_server]').val();
            const buildServerId = $('input[name=build_server_id]').val();
            const cookie = initialResponse.headers['set-cookie']?.join('; ');

            if (!token) throw new Error("Token tidak ditemukan.");

            formData.append('text[]', text);
            formData.append('token', token);
            formData.append('build_server', buildServer);
            formData.append('build_server_id', buildServerId);

            const postResponse = await axios({
                url: url,
                method: 'POST',
                data: formData,
                headers: {
                    'Accept': '*/*',
                    'Accept-Language': 'en-US,en;q=0.9',
                    'user-agent': UA,
                    'cookie': cookie,
                    ...formData.getHeaders()
                }
            });

            const $$ = cheerio.load(postResponse.data);
            const formValueRaw = $$('input[name=form_value_input]').val();
            
            if (!formValueRaw) throw new Error("Gagal parsing form value.");

            const formValueInput = JSON.parse(formValueRaw);
            formValueInput['text[]'] = formValueInput.text;
            delete formValueInput.text;

            const finalResponse = await axios.post(
                'https://en.ephoto360.com/effect/create-image', 
                new URLSearchParams(formValueInput), 
                {
                    headers: {
                        'user-agent': UA,
                        'cookie': cookie
                    }
                }
            );

            if (!finalResponse.data.success) throw new Error("Gagal generate image.");

            return {
                status: true,
                style: style,
                text: text,
                url: buildServer + finalResponse.data.image
            };

        } catch (e) {
            return {
                status: false,
                message: e.message
            };
        }
    }
}

module.exports = { Ephoto };