CodeShadow
76 subscribers
288 photos
47 videos
13 files
150 links
👋 Я Артемий — преподаватель Python и фрилансер.

💻 Показываю, как код и нейросети помогают зарабатывать и упрощать работу.

🚀 Делюсь проектами, опытом и лайфхаками из реальной практики.

✍🏻 Вопросы и идеи: @MifmanRu
Download Telegram
Быстрый старт для использования локальных нейросетей. Что это такое и для чего нужно 💪
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
322
💬 Мотивация: Как не бросить Python на второй неделе

Секрет прост: делай то, что можно потрогать руками.
Вместо того чтобы зубрить теорию списков, напиши бота, который скидывает тебе курс валют или мемы.

Когда ты видишь результат своего кода — просыпается азарт.
Сначала делай рабочий прототип, а потом оптимизируй.
Маленькие шаги каждый день дают больше, чем штурм раз в месяц.
💯43🤓11
Локальная нейро-говорилка. Что вообще происходит 👀

Я давно хотел показать пример нейросети, которая работает с голосом локально, без API, без облаков и без подписок.

Сегодня начнём простой кейс:
нейро-говорилка на основе XTTS, которую потом можно легко адаптировать под ChatterBox.


Что умеет этот проект:
✅ берёт обычный текст
✅ использует пример голоса (wav/mp3)
✅ генерирует реалистичную речь
✅ работает полностью локально (если модель скачана)

Структура проекта будет максимально простой:
project/
├─ config.py
├─ voice.py
├─ text.txt
└─ voice_example.mp3


Начнём с конфига — это мозг всей настройки.
Вот базовый config.py:
CONFIG = {
"model": "tts_models/multilingual/multi-dataset/xtts_v2",
"language": "ru",
"speaker_wav": "voice_example.mp3",
"output_file": "result.wav",

"temperature": 0.5,
"length_penalty": 1.0,
"repetition_penalty": 5.0,
"top_k": 50,
"top_p": 0.85,

"speed": 1.0,
"enable_text_splitting": True,
}


Что важно понять сразу: 🤔
❗️ модель не скачивается кодом, она подтягивается локально через TTS
❗️ при первом запуске XTTS может долго грузиться
❗️ нужен пример голоса (любой короткий wav/mp3 на 1-2 минуты)

В следующем посте — напишем сам скрипт генерации голоса 👨‍💻
Будет уже слышимый результат.
Please open Telegram to view this post
VIEW IN TELEGRAM
322
Генерируем голос из текста (XTTS) 👩‍💻

Продолжаем.
Теперь напишем сам скрипт, который читает текст и превращает его в голос.

Создаём файл voice.py.


Сначала базовые импорты и загрузка текста:
from TTS.api import TTS
import torch
from config import *

text = open('text.txt', 'r', encoding='utf-8').read()


Теперь инициализация модели:
print("🔄 Загрузка модели...")
tts = TTS(
CONFIG["model"],
progress_bar=True,
gpu=torch.cuda.is_available()
)


🗣И вот самый главный кусок — генерация аудио:
print("🎤 Генерация аудио...")
tts.tts_to_file(
text=text,
file_path=CONFIG["output_file"],
speaker_wav=CONFIG["speaker_wav"],
language=CONFIG["language"],

temperature=CONFIG["temperature"],
length_penalty=CONFIG["length_penalty"],
repetition_penalty=CONFIG["repetition_penalty"],
top_k=CONFIG["top_k"],
top_p=CONFIG["top_p"],
speed=CONFIG["speed"],
enable_text_splitting=CONFIG["enable_text_splitting"]
)


Если всё ок — после запуска появится файл result.wav.

Что важно:
❗️ speaker_wav сильно влияет на результат
❗️ короткий, чистый голос работает лучше
❗️ параметры можно крутить бесконечно (и это кайф)

В следующем посте:
💎 как запускать это стабильно
💎 как адаптировать под ChatterBox
💎 и где чаще всего всё ломается 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
222
⚙️ Лайфхак: Используй f-строки как профи

Забудь про склеивание строк через плюс. Это неудобно и часто ведет к ошибкам.
В Python есть f-строки, которые позволяют вставлять переменные и даже код прямо в текст.

name = "Артемий"
income = 50000
print(f"Фрилансер {name} заработал {income / 80:.2f} $ за вечер")


Это делает код чище, а структуру понятнее — особенно когда данные сложные.
2🤔1🤩1
Запуск, ошибки и адаптация под ChatterBox

Собираем всё в рабочий кейс 💼

Как запустить
☀️ Установить зависимости (TTS, torch)
☀️ Скачать модель XTTS (она подтянется автоматически при первом запуске)
☀️ Положить text.txt с текстом + voice_example.mp3 с примером голоса

☀️ Запустить:
python voice.py


Если модель скачана — всё работает офлайн. 😳

Частые ошибки ⛔️
➡️ не найден speaker_wav
➡️ слишком длинный текст без enable_text_splitting
➡️ нет GPU — медленно, но работает
➡️ плохой пример голоса — "робот"

Адаптация под ChatterBox
Сама идея не меняется.

Меняется только импорт библиотеки, способ вызова генерации, формат передачи параметров


Готовый проект можно получить бесплатно ➡️ ЗДЕСЬ
Please open Telegram to view this post
VIEW IN TELEGRAM
22
💡 Совет фрилансеру: Комментируй код для будущего себя

Когда пишешь проект на заказ, кажется, что логика очевидна.
Но через месяц заказчик попросит правку, и ты потратишь часы только на то, чтобы вспомнить свой же алгоритм.

Пиши комментарии перед сложными частями.
Это не признак новичка, а признак профессионала, который ценит свое время.
222
👩‍💻 Мини-скрипт: Автоматическая сортировка файлов в папке

Полезно для студентов и фрилансеров, у которых в "Загрузках" вечный хаос.

import os
import shutil

for file in os.listdir("."):
if file.endswith(".pdf"):
os.makedirs("PDFs",
exist_ok=True)
shutil.move(file, "PDFs")


Пять строк кода — и идеальный порядок в отчетах или учебных материалах.
Please open Telegram to view this post
VIEW IN TELEGRAM
11
Благодарю за тёплый отзыв! 💎💎💎
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉6👏43🗿11
Как быстро летит время

Вроде неделю назад говорил себе, что займёшься спортом на следующей. 3 дня назад сказал, что сделаешь выходной, ещё вчера думал, как бы больше проводить время с близкими. И вот, сегодня сидишь и понимаешь, как быстро летит повозка времени, в то время как ты небрежно поспеваешь за ней сзади, весь в пыли и разочаровании в том, что не успел выполнить свои мечты…

Очень хотел затронуть эту тему в канале, так как считаю, что проблема быстроты времени есть у многих людей. Порой кажется, что ты достигаешь своих целей: снимать квартиру, обновить ПК, начать зарабатывать, иметь возможность работать удалённо или на худой конец сдать эту сраную сессию. Но проблема в том, что это будто бы всё «спецэффекты», что это как бы цель, но не совсем та, которая сделает тебя по-настоящему счастливым.

Время действительно неумолимо летит, но каждый сам в своей жизни определяет ей темп.

А какие ты ставишь перед собой цели? 😔
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔332
👍 Лайфхак: Как ChatGPT помогает писать код быстрее

Не проси нейросеть "написать программу целиком" — она может ошибиться в логике.
Лучше используй её для рутины:
– Оптимизировать готовый цикл
– Добавить обработку ошибок в функцию
– Написать документацию или тесты

Это твой бесплатный ассистент, который учит тебя писать чище.
Please open Telegram to view this post
VIEW IN TELEGRAM
21
🛠 Совет: Виртуальное окружение — это база

Никогда не ставь библиотеки глобально в систему.
Рано или поздно версии разных проектов конфликтуют, и всё ломается.


# Создать окружение
python -m venv venv
# Активировать (Windows)
venv\Scripts\activate


Приучай себя к этому с первого дня. Это экономит кучу времени при поддержке кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
33
📌 Мини-скрипт: Проверка скорости интернета на Python

Если работаешь на удаленке или фрилансе, важно знать, не подводит ли провайдер.

# pip install speedtest-cli
import speedtest

st = speedtest.Speedtest()
print(f"Загрузка: {st.download() / 10**6:.2f} Mbit/s")


Быстрый способ проверить канал без лишних вкладок в браузере.
433
🗒 На бирже увидел интересный проект. По своей сути он достаточно простой, особенно если его завайбкодить. Простой пример реализации:

Стек: Python + aiogram для тг бота

Придумать систему генерации квиза

Сделать возможность для админа делать рассылку

Настроить текст рассылки


👩‍💻 Упрощённая версия бота:

import asyncio
from aiogram import Bot, Dispatcher, types, F
from aiogram.filters import CommandStart
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup

# Настройка состояний квиза
class QuizStates(StatesGroup):
question1 = State()
question2 = State()
phone = State()

bot = Bot(token="YOUR_TELEGRAM_TOKEN")
dp = Dispatcher()

@dp.message(CommandStart())
async def start_cmd(message: types.Message, state: FSMContext):
await message.answer("Привет! Ответь на 2 вопроса, и мы подберем решение. Какой у вас бюджет?")
await state.set_state(QuizStates.question1)

@dp.message(QuizStates.question1)
async def process_q1(message: types.Message, state: FSMContext):
await state.update_data(budget=message.text)
await message.answer("Какая сфера вашего бизнеса?")
await state.set_state(QuizStates.question2)

@dp.message(QuizStates.question2)
async def process_q2(message: types.Message, state: FSMContext):
await state.update_data(sphere=message.text)
await message.answer("Оставьте ваш номер телефона для связи:")
await state.set_state(QuizStates.phone)

@dp.message(QuizStates.phone)
async def process_phone(message: types.Message, state: FSMContext):
user_data = await state.get_data()
phone = message.text

# Имитация интеграции с CRM (Bitrix24/AmoCRM)
print(f"Отправка в CRM: Бюджет: {user_data['budget']}, Сфера: {user_data['sphere']}, Тел: {phone}")

await message.answer("Спасибо! Менеджер свяжется с вами в течение 15 минут.")
await state.clear()

async def main():
await dp.start_polling(bot)

if __name__ == "__main__":
asyncio.run(main())


Если брать то ТЗ, которое написал заказчик, работы на 1-3 часа. И 20к уже в кармане 😎

Из нюансов: заказчик нанимал 0% исполнителей и уже 30+ откликов
Please open Telegram to view this post
VIEW IN TELEGRAM
333
💬 Мотивация: Почему фриланс на Python — это реально?

На рынке море задач: спарсить сайт, переложить данные из Excel в базу, сделать телеграм-бота.
Для профи это 20 минут работы. Для тебя — отличная практика и первые деньги.

Тебе не нужно знать всё.
Тебе нужно уметь гуглить, разбираться и адаптировать чужой опыт под задачу.
322
«Я, презентующий код, который работает, но я не знаю почему» 😮
Please open Telegram to view this post
VIEW IN TELEGRAM
332
Анонс мини-курса «Конвертер учебных файлов» от Артемия - преподавателя INNOPROG📚

🔗В этом мини-курсе мы создадим удобный и функциональный конвертер различных файлов, который позволит адаптировать учебные материалы в удобный и подходящий формат.

📌Даты выхода уроков:
Блок 1 – 9 февраля
Блок 2 – 12 февраля

Ставьте напоминание в календаре, чтобы не пропустить 🦾
🎉333
⚙️ Лайфхак: Быстрый замер времени выполнения кода

Хочешь узнать, какой метод работает быстрее? Используй time.

import time

start = time.time()
# Твой код здесь
print(f"Время выполнения: {time.time() - start} сек")


Оптимизация начинается с точных цифр, а не с догадок.
🤩321