Original size 1140x1600

Анализ дискографии OASIS

The project is taking part in the competition

Введение

В рамках данного проекта были проанализирована база данных с сайта Kaggle по студийной дискографии группы Oasis. Для исследования использовались табличные данные, агрегированные по альбомам, включающие год выпуска, количество треков, среднюю длительность композиций, средний темп, уровень громкости, показатели популярности, а также количественные характеристики текстов песен (общее число слов, количество уникальных слов и эмоциональная окраска текста). Интерес к анализу дискографии Oasis обусловлен тем, что группа является одним из ключевых представителей британской музыкальной сцены 1990-х годов, а её творчество хорошо документировано и охватывает длительный период времени. Это делает дискографию Oasis показательной для исследования эволюции музыкального стиля, структуры композиций и текстов, а также для сопоставления художественных изменений с динамикой популярности группы. Для визуализации данных были выбраны несколько типов графиков. Линейные графики используются для отображения громкости треков и доли акустического звучания. Столбчатые диаграммы применяются для сравнения альбомов по отдельным параметрам, например ритмической подвижности треков, доли речевых элементов в вокале и энергии треков. Тепловая карта используется для выявления возможных взаимосвязей между характеристиками звучания. Такой набор визуализаций позволяет одновременно рассматривать как динамику показателей, так и различия между отдельными альбомами.

Для оформления графиков я использовала черно-белую цветовую палитру, вдохновленную обложкой альбома «Don’t Believe the Truth» и эстетикой строгой Великобритании.

big
Original size 1000x1000

Обложка альбома «Don’t Believe in Truth» — Oasis

Используемые цвета:

Original size 1600x895

График 1

Ритмическая подвижность треков — Данные: danceability — Тип графика: столбчатая диаграмма — Цель анализа: сравнить альбомы по степени ритмической структурированности и определить, насколько музыка Oasis ориентирована на телесное восприятие

Original size 988x489

Анализ ритмической подвижности треков

Original size 1189x750

Код для диаграммы

Код для стилизации кода:

import matplotlib.pyplot as plt

code_text = «»» import pandas as pd import matplotlib.pyplot as plt

df = pd.read_csv («Oasis.csv.xls»)

dance_album = ( df.groupby («album_name»)[«danceability»] .mean () .sort_values () )

plt.figure (figsize=(10, 5)) plt.bar (dance_album.index, dance_album.values, color="black»)

plt.title ( «Rhythmic Mobility of Oasis Albums\n (Danceability)», loc="left», fontsize=14 )

plt.ylabel («Average danceability») plt.xlabel («Album»)

plt.xticks (rotation=30, ha="right»)

plt.gca ().spines[«top»].set_visible (False) plt.gca ().spines[«right»].set_visible (False)

plt.tight_layout () plt.show () «»»

fig, ax = plt.subplots (figsize=(12, 8)) ax.axis ('off')

fig.patch.set_facecolor (‘#1c1c1c) plt.text (0, 1, code_text, fontfamily='monospace', fontsize=12, color='white', va='top', ha='left', linespacing=1.3)

plt.text (0.95, 0.02, «Oasis — Don’t Believe the Truth», fontsize=10, color='grey', ha='right', va='bottom', alpha=0.7)

plt.tight_layout () plt.savefig («oasis_code_style.png», dpi=300, facecolor=fig.get_facecolor ()) plt.show ()

Анализ и вывод:

На представленной столбчатой диаграмме показано среднее значение параметра danceability для релизов группы Oasis. Показатель danceability отражает степень ритмической структурированности треков и их ориентацию на телесное, движенческое восприятие. Из графика видно, что значения danceability варьируются в относительно узком диапазоне — от низких значений у ранних релизов до более высоких у поздних альбомов. Это указывает на то, что на протяжении всей дискографии Oasis сохраняет достаточно стабильный ритмический характер, не делая резких стилистических скачков. При этом можно заметить постепенное увеличение показателя danceability в более поздних альбомах. Релизы конца 1990-х и 2000-х годов демонстрируют более выраженную ритмическую упорядоченность по сравнению с ранними работами группы. Это может свидетельствовать о смещении фокуса от сырого и перегруженного звучания к более выверенной и структурированной форме. Анализ показывает, что музыка Oasis в целом не ориентирована на танцевальное восприятие в традиционном смысле, однако со временем группа постепенно увеличивает ритмическую чёткость своих композиций. Ранние альбомы отличаются более хаотичным и плотным звучанием, тогда как поздние релизы демонстрируют большую ритмическую организованность. Это отражает эволюцию музыкального подхода Oasis — от импульсивного бритпоп-звучания к более контролируемой и зрелой структуре композиций.

График 2

Доля речевых элементов в вокале — Данные: speechiness — Тип графика: столбчатая диаграмма — Цель анализа: выявить, в каких альбомах вокал ближе к разговорной манере и как меняется подача текста со временем

Original size 1183x590

Анализ доли речевых элементов в вокале

Original size 1150x796

Код для диаграммы

Код для стилизации кода:

import matplotlib.pyplot as plt

code_text = «»» import pandas as pd import matplotlib.pyplot as plt

df = pd.read_csv («Oasis.csv.xls») speech_album = df.groupby («album_name»)[«speechiness»].mean ().sort_values ()

plt.figure (figsize=(12, 6)) bars = plt.bar (speech_album.index, speech_album.values, color="black»)

plt.title («Speechiness of Oasis Albums\n (Share of Speech Elements in Vocals)», fontsize=16, fontweight='bold', fontfamily='monospace', loc='left', color='white') plt.ylabel («Average speechiness», fontsize=12, color='white', fontfamily='monospace') plt.xlabel («Album», fontsize=12, color='white', fontfamily='monospace')

plt.xticks (rotation=30, ha="right», color='white', fontsize=10, fontfamily='monospace') plt.yticks (color='white', fontsize=10, fontfamily='monospace')

ax = plt.gca () ax.spines[«top»].set_visible (False) ax.spines[«right»].set_visible (False) ax.spines[«left»].set_color ('white') ax.spines[«bottom»].set_color ('white')

ax.set_facecolor ('#1c1c1c') plt.gcf ().patch.set_facecolor ('#1c1c1c')

plt.plot ([-0.5, len (speech_album)-0.5], [speech_album.max ()*1.05]*2, color='white', linewidth=2) plt.plot ([-0.5, len (speech_album)-0.5], [-0.01]*2, color='white', linewidth=2)

plt.tight_layout () plt.savefig («oasis_speechiness_black_white.png», dpi=300, facecolor=plt.gcf ().get_facecolor ()) plt.show () «»»

fig, ax = plt.subplots (figsize=(12, 8)) ax.axis ('off')

fig.patch.set_facecolor ('#000000') plt.text (0, 1, code_text, fontfamily='monospace', fontsize=12, color='white', va='top', ha='left', linespacing=1.3)

plt.text (0.95, 0.02, «Oasis — Don’t Believe the Truth», fontsize=10, color='black', ha='right', va='bottom', alpha=0.7, fontfamily='monospace')

plt.tight_layout () plt.savefig («oasis_code_style.png», dpi=300, facecolor=fig.get_facecolor ()) plt.show ()

Анализ и вывод

На столбчатой диаграмме представлено среднее значение параметра speechiness для альбомов группы Oasis. Данный показатель отражает долю речевых элементов в вокале и позволяет оценить, насколько подача текста приближается к разговорной манере, а не к традиционному мелодическому пению. Из графика видно, что значения speechiness для всех альбомов остаются относительно низкими и варьируются в узком диапазоне. Это указывает на то, что вокальный стиль Oasis на протяжении всей дискографии преимущественно основан на мелодическом исполнении, а не на речитативе или разговорной интонации. Таким образом, группа сохраняет устойчивую ориентацию на классическую рок-песенную форму. При этом можно заметить постепенное увеличение показателя speechiness в более поздних релизах. Альбомы 2000-х годов демонстрируют несколько более высокую долю речевых элементов по сравнению с ранними работами середины 1990-х. Это может свидетельствовать о некотором изменении вокальной подачи — появлении более свободной, разговорной интонации и снижении дистанции между исполнителем и слушателем. В целом анализ показывает, что, несмотря на небольшие колебания, Oasis не делает резких стилистических поворотов в вокальной манере. Незначительный рост speechiness в поздних альбомах можно интерпретировать как элемент творческой эволюции, а не как отказ от фирменного мелодического подхода группы.

График 3

Громкость треков — Данные: loudness — Тип графика: линейный график — Цель анализа: проверить, влияет ли уровень громкости песен на популярность альбомов

Original size 1188x590

Анализ громкости треков

Original size 1443x897

Код для графика

Код для стилизации кода:

import matplotlib.pyplot as plt import numpy as np import random

code_text = «»» import pandas as pd import matplotlib.pyplot as plt

df = pd.read_csv («Oasis.csv.xls»)

loudness_album = df.groupby («album_name»)[«loudness»].mean ().sort_index ()

plt.figure (figsize=(12, 6)) plt.plot (loudness_album.index, loudness_album.values, marker='o', color='white', linewidth=2)

plt.title («Average Loudness of Oasis Albums», fontsize=16, fontweight='bold', loc='left', color='white', fontfamily='monospace') plt.ylabel («Loudness (dB)», fontsize=12, color='white', fontfamily='monospace') plt.xlabel («Album», fontsize=12, color='white', fontfamily='monospace')

plt.xticks (rotation=30, ha="right», color='white', fontsize=10) plt.yticks (color='white', fontsize=10)

ax = plt.gca () ax.spines[«top»].set_visible (False) ax.spines[«right»].set_visible (False) ax.spines[«left»].set_color ('white') ax.spines[«bottom»].set_color ('white')

ax.set_facecolor ('#1c1c1c') plt.gcf ().patch.set_facecolor ('#1c1c1c')

plt.plot ([-0.5, len (loudness_album)-0.5], [loudness_album.max ()*1.05]*2, color='white', linewidth=2) plt.plot ([-0.5, len (loudness_album)-0.5], [loudness_album.min ()*0.95]*2, color='white', linewidth=2)

plt.text (len (loudness_album)-0.1, loudness_album.min ()*0.93, «Inspired by Don’t Believe the Truth», fontsize=10, color='lightgrey', ha='right', va='bottom', alpha=0.8, fontfamily='monospace')

plt.tight_layout () plt.savefig («oasis_loudness_black_white.png», dpi=300, facecolor=plt.gcf ().get_facecolor ()) plt.show () «»»

fig, ax = plt.subplots (figsize=(12, 9)) ax.axis ('off')

fig.patch.set_facecolor ('white') ax.set_facecolor ('white')

for _ in range (50): x = random.uniform (0, 1) y = random.uniform (0, 1) width = random.uniform (0.01, 0.05) height = random.uniform (0.02, 0.1) rect = plt.Rectangle ((x, y), width, height, color='#1c1c1c', alpha=0.3) ax.add_patch (rect)

plt.text (0.05, 0.95, code_text, fontfamily='monospace', fontsize=12, color='black', va='top', ha='left', linespacing=1.3)

plt.tight_layout () plt.savefig («oasis_code_white_black_stripes.png», dpi=300, facecolor='white') plt.show ()

Анализ и вывод

На линейном графике показано среднее значение параметра loudness для альбомов Oasis. Показатель громкости отражает общий уровень звукового давления и связан с продюсерскими решениями, а также с тенденциями музыкальной индустрии конкретного периода. Из графика видно, что уровень громкости заметно колеблется от альбома к альбому. Ряд релизов характеризуется более высоким средним значением loudness, тогда как другие демонстрируют существенное снижение громкости. Это говорит об отсутствии линейной и однозначной динамики данного параметра в дискографии группы. Особенно заметны резкие перепады громкости между соседними релизами. Такие изменения могут быть связаны как с экспериментами со звучанием, так и с различиями в сведении и мастеринге. Кроме того, на уровень громкости могли влиять общие индустриальные тренды, включая так называемую «войну громкости», характерную для конца 1990-х и начала 2000-х годов. Анализ графика не позволяет сделать вывод о прямой зависимости между громкостью и популярностью альбомов. Некоторые из наиболее известных и коммерчески успешных релизов Oasis не обязательно обладают максимальными значениями loudness. Это указывает на то, что популярность группы определяется в большей степени композиционными, текстовыми и стилистическими факторами, а не исключительно техническими параметрами звучания.

График 4

Энергия треков — Данные: energy — Тип графика: столбчатая диаграмма — Цель анализа: визуализировать динамику энергетики альбомов и понять, какие релизы были более агрессивными или спокойными

Original size 1183x590

Анализ энергии треков

Original size 1093x854

Код для диаграммы

Код для стилизации кода:

import matplotlib.pyplot as plt import numpy as np import random

code_text = «»» import pandas as pd import matplotlib.pyplot as plt

df = pd.read_csv («Oasis.csv.xls»)

energy_album = df.groupby («album_name»)[«energy»].mean ().sort_values ()

plt.figure (figsize=(12, 6)) bars = plt.bar (energy_album.index, energy_album.values, color=»#1c1c1c»)

plt.title («Energy of Oasis Albums\n (Average Track Energy)», fontsize=16, fontweight='bold', loc='left', color='#ffffff', fontfamily='monospace') plt.ylabel («Average energy», fontsize=12, color='#ffffff', fontfamily='monospace') plt.xlabel («Album», fontsize=12, color='#ffffff', fontfamily='monospace')

plt.xticks (rotation=30, ha="right», color='#ffffff', fontsize=10, fontfamily='monospace') plt.yticks (color='#ffffff', fontsize=10, fontfamily='monospace')

ax = plt.gca () ax.spines[«top»].set_visible (False) ax.spines[«right»].set_visible (False) ax.spines[«left»].set_color ('#ffffff') ax.spines[«bottom»].set_color ('#ffffff')

ax.set_facecolor ('#000000') plt.gcf ().patch.set_facecolor ('#000000')

plt.plot ([-0.5, len (energy_album)-0.5], [energy_album.max ()*1.05]*2, color='#ffffff', linewidth=2) plt.plot ([-0.5, len (energy_album)-0.5], [-0.01]*2, color='#ffffff', linewidth=2)

plt.tight_layout () plt.savefig («oasis_energy_black_white_mixed.png», dpi=300, facecolor=plt.gcf ().get_facecolor ()) plt.show () «»»

fig, ax = plt.subplots (figsize=(12, 9)) ax.axis ('off')

fig.patch.set_facecolor ('#ffffff') ax.set_facecolor ('#ffffff')

for _ in range (60): x = random.uniform (0, 1) y = random.uniform (0, 1) width = random.uniform (0.01, 0.07) height = random.uniform (0.02, 0.1)

color = random.choice (['<h3>000000', '</h3>1c1c1c'])
rect = plt.Rectangle ((x, y), width, height, color=color, alpha=0.2)
ax.add_patch (rect)

plt.text (0.05, 0.95, code_text, fontfamily='monospace', fontsize=12, color='#000000', va='top', ha='left', linespacing=1.3)

plt.tight_layout () plt.savefig («oasis_code_energy_stylish.png», dpi=300, facecolor=fig.get_facecolor ()) plt.show ()

Анализ и вывод

На столбчатой диаграмме представлено среднее значение параметра energy для альбомов Oasis. Данный показатель отражает интенсивность и «напористость» звучания, включая плотность аранжировок, уровень громкости и общее ощущение динамики треков. Из графика видно, что уровень энергии в целом возрастает от ранних альбомов к более поздним релизам. Ранние работы группы характеризуются умеренными значениями energy, тогда как альбомы конца 1990-х и 2000-х годов демонстрируют более высокую энергетическую насыщенность. Это может свидетельствовать о постепенном смещении музыкального стиля Oasis в сторону более плотного и агрессивного звучания. Увеличение энергии может быть связано с усложнением аранжировок, усилением гитарного давления и общей ориентацией на более «стадионный» формат исполнения. При этом важно отметить, что даже альбомы с относительно низкими значениями energy не являются полностью спокойными или минималистичными. Oasis сохраняет достаточно высокий уровень энергетики на протяжении всей дискографии, что соответствует жанровым рамкам бритпопа и альтернативного рока. Таким образом, изменения показателя energy отражают не смену жанра, а внутреннюю эволюцию звучания группы.

График 5

Доля акустического звучания — Данные: acousticness — Тип графика: линейный график — Цель анализа: проследить изменения в использовании акустических инструментов и определить, становилось ли звучание группы более мягким и камерным

Original size 1196x590

Анализ доли акустического звучания

Original size 1113x779

Код для диаграммы

Код для стилизации кода:

import matplotlib.pyplot as plt import random

code_text = «»» import pandas as pd import matplotlib.pyplot as plt

df = pd.read_csv («Oasis.csv.xls»)

acoustic_album = df.groupby («album_name»)[«acousticness»].mean ().sort_index ()

plt.figure (figsize=(12, 6)) plt.plot (acoustic_album.index, acoustic_album.values, marker='o', color='#1c1c1c', linewidth=2)

plt.title («Acousticness of Oasis Albums\n (Average Track Acousticness)», fontsize=16, fontweight='bold', loc='left', color='#ffffff', fontfamily='monospace') plt.ylabel («Acousticness», fontsize=12, color='#ffffff', fontfamily='monospace') plt.xlabel («Album», fontsize=12, color='#ffffff', fontfamily='monospace')

plt.xticks (rotation=30, ha="right», color='#ffffff', fontsize=10, fontfamily='monospace') plt.yticks (color='#ffffff', fontsize=10, fontfamily='monospace')

ax = plt.gca () ax.spines[«top»].set_visible (False) ax.spines[«right»].set_visible (False) ax.spines[«left»].set_color ('#ffffff') ax.spines[«bottom»].set_color ('#ffffff')

ax.set_facecolor ('#000000') plt.gcf ().patch.set_facecolor ('#000000')

plt.plot ([-0.5, len (acoustic_album)-0.5], [acoustic_album.max ()*1.05]*2, color='#ffffff', linewidth=2) plt.plot ([-0.5, len (acoustic_album)-0.5], [acoustic_album.min ()*0.95]*2, color='#ffffff', linewidth=2)

plt.text (len (acoustic_album)-0.1, acoustic_album.min ()*0.92, «Inspired by Don’t Believe the Truth», fontsize=10, color='lightgrey', ha='right', va='bottom', alpha=0.8, fontfamily='monospace')

plt.tight_layout () plt.savefig («oasis_acousticness_black_white.png», dpi=300, facecolor=plt.gcf ().get_facecolor ()) plt.show () «»»

fig, ax = plt.subplots (figsize=(12, 9)) ax.axis ('off')

fig.patch.set_facecolor ('#000000') ax.set_facecolor ('#000000')

for _ in range (70): x = random.uniform (0, 1) y = random.uniform (0, 1) width = random.uniform (0.01, 0.07) height = random.uniform (0.02, 0.1) rect = plt.Rectangle ((x, y), width, height, color='#1c1c1c', alpha=random.uniform (0.15, 0.3)) ax.add_patch (rect)

lines = code_text.strip ().split ('\n')

y = 0.95 for line in lines: x_offset = random.uniform (0.0, 0.03) plt.text (0.05 + x_offset, y, line, fontfamily='monospace', fontsize=12, color='#ffffff', va='top', ha='left', linespacing=1.3) y -= 0.04

plt.text (0.95, 0.02, «Inspired by Don’t Believe the Truth», fontsize=10, color='#ffffff', ha='right', va='bottom', alpha=0.8, fontfamily='monospace')

plt.tight_layout () plt.savefig («oasis_acousticness_code_black_white.png», dpi=300, facecolor=fig.get_facecolor ()) plt.show ()

Анализ и вывод:

На линейном графике представлено среднее значение параметра acousticness для альбомов группы Oasis. Данный показатель отражает степень использования акустических инструментов и «незаполненного» звучания в композициях, позволяя оценить, насколько музыка склоняется к более мягкой, камерной и интимной форме. Из графика видно, что уровень acousticness в дискографии Oasis не демонстрирует устойчивого линейного тренда, а изменяется волнообразно. В ранних альбомах показатель находится на умеренном уровне, что соответствует характерному для бритпопа сочетанию электрического гитарного звучания с акустическими элементами. В середине дискографии наблюдаются заметные колебания: отдельные альбомы демонстрируют повышение доли акустического звучания, за которым следует резкое снижение. Это указывает на период экспериментирования с аранжировками и форматом композиций, когда группа чередует более насыщенные рок-треки с камерными и лиричными работами. Особенно низкие значения acousticness приходятся на альбомы, ориентированные на плотное и перегруженное звучание, где преобладают электрические гитары и высокий уровень энергии. В то же время более поздние релизы демонстрируют небольшое увеличение доли акустических элементов, что может свидетельствовать о стремлении к более сдержанному и выверенному звучанию. В целом анализ показывает, что Oasis не движется в сторону полной акустичности, однако с течением времени группа начинает более осознанно использовать акустические инструменты как выразительное средство. Акустическое звучание выполняет вспомогательную роль, усиливая эмоциональную составляющую композиций и подчеркивая их лирический характер. Это отражает переход от импульсивного и громкого раннего стиля к более зрелой и нюансированной музыкальной форме.

Заключительная часть

Сравнение ключевых аудиохарактеристик — Данные: danceability, speechiness, acousticness, loudness, energy — Тип графика: тепловая карта — Цель анализа: получить обобщённое представление о характере каждого альбома и визуально сравнить их между собой по нескольким параметрам одновременно

Original size 1369x790

Сравнение ключевых аудиохарактеристик

Код для диаграммы:

import pandas as pd import matplotlib.pyplot as plt import numpy as np

df = pd.read_csv («Oasis.csv.xls»)

features = [«danceability», «speechiness», «acousticness», «loudness», «energy»] album_features = df.groupby («album_name»)[features].mean ()

album_features_norm = (album_features — album_features.min ()) / ( album_features.max () — album_features.min () )

plt.figure (figsize=(14, 8)) heatmap = plt.imshow ( album_features_norm.values, aspect="auto», cmap="gray», interpolation="nearest» )

plt.xticks ( ticks=np.arange (len (features)), labels=features, rotation=30, ha="right», fontsize=11, fontfamily="monospace», color=»#ffffff» )

plt.yticks ( ticks=np.arange (len (album_features_norm.index)), labels=album_features_norm.index, fontsize=11, fontfamily="monospace», color=»#ffffff» )

plt.title ( «Key Audio Characteristics of Oasis Albums\n (Comparative Heatmap)», loc="left», fontsize=16, fontweight="bold», fontfamily="monospace», color=»#ffffff» )

ax = plt.gca () ax.spines[«top»].set_visible (False) ax.spines[«right»].set_visible (False) ax.spines[«left»].set_visible (False) ax.spines[«bottom»].set_visible (False)

ax.set_facecolor (»#000000»)

plt.text ( len (features) — 0.2, len (album_features_norm.index) — 0.3, «Inspired by Don’t Believe the Truth», fontsize=10, color=»#bfbfbf», ha="right», va="bottom», fontfamily="monospace», alpha=0.8 )

plt.tight_layout () plt.savefig («oasis_heatmap_black_white.png», dpi=300, facecolor=plt.gcf ().get_facecolor ()) plt.show ()

Вывод

Тепловая карта ключевых аудиохарактеристик предоставляет обобщённое визуальное представление музыкального профиля каждого альбома Oasis и позволяет одновременно сравнить их по нескольким параметрам. Использование нормализованных значений делает различия между альбомами более наглядными и подчеркивает относительные акценты в звучании. Из графика видно, что ранние альбомы группы характеризуются высокой энергией и громкостью при сравнительно низкой доле акустического звучания и речевых элементов. Это соответствует импульсивному, насыщенному и агрессивному стилю раннего бритпопа, где основное внимание уделяется плотному электрическому звучанию и напору. Альбомы середины дискографии демонстрируют большую неоднородность: наблюдаются колебания показателей danceability и acousticness, что указывает на экспериментальный период, в котором группа варьирует аранжировки и структуру композиций, не отказываясь при этом от своего фирменного звучания. Поздние релизы выделяются более сбалансированным распределением характеристик. Энергия и громкость становятся более контролируемыми, тогда как акустические элементы используются осознаннее и точечнее. Это свидетельствует о переходе Oasis к более зрелому и выверенному музыкальному языку, где выразительность достигается не за счёт максимальной интенсивности, а через баланс и нюансировку. В совокупности все рассмотренные графики показывают, что дискография Oasis развивается не через резкие стилистические разрывы, а через постепенную трансформацию. Группа сохраняет устойчивые черты — мелодичную вокальную подачу, высокую энергию и рок-ориентированное звучание — одновременно адаптируя их под изменяющийся художественный контекст и собственный творческий опыт. Таким образом, проведённый анализ подтверждает, что Oasis представляет собой пример музыкальной эволюции внутри чётко очерченного стиля: от сырой и напористой экспрессии к более сдержанной, зрелой и структурированной форме, что и обеспечивает целостность и узнаваемость их дискографии.

Описание применения генеративной модели

Midjourney — генерация обложки

Adobe Color — генерация цветовой палитры

Chat GPT — запросы с целью рекомендаций по улучшению кода

We use cookies to improve the operation of the website and to enhance its usability. More detailed information on the use of cookies can be fo...
Show more