def METHOD_NAME(self, url):
    video_id = self._match_id(url)
    nuxt_data = self._search_nuxt_data(self._download_webpage(url, video_id), video_id)
    parent = {
        'id': video_id,
        'title': nuxt_data.get('title'),
        'descripion': nuxt_data.get('description'),
        'uploader': traverse_obj(nuxt_data, ('creator', 'name')),
        'uploader_id': traverse_obj(nuxt_data, ('creator', 'screen_name')),
        'age_limit': 18 if nuxt_data.get('nsfw') else 0,
        'tags': nuxt_data.get('tag_list'),
    }
    entries = []
    for item in nuxt_data.get('previews') or []:
        vid_url = item.get('url')
        given_ext = traverse_obj(item, ('information', 'extension'))
        preview_ext = determine_ext(vid_url, default_ext=None)
        if not preview_ext:
            content_disposition = parse_qs(vid_url)['response-content-disposition'][0]
            preview_ext = self._search_regex(
                r'filename="[^"]+\.([^\.]+?)"', content_disposition,
                'preview file extension', fatal=False, group=1)
        if preview_ext not in ('mp4', 'mp3'):
            continue
        if not vid_url or not item.get('id'):
            continue
        width, height = traverse_obj(item, ('information', 'width')), traverse_obj(item, ('information', 'height'))
        if width is not None and height is not None:
            # the longest side is at most 720px for non-client viewers
            max_size = max(width, height)
            width, height = list(x * 720 // max_size for x in (width, height))
        entries.append({
            **parent,
            'id': str(item['id']),
            'url': vid_url,
            'thumbnail': item.get('poster_url'),
            'subtitles': {
                'jpn': [{
                    'url': item.get('vtt_url'),
                    'ext': 'vtt',
                }]
            } if item.get('vtt_url') else None,
            'width': width,
            'height': height,
            'duration': traverse_obj(item, ('information', 'duration')),
            'fps': traverse_obj(item, ('information', 'frame_rate')),
            'ext': preview_ext or given_ext,
            'vcodec': 'none' if preview_ext == 'mp3' else None,
            # you'll always get 128kbps MP3 for non-client viewers
            'abr': 128 if preview_ext == 'mp3' else None,
        })
    if not entries:
        raise ExtractorError('No video/audio attachment found in this commission.', expected=True)
    elif len(entries) == 1:
        return entries[0]
    else:
        parent.update({
            '_type': 'playlist',
            'entries': entries,
        })
        return parent